协议 计算器

Modbus CRC 计算器

计算 CRC-16/Modbus 校验值、低字节优先的 RTU 追加帧,并核对常用测试向量。

CRC-16/Modbus 计算器

输入 ASCII 文本或十六进制字节。RTU 帧会先追加 CRC 低字节,再追加高字节。

十六进制模式支持空格、逗号和 0x 前缀。例如:01 03 00 00 00 0A。
CRC
0x4B37
低字节
0x37
高字节
0x4B
追加 CRC 后的帧
31 32 33 34 35 36 37 38 39 37 4B

已知校验:ASCII 123456789 的 CRC-16/Modbus 为 0x4B37。

公式说明

CRC-16/Modbus 从 0xFFFF 开始,按最低位优先处理每个字节,使用反射多项式 0xA001。 Modbus RTU 在线上先追加低 CRC 字节,再追加高 CRC 字节。

这个计算器适合做什么

用它核对 RTU 请求帧、响应帧、串口分析仪抓包和嵌入式固件实现。ASCII 模式适合测试向量,十六进制模式适合粘贴 RS-485 trace 中的原始字节。

CRC-16/Modbus 参数

初始值0xFFFF
多项式0x8005 正常形式,0xA001 反射形式
输入处理最低位优先
Final XOR
RTU 字节顺序低 CRC 字节优先,再高 CRC 字节

调试 CRC 不一致

  • 确认计算中包含了 slave address 和 function code。
  • 重新计算时移除原来的两个 CRC 字节。
  • 清理从分析仪复制来的时间戳、方向标记和多余文本。
  • 用 ASCII 123456789 得到 0x4B37 作为固定向量。

常见问题

如何计算 Modbus RTU CRC?

从 0xFFFF 开始,把每个数据字节 XOR 到 CRC 寄存器低字节,按最低位优先处理 8 bit,使用反射多项式 0xA001,最后先追加低 CRC 字节,再追加高 CRC 字节。

Modbus CRC 使用哪个多项式?

CRC-16/Modbus 使用 CRC-16 多项式 0x8005,按反射位序处理时写作 0xA001。初始值是 0xFFFF,输入字节反射处理,没有 final XOR。

为什么其他工具显示的 CRC 字节顺序相反?

有些工具显示 16-bit 数值,有些工具显示线上传输顺序。Modbus RTU 在线上先传低字节,所以数值 0x4B37 会以 37 4B 追加到帧末尾。

重新计算已有帧时要包含原 CRC 字节吗?

不要。只输入地址、功能码和数据字段,也就是校验值之前的字节。把已有 CRC 一起输入会得到另一个覆盖完整帧的新 CRC。

Modbus TCP 也使用这个 CRC 吗?

不使用。Modbus TCP 没有 RTU CRC 字段,它使用 MBAP header,并依赖 TCP/IP 与以太网层的完整性检查。CRC-16/Modbus 用于 Modbus RTU 串行帧。