线程评级:
无法向在线机器人发送自定义代码
# 1
你好,

我正在尝试通过modbus在UR10机器人上激活一个工具。最终,编程将离线完成,但现在我想通过RoboDK Python API在线完成。这是我的代码:

代码:
进口RoboDK。robolink # RoboDK API
进口RoboDK。机器人工具箱

RDK = RoboDK.robolink.Robolink()
RDK.setRunMode (RoboDK.robolink.RUNMODE_RUN_ROBOT)

机器人= RDK。项目('UR10', RoboDK.robolink.ITEM_TYPE_ROBOT) #当前开放的站点有一个名为“UR10”的机器人。
robot. setconnectionparams('192.168.241.116', 30001, '/', ", ") #连接到机器人

success = robot.Connect()
status, status_msg = robot.ConnectedState()

打印("状态:{0},状态msg:{1}"。返回“0 Ready”

机器人。RunCode('modbus_set_output_signal("v1_a", True)', True)
然而,当我这样做时,机器人上没有任何变化。我已经确认(当直接在teach挂坠上的新脚本中写入此命令时)此modbus命令是正确的。

我做错了什么?我应该使用RunInstruction还是RunProgram ?

最好的问候,
大卫
你好大卫,

你应致电:
robot.Connect ()

这将触发连接(动作与机器人连接面板中的Connect按钮相同)。
# 3
(05-13-2019, 07:48 pm)艾伯特写道:你好大卫,

你应致电:
robot.Connect ()

这将触发连接(动作与机器人连接面板中的Connect按钮相同)。

嗨,阿尔伯特,

这一行已经出现在我的代码中。还有别的主意吗?

题外问题:什么时候编写程序(比如使用MakeProgram)比只运行RDK.function_here()或robot.Move…()更好?
# 4
触发Connect后会得到什么返回值?如果一切顺利,您应该得到标志ROBOTCOM_READY=0。

在你第一次尝试连接时,一些机器人司机需要几秒钟的时间。一个更健壮的选项是使用ConnectSafe()。这将尝试多次连接到机器人(默认为4次),等待状态标志就绪。
# 5
是的,我得到ROBOTCOM_READY=0。

我将尝试另一种方法:首先生成一个SCRIPT文件,通过FTP上传它,然后运行它。使用RoboDK API最好的方法是什么?
我搞不清楚运行模式,运行类型,程序之间的区别。MakeProgram program.RunCode。

你能给我一些提示,如何实现上述3个步骤吗?

最好的问候,
大卫
# 6
你能提供一个样本项目,可以重现这个问题的连接?我们可以更好地帮你解决问题。重要的是要了解以下两者之间的区别:

运行模式(API)
当你通过API(调用connect)连接到机器人时,你会自动改变“运行模式”(setRunMode)来移动真正的机器人,而不是模拟机器人。这适用于RoboDK API和移动机器人从你的代码。如果你想直接使用API(例如使用Python或c#代码中的MoveJ或MoveL命令)移动机器人,这是很有用的。

您可以更改运行模式,以模拟机器人程序,验证它或使用相同的代码生成程序。

重要提示:运行模式适用于API的所有命令。

运行类型(程序)
运行类型(setRunType)是不同的,只适用于使用GUI生成的程序,您只能将其设置为Run on Robot或simulate。这和你勾选/不勾选在机器人上运行程序选项。


通过API生成一个程序
MakeProgram适用于使用GUI或python宏创建的包含机器人动作的程序。这个调用与右键单击一个程序并选择“Generate program”相同:

你可以通过一个标志将程序上传到机器人控制器。例如:

代码:
程序。MakeProgram (path_file RUNMODE_MAKE_ROBOTPROG_AND_UPLOAD)

在程序中包含定制代码
你应该使用RunInstruction当你想在另一个程序(在GUI中可见的程序)中包含一个程序调用、自定义代码、注释时。例如,如果你想在程序中添加一行新代码,你可以使用:

代码:
程序。RunInstruction('输出任何你想要的代码;',INSTRUCTION_INSERT_CODE)


关于UR机器人(SFTP)文件传输的重要信息:
右键单击程序,选择“将程序发送给机器人”,可以自动将URP或脚本文件传输给机器人。这种行为可以在后期处理器中定制(设置变量UPLOAD_SFTP = True)。我建议你使用通用的机器人或者是万能机器人URP后处理器。默认情况下,当你选择将程序发送给机器人的选项时,UR的RoboDK后处理器将自动运行程序(这对UR是一个例外,因为它是一个协作机器人,更容易在PC上运行程序)。将UPLOAD_SFTP标志更改为true将通过SFTP上传URP程序。这需要安装pysftp包。
# 7
嗨,阿尔伯特,

谢谢你提供的信息,非常有用。我认为这些信息(和你写的一模一样)应该在文档中。如果它已经在那里,那么可能很难找到。

另一个问题:当使用RUNMODE_MAKE_ROBOTPROG_AND_START时,如何指定生成程序的输出目录和文件名?
现在程序是在桌面上写的,但如果可能的话,我想用API改变它。

这是我的代码:

代码:
RDK = RoboDK.robolink.Robolink()
RDK。ProgramStart(“david_temp01”、“C: /用户/大卫。murray/Desktop/RoboDK脚本测试',"Universal_Robots", robot)

机器人= RDK。(“UR10”,RoboDK.robolink.ITEM_TYPE_ROBOT)项

RDK.setRunMode (RoboDK.robolink.RUNMODE_MAKE_ROBOTPROG_AND_UPLOAD)


机器人。RunInstruction('modbus_set_output_signal("v1_a", True)', robok .robolink. instruction_insert_code)
robot.RunInstruction(“睡眠(2)”,RoboDK.robolink.INSTRUCTION_INSERT_CODE)
机器人。RunInstruction('modbus_set_output_signal("v1_a", False)', robonk .robolink. instruction_insert_code)
机器人。RunInstruction('modbus_set_output_register("Rail_Cmd_Pos", 900)', robok .robolink. instruction_insert_code)

robot.Disconnect ()
RDK.Finish() #冗余?


问候,
大卫
# 8
我注意到你已经指定了一个文件夹来保存你的项目。但是,您可能必须在路径的末尾添加'/'(斜杠)字符才能使其工作。这也可以在后处理器中控制/硬编码。
# 9
(05-20-2019, 06:59 pm)艾伯特写道:我注意到你已经指定了一个文件夹来保存你的项目。但是,您可能必须在路径的末尾添加'/'(斜杠)字符才能使其工作。这也可以在后处理器中控制/硬编码。

嗨,阿尔伯特,

我试过了,但还是不行。
我在后期处理器里找不到它的硬编码。

我能改变它的唯一方法是通过RoboDK的首选项窗口。这是一个bug吗?

谢谢,
大卫
你好大卫,

所有后处理都定义了ProgSave函数。这是在后处理阶段,在程序生成的末尾和保存之前调用的。这个函数接收RoboDK选项菜单中定义的首选路径。

大多数后期处理器的定义是这样的(你可以改变文件夹来保存你的程序,如第一条注释所示):

代码:
def ProgSave(self,文件夹,progname, ask_user=False, show_result=False):
#您可以在程序保存之前强加(硬代码)一个文件夹。例如:
# folder = "C:/your-programs-folder/"
#(在这种情况下,RoboDK中的默认设置将被忽略)
如果用户选择“Save Program As…”# ask_user将为真

DirExists(文件夹):
folder = getSaveFolder(文件夹,'选择一个目录来保存您的程序')
如果文件夹为None:
#用户选择取消按钮
返回

Filesave =文件夹+ '/' + progname

#保存程序
使用open(filesave, "w")作为fid:
对于自我的直线。食物:
fid。写入(line + '\n')

#这将通知RoboDK文件已经保存,文件可能会被显示
打印('已保存:%s\n' % filesave)

记住你要上传/发送给机器人的文件
# ProgSendRobot将定义用于将程序发送给机器人的协议(通常是FTP)
#(当选择“发送程序给机器人”时)
自我。PROG_FILES = filesave




浏览此线程的用户:
1客人(年代)