当前位置: 首页 > news >正文

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 是校验码

这里提供Modbus CRC在线校验计算器地址:【Modbus CRC 在线计算】
以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校验值

http://www.dtcms.com/a/360309.html

相关文章:

  • Python训练营打卡Day49-神经网络调参指南
  • 大模型参数量与计算量(FLOPs)估算方法
  • [WUSTCTF2020]B@se1
  • 后向投影合成孔径辐射源定位方法(一)
  • Linux-数据库
  • MVC模式学习
  • 物种多样性与物种丰富度
  • 制造业生产线连贯性动作识别系统开发
  • 使用 Claude Code 与 Remotion 制作自定义动画视频的完整教程
  • 代码分析之符号执行技术
  • 多人协作开发指南二
  • 简化对齐训练:用明文对比数据SFT替代复杂DPO
  • 8针脚的1.8寸IIC接口的TFT彩屏的八个引脚都需要使用吗?
  • 【编号186】中国劳动统计年鉴(1991-2023)
  • LeetCode 2570.合并两个二维数组
  • 超越关键词:RAG系统如何破解用户查询的“模糊密码”
  • BLE广播与扫描
  • 嵌入式C学习笔记之预编译
  • Redis面试重点-2
  • Coze源码分析-工作空间-项目开发-前端源码
  • 在Windows系统Docker中使用wsl2、容器、windows文件路径三种不同挂载方式的区别和性能差异
  • ceph对象存储-存储池-用户认证
  • @Value注解的底层原理(一)
  • Day18 (前端:JavaScript基础阶段)
  • 数据结构 04(线性:双向链表)
  • Ansible 临时命令与常用模块实操指南
  • Cartographer中的gflag与lua文件
  • 国庆福建霞浦游
  • 阿里云创建自己的博客,部署wordpress
  • Java学习笔记-IO流(更新中...)