Modbus通信協議中CRC校驗的快速C語言算法
2004年第11期 福 建 電 腦 63
Modbus通信協議中CRC校驗的快速C語言算法
孟開元
(西安石油大學計算機學院陜西西安710065)
【摘 要】 本文主要討論了Modbus通信協議的RTU幀格式中常用的錯誤校驗方法,即循環冗余校驗法(CRC)。
提出了Modbus協議反轉CRC校驗的方法,推導了反轉CRC校驗快速計算表格,并用C語言實現了基于快速查表算法的循環冗余校驗程序。
【關鍵詞】 校驗算法,循環冗余校驗,生成多項式,查表法
1 Modbus協議應用簡介
Modicon可編程控制器,既可以在它們之間,也可以和各種網絡上其他的設備間進行數據傳輸。所支持的網絡包括Mod2bus和ModbusPlus工業網絡,還有標準網絡,如MAP和Ether2net。網絡通過控制器的接入線或者網絡適配器,和Modicon可利用的出口等相連。連接關系圖見圖1
。
間,它被使用在網絡中(顯示為T1-T2-T3-T4,如表2)。然后被發送的是第一個域設備地址。聯網的設備不斷地監控網絡總線,包括在‘默認’間隔期間。當第一個域(地址域)被接收到時,每臺設備譯解它去查找該地址的設備。在最后一個傳送的字符后面,一個類似的至少3.5字符時間間隔標志者消息的結束。一個新的消息在這個間隔之后開始。整個消息幀必須作為一連續的數據流被傳送。如果超過1.5字符時間的默認間隔在幀結束前發生,2所示2---T4
CRC校驗域
8比特
8比特
n38比特
16比特
結束標志
T1-T2-T3-T4
2.3地址域的處理
信息框架的地址領域包括2個字符的ASCII或8個比特的RTU,有效可使用的設備地址是從1到247(十進制)單個的可使用設備被設置在從1到247。一個主地址通過信息地址領域安排從屬地址。當從屬地址發送響應是,它設置自己的地址在響應領域地址中,讓主地址知道從地址正在工作。
地址0被用在通信地址中,這個通信地址所有的從地址都認識。當Modbus協議被用在高級的網絡上時,通信不能進行,也不能用別的方法代替。例如,Modbus升級版能用一個被全球
圖1 Modbus協議應用框圖
共享的數據庫。這個數據庫能被任意更改。
全部的Modicon控制器應用Modbus數據通信協議。這個
2.4功能域的設置
協議定義了一種信息結構標準,不管信息在何種網絡上傳輸,
信息框架的功能代碼域包括兩個字符的ASCII或八個字
控制器都可以識別和應用這個結構。它描述了控制器通常接
節的RTU。有效代碼范圍從1到255(十進制)。當然,一些代
入其他設備的進程,它如何應答別的設備的請求,如何可以檢
碼能適用所有的Modicon控制器,但是一些代碼只可用于某些
查和顯示錯誤。它為信息域的頁面格式和內容建立了一個標
模式,并且還有一些被保留供以后使用。各信息傳送各子設備
準的格式。
時,功能代碼域告訴子設備所要進行哪種運行類別。例如,讀
為了分析信息,Modbus協議提供了為Modicon控制器所應
一組不連續線圈或輸入端的開/關狀態;讀一組寄存器的內容;
用的內部標準。在Modbus網絡上傳輸期間,協議決定每個控
寫指定線圈或寄存器;或者允許裝載,記錄,或在子設備中驗證
制器如何知道它的設備地址,如何識別信息地址;決定用來操
程序。當子設備反應給主設備時,要用代碼域功能顯示其他的
作的類型;和提取所有的數據或包含在信息中的其他信息。
正常反應或一些錯誤發生(稱為異常反應)。作為正常響應,子
2 Modbus協議中數據幀格式
設備簡單應答原來的功能代碼。作為異常反應,子設備返回一
2.1ASCII幀格式
個代碼,這個代碼等價于原先的功能代碼(在字節中最有效的
在ASCII模式中,消息開始于一個‘:’字符(ASCII碼為
設置)。除了對例外響應的功能代碼修改外,子設備在響應信
3A),結束于一個‘回車/換行’對(CR/LF)(ASCII碼為0D和
息數據域里設置一個唯一的代碼。這樣告訴主設備發生了哪
0A)。聯網的設備不斷地對‘:’字符監控網絡總線。當一個‘:’
類錯誤,和錯誤的原因。
被接收到時,每個設備譯解它去查找該地址的設備。一個典型
3 RTU錯誤校驗域的內容
的消息幀如表1。
3.1CRC校驗域的次序
表1 ASCII消息幀格式
當RTU模式用在字符格式中時,錯誤校驗域包含一個16
開始標志地址域功能域數據域LRC校驗域結束標志
比特位,相當兩個8位字節的校驗值。校驗值是對信息內容計
1字符‘:’2字符2字符n字符2字符2字符CRLF算的CRC結果。CRC域被附加在信息最后,作為信息最后的
域。CRC域內低字節被附加在先,跟在后面的是高字節,CRC2.2RTU幀格式
在RTU模式中,消息開始于一個默認的至少3.5字符時高字節被設置為信息的最后。間的間隔。這是最容易被實現的在波特率中作為一多字符時3.2選擇CRC生成器多項式