一. 目录
ModbusTCP协议报文解析
- 报文格式说明
- modbus 常用功能代码简述
- 功能码详述
二. 报文格式说明
- 交互(通信)标识:
2个字节 为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文。 - 协议标识:
2个字节 表示该条指令遵循ModbusTCP协议,一般都为00 00 - 报文长度:
2个字节 表示后面数据的长度,有几个字节,高字节在前(前六位Modbus/TCP协议不同功能码通用) - 设备标识 :
1个字节 设备地址,这个可以用于局域网里面的具体的地址,如果目标机器有固定ip,这个就不起作用,直接上写成 00 - 功能码:
1个字节 功能码在modbus协议用于表示信息帧的功能 - 数据:
N个字节 后面数据根据不同功能码不同。
三. modbus 常用功能代码简述
常用功能代码.png
四. 功能码详述
1. '01' 读取多个线圈
请求示例报文:
Rx:00 01 00 00 00 06 FF 01 00 01 00 10
第1,2位 00 01 交互标识
第3,4位 00 00 协议标识
第5,6位 00 06 后面报文长度 有6位
第7位 FF 设备地址,发送什么,响应什么
第8位 01 功能码
第9,10位00 01 起始地址
第11,12位 00 10查询线圈长度,查询16位线圈
响应示例报文:
Tx:00 01 00 00 00 05 FF 01 02 0A 02
第1,2位 00 01 交互标识
第3,4位 00 00 协议标识
第5,6位 00 05 后面报文长度 有5位
第7位 FF 设备地址,发送什么,响应什么
第8位 01 功能码
第9位是后面数据位的长度,
第10位开始是数据位。
- 01查询线圈,每一个16进制数据表示8位线圈
- 第10位0A --> 0000 1010 第二位是1,第四位是1
2. '02' 读取多个离散量输入
与功能码 '01' 一样
3. ‘03’ 读取 多个保持寄存器
寄存器读取与线圈的区别,响应数据,寄存器数据每两个字节表示1位,一次请求不能超过127个地址
请求示例报文:
Rx:00 01 00 00 00 06 01 03 00 05 00 02
第1,2位 00 01 交互标识
第3,4位 00 00 协议标识
第5,6位 00 06 后面报文长度 有6位
第7位 01 设备地址,发送什么,响应什么
第8位 03 功能码
第9,10位00 05起始地址
第11,12位 00 02查询寄存器长度,查询2个寄存器
响应示例报文:
Tx:00 01 00 00 00 07 01 03 04 00 22 00 00
前四位(00 01 00 00)和7,8位(01 03)同请求发送的报文
第5,6位 00 07 是后面报文长度
第9位 04 是后面数据位的长度
第10-13位 数据位(00 22 00 00)
3. 04 读取 多个输入寄存器
与功能码 '03' 一样