1. 程式人生 > >Modbus測試工具與控制元件介紹

Modbus測試工具與控制元件介紹

1、簡介

網站地址:http://www.modbustools.com/

該網站提供了幾個軟體工具,可以運行於windows2000/XP/Vista/7環境下,用來測試和模擬Modebus裝置。

  • ModbusPoll :Modbus主機模擬器,用於測試和除錯Modbus從裝置。該軟體支援ModbusRTU、ASCII、TCP/IP。

  • ModbusSlave: Modbus從裝置模擬器,可以模擬32個從裝置/地址域。每個介面都提供了對EXCEL報表的OLE自動化支援。

  • WSMBT :Modbus主裝置的.NET控制元件,支援C#,VB,managedC++語言,支援Modbus TCP/IP。

  • WSMBS:Modbus從裝置的.NET控制元件,支援C#,VB,managedC++語言,支援ModbusRTU/ASCII。

  • MBAXP:一個易用的ActiveX控制元件,支援Excel,VisualBasic,Visual C++,Delphi等。支援Modbus RTU/ASCII和Modbus TCP/IP

2、功能

Modbus Poll是一個主機模擬器,用來幫助開發人員測試Modbus從裝置,或者其它MOdbus協議的測試和模擬。它支援多文件介面,即,可以同時監視多個從裝置/資料域。每個視窗簡單地設定從裝置ID,功能,地址,大小和輪詢間隔。你可以從任意一個視窗讀寫暫存器和線圈。如果你想改變一個單獨的暫存器,簡單地雙擊這個值即可。或者你可以改變多個暫存器/線圈值。提供資料的多種格式方式,比如浮點、雙精度、長整型(可以位元組序列交換)。

狀態條顯示錯誤資訊。

如果你是一個從裝置開發者,你可以通過"testcenter" 選單,組織併發送你自己的測試字串,並以16進位制形式檢查從裝置返回的結果。

為VB,EXCEL等提供了OLE自動化介面。可以用OLE介面解析和顯示Modbus資料,然後送達你指定的裝置,即,在EXCEL中編輯資料,然後傳送到你的從裝置!示例參看安裝後的Excelexample.xls。

 

支援下列協議:

  • Modbus RTU
  • Modbus ASCII
  • Modbus TCP/IP
  • Modbus RTU Over TCP/IP
  • Modbus ASCII OverTCP/IP
  • Modbus UDP/IP
  • Modbus RTU Over UDP/IP
  • Modbus ASCII OverUDP/IP

MODBUSPOLL功能:

  • OLE自動化可以簡單地與Visual Basic介面,使用起來類似於ActiveX控制元件。參見VBExample.vbp
  • 讀/寫多達125個暫存器
  • 讀/寫多達2000個輸入/線圈
  • TestCenter選單 (組織你自己的測試字串)
  • 列印和列印預覽
  • 監視序列資料流量serial datatraffic
  • Datalogging to a text file 
  • Data logging direct to Excel
  • 上下文敏感的HLP檔案
  • 10 Displayformats such as float, double etc.
  • Adjustable Address Base (0 or1).
  • 字型和顏色選項
  • 廣播功能(從裝置ID=0)
  • Easy control of RS-485 converters with RTStoggle.

支援MODBUS功能:

  • 01: Read coil status      讀線圈狀態
  • 02: Read input status    讀輸入狀態
  • 03: Read holdingregister讀保持暫存器
  • 04: Read input registers 讀輸入暫存器
  • 05: Force single coil      強制單線圈
  • 06: Preset single register預置單暫存器
  • 15: Force multiple coils  強制多線圈
  • 16: Preset multiple registers預置多暫存器
  • 17: Report slave ID        報告從裝置ID
  • 22: Mask write register   遮蔽寫暫存器
  • 23: Read/Write registers 讀/寫暫存器

3、兩臺微機之間串列埠測試

測試環境:XP32系統,一臺機器執行Poll,一臺執行Slave,中間用串列埠線連線。線序:2-3,3-2,5-5。

操作:

  • 兩邊分別用F3設定連線引數:串列埠,串列埠1,9600band,8資料位,Even校驗,1停止位,RTU模式,其它預設。
  • 主機端未正確連線,會給出提示
  • 通訊開始,主機端顯示:TX=35,Err=0,ID=1,F=03,SR=1000ms。意思是,傳送35次命令,錯誤次數,從機ID,功能號,輪詢間隔。
  • 如果通訊出錯,會在視窗第二行顯示錯誤資訊
  • 使用Display選單的"Communication Traffic"命令,可以顯示出當前傳送命令和接受的資料。
  • 主機改變通訊功能,快捷鍵F8,令功能為4,讀輸入暫存器,然後在從機的10個暫存器上點選滑鼠,輸入每個暫存器的新值,則,在主機上會讀取到這個新的暫存器值。

4、微機與AVR微控制器之間串列埠測試:讀輸入暫存器

測試環境:微機執行Poll,AVR MEGA88執行移植後的程式碼,串列埠連線同上。

AVR程式碼:串列埠用9600bps,even校驗,1停止位,RTU模式,SlaveID=1,其它未改變。

Poll設定:

  • F3撥出連線對話方塊,設定9600bps同微控制器波特率。
  • F8撥出讀寫對話方塊,設定SlaveID=1;功能=4,地址=999,數量=4,掃描頻率=1000ms,其它未變。
  • 介面顯示出AVR暫存器內容,通訊無錯誤提示。
  • 換用9600/11400/19200/38400/115200bps波特率,通訊正常。因為Poll沒有57600/230400等設定,這些波特率未測。AVR在該時鐘下最高可達230400bps,無差錯。

資料分析:

TX: 01 04 03 E7 00 04 41 BA          01-從裝置地址,04-功能號,0x03E7=999,0x0004-讀出暫存器個數,CRC校驗

RX: 01 04 06 00 00 00 00 00 00 60 93   01-從裝置地址,04-功能號,06-返回位元組數,CRC校驗

出現的問題:

  • 用不同AVR資料測試時,發現AVR程式碼有下列問題:設定的地址要比實際demo.c中設定的地址少一個。比如,demo.c中起始地址1000,但測試時Poll只能設定999,否則測試出錯。
  • 該問題的根源在mbfuncinput.c中,解析出變數地址usRegAddress之後有個++動作,人為將其增加1。其它函式如mbfuncholding.c也是如此。
  • 參看Modbus協議的定義:從零開始定址暫存器,比如定址輸入暫存器1-16,則輸入為0-15。真是奇怪啊!
  • 自此可以看出,DEMO.C中定義的輸入暫存器起始地址最小為1,此時才能滿足Master要求的輸入暫存器=0。

協議裡規定,如果通訊出錯,則返回資料格式為:

01 84 xx CRC2位元組

這裡xx表示錯誤碼:xx=01 02 03 04,其中02-無效的資料地址
 

Modbus Poll 4.3.4 破解版下載地址

點選下載