上位机基于C#通过TCP/IP和库卡机器人通讯
“智能制造之家”
写在面前
前面我们写了很多很多关于各种通讯的文章,具体可以参看:
也整理了工业网络、工业以太网等的一些文章:
今天我们来聊一聊用C#于kuka机器人通讯~
上位机要想和库卡机器人通讯,首先要给机器人安装“ETHERNETKRL”这个软件,ETHERNETKRL是KUKA提供的一个以太网通信功能的软件包,支持TCP和UDP协议.但具体软件的安装以及初步通讯测试就不多做介绍了。
如果你没有C#编程的相关基础,可以先参考:
因为本文不是介绍该软件的安装,所以就不多做解释,下面的内容默认已经能用自带的测试软件获取库卡机器人发送过来的数据。在此基础上,我来说一下c#利用tcp/ip是如何跟库卡机器人进行通讯的.如果你对TCP/IP或者网络协议还有疑问,可以先参考:
首先当然是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程序文件中。另外,对上位机发送到机器人的元素有做一些删改。
相关推荐:
我们是一群智能制造技术的爱好者,我们乐于分享,我们积极向上,我们也许有些宅,但是我们很有爱,我们期待您的加入
--智能制造之家
多重福利哦
1.若您有智能制造相关资料需求,可以到进行留言~
2.进入知识星球,提升自我认知,认识更多朋友,掌握更多资源,更多技巧~