Modbus=报文头(MBAP)+帧结构(PDU)
注意:据说RTU和TCP的差距就是效验码,具体我也没有操作,所以这里介绍的只有TCP相关内容。看这个章节的时候最好下载Modbus Slave(服务器)和Modbus Poll(客户端)两个软件测试了解一下Modbus。
其实Modbus TCP就是使用TCP协议传输数据,传输的数据是Modbus格式。
客户端传输数据时是以十六进制发送,每次发送两位;服务器接收数据时也是以十六进制的形式接收,每次接收两位。 如:0X00,两位十六进制数是8位二进制数。
了解以上部分在了解下面的就很容易。以下是正文:
1、MBAP(报文头)
事务标识符 | 协议标识 | 长度 | 单元标识符 |
2字节 | 2字节 | 2字节 | 1字节 |
00 00 | 00 00 | 00 00 | 01 |
- 事务标识符:可以解释为报文的序列号,由于我们测试使用的Modbus Poll客户端是一直发送数据,所以每发送一次数据标识符就加一。服务器接收时会把这个数据原封返回。
- 协议表示:00 00代表TCP协议。
- 长度:表示从单元标识符开始后面数据的长度。如:00 06表示后面有0X06个字节长度的数据。
- 单元标识符:相当于设备的地址。一般为01。
2、PDU(帧结构)
2.1 PDU=功能码+数据。
2.2 功能码:
- modbus的操作对象有四种:线圈、离散输入、输入寄存器、保持寄存器。
????????线圈:相当于开关,在MODBUS中可读可写,数据只有00和01。
????????离散量:输入位,开关量,在MODBUS中只读。
????????输入寄存器:只能从模拟量输入端改变的寄存器,在MODBUS中只读。
????????保持寄存器:用于输出模拟量信号的寄存器,在MODBUS中可读可写。
????????0x01:读线圈
????????0x05:写单个线圈
????????0x0F:写多个线圈
????????0x02:读离散量输入
????????0x04:读输入寄存器
????????0x03:读保持寄存器
????????0x06:写单个保持寄存器
????????0x10:写多个保持寄存器
2.3 报文的详细解读
这里只介绍读线圈和保持寄存器内容,以下数据全部位16进制数据。
1、?0x01:读线圈
请求:00 01 00 00 00 06 01 01 00 02?00 04(客户端)
- 00 01:事务标识符
- 00 00:Modbus TCP协议
- 00 06:后面有00 06个字节数据
- 01:单元标识符
- 01:功能码(读线圈)
- 00 02:开始读的数据的地址。从00 02开始读数据。
- 00 04:注意这里不是读到00 04,而是从开始位置读00 04个数据。
这段报文就是请求读从 00 02 开始的 00 04 个数据。
回应:00 01 00 00 00 04 01 01 01 0E(服务器)
- 00 01:事务标识符
- 00 00:Modbus TCP协议
- 00 04:后面有00 04个字节数据
- 01:单元标识符
- 01:功能码
- 01:后面有01个字节的数据
- 0E:表示所读地址的线圈全是2的位置是0,其余是1
说明:线圈是只有00和01两种格式,所以图中从2的位置开始读到的4位数据是:1110(二进制),转化为十六进制就是0E。
?2、0x03:读保持寄存器
请求:00 01 00 00 00 06 01 03 00 02 00 04(客户端)
- 00 01:事务标识符
- 00 00:Modbus TCP协议
- 00 06:后面有00 06个字节数据
- 01:单元标识符
- 03:功能码(读保持寄存器)
- 00 02:开始读的数据的地址。从00 02开始读数据。
- 00 04:注意这里不是读到00 04,而是从开始位置读00 04个寄存器数据。
回应:00 01 00 00 00 0B 01 03 08 00 00 00 37 00 00 00 00(服务器)
- 00 01:事务标识符
- 00 00:Modbus TCP协议
- 00 09:后面有00 09个字节数据
- 01:单元标识符
- 03:功能码
- 08:后面有08个字节的数据,后面的数据每两位表示一个寄存器数据。
- 00 00:第一个寄存器数据
- 00 37:第二个寄存器数据,图中我写入的数据是55(十进制),这里是十六进制数据
- 00 00:第三个寄存器数据
- 00 00:第四个寄存器数据
其他寄存器和写数据请参考以下博主:
参考:https://blog.csdn.net/iknow_nothing/article/details/84292914https://blog.csdn.net/iknow_nothing/article/details/84292914