CodeWattCodeWatt

Modbus 现场调试速查:字节序、有符号数与 CRC

CodeWatt · 2026-07-12 modbus 现场调试 字节序

现场排查 Modbus 遥测数据不对时,八成出在字节序数据类型上。这篇速查把最常见的组合列出来,配合 Hub 工具箱 可以在一分钟内定位问题。

四种字节序到底差在哪

以 32 位寄存器值 0x41CC0000(float 25.5)为例,两个寄存器四个字节的排列:

名称 排列 常见叫法
ABCD 41 CC 00 00 大端 / Big-Endian
DCBA 00 00 CC 41 小端 / Little-Endian
BADC CC 41 00 00 大端字节交换
CDAB 00 00 41 CC 小端字交换(国产 PCS 最常见

读出来的浮点数大得离谱(如 2.8e-41)基本就是字节序错了;读出来是 0 但设备明明有值,先怀疑寄存器地址偏移(40001 与 offset 0 的差异)。

快速定位三步法

  1. 用调试工具直接读原始帧,记下 4 个字节的原始十六进制
  2. 数值与字节工具 里把 4 字节按 ABCD/CDAB/BADC/DCBA 各转一遍 float32
  3. 哪个结果落在物理量的合理区间(功率几十 kW、电压几百 V、SOC 0-100),就是哪种字节序

有符号数的坑

S16 读到 0xFFF6-10,不是 65526。功率、温度这类可能为负的量用 U16 解析,负值时会突变成 6 万多——历史曲线上突然出现的"尖刺"多半是这个原因。

CRC 校验失败怎么查

  • RTU 帧 CRC16(Modbus 多项式 0xA001)低字节在前:帧尾 C5 CD 表示 CRC 值 0xCDC5
  • Modbus 工具 粘贴整帧自动校验,不必手算
  • 串口上偶发 CRC 错优先查波特率漂移和终端电阻,不是软件问题

有补充或纠错,欢迎联系 frank@eco-watt.com