-
-
-
-
解决方案长沙湾流智能科技有限公司是一家专业致力于工程机械传感、 控制、驱动、互联技术产品研究与开发的公司,也是一家专注为客户提供复 杂运动控制系统成套解决方案的高技术企业。
-
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校验码
完整数据帧(包含CRC)
计算过程
请输入十六进制数据并点击计算按钮
输入格式错误,请检查您的十六进制数据
CRC16计算原理
Modbus CRC16采用以下多项式进行计算:x¹⁶ + x¹⁵ + x² + 1(十六进制表示为0xA001)
计算步骤:
- 初始化CRC值为0xFFFF
- 对于每个字节:
- 将CRC值与当前字节进行异或运算
- 对结果进行8次移位操作:
- 如果CRC的最低位为1,则左移1位后与0xA001异或
- 否则,仅左移1位
- 所有字节处理完成后,得到的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校验值
相关资讯
关注我们