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校驗碼。

示例下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM