1. 程式人生 > 其它 >MODBUS-RTU序列鏈路通訊協議及測試方法

MODBUS-RTU序列鏈路通訊協議及測試方法

1 前言

MODBUS是一項應用層報文傳輸協議,是一個請求/應答協議,提供功能碼規定的服務,用於在通過不同型別的匯流排或網路連線的裝置之間的客戶機/伺服器通訊。Modbus 序列鏈路系統可以使用非同步序列鏈路(EIA/TIA-232-E、EIA-422、EIA/TIA-485-A等)進行通訊。
本文介紹如何使用格西烽火通訊測試軟體編寫測試專案,進行除錯和測試Modbus通訊節點。

2 通訊協議

2.1 術語

MODBUS通訊協議
MODBUS是OSI 模型第7層上的應用層報文傳輸協議,它在連線至不同型別匯流排或網路的裝置之間提供客戶機/伺服器通訊。

2.2 通訊介面

支援EIA/TIA-232-E、EIA-422、EIA/TIA-485-A等序列介面,支援多點連線,要求9600bps,推薦19200bps,選擇實現1200bps,2400bps,4800bp等其他速率。

2.3 資料鏈路層

Modbus序列鏈路協議是一個主-從協議。在同一時刻,只有一個主節點連線於匯流排,一個或多個子節點連線於同一個序列匯流排。Modbus通訊總是由主節點發起。子節點在沒有收到來自主節點的請求時,從不會發送資料。子節點之間從不會互相通訊。主節點在同一時刻只會發起一個Modbus事務處理。
主節點以兩種模式對子節點發出Modbus請求。
單播模式:主節點以特定地址訪問某個子節點,子節點接到並處理完請求後,子節點向主節點返回一個報文(一個應答)。在這種模式,一個Modbus事務處理包含 2 個報文,一個來自主節點的請求,一個來自子節點的應答。
廣播模式:主節點向所有的子節點發送請求。對於主節點廣播的請求沒有應答返回。廣播請求一般用於寫命令。所有裝置必須接受廣播模式的寫功能。地址0是專門用於表示廣播資料的。

2.3.1 幀格式

Modbus應用協議定義了簡單的獨立於其下面通訊層的協議資料單元(PDU-Protocol Data Unit)。

在不同匯流排或網路的Modbus協議對映在協議資料單元之外引入了一些附加的域。發起Modbus事務處理的客戶端構造Modbus PDU,然後新增附加的域以構造適當的通訊PDU。

2.3.2 傳輸模式

Modbus序列鏈路有兩種序列傳輸模式被定義:RTU模式和ASCII模式。
它定義了報文域的位內容線上路上序列的傳送,確定了資訊如何打包為報文和解碼。
Modbus 序列鏈路上所有裝置的傳輸模式 (和序列口引數) 必須相同。所有裝置必須必須實現RTU模式,預設設定必須為RTU模式,ASCII傳輸模式是選項。

RTU模式
當裝置使用RTU(Remote Terminal Unit)模式在Modbus序列鏈路通訊,報文中每個8位位元組含有兩個4位十六進位制字元。這種模式的主要優點是較高的資料密度,在相同的波特率下比ASCII模式有更高的吞吐率。每個報文必須以連續的字元流傳送。
RTU 模式每個位元組(11位)的格式為:1個起始位,8個數據位,1個奇偶校驗位,1個停止位。偶校驗是要求的,其它模式(奇校驗,無校驗)也可以使用。預設校驗模式模式必須為偶校驗。使用無校驗要求2個停止位。

RTU報文幀

ASCII模式
當Modbus序列鏈路的裝置被配置為使用ASCII(American Standard Code for Information Interchange) 模式通訊時,報文中的每個8位位元組以兩個ASCII字元傳送。當通訊鏈路或者裝置無法符合RTU模式的定時管理時使用該模式。
例如:位元組0x5B會被編碼為兩個字元,0x35和0x42(ASCII編碼0x35 ="5",0x42 ="B")。
ASCII模式每個位元組(10位)的格式為:1個起始位,7個數據位,1個奇偶校驗位,1個停止位。偶校驗是要求的,其它模式(奇校驗,無校驗)也可以使用。預設校驗模式模式必須為偶校驗。使用無校驗要求2個停止位。

ASCII報文幀

2.4 應用層

