CRC的概述-can_fd_specifiaction
第13章 RS485通信
13-22 Modbus RTU通信
13 7. CRC-16
(1) CRC的概述
CRC (Cyclic Redundancy Check)是一种用于校验通信数据是否有误的系统。CRC计算通过生成多项式除以多项式化的数据,余下的就是CRC数据。在Modbus RTU上,使用作为生成多项式的X16 + X15 + X2 + 1计算CRC-16。如果你想了解更多关于Modbus协议中的CRC校验,请访问MODBUS协议CRC校验。
(2) CRC-16算法
对于[局号区域~信息区域]的数据(N字节),计算CRC-16的方法如下:
-
初始设定:CRC = FFFFh,POLY = A001h,dtn = 0。
-
将CRC与DT [dtn]做异或运算。
-
将CRC向右移动1 bit。
-
若有移动进位,则CRC与POLY做异或运算。
-
sft = sft + 1,若sft < 8,则返回步骤3,否则dtn = dtn + 1。
-
若dtn < N,则返回步骤2,否则结束。
更详细的算法和代码示例可以参阅modbus CRC校验工具。
(3) CRC-16计算示例
在读取参数PA1_41~47(7个)的查询中,若按算法计算CRC-16,则如表13-5所示。按下位、上位的顺序将最后的数据(No.52 : C651h)附加在画面最后。详细的步骤和计算可以在Modbus的CRC校验工具中找到。
局号 FC 地址 记录数 CRC校验
01h 03h 40h 28h 00h 0Eh 51h C6h
CRC … CRC-16计算值
POLY …生成多项式
dtn …数据数计数器
sft …移动数计数器
DT [dtn] …第dtn号数据(1byte)
N …数据字节数
XOR … exclusive OR
DT [0]是局号,DT [1]是FC,DT [2]~DT [N-1]是信息区域的数据。
更多关于CRC校验的原理和实现方法,请查看MODBUS通信协议的CRC16校验和LabVIEW Modbus通信协议CRC校验实现方法。
START
初始设定CRC = FFFFh
POLY = A001h
dtn = 0
有移动进位?
No
Yes
No
CRC = CRC XOR DT [dtn]
将CRC向右移动1bit
CRC = CRC XOR POLY
Yes
sft = sft + 1
sft = 0
sft < 8
dtn < N ?
dtn = dtn + 1
Yes
No
END
如果你还在为Modbus通信中的CRC校验而苦恼,不妨尝试使用modbus通信rtu的crc校验工具,它能帮助你快速、准确地进行CRC校验。试试看,或许会有惊喜哦!