迴圈冗餘校驗 不懂CRC校驗的有福了

2021-10-12 17:10:45 字數 1954 閱讀 2340

這邊用博圖的crc演算法,把下面**複製進記事本,把字尾名改為.scl,然後把它匯入原始檔方式,匯入博圖,如果還不會匯入的會,翻看我前面一遍文章。

下面是**:

function_block "crc"

version : 0.1

var

data : array[0..250] of byte; // 待校驗的資料

byteindex : int; // 待校驗資料的位元組號索引號

crcbitindex : int; // crc校驗表生成中所用的位索引號

crcvariable : word; // crc校驗用變數字

crcbyte at crcvariable : array[0..1] of byte; // crc校驗用變數的高低位元組

crccheckcode : word; // 最終crc校驗碼

crctable : array[0..255] of word; // crc校驗表

crctableindex : int; // crc表的字索引號

end_var

begin

//生成crc校驗表

if "firstscan" = true then //第一次掃瞄時生成crc表

for #crctableindex := int#0 to int#255 by int#1 do

#crctable[#crctableindex] := int_to_word(#crctableindex);

for #crcbitindex := int#0 to int#7 by int#1 do

if (#crctable[#crctableindex] and word#16#0001) = word#16#0001 then

#crctable[#crctableindex] := shr_word(in := #crctable[#crctableindex], n := int#1);

#crctable[#crctableindex] := #crctable[#crctableindex] xor word#16#a001;

else

#crctable[#crctableindex] := shr_word(in := #crctable[#crctableindex], n := int#1);

end_if;

end_for;

end_for;

end_if;

//crc迴圈冗餘校驗查表法

#crcvariable := word#16#ffff; //crc暫存器的初始化

for #byteindex := int#0 to int#240 by int#1 do //提取待校驗的資料

#crctableindex := byte_to_int((#data[#byteindex] and byte#16#ff) xor (#crcbyte[1] and byte#16#ff)); //生成crc校驗表字的索引號

#crcvariable := shr_word(in := #crcvariable, n := int#8) xor #crctable[#crctableindex]; //得到crc校驗變數

end_for;

#crccheckcode := ror_word(in := #crcvariable, n := int#8); //得到最終crc校驗碼

//經測試,在cpu315-2 pn/dp中工作,此查表法僅為同環境下計算法的plc迴圈時間的五分之一

//此文字複製到txt,改擴充套件名為scl,匯入原始檔就可以,首次掃瞄脈衝需要建立一下

迴圈冗餘校驗 CRC校驗

一 crc校驗概念 即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。其特徵是資訊字段和...

迴圈冗餘校驗CRC

網上搜到的內容不全面,維基百科講的比較好,原理很清楚傳送門 其實對於程式設計師來講,不用太在意它的數學原理,另外生成碼的選擇不是隨意的,這可能影響到校驗的效能。注意其中的加法不進製,減法不借位,類似是異或邏輯。關於怎樣產生crc,有這樣乙個演算法 下面為crc的計算過程 1 設定crc暫存器,並給其...

CRC迴圈冗餘校驗

crc校驗原理 crc校驗原理看起來比較複雜,好難懂,因為大多數書上基本上是以二進位制的多項式形式來說明的。其實很簡單的問題,其根本思想就是先在要傳送的幀後面附加乙個數 這個就是用來校驗的校驗碼,但要注意,這裡的數也是二進位制序列的,下同 生成乙個新幀傳送給接收端。當然,這個附加的數不是隨意的,它要...