網站地址:https://www.modbustools.com/
該網站提供了幾個(ge) 軟件工具,可以運行於(yu) windows2000/XP/Vista/7環境下,用來測試和仿真Modebus設備。
-
ModbusPoll :Modbus主機仿真器,用於(yu) 測試和調試Modbus從(cong) 設備。該軟件支持ModbusRTU、ASCII、TCP/IP。
-
ModbusSlave: Modbus從(cong) 設備仿真器,可以仿真32個(ge) 從(cong) 設備/地址域。每個(ge) 接口都提供了對EXCEL報表的OLE自動化支持。
-
WSMBT :Modbus主設備的.NET控件,支持C#,VB,managedC++語言,支持Modbus TCP/IP。
-
WSMBS:Modbus從(cong) 設備的.NET控件,支持C#,VB,managedC++語言,支持ModbusRTU/ASCII。
-
MBAXP:一個(ge) 易用的ActiveX控件,支持Excel,VisualBasic,Visual C++,Delphi等。支持Modbus RTU/ASCII和Modbus TCP/IP
Modbus Poll是一個(ge) 主機仿真器,用來幫助開發人員測試Modbus從(cong) 設備,或者其它MOdbus協議的測試和仿真。它支持多文檔接口,即,可以同時監視多個(ge) 從(cong) 設備/數據域。每個(ge) 窗口簡單地設定從(cong) 設備ID,功能,地址,大小和輪詢間隔。你可以從(cong) 任意一個(ge) 窗口讀寫(xie) 寄存器和線圈。如果你想改變一個(ge) 單獨的寄存器,簡單地雙擊這個(ge) 值即可。或者你可以改變多個(ge) 寄存器/線圈值。提供數據的多種格式方式,比如浮點、雙精度、長整型(可以字節序列交換)。
狀態條顯示錯誤信息。
如果你是一個(ge) 從(cong) 設備開發者,你可以通過"testcenter" 菜單,組織並發送你自己的測試字符串,並以16進製形式檢查從(cong) 設備返回的結果。
為(wei) VB,EXCEL等提供了OLE自動化接口。可以用OLE接口解析和顯示Modbus數據,然後送達你指定的設備,即,在EXCEL中編輯數據,然後發送到你的從(cong) 設備!示例參看安裝後的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 讀/寫寄存器
測試環境: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個寄存器上點擊鼠標,輸入每個寄存器的新值,則,在主機上會讀取到這個新的寄存器值。
測試環境:微機運行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-從(cong) 設備地址,04-功能號,0x03E7=999,0x0004-讀出寄存器個(ge) 數,CRC校驗
RX: 01 04 06 00 00 00 00 00 00 60 93 01-從(cong) 設備地址,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。
協議裏規定,如果通訊出錯,則返回數據格式為(wei) :
01 84 xx CRC2字節
這裏xx表示錯誤碼:xx=01 02 03 04,其中02-無效的數據地址
Modbus Poll 4.3.4 破解版下載地址
點擊下載
提取碼:dzkf