热线电话:137-2877-9298
137-2877-9298
应用分类
联系我们
长沙华腾科技有限公司
手 机 号:137-2877-9298
服务热线 :+86-769-8457-2387
Q Q:421652398
邮 箱:1114809988@qq.com
地 址:长沙市高新区环创园A4栋8楼
网 址:http://xiandaijiqiren.com/
详细介绍
c#利用tcp/ip是如何跟库卡机器人是如何进行通讯的呢.
上位机和库卡机器人通讯,先要给机器人安装“ETHERNETKRL”
先当然是TCP/IP的基础部分,服务器和客户端。这里将库卡机器人作为客户端,长沙华腾科技上位机作为服务器进行通讯
库卡机器人TCP通讯存在三种数据发送格式:固定长度字节,任意长度字节,和xml格式。个人感觉xml格式比较好用,这里介绍xml的通讯。
xml的通讯,其实可以分解为几个步骤:机器人发送到上位机:机器人程序将变量或者数值写入xml的元素中→机器人将xml发送通过服务端发送到上位机的服务端→服务端接受到数据,按照xml的格式解析其中元素RET=EKI_Init("XmlCallBack")//初始化xml文件RET=EKI_Open("XmlCallBack")//打开(相当于客户端请求连接)//将变量或值写入到xml文件的元素中;FOLD Write data to connection ; Write frame to <LastPos X="" Y="" Z="" A="" B="" C="" /> RET=EKI_SetFrame("XmlCallBack","Robot/Data/LastPos", TOOL_DATA[1]) ; Write real to <ActPos X="" /> RET=EKI_SetReal("XmlCallBack","Robot/Data/ActPos/@X", 1000.12) ; Write int to <Status></Status> RET=EKI_SetInt("XmlCallBack","Robot/Status", 12345678) ; Write string to <Mode></Mode> RET=EKI_SetString("XmlCallBack","Robot/Mode","ConnectSensor") ; Write bool to <LightOn></LightOn> RET=EKI_SetBool("XmlCallBack","Robot/RobotLamp/GrenLamp/LightOn",true);ENDFOLD (Write data to connection)//发送xml到服务端RET = EKI_Send("XmlCallBack","Robot")上位机服务端获取到的数据是:<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><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>";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>";