Modbus RTU的通讯报文怎么看
Modbus RTU通讯报文的解析需根据其结构化格式逐层拆解。
Modbus RTU报文由地址域、功能码、数据域和CRC校验域四部分组成。
[从站地址 (1B)] [功能码 (1B)] [数据域 (N B)] [CRC16校验 (2B)]
从站地址:目标设备地址(1字节),范围1~24717
功能码:操作类型代码(1字节),如03 读保持寄存器、06 写单寄存器48
数据域:请求/响应的具体参数(长度可变)
CRC校验:循环冗余校验码(2字节),验证报文完整性。使用CRC16-Modbus算法
常用功能码示例
功能码 |
含义 |
请求报文数据域 |
响应报文数据域 |
03 |
读保持寄存器 |
起始地址(2B) + 寄存器数量(2B) |
字节数(1B) + 寄存器值(N B) |
06 |
写单寄存器 |
寄存器地址(2B) + 写入值(2B) |
同请求报文(回显数据) |
10 |
写多寄存器 |
寄存器地址(2B) + 数量(2B) + 字节数(1B) + 寄存器值(N B) |
写入地址(2B) + 数量(2B) |
异常响应格式
若操作失败,功能码变为原功能码 + 0x80 ,数据域仅含异常码(1字节)
案例1:读保持寄存器(功能码03)
- 请求:
01 03 00 00 00 02 C4 0B
01 :从站地址1
03 :读保持寄存器
00 00 :起始地址0
00 02 :读取2个寄存器
C4 0B :CRC校验
- 正常响应:
01 03 04 00 0A 00 64 8B FB
04 :返回4字节数据(2寄存器×2字节)
00 0A :寄存器0的值=10(0x000A)
00 64 :寄存器1的值=100(0x0064)
案例2:错误响应(功能码83)
|