網(wǎng)站地址:http://www.modbustools.com/
該網(wǎng)站提供了幾個軟件工具,可以運行于windows2000/XP/Vista/7環(huán)境下,用來測試和仿真Modebus設(shè)備。
-
ModbusPoll :Modbus主機仿真器,用于測試和調(diào)試Modbus從設(shè)備。該軟件支持ModbusRTU、ASCII、TCP/IP。
-
ModbusSlave: Modbus從設(shè)備仿真器,可以仿真32個從設(shè)備/地址域。每個接口都提供了對EXCEL報表的OLE自動化支持。
-
WSMBT :Modbus主設(shè)備的.NET控件,支持C#,VB,managedC++語言,支持Modbus TCP/IP。
-
WSMBS:Modbus從設(shè)備的.NET控件,支持C#,VB,managedC++語言,支持ModbusRTU/ASCII。
-
MBAXP:一個易用的ActiveX控件,支持Excel,VisualBasic,Visual C++,Delphi等。支持Modbus RTU/ASCII和Modbus TCP/IP
Modbus Poll是一個主機仿真器,用來幫助開發(fā)人員測試Modbus從設(shè)備,或者其它MOdbus協(xié)議的測試和仿真。它支持多文檔接口,即,可以同時監(jiān)視多個從設(shè)備/數(shù)據(jù)域。每個窗口簡單地設(shè)定從設(shè)備ID,功能,地址,大小和輪詢間隔。你可以從任意一個窗口讀寫寄存器和線圈。如果你想改變一個單獨的寄存器,簡單地雙擊這個值即可。或者你可以改變多個寄存器/線圈值。提供數(shù)據(jù)的多種格式方式,比如浮點、雙精度、長整型(可以字節(jié)序列交換)。
狀態(tài)條顯示錯誤信息。
如果你是一個從設(shè)備開發(fā)者,你可以通過"testcenter" 菜單,組織并發(fā)送你自己的測試字符串,并以16進制形式檢查從設(shè)備返回的結(jié)果。
為VB,EXCEL等提供了OLE自動化接口?梢杂肙LE接口解析和顯示Modbus數(shù)據(jù),然后送達你指定的設(shè)備,即,在EXCEL中編輯數(shù)據(jù),然后發(fā)送到你的從設(shè)備!示例參看安裝后的Excelexample.xls。
支持下列協(xié)議:
- 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菜單 (組織你自己的測試字串)
- 打印和打印預(yù)覽
- 監(jiān)視串行數(shù)據(jù)流量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).
- 字體和顏色選項
- 廣播功能(從設(shè)備ID=0)
- Easy control of RS-485 converters with RTStoggle.
支持MODBUS功能:
- 01: Read coil status 讀線圈狀態(tài)
- 02: Read input status 讀輸入狀態(tài)
- 03: Read holdingregister讀保持寄存器
- 04: Read input registers 讀輸入寄存器
- 05: Force single coil 強制單線圈
- 06: Preset single register預(yù)置單寄存器
- 15: Force multiple coils 強制多線圈
- 16: Preset multiple registers預(yù)置多寄存器
- 17: Report slave ID 報告從設(shè)備ID
- 22: Mask write register 屏蔽寫寄存器
- 23: Read/Write registers 讀/寫寄存器
測試環(huán)境:XP32系統(tǒng),一臺機器運行Poll,一臺運行Slave,中間用串口線連接。線序:2-3,3-2,5-5。
操作:
- 兩邊分別用F3設(shè)定連接參數(shù):串口,串口1,9600band,8數(shù)據(jù)位,Even校驗,1停止位,RTU模式,其它缺省。
- 主機端未正確連接,會給出提示
- 通訊開始,主機端顯示:TX=35,Err=0,ID=1,F(xiàn)=03,SR=1000ms。意思是,發(fā)送35次命令,錯誤次數(shù),從機ID,功能號,輪詢間隔。
- 如果通訊出錯,會在窗口第二行顯示錯誤信息
- 使用Display菜單的"Communication Traffic"命令,可以顯示出當(dāng)前發(fā)送命令和接受的數(shù)據(jù)。
- 主機改變通訊功能,快捷鍵F8,令功能為4,讀輸入寄存器,然后在從機的10個寄存器上點擊鼠標(biāo),輸入每個寄存器的新值,則,在主機上會讀取到這個新的寄存器值。
測試環(huán)境:微機運行Poll,AVR MEGA88運行移植后的代碼,串口連線同上。
AVR代碼:串口用9600bps,even校驗,1停止位,RTU模式,SlaveID=1,其它未改變。
Poll設(shè)置:
- F3呼出連接對話框,設(shè)定9600bps同單片機波特率。
- F8呼出讀寫對話框,設(shè)定SlaveID=1;功能=4,地址=999,數(shù)量=4,掃描頻率=1000ms,其它未變。
- 界面顯示出AVR寄存器內(nèi)容,通訊無錯誤提示。
- 換用9600/11400/19200/38400/115200bps波特率,通訊正常。因為Poll沒有57600/230400等設(shè)置,這些波特率未測。AVR在該時鐘下最高可達230400bps,無差錯。
數(shù)據(jù)分析:
TX: 01 04 03 E7 00 04 41 BA 01-從設(shè)備地址,04-功能號,0x03E7=999,0x0004-讀出寄存器個數(shù),CRC校驗
RX: 01 04 06 00 00 00 00 00 00 60 93 01-從設(shè)備地址,04-功能號,06-返回字節(jié)數(shù),CRC校驗
出現(xiàn)的問題:
- 用不同AVR數(shù)據(jù)測試時,發(fā)現(xiàn)AVR代碼有下列問題:設(shè)置的地址要比實際demo.c中設(shè)定的地址少一個。比如,demo.c中起始地址1000,但測試時Poll只能設(shè)定999,否則測試出錯。
- 該問題的根源在mbfuncinput.c中,解析出變量地址usRegAddress之后有個++動作,人為將其增加1。其它函數(shù)如mbfuncholding.c也是如此。
- 參看Modbus協(xié)議的定義:從零開始尋址寄存器,比如尋址輸入寄存器1-16,則輸入為0-15。真是奇怪啊!
- 自此可以看出,DEMO.C中定義的輸入寄存器起始地址最小為1,此時才能滿足Master要求的輸入寄存器=0。
協(xié)議里規(guī)定,如果通訊出錯,則返回數(shù)據(jù)格式為:
01 84 xx CRC2字節(jié)
這里xx表示錯誤碼:xx=01 02 03 04,其中02-無效的數(shù)據(jù)地址
Modbus Poll 4.3.4 破解版下載地址
點擊下載 https://pan.baidu.com/s/1C2RXZ9oTcRIJ_RJu9qo66A?pwd=dzkf
提取碼:dzkf