ASCII 模式的格式
Modbus ASCII 是 Modbus 在串行链路上的另一种帧格式,用可见字符表示数据:以冒号开始,每个字节用两个十六进制字符表示,以 LRC 校验并以回车换行结束。因为帧有明确的起始与结束字符,它对字符间隔的容忍度比 RTU 高,常见于早期拨号、无线与音频级链路上,代价是传输效率约为 RTU 的一半。
字段与约定
| 起始字符 | 冒号,表示一帧开始 |
|---|---|
| 从站地址 | 两个十六进制字符 |
| 功能码 | 两个十六进制字符 |
| 数据字段 | 每个字节用两个十六进制字符表示 |
| LRC 校验 | 两个字符,算法为对参与字节求和后取补,具体以规范为准 |
| 结束字符 | 回车与换行 |
| 帧长上限 | 常见为 513 个字符,以规范为准 |
| 字符超时 | 帧内字符间隔超时常见为 1 秒,超过则整帧作废 |
帧结构示例
帧结构示例
: 01 03 00 00 00 02 <LRC> <CR><LF> # 读从站 01 保持寄存器,起始 0,数量 2
# 冒号表示帧开始,CR 与 LF 表示帧结束
# 每个字节由两个十六进制字符表示,因此长度约为 RTU 的两倍
# LRC 覆盖冒号与结束符之间的全部字节,算法以规范为准与 RTU 的差异
| 项目 | ASCII | RTU |
|---|---|---|
| 帧边界 | 起始与结束字符 | 帧间静默间隔 |
| 字节表示 | 两个十六进制字符 | 原始二进制 |
| 校验 | LRC | CRC |
| 字符间隔容忍度 | 较高,可到秒级 | 严格,按字符时间控制 |
| 传输效率 | 约为 RTU 的一半 | 较高 |
| 常见场景 | 调试、拨号与无线链路 | 常规现场总线 |
典型使用场景
- 跨越延迟较大或间隔不稳定的链路,例如无线电台与调制解调器
- 链路质量差、需要查看或抓取文本日志的调试场合
- 老旧设备只支持 ASCII 模式
- 与部分仪表的专用链路配合使用
- 协议分析与教学场景,帧内容可直接阅读
ASCII 模式的效率约为 RTU 的一半:同一波特率下每个数据字节需要两个字符传输。在带宽紧张的链路上应据此重新估算轮询周期与设备数量,不能沿用 RTU 的频率规划。
ASCII 对字符间隔容忍度高,但不意味着可以随意拉长帧内间隔:超过约定的字符超时后整帧会被丢弃。链路调试时应记录实际间隔并留出余量。