线程评级:
  • 0票(s) - 0平均
  • 1
  • 2
  • 3.
  • 4
  • 5
无法向在线机器人发送自定义代码
# 1
你好,

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

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

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

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

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

print("Status: {0}, Status msg:{1}")。format(status, status_msg)) #返回"0就绪"

机器人。RunCode('modbus_set_output_signal("v1_a", True)', True)
然而,当我这样做时,机器人上什么也没有发生。我已经确认(当直接在教学挂件上的新脚本中编写此命令时)此modbus命令是正确的。

我做错了什么?我应该使用运行指令或运行程序代替?

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

你应该打电话:
robot.Connect ()

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

你应该打电话:
robot.Connect ()

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

嗨,阿尔伯特,

这一行已经出现在我的代码中。还有其他想法吗?

附带问题:什么时候更好地制作程序(如使用MakeProgram) vs.只是运行RDK.function_here()或robot.Move…()?
# 4
你触发连接后得到什么返回值?如果一切顺利,您应该得到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生成的程序,您只能将其设置为在机器人上运行或模拟。这和你选中/未选中在机器人上运行程序选项。


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

您可以传递一个标志来将程序上传到机器人控制器。例如:

代码:
程序。MakeProgram (path_file RUNMODE_MAKE_ROBOTPROG_AND_UPLOAD)

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

代码:
程序。运行指令('输出任何你想要的代码;',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”,机器人)

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

RDK.setRunMode (RoboDK.robolink.RUNMODE_MAKE_ROBOTPROG_AND_UPLOAD)


机器人。运行指令('modbus_set_output_signal("v1_a", True)', RoboDK.robolink.INSTRUCTION_INSERT_CODE)
robot.RunInstruction(“睡眠(2)”,RoboDK.robolink.INSTRUCTION_INSERT_CODE)
机器人。运行指令('modbus_set_output_signal("v1_a", False)', RoboDK.robolink.INSTRUCTION_INSERT_CODE)
机器人。运行指令('modbus_set_output_register(' Rail_Cmd_Pos ', 900)', RoboDK.robolink.INSTRUCTION_INSERT_CODE)

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


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

嗨,阿尔伯特,

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

我能够改变它的唯一方法是通过RoboDK偏好窗口。这是臭虫吗?

谢谢,
大卫
你好大卫,

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

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

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

如果ask_user是否存在(文件夹):
folder = getSaveFolder(文件夹,'选择一个目录保存你的程序')
如果folder为None:
#用户选择了取消按钮
返回

Filesave =文件夹+ '/' +程序名

#保存程序
使用open(filesave, "w")作为fid:
为line in self。食物:
fid。Write (line + '\n')

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

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




浏览此主题的用户:
1客人(年代)