![ABB工业机器人二次开发与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/236/47379236/b_47379236.jpg)
1.7.1 读取数据
以下举例说明机器人如何向PLC请求读取地址为20~38的线圈状态。ModBus/TCP读取数据时的请求与响应如表1-12所示。
表1-12 ModBus/TCP读取数据时的请求与响应
![](https://epubservercos.yuewen.com/669F4D/26763975401529406/epubprivate/OEBPS/Images/txt001_77.jpg?sign=1738861934-k4n27F0qEsf7gUlS2Jaf90TGHyKOfZkj-0-834f6de5d8fc4b1ea9e8bdf30a9ca84e)
根据前文所述,机器人需要发送的数据(加粗部分为发送的具体数据)如下:
0x00,0x01,0x00,0x00,0x00,0x06,0x01,0x01,0x00,0x14,0x00,0x13
(1)第1和第2字节:事务处理标识,PLC会返回相同值。
(2)第3和第4字节:00,00表示Modbus/TCP协议。
(3)第5和第6字节:表示从第7字节开始的总共字节数。
(4)第7字节:设备地址1。
(5)第8字节:功能码,此处请求读取线圈状态,故为0x01。
(6)第9和第10字节:待读取数据的起始地址为20,对应十六进制0x14。
(7)第11和第12字节:从起始地址开始的线圈个数共19个,对应十六进制0x13。
可以利用ModBusSlave软件进行仿真测试。单击该软件的“SetUp”按钮,设置“Slave ID”为1,要读取的线圈起始地址“Address”为20,数量“Quantity”为19,如图1-47所示。
如图1-48所示,根据前文所述,设置地址20~38的线圈值如下:
27~20:0XCD,35~28:0X6B,38~36:0X05
机器人向PLC发送数据“0x00,0x01,0x00,0x00,0x00,0x06,0x01,0x01,0x00,0x14,0x00,0x13”后,会接收到如下信息:
0x00,0x01,0x00,0x00,0x00,0x06,0x01,0x01,0x03,0xCD,0x6B,0x05
(1)第1到第7字节:同前文中的发送部分。
(2)第8字节:功能为读取线圈。
![](https://epubservercos.yuewen.com/669F4D/26763975401529406/epubprivate/OEBPS/Images/txt001_78.jpg?sign=1738861934-Wkj8videPu5ZPcuplYGIBIBWssKbsd0l-0-7a16e154d0b29cd36225b7ebe3a3ba59)
图1-47 设置ModBus/TCP相关信息
![](https://epubservercos.yuewen.com/669F4D/26763975401529406/epubprivate/OEBPS/Images/txt001_79.jpg?sign=1738861934-sGuZNiaF1FadPGDFxsiZB27iSiLmWPf8-0-0e6b8788cc27ec6eae555f69a11528cd)
图1-48 设置地址20~38的线圈值
(3)第9字节:0x03表示从第10字节开始的字节数。
(4)第10字节:地址27~20的线圈值为11001101(0xCD)。
(5)第11字节:地址35~28的线圈值为01101011(0x6B)。
(6)第12字节:地址43~36的线圈值为00000101(0x05)。
为实现基于ModBus/TCP通信的数据读取,编写如代码1-11所示的机器人代码。
代码1-11
![](https://epubservercos.yuewen.com/669F4D/26763975401529406/epubprivate/OEBPS/Images/txt001_80.jpg?sign=1738861934-iRSr5XmItnzjnOmm2wY3JD15zCqSBiMn-0-a0a2c4bdfd87525a0dc5b13161a35cf3)
![](https://epubservercos.yuewen.com/669F4D/26763975401529406/epubprivate/OEBPS/Images/txt001_81.jpg?sign=1738861934-vB4LFYiWmZYV5l476q6b65f2sDK6FNR8-0-c87310caf226a76f05d413af668d7718)
机器人运行以上代码后,接收到的数据如图1-49所示。
![](https://epubservercos.yuewen.com/669F4D/26763975401529406/epubprivate/OEBPS/Images/txt001_82.jpg?sign=1738861934-BNe9iuCxTNHsLIlzwd64XC37zmohU3C8-0-266f42ed461a3ab672b684778c6157d8)
图1-49 机器人接收到的数据
机器人默认数据显示为十进制,205对应0xCD,107对应0x6B, 5对应0x05。读取的地址为20~38的线圈数据,正确。