MODBUS有三類功能碼。它們是:
公共功能碼:是較好地被定義的功能碼,保證是唯一的,MODBUS組織可改變的,公開證明的,具有可用的一致性測試,MB IETF RFC 中證明的,包含已被定義的公共指配功能碼和未來使用的未指配保留供功能碼。
使用者定義功能碼:有兩個使用者定義功能碼的定義範圍,即65至72和100至110,使用者沒有 MODBUS 組織的任何批准就可以選擇和實現一個功能碼,不能保證被選功能碼的使用是唯一的。
保留功能碼:一些公司對傳統產品通常使用的功能碼,並且對公共使用是無效的功能碼。

公共功能碼定義如下表所示。

2.4.1 功能碼描述

下面以“01 (0x01)讀線圈”為例描述功能碼,詳細的描述請參考Modbus協議。
在一個遠端裝置中,使用該功能碼讀取線圈的1至2000連續狀態。請求PDU詳細說明了起始地址,即指定的第一個線圈地址和線圈編號。從零開始定址線圈,因此定址線圈1-16為0-15。根據資料域的每個位元將響應報文中的線圈分成為一個線圈。指示狀態為1=ON 和0=OFF。第一個資料位元組的LSB(最低有效位)包括在詢問中定址的輸出。其它線圈依次類推,一直到這個位元組的高位端為止,並在後續位元組中從低位到高位的順序。如果返回的輸出數量不是八的倍數,將用零填充最後資料位元組中的剩餘位元(一直到位元組的高位端)。位元組數量域說明了資料的完整位元組數。

請求PDU

正確響應PDU

錯誤響應PDU

這是一個請求讀離散量輸出20-38的例項。

3 測試專案編制

3.1 基本協議編制

3.1.1 協議項分類

利用格西除錯精靈軟體的協議激勵的功能,把通訊規約按照樹形結構分類組織,使得管理上更加有條理,查詢也更加方便。
根據Modbus通訊協議功能碼進行協議編輯。

3.1.2 協議項編制

根據協議幀格式,為了方便控制和顯示,把協議項的資料固定拆分為節點地址、功能碼和校驗碼3個部分,動態增減的部分是資料域,可以根據具體命令進行進一步拆分。
下面以“(0x01)讀線圈”命令為例說明協議項編制方法。

主站請求幀

從站正常應答幀

從站異常應答幀

3.1.3 公共協議庫

通過對基本協議項的編寫、測試和驗證,建立一個由基本協議項組成的公共協議庫。

3.2 測試用例編制

測試用例(Test Case)是為某個特殊目標而編制的一組測試輸入、執行條件以及預期結果,以便測試某個程式路徑或核實是否滿足某個特定需求。通訊協議測試屬於黑盒測試,可以採用黑盒測試常用的等價類劃分法、邊界值分析法、錯誤推測法、因果圖法等基本方法來設計測試用例。

測試方案設計完成後,格西除錯精靈軟體能夠利用編制完成的公共協議庫,採用搭積木的方式,通過複製和貼上命令即可非常快捷的建立測試用例。測試用例的組織方式通常是根據測試方案的設計層次採用樹形結構分類組織。

4 測試方法

4.1 測試系統構成

4.2 單項測試與整體測試

格西除錯精靈軟體支援單項測試和整體測試,一次測試一個測試項或者整個測試集。執行的方法是選中需要測試的測試項或者測試集,然後執行激勵命令即可。
下面以執行“(0x01)讀線圈”測試項為例說明。

協議資料解析介面

4.3 單次測試與迴圈測試

格西除錯精靈軟體支援單次測試和迴圈測試,能很好滿足各種除錯測試和效能測試的需求。執行的方法是選中需要測試的測試項或者測試集,然後執行激勵或迴圈激勵命令即可。

4.4 指令碼控制測試

格西除錯精靈軟體支援協議指令碼,能夠使用C#、VB、Jscript三種語言控制測試流程,設定和管理通訊引數和協議幀資料,呼叫外掛擴充套件測試功能。

協議指令碼能夠呼叫基於Microsoft .NET Framework的託管程式碼元件擴充套件測試功能,使用外掛非常方便,只要把編譯好的元件拷貝到Plugins目錄中,就可以直接在指令碼的函式中呼叫外掛所提供的公共服務。
例如,使用指令碼動態計算LRC校驗碼。

示例下載