Modbus軟件開發實戰指南 之 開發自己的Modbus Poll工具 - 1

在開發Modbus程序的過程中,也可以發現經常需要使用諸如Modbus Poll和Modbus Slave等輔助調試工具,

用於驗證MODBUS通訊消息是否正確。但是,Modbus Poll和Modbus Slave都屬於共享軟件,

價格都在百美元左右,在未購買的情況下有時間或功能限制,怎麼辦呢?

    其實,我們完全可以開發自己的MODBUS輔助調試工具。

    

那麼先定一個小目標,開發一個簡化版的Modbus Poll,能夠方便調試MODBUS通訊,

支持RTU模式和TCP模式,支持以下最常用MODBUS功能碼,如:

²  01: Read coil status 讀線圈狀態

²  02: Read input status 讀輸入狀態

²  03: Read holding register讀保持寄存器

²  04: Read input registers 讀輸入寄存器

²  05: Force single coil 強制單線圈

²  06: Preset single register 預置單(保持)寄存器

²  15: Force multiple coils 強制寫多線圈

²  16: Preset multiple registers 預置寫多個(保持)寄存器

RTU模式下,支持設置串口參數,如串口號、波特率、數據位、停止位、校驗位等;TCP模式下,支持設置IP地址和端口號。

另外,如果採用圖形化界面,則將花較大的篇幅過多關注於GUI部分的代碼編寫,

爲了不影響關注重點,這裏採用命令行方式開發,假設程序命名爲modpoll.exe,命令行設定規則如下:

modpoll.exe [--debug] [-m {rtu|tcp}] [-a<slave-addr=1>] [-c<read-no>=1]

              [-r<start-addr>=100] [-t<f-type>] [-o<timeout-ms>=1000]

[{rtu-params|tcp-params}] serialport|host [<write-data>]

命令行各參數的意義如下:

l   [--debug]:設置爲debug模式,在debug模式下,將以十六進制方式打印通信數據。

l   [-m {rtu|tcp}]:選擇RTU或TCP模式,如-mrtu,-mtcp等。

l   [-a<slave-addr=1>]:從設備地址,省略則默認爲1。

l   [-c<read-no>=1]:讀/寫寄存器的個數,省略則默認爲1。

l   [-r<start-addr>=100]:寄存器起始地址,省略則默認起始地址爲100。

l   [-t<f-type>]:功能碼的取值,範圍是0x01/0x02/0x03/0x04/0x05/0x06/0x0F/0x10。

l   [-o<timeout-ms>=1000]:設置超時毫秒數,省略則默認爲1000毫秒。

l   [{rtu-params|tcp-params}]:設置串口或者TCP配置參數:

     RTU模式下,包括

b<baud-rate>=9600      波特率,缺省默認爲9600

d{7|8}<data-bits>=8    數據位,缺省默認爲8

s{1|2}<stop-bits>=1    停止位,缺省默認爲

p{none|even|odd}=even  校驗位,缺省默認爲even偶校驗

     TCP模式下,爲p<port>=502,設置端口號。

l   serialport|host:設置串口號或者IP地址,如COM1, COM2 ..或127.0.0.1等。

l   [<write-data>]:寫功能碼的情況下,需寫入的數據,多個數據的情況下中間用空格隔開,可以爲十進制或者16進制。

具體使用方法舉例如下:

ü   寫數據(TCP方式):modpoll --debug -mtcp -t0x10 -r0 -p1502 127.0.0.1 0x01 0x02 0x03

ü   寫數據(RTU方式):modpoll --debug -mrtu -t0x06 -r10 -b19200 COM3 0x33

ü   讀數據(TCP方式):modpoll --debug -mtcp -t0x03 -r0 -c3 -p1502 127.0.0.1

ü   讀數據(RTU方式):modpoll --debug -mrtu -t0x03 -r0 -c3 -b19200 COM3

至此,軟件功能需求基本分析完畢,下面開始具體開發過程。

待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章