CRC即循環(huán)冗余校驗碼(Cyclic Redundancy Check):是數(shù)據(jù)通信領域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環(huán)冗余檢查(CRC)是一種數(shù)據(jù)傳輸檢錯功能,對數(shù)據(jù)進行多項式計算,并將得到的結(jié)果附在幀的后面,接收設備也執(zhí)行類似的算法,以保證數(shù)據(jù)傳輸?shù)恼_性和完整性。
在Modbus RTU通訊中數(shù)據(jù)報文中有一幀是CRC校驗碼,用來進行錯誤檢測。其原理是由發(fā)送設備將數(shù)據(jù)幀進行一定的運算得出一個檢驗碼,然后加在數(shù)據(jù)幀后一起發(fā)送過去,接收設備接收到數(shù)據(jù)后重新運算,再講運算出來的校驗碼與發(fā)送過去的校驗碼進行比較,如果一致則說明數(shù)據(jù)無錯誤,如果不一致則說明數(shù)據(jù)傳輸錯誤。
CRC運算過程如下:
CRC是先存入0 XFFFF到CRC寄存器,然后調(diào)用一個過程將消息中連續(xù)的8Bit字節(jié)與當前寄存器中的值進行處理。僅每個字符中的8Bⅰt數(shù)據(jù)對CRC有效,起始位和停止位以及奇偶校驗位均無效。CRC產(chǎn)生過程中:每個8位字符都單獨和CRC寄存器內(nèi)容相異或(X0R),結(jié)果向最低有效位方向移動,最高有效位以0填充。LSB被提取出來檢測,如果LSB為1,CRC寄存器單獨和預置的值相異或,如果LSB為0,則不進行。整個過程要重復8次。在最后一位(第8位)完成后,下一個8位字節(jié)又單獨和CRC寄存器的當前值相異或。最終CRC寄存器中的值,是消息中所有的字節(jié)都執(zhí)行之后的CRC值。
下面為產(chǎn)生GRG的計算過程
1.將一個16位寄存器的值設置為FFFF(hex),稱之為CRC寄存器。
2.將數(shù)據(jù)的第一個8Bit字符與16位CRC寄存器的低8位進行異或計算,并把結(jié)果存入CRC寄存器。
3.CRC寄存器向右移一位(向著最低位LSB),最高位MSB補零,移出并檢查LSB。
4.如果LSB為0:重復第三步(另一個移位)如果LSB為1:CRC寄存器與預置值:A001H(1010000000000001B)進行異或操作。
5.重復第3與第4步直到8次移位全部完成,此時一個8Bit數(shù)據(jù)處理完畢。
6.重復第2與第5步直到所有數(shù)據(jù)全部處理完成。
7.最終CRC寄存的內(nèi)容即為CRC值。
注意:CRC校驗碼使用時低字節(jié)在前,高字節(jié)在后。
用S7-200 SMART編寫運算程序如下:
將CRC算法創(chuàng)建成庫,在主程序中調(diào)用即可算出CRC結(jié)果。
-
crc
+關注
關注
0文章
201瀏覽量
29890 -
SMART
+關注
關注
3文章
228瀏覽量
45123
原文標題:SMART如何編寫CRC校驗算法程序
文章出處:【微信號:GKYXT1508,微信公眾號:工控云學堂】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
常用的校驗算法有哪些?
基于C8051F的CRC校驗算法的實現(xiàn)
基于iSCSI協(xié)議校驗算法的改進
IP協(xié)議校驗算法程序
LTE系統(tǒng)的CRC校驗算法及DSP實現(xiàn)
一種基于矩陣的并行CRC校驗算法

如何使用51單片機實現(xiàn)CRC校驗算法

TSMaster中如何自定義CRC校驗算法

虹科技術|保障數(shù)據(jù)傳輸穩(wěn)定性:BabyLIN產(chǎn)品的CRC算法實現(xiàn)

評論