协议 计算器
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 串行帧。