VALUER湾流传感器Modbus CRC16校验码在线计算器


发布时间:

2025-08-15

本文给出了一个 Modbus CRC 在线计算器,为 Modbus 协议下的十六进制数据计算 16 位循环冗余校验码(CRC16),以保障数据传输的准确性,为工业通信领域中 Modbus 协议的应用提供了便捷的校验

Modbus CRC16计算器

关于Modbus CRC16

Modbus CRC16是一种用于Modbus协议的错误检测方法,通过计算数据的16位循环冗余校验码来确保数据传输的准确性。 本工具可以帮助您计算给定十六进制数据的CRC16校验码。

使用说明:

  • 输入十六进制数据(如:05 04 00 00 00 01)
  • 数据可以空格分隔或连续输入
  • 点击"计算CRC"按钮获取结果,结果显示30 4E,完整的Modbus RTU指令就是

  • 05 04 00 00 00 01 30 4E

  • 其中:05 04 00 00 00 01 是有效数据,30 4E 是校验码

  • 以VALUER湾流IMU倾角传感器的modbus读取roll、pitch、yaw角数据为例,各位可以验证一下。

  • 读取roll
    Req >> : 05 04 00 00 00 01 30 4e 
    << Resp: 05 04 02 bb 2f 7b dc
     
    读取pitch
    Req >> : 05 04 00 01 00 01 61 8e 
    << Resp: 05 04 02 00 fa c8 b3
     
    同时读取roll/pitch/yaw
    Req >> : 05 04 00 00 00 03 b1 8f 
    << Resp: 05 04 06 bb 2f 00 f8 00 85 dc 8c 

输入数据

计算结果

请输入十六进制数据并点击计算按钮

CRC16计算原理

Modbus CRC16采用以下多项式进行计算:x¹⁶ + x¹⁵ + x² + 1(十六进制表示为0xA001)

计算步骤:

  1. 初始化CRC值为0xFFFF
  2. 对于每个字节:
    • 将CRC值与当前字节进行异或运算
    • 对结果进行8次移位操作:
      • 如果CRC的最低位为1,则左移1位后与0xA001异或
      • 否则,仅左移1位
  3. 所有字节处理完成后,得到的CRC值即为结果(低位字节在前,高位字节在后)

C语言实现示例

uint16_t ModbusGetCRC(uint8_t* data, uint8_t count)
{
    uint8_t i, j, xdabit;
    uint16_t reg_crc = 0xFFFF;
    for (i = 0; i < count; i++)
    {
        reg_crc ^= (uint16_t)data[i];
        for (j = 0; j < 8; j++)
        {
            xdabit = (uint8_t)(reg_crc & 0x01);
            reg_crc >>= 1;
            if (xdabit == 1)
            {
                reg_crc ^= 0xA001;
            }                       
        }
    }
    return reg_crc;
}

上述代码是Modbus CRC16校验的C语言实现,功能说明:

  • 函数接收两个参数:数据指针data和数据长度count
  • 初始化CRC寄存器reg_crc为0xFFFF
  • 对每个数据字节进行处理,与CRC寄存器进行异或运算
  • 每个字节进行8次移位操作,根据最低位决定是否与多项式0xA001进行异或
  • 返回计算得到的16位CRC校验值

© 2023 Modbus CRC16计算器 | 一个实用的工业通信工具

复制成功