尽管 Modbus RTU 是工业界绝对的主流,但在许多需要通过古老低速调制解调器拨号、或者希望通信报文具有高可读性以方便监视的硬件场景中,**Modbus ASCII** 协议由于其独特的防断帧、易过滤特性依然在发挥着余热。我们来看看它们之间的区别:
- Modbus RTU:发送的是裸二进制字节(HEX),比如 `0x01`。无任何边界字符,完全依赖发送间歇时的高电平空闲延迟(至少 3.5 个字符时间)来判定一帧结束。如果单片机处理发生中断挂起、导致字符之间发送间隔过宽,极易导致一帧报文被硬生生撕裂成两半(断帧Bug)。
- Modbus ASCII:将二进制数值全部翻译为可见的 ASCII 字符。例如十进制数 `10`,在 RTU 中发送 `0x0A`;但在 ASCII 模式下,会被拆开翻译为两个可见英文字符 '0' 和 'A'(即物理发送 `0x30` 和 `0x41` 两个 ASCII 码)。并且,每一帧都强制以冒号 `:`(0x3A)作为绝对起始符,以回车换行 `\r\n` 作为绝对终止符。校验算法也从复杂的 CRC 简化为简单的 LRC 纵向冗余校验。因为有了清晰的起始、终止控制标记,即使单片机在发送字符中途出现延迟,接收端也不会发生断帧,非常适合高延迟通信和普通程序员直接监视阅读链路。