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
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
更多资讯:ABB工业机器人