**Modbus RTU** 是工控、抄表、楼宇自控里最常见的串行主从协议。链路上是 **纯 HEX 二进制帧**,不是可读文本。用本站调试时务必开 **HEX 收发**,并认准 CRC 小端序。
### 经典读保持寄存器(功能码 03)
主站发送示例:`01 03 00 00 00 02 C4 0B`
| 字段 | 例 | 含义 | |---|---|---| | 从站地址 | `01` | 目标设备 ID | | 功能码 | `03` | 读保持寄存器 | | 起始地址 | `00 00` | 寄存器起始 | | 数量 | `00 02` | 读 2 个寄存器 | | CRC16 | `C4 0B` | 前 6 字节校验,**低字节在前** |
从站正常应答示例:`01 03 04 00 12 00 34 F3 32` 其中 `04` 为后续数据字节数,`00 12 00 34` 为寄存器值,`F3 32` 为应答 CRC。
### 串口参数与物理层
- 常见 9600/19200/115200,**8N1** 居多;部分 PLC 默认 7E1,以手册为准。
- 多站总线几乎都是 **RS-485 半双工**;注意 A/B、终端电阻 120Ω、共地/隔离。
- 帧间隔:RTU 依赖约 3.5 字符时间静默分帧;本站可用自动分帧/超时观察整帧。
- 同一时刻只应一个主站轮询,避免总线冲突。
### 用本站现场调试步骤
- 接线与终端电阻确认,主站唯一。
- 打开本站,**HEX 模式**,波特率与从站一致。
- 发送读命令(可先做预设),核对应答地址/功能码是否镜像。
- CRC 错:重算是否误含空格、冒号或 CRLF(那是 ASCII/文本模式的东西)。
- 超时无应答:查地址、波特率、485 方向(DE)、供电。
- 异常功能码(如 `83`)+ 异常码:从站拒绝,查寄存器映射是否存在。
### CRC 注意
Modbus CRC16 对「地址+功能码+数据」计算,结果 **低字节先上线**。本站发送时按完整十六进制帧填写,不要在 HEX 流里夹杂可见空格字节(除非你的工具明确忽略空白)。算法细节见《Modbus CRC16 校验》文档。
### 与 Modbus ASCII 的差别
ASCII 用可读十六进制字符 + LRC,帧以 `:` 起、`\r\n` 终;RTU 更短更快,工业现场默认 RTU。调试时不要混用两种编码去贴同一段报文。
### 和乱码排查
若 HEX 下全是无规律噪声:先当电气/波特率问题(回环、共地、485),不要先怀疑功能码表。 若帧结构对但 CRC 错:查字节顺序与是否多算字段。
掌握「HEX 拆帧 + CRC + 485」,即可用本站完成大量仪表/PLC 点检,而不必先上大型组态软件。把成功帧存进预设,产线点检可一键复现。 ## 用在线串口发送你的第一帧 Modbus
目标:主站读从站 1 的保持寄存器。
- 硬件:USB-485,A/B 无反,两端视情况加 120Ω。
- 本站 HEX 模式,波特率与从站一致(常见 9600 8N1)。
- 发送:`01 03 00 00 00 02 C4 0B`
- 成功时应答形如:`01 03 04 ... CRC`
- 无应答:地址、波特率、A/B、供电、是否多主冲突。
- 有应答但 CRC 错:是否把空格当数据发出;是否用了 ASCII 模式。
把成功帧保存为「预设指令」,产线点检可一键复测。
## 功能码速查(调试向)
| 码 | 含义 | 调试提示 | |---|---|---| | 01/02 | 读线圈/离散 | 地址映射易错 | | 03/04 | 读保持/输入寄存器 | 最常用 | | 05/06 | 写单线圈/寄存器 | 先读后写 | | 0F/10 | 写多线圈/寄存器 | 注意字节数 | | 8x | 异常应答 | 看异常码 |
## 常见搜索意图
- Modbus RTU 报文格式
- Modbus 03 功能码示例
- 串口助手发 Modbus
- Modbus CRC 低字节在前
本页配合《Modbus CRC16》与《PLC 串口调试》使用。