plc学者
级别: 略有小成
精华主题: 0
发帖数量: 190 个
工控威望: 362 点
下载积分: 3341 分
在线时间: 377(小时)
注册时间: 2011-07-18
最后登录: 2025-01-09
查看plc学者的 主题 / 回贴
楼主  发表于: 2012-02-14 21:47
MODBUS通讯协议RTU模式中的CRC效验是怎么算的,哪位大哥能给解析一下,不胜感激!!
xcgksp
级别: 略有小成
精华主题: 0
发帖数量: 131 个
工控威望: 257 点
下载积分: 696 分
在线时间: 49(小时)
注册时间: 2011-11-12
最后登录: 2024-08-07
查看xcgksp的 主题 / 回贴
1楼  发表于: 2012-02-15 16:51
       MODBUS协议CR-16码的算法传输格式的最后两字节为CRC码,高位在后,低位在前其余为信息,高位在前,低位在后。例子,传输信息为0x0106000503E89975,(0x表示为十六进制)则CRC = 0x7599.,初始信息为:0x0106000503E8 传输信息中的CRC码(0x7599)是如何算出来的?
一般算法:
1. 将CRC赋值0xFFFF。
2. 取初始信息的第一个字节(8位)与CRC(0xFFFF)进行异或运算,将结果赋给CRC。
3. 将CRC数据右移一位,最前位(左边)补0。
4. 如果右移前,CRC最低位(最右端)为1,则将右移后的CRC与0xA001进行异或运算,且将结果赋给CRC。否则,跳过此步。
5. 重复3,4步8次(即右边8位)。
6. 对初始信息的下一个字节,同样执行2,3,4,5步,直到信息中所有字节都执行了同样的步骤。
7. 将此时得到的CRC值的高8位和低8位交换,加在初始信息末尾即得到完整的传输信息。  
例子初始信息为:0x0106000503E8 初始CRC:0xFFFF
本帖最近评分记录:
  • 下载积分:+3(plc学者) 非常感谢