KUKA.EthernetKRL软件包提供了通过网络和机器人控制器进行双向通信的功能。使用TCP/IP协议,通过服务器端和客户端方式进行通信,网络传输通过xml进行配置,传输内容也是xml格式。通信延迟在2ms以下。因此可以做一些实时性比较高的任务,比如在线分拣等。
软件包安装
确保KUKA控制器安装了EthernetKRL软件包。如果没有安装,查看机器人D盘的kuka_option文件夹下是否有,如果有,点击setup安装,如果没有,需要联系机器人厂家购买该软件包。
网线连接与IP地址配置
使用网线把KUKA控制器的x66或者x67接口和pc的网口直接连接到一起。设置KUKA控制器的IP地址和PC端的IP地址,两个IP地址需要在同一个网段,比如192.168.1.100和192.168.1.101。
下载官方例程
库卡官方提供了几个例程:目录结构如下
首先当然是TCP/IP的基础部分,服务器和客户端。这里将库卡机器人作为客户端,上位机作为服务器进行通讯。
通过按钮事件,创建后台线程用于TCP服务端,创建服务端并开启监听后,就可以等待机器人客户端发来的消息了。
库卡机器人TCP通讯存在三种数据发送格式:固定长度字节,任意长度字节,和xml格式。个人感觉xml格式比较好用,这里介绍xml的通讯。
xml的通讯,其实可以分解为几个步骤:
机器人发送到上位机:机器人程序将变量或者数值写入xml的元素中→机器人将xml发送通过服务端发送到上位机的服务端→服务端接受到数据,按照xml的格式解析其中元素。
上位机服务端获取到的数据是:
<Robot><Data><LastPos X="483.980011" Y="7.210000" Z="239.869995" A="0.000000" B="0.000000" C="0.000000"></LastPos><ActPos X="1000.119995"></ActPos></Data><Status>12345678</Status><Mode>ConnectSensor</Mode><RobotLamp><GrenLamp><LightOn>1</LightOn></GrenLamp></RobotLamp></Robot>
然后对数据进行逐个元素的解析就可以了。要增加变量,只要对应在mxl文件,机器人程序和上位机解析过程中添加就可以了。
上位机发送到机器人:上位机将变量写成xml格式,利用客户端发送到机器人中的xml文件→机器人读取xml文件中的元素值到程序中的变量
写成xml格式:
sendstr = sendstr + "<Sensor><Status><IsActive>FALSE</IsActive></Status></Sensor>";
sendstr = sendstr + "<Sensor><Read><xyzabc X='10.0' Y='20.0' Z='30.0' A='40.0' B='50.0' C='60.0'></xyzabc></Read</Sensor>";
然后是tcp发送
等发送完成之后,机器人再读取
机器人从xml元素中读取值或者属性并赋予创建的变量
RET=EKI_GetString("XmlCallBack","Sensor/Message",valueChar[])
RET=EKI_GetInt("XmlCallBack","Sensor/Nmb",valueInt)
RET=EKI_GetBool("XmlCallBack","Sensor/Status/IsActive" ,valueBOOL)
RET=EKI_GetFrame("XmlCallBack","Sensor/Read/xyzabc",valueFrame)
然后就可以在机器人程序中使用,或者通过查看变量值检测是否正确
本例中的xml文件和机器人程序文件src由ETHERNETKRL软件中自带的测试例子修改而来。不用原例子的原因是,原例子只有程序文件src而没有数据文件dat,程序里的变量都是临时变量,无法在示教器上查询变量的值。所以新建了一个程序,将原例子的变量定义放在dat数据文件中,处理过程放在src程序文件中。另外,对上位机发送到机器人的元素有做一些删改。
参考文献:
https://zhuanlan.zhihu.com/p/154135593
公众号:机器人视觉