4.司机<一个类="headerlink" href="#drivers" title="¶">¶

机器人司机可以控制连接到计算机上的真正的机器人。机器人驾驶员使用特定的软件接口来控制和监视特定的机器人控制器,使计算机能够直接控制机器人手臂。

机器人驱动程序提供了:ref: '离线编程 '的替代方案(其中程2022世界杯8强赛时间序被模拟,生成,然后传输到机器人并执行)。有了机器人司机,你可以在模拟机器人时移动机器人(在线编程)。

下面的文章展示了一个使用机器人驱动程序的在线编程项目的例子:<一个href="//m.sinclairbody.com/blog/online-programming/" class="reference external">//m.sinclairbody.com/blog/online-programming/

在RoboDK中编程的任何机器人模拟都可以使用机器人驱动程序在机器人上执行。然后,机器人在模拟器中的运动与真实机器人同步,从而可以实时调试机器人程序。

更多信息见我们的文档:<一个类="reference external" href="//m.sinclairbody.com/doc/en/Robot-Drivers.html">//m.sinclairbody.com/doc/en/Robot-Drivers.html#RobotDrivers

4.1.驱动命令和响应<一个类="headerlink" href="#driver-commands-and-responses" title="¶">¶

RoboDK使用控制台或标准输入/输出与驱动程序通信。命令和响应是字符串格式的由空格分隔的参数组成的列表。关节值以度为单位,并跟随机器人的轴数。姿势使用XYZRPW格式(毫米/度)。

从RoboDK到驱动程序的可用命令列表:

CONNECT连接请求。RoboDK提供IP,端口和DOF。即CONNECT 192.168.0.100 10000 6 DISCONNECT断开请求。即:DISCONNECT STOP / QUIT停止驱动程序(进程终止)。即STOP 192.168.0.100 PAUSE执行暂停操作。RoboDK提供以ms为单位的时间,即PAUSE 500 MOVJ执行一个联合动作。RoboDK提供关节和姿势。例如:执行线性移动。RoboDK提供关节和姿势。例如:MOVLSEARCH执行一个线性搜索移动。 RoboDK provides joints and pose. i.e. MOVLSEARCH 18.6 16.8 3.8 0.0 69.3 18.6 156.0 52.7 187.5 -180.0 0.0 180.0 MOVC Execute a circular move. RoboDK provides joints 1, joints 2, pose 1 and pose 2. i.e. MOVC -4.3 43.0 -36.4 0.0 83.3 -4.3 -36.3 30.2 -15.3 0.0 75.1 -36.3 215.1 -16.3 187.5 -180 0.0 180 156.0 -114.8 187.5 -180 0.0 180 CJNT Request to retrieve the current joint position of the robot. i.e. CJNT SPEED Set the speeds. RoboDK provides mm/s, deg/s, m/s2 and deg/s2. i.e. SPEED 1000.0 200.0 1500.000 150.000 SETROUNDING Set the rounding/smoothing/blending value. Sub-zero values means accurate. i.e. SETROUNDING -1 or SETROUNDING 10 SETDO Set a digital output on the controller. RoboDK provides the IO name and value. i.e. SETDO 5 1 5 1, or SETDO 0 0 VARNAME VALUE WAITDI Wait for a digital input on the controller. RoboDK provides the IO name and value. i.e. WAITDI 5 1 5 1, or WAITDI 0 0 VAR VALUE SETTOOL Set the Tool Center Point. RoboDK provides the pose. i.e. SETTOOL 0.0 0.0 0.0 0.0 0.0 0.0 RUNPROG Run a program call on the controller. RoboDK provides the program ID (if any) and the program name. i.e. RUNPROG 10 Program_10 or RUNPROG -1 ProgramCall POPUP Display a pop-up message on the teach-pendant (if applicable). RoboDK provides the message. i.e. POPUP This is a message

从驱动程序到RoboDK的可用响应列表:

