ABB工业机器人二次开发与应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.7.2 写入数据

以下举例说明如何对地址为20~29(共10个)的线圈值进行写入。ModBus/TCP写入数据时的请求与响应如表1-13所示。

表1-13 ModBus/TCP写入数据时的请求与响应

根据前文所述,机器人需要发送的数据(加粗部分为机器人发送的具体内容)如下:

0x00,0x01,0x00,0x00,0x00,0x09,0x01,0x0F,0x00,0x14,0x00,0x0A,0x02,0xFF,0x03

(1)第1和第2字节:事务处理标识,PLC会返回相同值。

(2)第3和第4字节:00,00表示ModbusTCP协议。

(3)第5和第6字节:表示从第7字节开始总共的字节数。

(4)第7字节:设备地址1。

(5)第8字节:功能码,此处请求写入线圈状态,故为0x0F。

(6)第9和第10字节:写入数据的起始地址20,对应十六进制0x14。

(7)第11和第12字节:从起始地址开始的线圈个数共10个,对应十六进制0x0A。

(8)第13字节:表示从第14字节开始剩余的总共字节数。

(9)第14和第15字节:具体写入的值。若10个线圈均设为1,则27~20位11111111对应十六进制0xFF,35~28位00000011对应十六进制0x03。

发送以上数据后,机器人会接收到如下数据(粗体部分为ModBus/TCP返回的具体内容):

0x00,0x01,0x00,0x00,0x00,0x06,0x01,0x0F,0x00,0x14,0x00,0x0A

(1)第1到第7字节:与发送数据含义相同。

(2)第8字节:功能码,此处请求写入线圈状态,故为0x0F。

(3)第9和第10字节:写入数据的起始地址20,对应十六进制0x14。

(4)第11和第12字节:从起始地址开始的线圈个数共10个,对应十六进制0x0A。

为实现基于ModBus/TCP通信的数据写入,编写如代码1-12所示的机器人代码。

代码1-12

在机器人侧运行以上代码后,可以在仿真软件看到29~20位均被置1,如图1-50所示。

图1-50 地址为20~29的线圈被置1

机器人发送数据后,从PLC接收到的数据如图1-51所示。注意:十进制15对应0x0F,十进制20对应0x14,十进制10对应0x0A。

图1-51 机器人从PLC接收到的数据