如何计算 Modbus RTU 消息 CRC

发布时间: 2022-04-01 14:29:47
导读 为了确保消息数据的完整性,除了验证消息 CRC 之外,建议实现检查串行端口 (UART) 帧错误的代码。如果接收到的消息中的 CRC 与接收设备计算的 CRC 不匹配,则应忽略该消息。下面的 C 语言代码片段显示了如何使用按位移位和异或运算来计算 Modbus 消息 CRC。CRC 是使用消息帧中的每个字节计算的,除了最后两个字节组成 CRC 本身。

如何计算 Modbus RTU 消息 CRC?为了确保消息数据的完整性,除了验证消息 CRC 之外,建议实现检查串行端口 (UART) 帧错误的代码。如果接收到的消息中的 CRC 与接收设备计算的 CRC 不匹配,则应忽略该消息。下面的 C 语言代码片段显示了如何使用按位移位和异或运算来计算 Modbus 消息 CRC。CRC 是使用消息帧中的每个字节计算的,除了最后两个字节组成 CRC 本身。


// Compute the MODBUS RTU CRC
UInt16 ModRTU_CRC(byte[] buf, int len)
{
  UInt16 crc = 0xFFFF;
  
  for (int pos = 0; pos < len; pos++) {
    crc ^= (UInt16)buf[pos];          // XOR byte into least sig. byte of crc
  
    for (int i = 8; i != 0; i--) {    // Loop over each bit
      if ((crc & 0x0001) != 0) {      // If the LSB is set
        crc >>= 1;                    // Shift right and XOR 0xA001
        crc ^= 0xA001;
      }
      else                            // Else LSB is not set
        crc >>= 1;                    // Just shift right
    }
  }
  // Note, this number has low and high bytes swapped, so use it accordingly (or swap bytes)
  return crc; 
}


相关推荐 查看更多》

场景案例 查看更多》

5G远程控制解决方案(远程控制wifi路由器项目应用)

钻井平台常年受到海风、海雾、低温等恶劣天气影响,各种通信设备的稳定性是最大的挑战。平台上原有的卫星通信和海底光缆速率低、时延高,难以支撑实时控制。而新部署的5G系统虽然性能优异,但受运营商基站距离远、覆盖不连续等因素制约,网络时断时续。

应急通信网络解决方案(应急融合通信系统)

在硬件设计上,SR800采用了防水防尘的全金属工业级机身,并通过了严格的高低温、振动、冲击等测试,完全可以应对极端的野外环境。它还内置了电池模块,即使意外断电也能维持一段时间的临时通信。

5G信号覆盖方案:地铁隧道的5G信号覆盖

在SR800本身功能上,我们也作了全方位增强和优化。譬如针对隧道环境的时变多径效应,我们引入了波束跟踪和导频预编码等人工智能算法,使其能够实时自主跟踪终端并自动切换到最佳波束。

在线咨询
产品PK
样机申请
选购攻略

微信扫一扫

微信联系
返回顶部