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

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

代码:
进口RoboDK。robolink # RoboDK API
进口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()

“状态:{0},状态msg:{1}”。format(status, status_msg)) #

机器人。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
触发连接后,您会得到什么返回值?如果一切正常,您应该得到标志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)', RoboDK.robolink.INSTRUCTION_INSERT_CODE)
robot.RunInstruction(“睡眠(2)”,RoboDK.robolink.INSTRUCTION_INSERT_CODE)
机器人。RunInstruction('modbus_set_output_signal("v1_a", False)', RoboDK.robolink.INSTRUCTION_INSERT_CODE)
机器人。RunInstruction('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的偏好窗口。这是一个bug吗?

谢谢,
大卫
你好大卫,

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

大多数后期处理程序都有这样的定义(你可以像第一条注释那样更改文件夹来保存你的程序):

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

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

Filesave = folder + '/' + progname

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

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

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




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