Modbus通訊錯誤檢測方法

2022-04-01 20:55:00 字數 1676 閱讀 1380

標準的modbus序列網路採用兩種錯誤檢測方法。奇偶校驗對每個字元都可用,幀檢測(lrc和crc)應用於整個訊息。它們都是在訊息傳送前由主裝置產生的,從裝置在接收過程中檢測每個字元和整個訊息幀。

使用者要給主裝置配置一預先定義的超時時間間隔,這個時間間隔要足夠長,以使任何從裝置都能作為正常反應。如果從裝置檢測到一傳輸錯誤,訊息將不會接收,也不會向主裝置作出回應。這樣超時事件將觸發主裝置來處理錯誤。發往不存在的從裝置的位址也會產生超時。

1、奇偶校驗

如果指定了奇或偶校驗,「1」的位數將算到每個字元的位數中(ascii模式7個資料位,rtu中8個資料位)。例如rtu字元幀中包含以下8個資料位:

1 1 0 0 0 1 0 1 

整個」1「的數目是4個。如果使用了偶校驗,幀的奇偶校驗位將是0,便得整個」1「的個數仍是4個。如果使用了奇校驗,幀的奇偶校驗位將是1,便得整個」1「的個數是5個。

如果沒有指定奇偶校驗位,傳輸時就沒有校驗位,也不進行校驗檢測。代替一附加的停止位填充至要傳輸的字元幀中。

2、lrc檢測

使用ascii模式,訊息包括了一基於lrc方法的錯誤檢測域。lrc域檢測了訊息域中除開冒號及結束的回車換行號外的內容。

lrc域是乙個包含乙個8位二進位制的位元組。lrc值由傳輸裝置來計算並放到訊息幀中,接收裝置在接收訊息的過程中計算lrc,並將它和接收到訊息中lrc域中的值比較,如果兩值不等,說明有錯誤。

lrc方法是將訊息中的8bit的位元組連續累加,丟棄了進製。

lrc簡單函式如下:    

1

static unsiged char

lrc(auchmsg,usdatalen)

2 unsigned char *auchmsg;/*

要進行計算的訊息

*/3 unsigned short usdatalen;/*

lrc要處理的位元組的數量*/4

lrc演算法:

演算法:相鄰2個16進製制符相加求和。

校驗碼:取其和的低8位的補碼為校驗碼。

例如:lrc演算法舉例

起始碼位址碼

功能碼資料區

校驗碼停止碼:01

0321 02 00 02

lrccr/lf

求和:h01+h03+h21+h02+h00+02 = h29

求:h29的補碼:hd7

lrc校驗碼為:hd7

3、crc檢測

使用rtu模式,訊息包括了一基於crc方法的錯誤檢測域。crc域檢測了整個訊息的內容。crc域是兩個位元組,包含一16位的二進位制值。它由傳輸裝置計算後加入到訊息中。接收裝置重新計算收到訊息的crc,並與接收到的crc域中的值比較,如果兩值不同,則有誤。    

crc碼的計算方法是,先預置16位暫存器全為1。再逐步把每8位資料資訊進行處理。在進行crc碼計算時只用8位資料位,起始位及停止位,如有奇偶校驗位的話也包括奇偶校驗位,都不參與crc碼計算。

在計算crc碼時,8位資料與暫存器的資料相異或,得到的結果向低位移一位元組,用0填補最高位。再檢查最低位,如果最低位為1,把暫存器的內容與預置數相異或,如果最低位為0,不進行異或運算。

這個過程一直重複8次。第8次移位後,下乙個8位再與現在暫存器的內容相相異或,這個過程與以上一樣重複8次。當所有的資料資訊處理完後,最後暫存器的內容即為crc碼值。crc碼中的資料傳送、接收時低位元組在前。

計算crc碼的步驟為: 

參考:

MODBUS通訊異常

modbus通訊問題 硬體cm25 板子 200 smart 示波器 施耐德atv71驅動器 軟體 step 7 串列埠助手 問題 cm25與200 smart 通訊時間總是在step 7中設定主站超時時間的時間。例如 主站超時設定3000ms,首先200 smart傳送資料cm25 迅速做出響應,...

modbus通訊協議

modbus是由modicon 現為施耐德電氣公司的乙個品牌 在1979年發明的,是全球第乙個真正用於工業現場的匯流排協議。modbus網路是乙個工業通訊系統,由帶智慧型終端的可程式設計序控制器和計算機通過公用線路或區域性專用線路連線而成。其系統結構既包括硬體 亦包括軟體。它可應用於各種資料採集和過...

modbus 通訊協議

modbus rtu模式的協議字段 modbus協議rtu模式要求每一幀的起始和結束都以至少3.5個字元為間隔。每個字元間隔是字元位數 波特率,以1位起始位,8位資料,1位停止位,無奇偶校驗位的10位資料。以波特率為9600b s為例,字元間隔為1.04ms,也就是每一幀的開始和結束都伴隨著至少3....