![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=1739695139-tCWeLckgPEyrZNfmE7a0RSyy9btljR3v-0-28ea248945fa148eecb76b631ebcb407)
根据前文所述,机器人需要发送的数据(加粗部分为发送的具体数据)如下:
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=1739695139-ACGpGDCRIlUSLWMUgadqV8l140uper5L-0-6c5c5172b0766db99dc8a50d6d238467)
图1-47 设置ModBus/TCP相关信息
![](https://epubservercos.yuewen.com/669F4D/26763975401529406/epubprivate/OEBPS/Images/txt001_79.jpg?sign=1739695139-sYghcj5XJ1Nz47nK8ic1pihOwkynONr8-0-10fee85f89bf90903d173ad0dd230a1e)
图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=1739695139-u02iS0dxX0OXkXiYgWlawFhSUx1U9puu-0-b30f45215c29c67a71bf1a9fc3cdd948)
![](https://epubservercos.yuewen.com/669F4D/26763975401529406/epubprivate/OEBPS/Images/txt001_81.jpg?sign=1739695139-4EFgts0Ne5OxkXEbu2rfOpgfbaoYHKoD-0-3b5b8b26cc0976faefb8ac1e5333d183)
机器人运行以上代码后,接收到的数据如图1-49所示。
![](https://epubservercos.yuewen.com/669F4D/26763975401529406/epubprivate/OEBPS/Images/txt001_82.jpg?sign=1739695139-cNwCpcATVCRhC6mgbEwTWN2hgomT8LIQ-0-cdc9f5d8098362fb5d6218bcddeaf32f)
图1-49 机器人接收到的数据
机器人默认数据显示为十进制,205对应0xCD,107对应0x6B, 5对应0x05。读取的地址为20~38的线圈数据,正确。