Modbus-TCP协议报文详解

1,427 阅读2分钟

TCP/IP 上的 MODBUS 的请求/响应

2301031508.png

MBAP报文头

长度(字节)示例描述
事务元标识符20x00 0x00MODBUS 请求/响应事务处理的识别码
协议标识符20x00 0x000=MODBUS 协议
长度20x00 0x00以下字节的数量
单元标识符10x01串行链路或其它总线上连接的远程从站的识别码

(1)事务标识符:可以解释为报文的序列号,由于我们测试使用的Modbus Poll客户端是一直发送数据,所以每发送一次数据标识符就加一。服务器接收时会把这个数据原封返回。

(2)协议表示:00 00代表TCP协议。

(3)长度:表示从单元标识符开始后面数据的长度。如:00 06表示后面有0x06个字节长度的数据。

(4)单元标识符:相当于设备的地址。一般为01。

PDU (帧结构)

长度(字节)示例描述
功能码10x01modbus的功能码列表
数据0~(65535-2)0x00/
modbus的操作对象
操作对象描述
线圈相当于开关,在MODBUS中可读可写,数据只有00和01
离散量输入位,开关量,在MODBUS中只读
输入寄存器只能从模拟量输入端改变的寄存器,在MODBUS中只读
保持寄存器用于输出模拟量信号的寄存器,在MODBUS中可读可写
根据对象的不同,modbus的功能码有
功能码描述
0x01读线圈
0x05写单个线圈
0x0F写多个线圈
0x02读离散量输入
0x04读输入寄存器
0x03读保持寄存器
0x06写单个保持寄存器
0x10写多个保持寄存器

报文解读

读取01-03号线圈值

发送响应

2301031612.png

抓包确认

2301031610.png

2301031611.png

报文解析

TX(发送): 08 80 00 00 00 06 01 01 00 01 00 03

报文描述
08 80事务标识符
00 00Modbus TCP协议标识
00 06剩余报文长度
01单元标识符
01功能码(读线圈)
00 01 00 03指令数据,此处代表从1开始读3个

RX(响应): 08 80 00 00 00 04 01 01 01 05

报文描述
08 80事务标识符
00 00Modbus TCP协议标识
00 04剩余报文长度
01单元标识符
01功能码(读线圈)
01 05此处01代表有效数据长度1字节,05=0101,反向得出1,3线圈true