Modbus采用主從式通信,日常使用較多的是Modbus RTU和Modbus TCP/IP兩種協議。常用調試軟件為第三方工具ModScan32,比較簡單易懂的一款軟件,下面介紹一下其使用方法。
ModScan32用來模擬主設備。它可以發送指令到從機設備(使用Modbus協議的智能儀表終端設備)中,從機響應之后,就可以在界面上返回相應寄存器的數據。
一、首先要保證外部的連接線正確連接好,確認數據線連接正常。
下面打開軟件界面,如下圖:
Modscan32使用說明:
首先,要保證外部連線正確連接,確認數據連接正常,進入軟件界面進行操作。
打開后,是如下界面:
第一步,點擊菜單欄的Connection→“connection”出現:
第二步:點擊“rotecol Selection”進入如下界面,根據下圖所示進行設置:
第三步:通訊參數設定,進行下面操作,點擊后出現的界面填寫如圖所示的數據:
Modbus的類型選擇:在Modbus Point Type就是要讀取的寄存器區
“01:COIL STATUS”指1#命令DO寄存器
“02:INPUT STATUS”指2#命令DI寄存器
“03:HOLDING REGISERT”指3#命令保存寄存器
“04:INPUT REGISTER”指4#命令輸入寄存器
想讀哪個寄存器,就選那個就行
對應Modbus地址分別為:
備注:采用Modbus485信號接入要求如下:
1、Server通訊的參數為:9600/8/1/無校驗(可調整,但需要和企業通訊卡的設置參數一致)
2、Server的485站地址為:1
3、采集點對應Modbus RTU地址為40001開始,數據類型為RINT,線性量程為:0-65535
4、提供的Modbus RTU Server必須是國際標準版協議,使用Modscan測試軟件能夠測試通過。
本次講解,主要為模擬主站,接收從站的數據(遙信、遙測),并且給從站下令(遙控、遙調)
Connetion→connect,后如圖
類型:直接默認Remote modbus TCP Server,IP Address:從站IP地址,端口:默認502
PS:本地測試網段要跟從站一個網段,并在一個內網里,或者你測試也可直接在從站機器上測發數據的IP地址,設好后,回到一開始的界面。
主要調整的幾個位置:①Device Id,從站和主站約定好的設備地址,按照實際情況填寫,如果填錯,會出現連不上的情況;
②Address,接收數據的起始地址,最小為1,不可為0,modbus tcp規約中,點表都是從0開始的,但測試時是從1開始的,例:遙信實際為0→99,測試時1→100,遙測實際為0、2、4、6、8...100,測試時1、3、5、7、9...101
③Length,長度,modscan工具最長可接100,也就是圖中設的100,
modscan使用時有個需注意的問題:如果實際從站只發出10個遙測,那長度設置太長 ,超過24,一般會造成工具中數據不刷新或者直接溢出,無法查看的情況,所以根據實際情況進行長度設置。
100長度,可接100個遙信,50個遙測(單精度浮點占兩個寄存器位置)
④圖中的01、02、03、04就是四個功能碼,一般01為遙信和遙控、02一般不用、03為遙測和遙調、04為統計量上送,你要看哪個數據就選哪個類型。
⑤數據類型選擇區:最常用的就是3:2標志的Floating Pt.,如果測出的數據亂碼,可以點旁邊的Swapped FP,轉換報文的高低字節,我們看到的數據都是解析后的,實際真正傳輸的是報文,其之后的6:4是雙精度浮點,之前的幾個是整型、小數之類的。
最后,介紹下遙控,遙調,找到測試出對應的點,雙擊后,如圖所示
在Value中輸入你要下的令,然后點擊Update即可,模擬有風險,下令需謹慎。
注意:數據溢出如果無法連接,那么需要先斷開連接再嘗試連接,將長度改小些,經常使用才會熟能生巧
正常測出數據截圖:
二、一直顯示MODBUS MESSAGE TIME-OUT
背景描述
1、modsim做modbus設備從站
2、modcan做modbus設備主站
3、valid slave responses:0 也就是沒有收到數據
4、modbus message time out
解決方案
建議用modbus poll與modbus slave兩個軟件來做主從站測試,modscan不適合做這個,存在缺陷;
三、報文解析
淺色部分即為Modscan發送的報文:
01 03 00 00 00 0A C5 CD 其中,
01 從站地址
03 Modbus功能碼
00 00 為所要讀取的Modbus從站的起始地址
00 0A 為所要讀取的寄存器長度,即所要讀取的為10個字。40001——40010
C5 CD為指令的CRC校驗
深色部分即為Modscan接收的報文:
01 03 14 00 0A 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0A 29 33
01 從站地址
03 Modbus功能碼
14指令中所包含的數據數量,即14H(十進制即20)個字
00 0A 40001地址寄存器的值(16進制)
00 02 40002地址寄存器的值(16進制)
00 03 40003地址寄存器的值(16進制)
00 04 40004地址寄存器的值(16進制)
00 05 40005地址寄存器的值(16進制)
00 06 40006地址寄存器的值(16進制)
00 07 40007地址寄存器的值(16進制)
00 08 40008地址寄存器的值(16進制)
00 09 40009地址寄存器的值(16進制)
00 0A 40010地址寄存器的值(16進制)
29 33為指令的CRC校驗
Modsim:顯示 --> 十六進制(此時數據均顯示為16進制,同理二進制、浮點數等也一樣)。然后,顯示 --> 顯示數據流,在此可以看到Modbus發送與接收的報文信息。其與Modscan類似,不再冗述。
四、ModSim32和ModScan32區別
ModSim32-ModScan32Modbus調試工具使用及配置說明
ModSim32下邊選擇Remote TCP/IP Server連接方式,IP Address處填寫本機IP地址,Service處為默認的502即可,點擊OK。
按照Modbus協議的要求去讀相應功能代碼(0、1、3、4)的地址即可,注意選擇相同的Device Id、功能代碼、起始地址(Address)和長度(Length),否則會提示
這是ModSim32和ModScan32種的地址不一樣所致。
另外,還需要注意的是,ModSim32可以對所有功能代碼的地址進行寫操作,而ModScan32只能對0和4功能代碼的地址進行寫操作,不能對1和3功能代碼的地址進行寫操作。對于ModScan32而言,1和3功能代碼的地址是只讀的,而0和4功能代碼的地址是可讀寫的。 在ModSim32中分別對地址30001、30002、30003寫入99、123、2217,則在圖6的ModScan32中可以看到30001、30002、30003三個地址顯示的值也為99、123、2217。