短信在连接日志窗口和RoboDK的连接状态栏显示一条短信。状态栏有颜色,如“就绪”显示为绿色,“等待”显示为蓝色,“工作中”显示为黄色,其他信息显示为红色。建议使用简短的单句。例如SMS:Ready SMS2在RoboDK主界面的状态栏中显示一条消息。例如SMS2:Waiting for the controller to warm up RE报告驱动状态/ API driver命令的响应。即。"resp = robot. "setParam(‘司机’,some_command)”。例如RE:OK CMDLIST在RoboDK的连接日志窗口中显示可用的自定义命令列表。如。 "CMDLIST:c Command1|This is a command|c Command2|This is a second command|" JNTS Report the robot joints to RoboDK with high accuracy (around 6 decimals). e.g. JNTS:0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 JNTS_MOVING Report the robot joints to RobDK while the robot is moving (less accurately). e.g. JNTS_MOVING:0.0, 0.0, 0.0, 0.0, 0.0, 0.0

4.2.司机的例子<一个类="headerlink" href="#driver-example" title="¶">¶

本节展示KUKA IIWA机器人的样例Python驱动程序。这个驱动程序使用TCP/IP与远程Java服务器通信。该示例也可以在/RoboDK/api/Robot/文件夹中找到。

apikukaiiwa.py for KUKA IIWA
# -*-编码:UTF-8 -*-RoboDK Inc.版权所有- //m.sinclairbody.com/#根据Apache许可证2.0版(“许可证”)进行许可;除非遵守许可,否则您不得使用此文件。您可以从以下网址获得许可证的副本# http://www.apache.org/licenses/license - 2.0除非适用法律要求或书面同意,软件在许可证下分发的是按“现状”分发的,无任何明示或暗示的保证或条件。#请参阅许可证,以了解具体的语言管理权限和许可证下的限制。####这是一个Python模块,可以驱动KUKA IIWA机器人。这个Python模块可以直接在控制台模式下运行来测试它的功能。该模块允许通过命令行与机器人通信。#我们可以手动输入的相同命令被RoboDK用来从PC驱动机器人。# RoboDK Drivers默认位于/RoboDK/api/Robot/。驱动程序可以是PY文件或EXE文件。##驱动是模块化的。它们不是RoboDK可执行文件的一部分,但它们必须放在C:/RoboDK/api/robot/中,然后在连接参数菜单中链接:# 1。右键单击RoboDK中的机器人,然后选择“连接到机器人”。# 2。在“更多选项”菜单中,可以更新驱动程序的位置和名称。#驱动程序链接是当前可用的驱动程序的自动链接。更多关于机器人司机的信息请点击这里:# //m.sinclairbody.com/doc/en/Robot-Drivers.html RobotDrivers#与标准编程方法(生成程序,然后传输到机器人并执行)不同,可以直接在机器人上运行程序模拟机器人在模拟器中的运动与真实的机器人同步。从RoboDK生成的程序可以在机器人上运行,右键单击程序,然后选择“在机器人上运行”。#的例子:# https://www.youtube.com/watch?v=pCD--kokh4s#一个在线编程项目的例子:# //m.sinclairbody.com/blog/online-programming/#可以通过RoboDK API控制机器人的运动(例如,使用RoboDK API的Python或c#程序)。#相同的代码用于模拟和选择性移动真实的机器人。#的例子:# //m.sinclairbody.com/offline-programming##从RoboDK API建立连接:# //m.sinclairbody.com/doc/en/PythonAPI/robolink.html robolink.Item.ConnectSafe#在控制台模式下快速手动测试的示例:#用户条目:CONNECT 192.168.123.1 7000# Response: SMS:机器人的响应或连接失败#回应:短信:准备好了#用户入口:MOVJ 10 20 30 40 50 60 70#回应:短信:工作中…#回应:短信:准备好了#用户条目:CJNT#回应:短信:工作中…#响应:JNTS: 10 20 30 40 50 60 70## ---------------------------------------------------------------------------------进口套接字进口结构体进口sys进口再保险io进口BytesIO# ---------------------------------------------------------------------------------设置期望的最小自由度nDOFs_MIN7#设置驱动版本DRIVER_VERSIONKUKA IIWA v1.0.1的RoboDK驱动程序# ---------------------------------------------------------------------------------# KUKA IIWA命令MSG_CJNT1MSG_SETTOOL2MSG_SPEED3.MSG_ROUNDING4MSG_MOVEJ10MSG_MOVEL11MSG_MOVEC12MSG_MOVEL_SEARCH13MSG_POPUP20.MSG_PAUSE21MSG_RUNPROG22MSG_SETDO23MSG_WAITDI24MSG_GETDI25MSG_SETAO26MSG_GETAI27MSG_MONITOR127MSG_ACKNOWLEDGE128MSG_DISCONNECT999# ----------- 通信类库卡IIWA机器人  -------------ComRobot”“”库卡IIWA机器人的通讯课。这个类处理驱动程序(PC)和机器人之间的通信。”“”连接连接状态在任何时候都是已知的#创建对象时执行def__init__自我):自我BUFFER_SIZE512#字节自我超时5*60#秒:必须有足够的时间完成一个动作自我袜子没有一个def__del__自我):自我断开连接()def断开连接自我):"""断开与机器人的连接。"""自我连接如果自我袜子试一试自我袜子关闭()除了OSError返回返回真正的def连接自我知识产权港口30000):"""连接到机器人提供的连接参数。"""全球ROBOT_MOVING自我断开连接()print_message连接到机器人% s%我知识产权港口))创建新的套接字连接自我袜子套接字套接字套接字AF_INET套接字SOCK_STREAM自我袜子settimeout36000UpdateStatusROBOTCOM_WORKING试一试自我袜子连接((知识产权港口))除了ConnectionRefusedError作为eprint_messagestre))返回自我连接真正的ROBOT_MOVING自我send_lineDRIVER_VERSIONprint_message“等待欢迎信息……”robot_response自我recv_line()打印robot_responsesysstdout冲洗()返回真正的defsend_b自我味精):""" "通过通信端口(TCP/IP)向机器人发送一条线。"""试一试发送自我袜子发送味精如果发送==0返回返回真正的除了ConnectionAbortedError作为e自我连接打印stre))返回defrecv_b自我buffer_size):"""通过通信端口(TCP/IP)接收来自机器人的一条线。"""bytes_ioBytesIO()试一试范围buffer_size):bytes_io自我袜子recv1))b_databytes_iogetvalue()除了ConnectionAbortedError作为e自我连接打印stre))返回没有一个如果b_data==b''返回没有一个返回b_datadefsend_line自我字符串没有一个):"""向机器人发送带有\\n的字符串。"""字符串字符串取代\ n“< br >”如果sysversion_info0<3.返回自我send_b字节字符串+\ 0))# Python 2x只其他的返回自我send_b字节字符串+\ 0“utf - 8”))# Python 3x只defrecv_line自我):"""接收来自机器人的字符串。它一直读到一个以空结尾的字符串"""字符串b''沙里河自我recv_b1沙里河! =b\ 0# read直到null终止字符串字符串+沙里河沙里河自我recv_b1返回str字符串解码“utf - 8”))# python 2和python 3兼容defsend_int自我全国矿工工会):"""向机器人发送一个int(32位)。"""如果isinstance全国矿工工会浮动):全国矿工工会全国矿工工会elifisinstance全国矿工工会int):全国矿工工会全国矿工工会0返回自我send_b结构体>我的全国矿工工会))defrecv_int自我):"""从机器人接收一个int(32位)。"""缓冲自我recv_b4全国矿工工会结构体解压缩>我的缓冲返回全国矿工工会0defrecv_double自我):"""从机器人接收双(64位)。"""缓冲自我recv_b8全国矿工工会结构体解压缩“> d '缓冲返回全国矿工工会0defrecv_acknowledge自我):"""等待收到机器人的命令确认。"""真正的stat_ack自我recv_int()如果stat_ack==MSG_MONITORjnts_moving自我recv_array()print_jointsjnts_moving真正的elifstat_ack==MSG_ACKNOWLEDGE返回真正的其他的print_message“机器人的意外反应”UpdateStatusROBOTCOM_CONNECTION_PROBLEMS自我断开连接()返回defsend_array自我):"""向机器人发送一个双精度数组。"""如果isinstance列表):如果它是一个有关节的Mat()tr())0n_valueslen如果自我send_intn_values):返回如果n_values>0缓冲b''范围n_values):缓冲缓冲+结构体“> d '])返回自我send_b缓冲返回真正的defrecv_array自我):"""从机器人接收一个双精度数组。"""n_values自我recv_int()# print_message('n_values: %i' % n_values)[]如果n_values>0缓冲自我recv_b8*n_values列表结构体解压缩“>”+strn_values+' d '缓冲))# print('values: ' + str(values))返回defSendCmd自我cmd没有一个):"""给机器人发个命令。如果成功返回True,否则返回False。”""# print('SendCmd(cmd=' + str(cmd) + ', values=' + str(values) if values else ' + ')')如果机器人未连接,则跳过该命令如果自我连接UpdateStatusROBOTCOM_NOT_CONNECTED返回如果自我send_intcmd):print_message“机器人连接断开”UpdateStatusROBOTCOM_NOT_CONNECTED返回如果没有一个返回真正的elifisinstance列表):如果自我send_array):print_message“机器人连接断开”UpdateStatusROBOTCOM_NOT_CONNECTED返回返回真正的# -----------------------------------------------------------------------------# -----------------------------------------------------------------------------#通用RoboDK驱动程序为特定的机器人类机器人ComRobot()ROBOT_IP“172.31.1.147”#机器人IPROBOT_PORT30000#机器人通信端口ROBOT_MOVING# ------------机器人连接-----------------#与机器人建立连接defRobotConnect():全球机器人全球ROBOT_IP全球ROBOT_PORT返回机器人连接ROBOT_IPROBOT_PORT#断开与机器人的连接defRobotDisconnect():全球机器人机器人断开连接()返回真正的# -----------------------------------------------------------------------------#通用RoboDK驱动工具注意,一个简单的print()会将信息刷新到RoboDK中机器人连接的日志窗口#发送print()可能不会刷新标准输出,除非缓冲区达到一定的大小defprint_message消息):”“”在连接日志窗口和RoboDK的连接状态栏显示一条消息(短信:)。状态栏有颜色,绿色显示“准备就绪”,蓝色显示“等待中”,黄色显示“工作中”,红色显示其他信息。建议使用简短的单句。”“”打印短信:“+消息sysstdout冲洗()#非常有用的更新RoboDK尽可能快defshow_message消息):""在RoboDK主界面状态栏显示消息(SMS2:)。"""打印短信:“+消息sysstdout冲洗()#非常有用的更新RoboDK尽可能快defprint_response消息):”“”报告驱动状态/ API driver命令(RE:)的响应。即:\"resp = robot。setParam(‘司机’,some_command) \”。”“”打印“RE:”+消息sysstdout冲洗()#非常有用的更新RoboDK尽可能快defprint_commands消息):”“”在RoboDK的连接日志窗口显示可用的自定义命令列表(c) (CMDLIST:)。例如:\"c Command1|这是一个命令|c Command2|这是第二个命令|\"”“”打印”CMDLIST:“+消息sysstdout冲洗()#非常有用的更新RoboDK尽可能快defprint_joints关节is_moving):”“”将机器人关节报告给RoboDK (JNTS:或JNTS_MOVING:)。当机器人处于静态时提供精确的关节值(JNTS:),如果机器人当前正在移动,则提供更低的精度(JNTS_MOVING:)。”“”如果is_moving#显示机器人运动时关节的反馈如果ROBOT_MOVING打印”JNTS_MOVING:“+”“加入格式x“.3f”x关节))其他的打印”JNTS:“+”“加入格式x“.6f”x关节))sysstdout冲洗()#非常有用的更新RoboDK尽可能快# ---------------------------------------------------------------------------------#使用UpdateStatus()显示状态的常量值ROBOTCOM_UNKNOWN-1000#:未知状态(红色)ROBOTCOM_CONNECTION_PROBLEMS-3.#:机器人连接问题状态(红色)ROBOTCOM_DISCONNECTED-2#:机器人断开连接状态(红色)ROBOTCOM_NOT_CONNECTED-1#:机器人未连接状态(红色)ROBOTCOM_READY0#:机器人就绪状态(绿色),即短信:就绪ROBOTCOM_WORKING1#:机器人工作状态(黄色),即短信:工作中ROBOTCOM_WAITING2#:等待机器人状态(蓝色),即短信:等待保存最后一个机器人状态状态ROBOTCOM_DISCONNECTEDdefUpdateStatusset_status没有一个):”“”UpdateStatus将发送一个适当的消息给RoboDK,这将导致一个特定的颜色。例如,“Ready”显示为绿色,“Waiting”显示为蓝色,“Working”显示为黄色其他消息将以红色显示。如短信:准备好了”“”全球状态如果set_status没有一个状态set_status如果状态==ROBOTCOM_CONNECTION_PROBLEMSprint_message“连接问题”elif状态==ROBOTCOM_DISCONNECTEDprint_message“断开”elif状态==ROBOTCOM_NOT_CONNECTEDprint_message“未连接”elif状态==ROBOTCOM_READYprint_message“准备好了”elif状态==ROBOTCOM_WORKINGprint_message“工作……”elif状态==ROBOTCOM_WAITINGprint_message“等……”其他的print_message“未知状态”# RoboDK可以通过命令行提供的命令示例集defTestDriver():RunCommand“连接”RunCommand“速度250”RunCommand" settool -0.025 -41.046 50.920 60000 -0.000 90000 "RunCommand“CJNT”RunCommand" movj -5.362010 46.323420 20.746290 74.878840 -50.101680 61.958500"RunCommand" movel 00 00 00 0 -5.362010 50.323420 20.746290 74.878840 -50.101680 61.958500"RunCommand“暂停1000”RunCommand“断开”# -------------------------- 主驱动循环  -----------------------------#读取STDIN并处理每个命令(无限循环)#重要:这必须从RoboDK运行,以便RoboDK可以通过STDIN正确馈送命令这个驱动程序也可以在控制台模式下运行,通过控制台输入提供命令defRunDriver():”“”主驱动环。读取STDIN并处理每个命令(无限循环)。”“”sysstdinRunCommanddefRunCommandcmd_line):”“”解析RoboDK命令字符串(STDIN或命令行)并将适当的操作转发给机器人通信类。命令字符串以命令为前缀,后跟其参数(以空格分隔)。关节值以度为单位,并跟随机器人的轴数。姿势使用XYZRPW格式(毫米/度)。:param str cmd_line:命令字符串可用命令:..代码块:文本CONNECT连接请求。RoboDK提供IP,端口和DOF。即CONNECT 192.168.0.100 10000断开请求。即断开STOP / QUIT停止驱动程序(进程终止)。即停止192.168.0.100PAUSE执行暂停命令。RoboDK以毫秒为单位提供时间。即PAUSE 500执行一个联合招式。RoboDK提供关节和姿势。即MOVJ -36.3 30.2 -15.3 0.0 75.1 -36.3 156.0 -114.8 187.5 -180.0 0.0 180.0执行线性移动。RoboDK提供关节和姿势。即MOVL 18.6 16.8 3.8 0.0 69.3 18.6 156.0 52.7 187.5 -180.0 0.0 180.0执行一个线性搜索移动。RoboDK提供关节和姿势。即MOVLSEARCH 18.6 16.8 3.8 0.0 69.3 18.6 156.0 52.7 187.5 -180.0 0.0 180.0执行一个循环移动。RoboDK提供关节1,关节2,姿势1和姿势2。即MOVC -4.3 43.0 -36.4 0.0 83.3 -4.3 -36.3 30.2 -15.3 0.0 75.1 -36.3 215.1 -16.3 187.5 -180 0.0 180 156.0 -114.8 187.5 -180 0.0 180请求检索机器人的当前关节位置。例如CJNTSPEED设置速度。RoboDK提供mm/s、deg/s、m/s2和deg/s2。即速度1000.0 200.0 1500.000 150.000设置舍入/平滑/混合值。低于零的值意味着准确。即setroning -1或setroning 10SETDO设置控制器上的数字输出。RoboDK提供IO名称和值。即SETDO 5 1 5 1,或SETDO 0 0 VARNAME VALUEWAITDI等待控制器上的数字输入。RoboDK提供IO名称和值。即WAITDI 5 1 5 1,或WAITDI 0 0 VAR VALUESETTOOL设置工具中心点。RoboDK提供姿势。即SETTOOL 0.0 0.0 0.0 0.0 0.0 0.0在控制器上运行一个程序调用。RoboDK提供了程序ID(如果有的话)和程序名称。即RUNPROG 10 Program_10或RUNPROG -1 ProgramCall在教师挂件上显示弹出消息(如果适用)。RoboDK提供消息。这是一个消息”“”如果cmd_line()==""如果没有提供命令,则跳过返回全球ROBOT_IP全球ROBOT_PORT全球机器人全球ROBOT_MOVING将一行单词剥离为一组数字defline_2_values):[]试一试数量浮动附加数量除了ValueError通过返回cmd_wordscmd_line分裂' '#["]如果len == 0cmdcmd_words0cmd_valuesline_2_valuescmd_words1:])#[]如果len <= 1n_cmd_valueslencmd_valuesn_cmd_wordslencmd_words收到了没有一个如果cmd_linestartswith“连接”):#连接到机器人,提供IP和端口如果n_cmd_words>=2ROBOT_IPcmd_words1如果n_cmd_words>=3.ROBOT_PORTintcmd_words2])收到了RobotConnect()elifn_cmd_values>=nDOFs_MINcmd_linestartswith“MOVJ”):UpdateStatusROBOTCOM_WORKING#激活监视器反馈ROBOT_MOVING真正的#执行一个联合动作。RoboDK提供j1,j2,…,j6,j7,x,y,z,w,p,r如果机器人SendCmdMSG_MOVEJcmd_values):#等待命令执行如果机器人recv_acknowledge():#通知我们已经完成了这个命令UpdateStatusROBOTCOM_READYelifn_cmd_values>=nDOFs_MINcmd_linestartswith“MOVLSEARCH”):UpdateStatusROBOTCOM_WORKING#激活监视器反馈ROBOT_MOVING真正的#执行线性移动。RoboDK提供j1,j2,…,j6,x,y,z,w,p,r如果机器人SendCmdMSG_MOVEL_SEARCHcmd_values0n_cmd_values):#等待命令执行如果机器人recv_acknowledge():#取回接触接头jnts_contact机器人recv_array()print_jointsjnts_contactelifn_cmd_values>=nDOFs_MINcmd_linestartswith“MOVL”):UpdateStatusROBOTCOM_WORKING#激活监视器反馈ROBOT_MOVING真正的#执行线性移动。RoboDK提供j1,j2,…,j6,j7,x,y,z,w,p,r如果机器人SendCmdMSG_MOVELcmd_values):#等待命令执行如果机器人recv_acknowledge():#通知我们已经完成了这个命令UpdateStatusROBOTCOM_READYelifn_cmd_values>=2*nDOFs_MIN+6cmd_linestartswith“MOVC”):UpdateStatusROBOTCOM_WORKING#激活监视器反馈ROBOT_MOVING真正的#执行循环移动。RoboDK提供j1,j2,…,j6,x,y,z,w,p,r为two targetsxyzwpr12cmd_values-12:]如果机器人SendCmdMSG_MOVECxyzwpr12):#等待命令执行如果机器人recv_acknowledge():#通知我们已经完成了这个命令UpdateStatusROBOTCOM_READYelifcmd_linestartswith“CJNT”):UpdateStatusROBOTCOM_WORKING#获取机器人的当前位置如果机器人SendCmdMSG_CJNT):收到了机器人recv_array()print_joints收到了elifn_cmd_values>=1cmd_linestartswith“速度”):UpdateStatusROBOTCOM_WORKING第一个值是线速度,单位是mm/s#重要!每条指令只能发送一个“Ready”speed_values-1-1-1-1范围马克斯4lencmd_values))):speed_valuescmd_values# speed_values[0] = speed_values[0] #线速度(mm/s# speed_values[1] = speed_values[1] #关节速度(mm/s# speed_values[2] = speed_values[2] #线性加速度单位为mm/s2# speed_values[3] = speed_values[3] #关节加速度,单位为度/s2如果机器人SendCmdMSG_SPEEDspeed_values):#等待命令执行如果机器人recv_acknowledge():#通知我们已经完成了这个命令UpdateStatusROBOTCOM_READYelifn_cmd_values>=6cmd_linestartswith“SETTOOL”):UpdateStatusROBOTCOM_WORKING设置由RoboDK提供的6 XYZWPR cmd_values的工具参考框架如果机器人SendCmdMSG_SETTOOLcmd_values):#等待命令执行如果机器人recv_acknowledge():#通知我们已经完成了这个命令UpdateStatusROBOTCOM_READYelifn_cmd_values>=1cmd_linestartswith“暂停”):UpdateStatusROBOTCOM_WAITING#运行暂停如果机器人SendCmdMSG_PAUSEcmd_values0):#等待命令执行如果机器人recv_acknowledge():#通知我们已经完成了这个命令UpdateStatusROBOTCOM_READYelifn_cmd_values>=1cmd_linestartswith“SETROUNDING”):#设置舍入/平滑值。也被称为ABB的ZoneData或发那科的CNT如果机器人SendCmdMSG_ROUNDINGcmd_values0):#等待命令执行如果机器人recv_acknowledge():#通知我们已经完成了这个命令UpdateStatusROBOTCOM_READYelifn_cmd_values>=2cmd_linestartswith“SETDO”):UpdateStatusROBOTCOM_WORKING# dIO_id = cmd_values[0]# dIO_value = cmd_values[1]如果机器人SendCmdMSG_SETDOcmd_values02):#等待命令执行如果机器人recv_acknowledge():#通知我们已经完成了这个命令UpdateStatusROBOTCOM_READYelifn_cmd_values>=2cmd_linestartswith“WAITDI”):UpdateStatusROBOTCOM_WORKING# dIO_id = cmd_values[0]# dIO_value = cmd_values[1]如果机器人SendCmdMSG_WAITDIcmd_values02):#等待命令执行如果机器人recv_acknowledge():#通知我们已经完成了这个命令UpdateStatusROBOTCOM_READYelifn_cmd_values>=1n_cmd_words>=3.cmd_linestartswith“RUNPROG”):UpdateStatusROBOTCOM_WORKINGprogram_idcmd_values0如果程序名称为程序ID,则自动提取#程序ID代码cmd_words2# "Program%i" % program_id再保险搜索r“^ (? P < program_name >。*)\ ((? P <参数>。*)\)”代码code_dictgroupdict()program_namecode_dict“program_name”arg游戏code_dict“参数”取代' '''分裂”、“打印“program_name:”+program_name打印的参数:+strarg游戏))机器人SendCmdMSG_RUNPROG机器人send_intprogram_id机器人send_lineprogram_name一个arg游戏机器人send_line一个#等待程序调用完成如果机器人recv_acknowledge():#通知我们已经完成了这个命令UpdateStatusROBOTCOM_READYelifn_cmd_words>=2cmd_linestartswith“弹出”):UpdateStatusROBOTCOM_WORKING消息cmd_line6:]机器人send_line消息#等待命令执行如果机器人recv_acknowledge():#通知我们已经完成了这个命令UpdateStatusROBOTCOM_READYelifcmd_linestartswith“断开”):#断开与机器人的连接机器人SendCmdMSG_DISCONNECT机器人recv_acknowledge()机器人断开连接()UpdateStatusROBOTCOM_DISCONNECTEDelifcmd_linestartswith“停止”cmd_linestartswith“退出”):#停止driverç机器人SendCmdMSG_DISCONNECT机器人断开连接()UpdateStatusROBOTCOM_DISCONNECTED辞职0#停止司机elifcmd_linestartswith“c”):#自定义按原样转发的命令通过elifcmd_line==“t”#调用自定义程序进行快速测试TestDriver()其他的打印“未知命令:”+strcmd_line))如果收到了没有一个UpdateStatusROBOTCOM_READY#停止监控反馈ROBOT_MOVINGdefRunMain():"""调用主程序"""#齐平版print_messageKUKA IIWA机器人控制器的RoboDK Driver v2.0#如果我们强制停止进程,断开机器人的连接是很重要的进口atexitatexit注册RobotDisconnect# Flush Disconnected消息print_messageDRIVER_VERSIONUpdateStatus()#从STDIN运行驱动程序RunDriver()#用一组示例命令测试驱动程序TestDriver()如果__name__==“__main__”"""调用主程序"""重要的是,将Main过程保留为RunMainRunMain()