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(非法数据值)
页:
[1]