1. modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的modbus协议:modbusTCP。采用master/slave方式通信。 2. MODBUS/TCP基于以太网,故ABB机器人在使用时需要有616-1 PCINTERFACE选项 3. ABB并没有提供标准的MODBUS相关处理函数,要使用modbus/tcp,可以使用普通socket收发,结合modbus定义对数据进行处理。 4. 机器人与PLC之间的modbus通讯,通过相关功能码实现功能,功能码如下图(使用16进制表示) 5. modbusTCP数据帧解释如下: 6. 此处举例机器人向PLC请求读取地址20-38线圈状态,发送代码如下,其中(所有信息为16进制) 0x00,0x01,0x00,0x00,0x00,0x06,0x01,0x01,0x00,0x14,0x00,0x13 红色部分为第一到第七字节: 第一第二字节:事务处理标识,PLC会返回相同值 第三第四字节:00,00 ModbusTCP协议 第五第六字节,表示从第7字节开始总共字节数 第七字节:设备地址 黑色部分为具体内容: 第八字节为功能码,此处请求读取线圈状态,故为0x01 第九、十字节:起始地址(此处均为16进制)地址20,对应16进制0x14 第十一、十二字节:从起始地址开始的线圈个数,一共19个,对应16进制0x13 7. 可以下载modbusSlave软件进行仿真,点击setup完成设置如下并运行: 上图的数据设置为0xCD,0x6B, 0x05 8. 机器人向PLC发送以上数据内容后,会接收到如下信息: 0x00,0x01,0x00,0x00,0x00,0x06,0x01,0x01,0x03,0xCD,0x6B,0x05 红色部分解释同6中的发送部分 第8字节,功能为读取线圈 第9字节,0x03表示从第10字节开始的字节数 第10字节,对27-20位线圈11001101 第11字节,对35-28位线圈01101011 第12字节,对43-36位线圈00000101(获取38-36位,43-39位数据用0补齐) 9. 机器人代码如下: 运行后机器人接收到数据如下: 由于机器人此处显示为10进制,205对应0xCD,107对应0x6B, 5对应0x05 10.若要对地址20-29共10个线圈进行写入值,参考步骤4中的功能码为0x0F,发送数据如下: 0x00,0x01,0x00,0x00,0x00,0x09,0x01,0x0F,0x00,0x14,0x00,0x0A,0x02,0xFF,0x03 红色部分为第一到第七字节: 第一第二字节:事务处理标识,PLC会返回相同值 第三第四字节:00,00 ModbusTCP协议 第五第六字节,表示从第7字节开始总共字节数 第七字节:设备地址 黑色部分为具体内容: 第八字节为功能码,此处请求写入线圈状态,故为0x0F 第九、十字节:起始地址(此处均为16进制)地址20,对应16进制0x14 第十一、十二字节:从起始地址开始的线圈个数,一共10个,对应16进制0x0A 第十三字节:表示从第14字节开始的剩余总共字节数 第十四、十五字节:写入值,若10个线圈均设为1,则27-20位11111111对应16进制0xFF,35-28位00000011对应16进制0x03. 11. 发送以上内容后,机器人会接收到如下数据: 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x0F, 0x00,0x14,0x00, 0x0A 红色部分与10中相同, 黑色部分为具体内容: 第八字节为功能码,此处请求写入线圈状态,故为0x0F 第九、十字节:起始地址(此处均为16进制)地址20,对应16进制0x14 第十一、十二字节:从起始地址开始的线圈个数,一共10个,对应16进制0x0A 12. 机器人代码如下: 13. 运行后,可以在仿真软件看到29-20位均被设置为1 14. 机器人接受数据如下(机器人侧以10进制显示): 十进制15对应0xFF,十进制20对应0x14,十进制10对应0x0A
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |