crc16校驗演算法c語言 C語言和PLC的結合

2021-10-17 08:21:55 字數 1765 閱讀 8774

如果要進行乙個「複雜運算」(包括加減運算,但是運算步驟很多),尤其是需要重複使

用這個演算法處理資料時候,使用 c 函式功能塊將非常方便。

舉個栗子:用公式: a= b/c+b*c+(c-3)*d 完成運算。

方法一:如果使用梯形圖編寫上述公式,處理步驟與程式如下:

雖然只有以上三個步驟,但是梯形圖只支援兩個源運算元,所以必須分成多步求結果。

在上面梯形圖運算中有幾點要注意:

(1)mul 運算結果為雙字,就是說 mul d1 d2 d14[d15],結果是存放在d14[d15]兩個

暫存器內。

(2)div 運算結果分商和餘數,即:div d1 d2 d16,商在d16 中,餘數在d17 中,所以

如果運算有餘數則精度就降低了,要得到精確的結果得用浮點數運算。

(3)在求和時,由於d16 為商,是單字資料,所以加運算的時候得先統一資料型別,最終

得到的結果存放在d22[d23]中。

方法二:使用c 函式寫,梯形圖程式如下:

首先,我們對上面的 c 語言梯形圖指令結構進行解析:

result 為函式功能塊的名稱

d0 表示函式中 w[0]為 d0,w[1]為d1 以此類推,如果 s2 為d32,則函式塊中

w[0]為d32,w[1]為d33 以此類推

m0 表示函式中 b[0]為 m0,b[1]為 m1 以此類推,如果 s2 為m32,則函式塊中

b[0]為m32,b[1]為m33 以此類推

c 語言部分內容如下:

通過兩種方法的對比可以看出,通過 c 函式功能,能夠大大簡化梯形圖程式設計,提高編

程效率。

上面的c 函式運算和梯形圖相似,精度也不高,如果要得到精確結果則使用浮點運算。

又來乙個栗子:

利用函式功能塊計算出crc 校驗值。

(1)令16-bit 暫存器(crc 暫存器)=ffffh。

(2)將第乙個8-bit byte 的訊息與低位元 16-bit crc 暫存器異或(exclusive or)。

(3)右移一位crc 暫存器,將0 填入高位元處。

(4)檢查右移的值,如果是 0,就將第三步的新值存入 crc 暫存器內,如果為非 0,那

麼將crc 暫存器的值與a001h 異或,將結果存入crc 暫存器內。

(5)重複(3)到(4),將8-bit 全部運算完成。

(6)重複(2)到(5),取下乙個8-bit 的訊息指令,直到所有訊息指令運算完成。最後,

得到的 crc 暫存器的值,即是crc 的校驗碼。值得注意的是crc 的校驗碼必須交換放置與訊息指令的檢查碼中。

分別存入了 crc 校驗值的高位與低位。

CRC16 校驗演算法

1 迴圈校驗碼 crc碼 是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。2 生成crc碼的基本原理 任意乙個由二進位制位串組成的 都可以和乙個係數僅為 0 和 1 取值的多項式一一對應。例如 1010111對應的多項式為x6 x4 x2 x 1,而多項式為x5...

CRC16校驗演算法實現

迴圈冗餘碼校驗英文名稱為cyclical redundancy check,簡稱crc。它是利用除法及餘數的原理來作錯誤偵測 error detecting 的。實際應用時,傳送裝置計算出crc值並隨資料一同傳送給接收裝置,接收裝置對收到的資料重新計算crc並與收到的crc相比較,若兩個crc值不同...

CRC16 校驗演算法原理,以及C 例子

1 迴圈校驗碼 crc碼 是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。2 生成crc碼的基本原理 任意乙個由二進位制位串組成的 都可以和乙個係數僅為 0 和 1 取值的多項式一一對應。例如 1010111對應的多項式為x6 x4 x2 x 1,而多項式為x5...