Modbus RTU 数据结构(发送和返回/读/写)
本文介绍了Modbus RTU协议的两种典型操作:读保持寄存器(功能码0x03)和写单个寄存器(功能码0x06)。详细说明了请求帧和响应帧的格式,包括设备地址、功能码、寄存器地址、数据值、CRC校验等字段的字节数和示例值。重点解析了CRC校验计算规则、寄存器地址映射关系、错误响应机制以及大端序的字节顺序特性。通过完整16进制帧示例展示了实际应用场景,并提示了超时处理、并发控制和地址范围等注意事项。
以下是 Modbus RTU 协议的典型数据结构示例,包含 读保持寄存器 和 写单个寄存器 的请求帧与响应帧格式,以及详细说明:
1. 读保持寄存器 (Function Code: 0x03)
请求帧 (主机 → 从机)
|
字段 |
字节数 |
示例值 |
说明 |
|---|---|---|---|
|
设备地址 |
1 |
|
从机设备地址(1-247) |
|
功能码 |
1 |
|
读保持寄存器 |
|
起始寄存器地址 |
2 |
|
要读取的起始寄存器地址 |
|
寄存器数量 |
2 |
|
读取的寄存器数量(2个) |
|
CRC校验 |
2 |
|
CRC16校验(低字节在前) |
完整帧示例(Hex):
01 03 00 00 00 02 C4 0B
响应帧 (从机 → 主机)
|
字段 |
字节数 |
示例值 |
说明 |
|---|---|---|---|
|
设备地址 |
1 |
|
从机设备地址 |
|
功能码 |
1 |
|
读保持寄存器 |
|
数据字节数 |
1 |
|
返回的数据字节数(2寄存器×2字节) |
|
寄存器数据 |
N |
|
寄存器1值( |
|
CRC校验 |
2 |
|
CRC16校验(低字节在前) |
完整帧示例(Hex):
01 03 04 00 0A 00 64 AB CD
2. 写单个寄存器 (Function Code: 0x06)
请求帧 (主机 → 从机)
|
字段 |
字节数 |
示例值 |
说明 |
|---|---|---|---|
|
设备地址 |
1 |
|
从机设备地址 |
|
功能码 |
1 |
|
写单个寄存器 |
|
寄存器地址 |
2 |
|
要写入的寄存器地址 |
|
写入值 |
2 |
|
要写入的值( |
|
CRC校验 |
2 |
|
CRC16校验(低字节在前) |
完整帧示例(Hex):
01 06 00 02 00 FF 12 34
计算出的 CRC 值假设为 0xC4 0x0B(十六进制)。
字节顺序:01 03 00 00 00 02 **0B C4**
注意:先传 0x0B(低字节),后传 0xC4(高字节)


响应帧 (从机 → 主机)
|
字段 |
字节数 |
示例值 |
说明 |
|---|---|---|---|
|
设备地址 |
1 |
|
从机设备地址 |
|
功能码 |
1 |
|
写单个寄存器 |
|
寄存器地址 |
2 |
|
写入的寄存器地址 |
|
写入值 |
2 |
|
确认写入的值( |
|
CRC校验 |
2 |
|
CRC16校验(低字节在前) |
完整帧示例(Hex):
01 06 00 02 00 FF 56 78
(响应帧与请求帧完全相同,表示写入成功)
3. 关键说明
-
CRC校验
-
计算范围:从设备地址到最后一个数据字节(不包括CRC本身)。
-
校验值格式:16位,低字节在前(如
0xC40B发送顺序是0B C4)。
-
-
寄存器地址
-
Modbus寄存器地址从
0x0000开始,但实际设备可能映射为40001(保持寄存器)或30001(输入寄存器)。
-
-
错误响应
-
如果操作失败,功能码最高位置1(如
0x83表示读保持寄存器错误),并返回错误码:01 83 02 C0 91 // 错误码0x02(非法数据地址)
-
-
字节顺序
-
Modbus默认使用 大端序(Big-Endian),即高位字节在前。
-
4. 实际应用场景
读保持寄存器
-
用途:读取设备参数(如温度、电压等)。
-
示例:
主机请求读取从机地址1的寄存器0和1的值:
01 03 00 00 00 02 C4 0B从机返回寄存器0=10,寄存器1=100:
01 03 04 00 0A 00 64 AB CD
写单个寄存器
-
用途:修改设备参数(如设定阈值)。
-
示例:
主机请求向从机地址1的寄存器2写入255:
01 06 00 02 00 FF 12 34从机确认写入成功:
01 06 00 02 00 FF 56 78
5. 注意事项
-
超时处理:主机需等待从机响应(典型超时为100ms-1s)。
-
并发控制:同一时刻只能有一个设备在总线上通信。
-
地址范围:寄存器数量不能超过Modbus协议限制(通常最多125个寄存器/请求)。
如果需要其他功能码(如写多个寄存器、读输入寄存器等)的示例,可以进一步补充!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)