CRC即循環冗余校驗碼(Cyclic Redundancy Check):是數據通信領域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環冗余檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項式計算,并將得到的結果附在幀的后面,接收設備也執行類似的算法,以保證數據傳輸的正確性和完整性。
在Modbus RTU通訊中數據報文中有一幀是CRC校驗碼,用來進行錯誤檢測。其原理是由發送設備將數據幀進行一定的運算得出一個檢驗碼,然后加在數據幀后一起發送過去,接收設備接收到數據后重新運算,再講運算出來的校驗碼與發送過去的校驗碼進行比較,如果一致則說明數據無錯誤,如果不一致則說明數據傳輸錯誤。
CRC運算過程如下:
CRC是先存入0 XFFFF到CRC寄存器,然后調用一個過程將消息中連續的8Bit字節與當前寄存器中的值進行處理。僅每個字符中的8Bⅰt數據對CRC有效,起始位和停止位以及奇偶校驗位均無效。CRC產生過程中:每個8位字符都單獨和CRC寄存器內容相異或(X0R),結果向最低有效位方向移動,最高有效位以0填充。LSB被提取出來檢測,如果LSB為1,CRC寄存器單獨和預置的值相異或,如果LSB為0,則不進行。整個過程要重復8次。在最后一位(第8位)完成后,下一個8位字節又單獨和CRC寄存器的當前值相異或。最終CRC寄存器中的值,是消息中所有的字節都執行之后的CRC值。
下面為產生GRG的計算過程
1.將一個16位寄存器的值設置為FFFF(hex),稱之為CRC寄存器。
2.將數據的第一個8Bit字符與16位CRC寄存器的低8位進行異或計算,并把結果存入CRC寄存器。
3.CRC寄存器向右移一位(向著最低位LSB),最高位MSB補零,移出并檢查LSB。
4.如果LSB為0:重復第三步(另一個移位)如果LSB為1:CRC寄存器與預置值:A001H(1010000000000001B)進行異或操作。
5.重復第3與第4步直到8次移位全部完成,此時一個8Bit數據處理完畢。
6.重復第2與第5步直到所有數據全部處理完成。
7.最終CRC寄存的內容即為CRC值。
注意:CRC校驗碼使用時低字節在前,高字節在后。
用S7-200 SMART編寫運算程序如下:







將CRC算法創建成庫,在主程序中調用即可算出CRC結果。
-
crc
+關注
關注
0文章
205瀏覽量
30831 -
SMART
+關注
關注
3文章
242瀏覽量
46389
原文標題:SMART如何編寫CRC校驗算法程序
文章出處:【微信號:GKYXT1508,微信公眾號:工控云學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
常用的校驗算法有哪些?
基于C8051F的CRC校驗算法的實現
基于iSCSI協議校驗算法的改進
IP協議校驗算法程序
LTE系統的CRC校驗算法及DSP實現
一種基于矩陣的并行CRC校驗算法
如何使用51單片機實現CRC校驗算法
TSMaster中如何自定義CRC校驗算法
如何用SMART編寫CRC校驗算法程序
評論