1、引言
2010年,德国学术界和产业界提出“工业4.0”的概念,即是以智能制造为主导的第四次工业革命,或革命性的生产方法。该战略旨在通过充分利用信息通讯技术和网络空间虚拟系统—信息物理系统相结合的手段,将制造业向智能化转型。所以,近些年许多工业自动化厂商将自己的产品研发所考虑的一个重要方向定在是否能被远程控制。另一方面,随着国内人工成本的不断上升以及工厂人员流动的不确定性,机器人产业是近几年,相信也是未来几年的朝阳产业。所以对于工业机器人在工厂生产中的远程控制,是一个机器人集成方面比较不错的课题。我们知道,在工业机器人的队伍中,UR机器人是第一家在工业环境下工作的人机协作机器人,它以轻便、简单、安全著称。下面我们就来了解一下如何实现上位机对UR机器人的远程控制。
2、UR机器人提供的基于TCP/IP协议的接口
TCP/IP协议源于1969年,是针对Internet开发的一种体系结构和协议标准,目的在于解决异种计算机网络的通信问题。使得网络在互联时能为用户提供一种通用、一致的通信服务。是Internet采用的协议标准。基于TCP/IP的通讯具有成本低、可靠性高、实用性强、性能高等特点,所以现在许多工业自动化产品都具有基于TCP/IP协议通讯的接口,从而实现设备与设备之间,设备与网络之间的通讯。UR机器人在TCP/IP协议的基础上,提供了丰富的接口用于与外部设备的交互,如表1所述。
端口 | 接口描述 |
机器人作为服务器 | |
502 | Modbus TCP协议,机器人作为服务器 |
22 | SSH / SFTP (安全文件传输协议) |
29999 | Dashboard功能 |
30001 | 第一客户端端口,自动返回机器人状态与补充消息 |
30002 | 第二客户端端口,自动返回机器人状态与消息 |
30003 | 实时反馈端口,自动返回机器人状态与消息,125Hz实时反馈接口 |
机器人作为客户端 | |
自定义 | 由UR脚本函数定义 |
502 | Modbus TCP协议,机器人作为客户端 |
表1 UR机器人TCP/IP接口表
有了这些接口,上位机就可以远程控制机器人。如图1,简单描述了上位机对UR机器人远程监控的系统图。
图1 远程控制系统图
下面我们就来介绍UR机器人所提供的相关通讯接口,从而远程控制机器人。
3、ModbusTCP端口
MODBUS是OSI模型第7层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。自从1979年出现工业串行链路的事实标准以来,MODBUS使成千上万的自动化设备能够通信。目前,继续增加对简单而雅观的MODBUS结构支持。互联网组织能够使TCP/IP栈上的保留系统端口502访问MODBUS。MODBUS是一个请求/应答协议,并且提供功能码规定的服务。MODBUS功能码是MODBUS请求/应答PDU的元素。
UR机器人既可以作为ModbusTCP服务器,也可以作为ModbusTCP客户端,两者的主要区别在于消息请求方的不同。在此,我们仅讨论UR机器人作为ModbusTCP服务器的情况,如图2所示。
图2 Modbus TCP服务器
既然UR机器人作为Modbus TCP服务器,它必定有一系列Modbus地址供上位机来访问。
地址 | 类型 | 描述 |
0-33 | Register | 可以访问机器人的所有IO |
128-255 | Register | 可配置寄存器 |
256-265 | Register | 机器人状态 |
270-315 | Register | 关节位置、速度、电流、温度、模式等信息 |
400-425 | Register | TCP位置、速度、偏移等信息 |
768-770 | Register | 工具端状态 |
0-159 | Bit | 可以访问机器人的所有IO |
260-265 | Bit | 机器人状态 |
表2 Modbus地址简表
通过UR机器人的相关Modbus地址,我们可以访问机器人的很多信息,进而可以把这些信息放到上位机上。下图就是通过访问Modbus地址,模仿Polyscope(UR机器人原版软件),制作出来一个界面,当然我们可以通过这个界面监控并控制机器人的所用IO。
图3 IO控
4、Dashboard端口
上位机可以通过29999端口直接发送一些简单的指令给机器人,这些指令是UR自己定义的,这种功能被称为Dashboard。下表就是Dashboard的指令列表。
指令 | 描述 |
load | 加载被保存在控制器中的程序 |
get loaded program | 返回当前机器人执行的程序 |
play | 启动当前加载的程序 |
stop | 停止机器人当前执行的程序 |
pause | 暂停机器人当前执行的程序 |
isProgramSaved | 当前机器人正在执行的程序是否被保存,返回“True”或“False” |
programState | 当前程序的运行状态,返回“PLAYING”或“STOPPED”或“PAUSED” |
shutdown | 关闭机器人系统 |
running | 机器人的运行状态,返回“True”或“False” |
robotmode | 访问机器人模式 |
popup | Polyscope跳出对话框 |
close popup | 关闭对话框 |
addToLog | 将消息添加到logfile中 |
setUserRole | 设置用户权限 |
polyscopeVersion | 返回当前Polyscope的版本号 |
power on | 使机器人本体通电 |
power off | 使机器人本体断电 |
brake release | 释放制动器 |
safetymode | 返回机器人当前所处的安全模式状态 |
表3 Dashboard指令列表
显而易见,我们可以通过一些Dashboard指令,远程切换、加载程序,同时可以启动、暂停、停止程序,这样上位机就可以远程控制程序了。
5、上位机编程端口
UR机器人有3种编程方式:Polyscope编程、脚本编程以及C-API编程。Polyscope编程指的是程序在示教器上被编辑,机器人然后执行,这是UI层的编程方式。C-API编程是在研发层上的编程方式。我们重点介绍的是脚本编程方式,脚本编程的语言是UR公司在python语言基础上,自己研发的URscript语言。URscript是在脚本层上控制机器人的编程语言,就像其他编程语言一样,它有变量类型,语法结构、方法等。另外,它有一系列的专用方法来控制机器人运动以及IO状态。
UR机器人的控制器是运行在Mini-ITXPC上的,一旦PC启动机器人控制器(就像启动服务一样),Polyscope软件就通过PC本地的TCP/IP端口与机器人控制器建立连接了。同样,当上位机作为客户端,通过30001或30002或30003特定的编程端口,与机器人控制器建立TCP/IP连接,这样我们就可以在上位机上按照URscript语言的格式编写脚本程序,直接发送给机器人控制器,机器人就可以直接执行程序了。
按照上面所述的机器人脚本编程原理,我就可以在上位机上制作如下界面,实现对UR机器人的远程编程。
图4 脚本编程
6、实时反馈端口
30001、30002、30003除了用于远程编程外,还有其他功能,如下表所述。
端口 | 名称 | 功能 |
30001 | 第一客户端端口 | 客户端可发送脚本代码至服务器;服务器自动以5Hz的频率返回机器人状态与补充消息到客户端。 |
30002 | 第二客户端端口 | 客户端可发送脚本代码安全文件传输协议;服务器自动以5Hz的频率返回机器人状态与消息到客户端。 |
30003 | 实时反馈端口 | 客户端可发送脚本代码安全文件传输协议;服务器自动以125Hz的频率返回机器人状态与消息到客户端。 |
表4 编程口
这三个端口另一个共同的特点就是,一旦客户端打开端口,就会按照一定的频率收到来自机器人的信息。需要注意的是30003端口是实时反馈端口,客户端每8ms能收到一次来自机器人的信息。另外,通过测试,客户端通过30001和30002只能每200ms左右收到来自机器人的信息。
其实客户端通过这三个端口收到的机器人信息也稍有不同。通过30003端口收到信息是最丰富的,包含了通过30002收到的信息以及通过30001收到的大部分信息。
所以说通过实时反馈端口,客户端收到机器人信息效率是最高的,内容也是最全的。通过实时反馈端口每次收到的数据包有1044个字节,这些字节以标准的格式排列。注意在极少情况下客户端会收到小于1044个字节,但是字节排列的格式不变。下表是1044字节排列的顺序表。
字节顺序 | 内容 |
1-4 | 整个数据包的字节数 |
5-12 | 控制器通电时间,断电清零 |
13-444 | 关节目标位置、速度、加速度、电流、扭矩,实际位置、速度、电流,控制电流 |
445-684 | TCP位置、速度、力,0目标位置、速度 |
685-692 | 输入位状态 |
693-740 | 电机温度 |
740-748 | 程序扫描时间 |
749-756 | 保留 |
757-820 | 机器人模式,关节模式,安全模式 |
821-868 | 保留 |
869-892 | TCP加速度 |
893-940 | 保留 |
941-948 | 速度比例 |
949-956 | 机器人当前动量值 |
957-972 | 保留 |
973-996 | 控制板电压,机器人电压,机器人电流 |
997-1044 | 关节电压 |
表5 实时反馈数据包
有了这些数据,上位机的数据表现就会十分丰富。下面有2张上位机界面图,“点动图”获取了关节位置、TCP位置;“初始化图”获取了关节模式、关节实际电流、关节电压以及其他数据。
图5 点动图
图6 初始化图
7、结束语
综上所述,机器人作为ModbusTCP服务器,上位机通过502端口可以控制机器人的所有IO;上位机可以通过30001或30002或30003端口远程下载程序到机器人;上位机通过29999端口可以远程控制程序运行状态;上位机通过30003端口可以实时得到机器人的状态信息。也就是说,利用UR机器人开放的基于TCP/IP协议的端口,可以制作自己的Polyscope软件,实现上位机的远程控制。