工業(yè)通信中的檢錯碼技術(shù)
0 引言
本文引用地址:http://dyxdggzs.com/article/201808/387286.htm在變頻器等工業(yè)現場(chǎng),在傳輸數據的過(guò)程中,往往由于噪聲或瞬時(shí)中斷等干擾,使接收到的信息出現錯誤。如果信息傳輸出現錯誤而不被發(fā)現,會(huì )引起災難性的后果,可以采取檢錯碼的辦法來(lái)發(fā)現這一錯誤。常用的檢錯碼有兩類(lèi):奇偶校驗碼與循環(huán)冗余校驗碼(CRC,cyclic redundancy code)。奇偶校驗方法簡(jiǎn)單,感興趣的讀者可以查閱相關(guān)資料,本文要討論的是CRC檢錯碼。
1 CRC檢錯碼簡(jiǎn)要介紹
檢錯碼方法是將要發(fā)送的數據比特序列當作一個(gè)多項式f(x)的系數,再用收發(fā)雙方預先約定的生成多項式G(x)去除,求得一個(gè)余數多項式,將余數多項式加到數據多項式之后發(fā)送到接收端。接收端用同樣的生成多項式G(x)去除接收數據多項式f '(x),得到計算余數多項式。如果計算余數多項式與接收余數多項式相同,則表示傳輸無(wú)差錯;反之,表示傳輸有差錯,請發(fā)送方重發(fā)數據,直到正確為止。其工作原理如圖1 所示。
CRC生成多項式G(x)由協(xié)議規定,目前已有多種生成多項式列入國際標準中。在我國及美國,工業(yè)通訊中常使用CRC-16。



實(shí)際CRC校驗生成采用減法不借位,加法不進(jìn)位的算法,在計算時(shí)采用異或操作。
2 CRC 檢錯碼的算法設計
計算CRC 檢錯碼時(shí)常采用按位計算CRC 碼或按字節計算CRC 碼。按位計算法算法簡(jiǎn)單,速度慢;按字節計算時(shí)須先計算CRC 碼表,并將此表存入存儲器中,計算CRC 碼時(shí)通過(guò)查表法逐步計算,此法具有算法復雜,計算速度快,占用存儲器資源的特點(diǎn)。
2.1 按位計算CRC

2.2 按字節計算CRC碼

生成多項式,所得余式即為所求CRC 碼。通過(guò)觀(guān)察式(10)可知,求本字節后的CRC 碼等于上一字節的余式CRC 碼左移8 位再加上本字節所求得CRC 碼。如果把8 位二進(jìn)制序列數據的全部CRC碼計算出來(lái),預先放在一個(gè)表里,然后通過(guò)查表計算CRC碼,就可以大大提高計算速度。
2.3 編程實(shí)現
對于CRC 校驗程序,沒(méi)有一個(gè)統一的標準,也很難說(shuō)誰(shuí)好誰(shuí)壞。工程師可以根據實(shí)際情況決定是按位計算還是按字節計算CRC 碼,及采用何種編程語(yǔ)言編寫(xiě)CRC校驗程序。本文僅給出按字節計算時(shí)用C 語(yǔ)言編寫(xiě)的程序。另需說(shuō)明的是,在
下面的程序中采用查表法計算CRC 碼,沒(méi)有給出CRC 碼表,感興趣的讀者可以查閱相關(guān)資料。

3 結語(yǔ)
CRC檢錯碼的檢錯能力很強,它除了能檢查出離散錯誤外,還能檢查出突發(fā)錯;能以

的概率檢查出(k+1)位的突發(fā)錯,即能以99.997%的概率檢查出17 位的突發(fā)錯,漏檢概率為0.003%。因此,它是目前工業(yè)現場(chǎng)總線(xiàn)通訊中常用
的一種檢錯碼方法。
評論