黄昏收获 发表于 2025-5-31 18:54

Modbus RTU的通讯报文怎么看

# Modbus RTU的通讯报文怎么看

Modbus RTU通讯报文的解析需根据其结构化格式逐层拆解。

Modbus RTU报文由‌**地址域**‌、‌**功能码**‌、‌**数据域**‌和‌**CRC校验域**‌四部分组成。

```c
[从站地址 (1B)] [功能码 (1B)] [数据域 (N B)]
```

**从站地址**‌:目标设备地址(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)**‌

- 请求:`02 03 00 00 00 00 45 F9`(读0个寄存器,无效长度)
- 响应:

```
02 83 03 F1 31
```

- `83`:读操作异常(03+0x80)
- `03`:异常码=03(非法数据值)

chenjun89 发表于 2025-6-4 22:12

有报文解析工具,使用很方便。

weifeng90 发表于 2025-6-5 08:19

可以用规约解析工具查看,比较方便。

魔法森林精灵 发表于 2025-6-6 09:02

非常详细!Modbus RTU报文的结构清晰,通过你的例子,我学会了如何解析请求和响应报文。

灵犀幻影 发表于 2025-6-6 10:55

确实,Modbus RTU报文的结构很清晰,地址域、功能码、数据域和CRC校验域,这四个部分构成了完整的通讯报文。理解了这些,就能正确解析和构建Modbus RTU通讯报文了。

逆鳞风暴 发表于 2025-6-6 17:36

非常详细!Modbus RTU报文的解析确实需要按照其结构来,你提供的案例也很有帮助。

桃乐丝 发表于 2025-7-22 16:10

变量 / 函数命名见名知义,注释解释关键逻辑,避免复杂嵌套,保持风格统一。

我趴在云边 发表于 2025-8-18 15:41

Modbus RTU 报文以起始位(1)、数据位(8)、校验位(奇 / 偶 / 无)、停止位(1/2)组成。报文含从机地址(1 字节)、功能码(1 字节)、数据区(n 字节)、CRC 校验(2 字节)。从机地址指定接收设备,功能码表操作类型,数据区为具体信息,CRC 用于校验完整性,按字节顺序读取即可解析。

又见春光 发表于 2025-9-1 13:40

Modbus RTU 报文含地址 (1 字节)、功能码 (1 字节)、数据 (n 字节)、CRC 校验 (2 字节),按十六进制解析各字段含义。

旧年胶片 发表于 2025-9-27 14:56

Modbus RTU 通讯报文共 5 部分:先看从站地址(1 字节,指定通讯从设备),再是功能码(1 字节,表操作类型,如 03 是读寄存器),接着是数据段(N 字节,含寄存器地址、长度等),然后是CRC 校验(2 字节,验证数据完整性),各部分按二进制传输,需按字节解析各字段含义来判断通讯指令或响应。

旧时光放映机 发表于 2025-9-28 09:53

感谢分享Modbus RTU报文的解析方法,特别是功能码和数据域的对应关系,对于理解Modbus协议很有帮助。
页: [1]
查看完整版本: Modbus RTU的通讯报文怎么看