軟件下載鏈接:
鏈接: https://pan.baidu.com/s/1vQiGP-AIYxShcZhbxbctTg 提取碼: dqeg
Modbus基礎(chǔ)知識講解:
詳解Modbus通信協(xié)議—清晰易懂
Modbus學(xué)習(xí)必備的三大神器分別是ModbusPoll、ModbusSlave及VSPD,可以非常方便的進行modbus調(diào)試
ModbusPoll軟件主要用于仿真Modbus主站或Modbus客戶端
ModbusSlave軟件主要用于仿真Modbus從站或Modbus服務(wù)器
而VSPD全稱Configure Virtual Serial Port Driver,是用來給電腦創(chuàng)建虛擬串口使用的。
Modbus Poll :Modbus主機仿真器,用于測試和調(diào)試Modbus從設(shè)備。該軟件支持ModbusRTU、ASCII、TCP/IP。用來幫助開發(fā)人員測試Modbus從設(shè)備,或者其它Modbus協(xié)議的測試和仿真。它支持多文檔接口,即,可以同時監(jiān)視多個從設(shè)備/數(shù)據(jù)域。每個窗口簡單地設(shè)定從設(shè)備ID,功能,地址,大小和輪詢間隔。你可以從任意一個窗口讀寫寄存器和線圈。如果你想改變一個單獨的寄存器,簡單地雙擊這個值即可。或者你可以改變多個寄存器/線圈值。提供數(shù)據(jù)的多種格式方式,比如浮點、雙精度、長整型(可以字節(jié)序列交換)。
Modbus Slave: Modbus從設(shè)備仿真器,可以仿真32個從設(shè)備/地址域。每個接口都提供了對EXCEL報表的OLE自動化支持。主要用來模擬Modbus從站設(shè)備,接收主站的命令包,回送數(shù)據(jù)包。幫助Modbus通訊設(shè)備開發(fā)人員進行Modbus通訊協(xié)議的模擬和測試,用于模擬、測試、調(diào)試Modbus通訊設(shè)備。可以32個窗口中模擬多達(dá)32個Modbus子設(shè)備。與Modbus Poll的用戶界面相同,支持功能01, 02, 03, 04, 05, 06, 15, 16, 22和23,監(jiān)視串口數(shù)據(jù)。
Virtual Serial Port Driver 9.0 虛擬com端口工具
Virtual Serial Port Driver 9.0使用
Modbus調(diào)試需要需要兩臺電腦聯(lián)機或者上位機與下位機進行調(diào)試。有了這個工具后就可以在一個電腦上虛擬出兩個連接的com端口,就可以在一臺電腦上進行調(diào)試。
安裝過程一直點next即可,這里不再闡述,安裝完成之后打開軟件,主體是下圖
我們分成兩個部分,左邊是虛擬串口的設(shè)置,右邊是虛擬串口的添加
注意添加虛擬串口時盡量選擇較大的COM口,因為較小的COM口可能被電腦的鍵盤,鼠標(biāo),U盤等設(shè)備占用,會出現(xiàn)沖突。
我這里選擇COM10跟COM11 點擊Add virtual pair在左邊就可以看到建立的虛擬串口。
在此電腦----右鍵----管理----設(shè)備管理器->端口中查看是否新加了兩個端口:
Modbus Poll使用
安裝過程一直點next即可,安裝完成之后破解一下(輸一下密鑰,很簡單),軟件界面如下圖所示。
狀態(tài)框:
- Tx = 0表示向主站發(fā)送數(shù)據(jù)幀次數(shù),圖中為0次;
- Err = 0表示通訊錯誤次數(shù),圖中為0次;
- ID = 1表示模擬的Modbus子設(shè)備的設(shè)備地址,圖中地址為1;
- F = 03表示所使用的Modbus功能碼,圖中為03功能碼;
- SR = 1000ms表示發(fā)送周期,1S一次。
- 紅字部分,表示當(dāng)前的錯誤狀態(tài),“No Connection”表示未連接狀態(tài)。
單擊Setup----Read/Write Definition… 或者按F8進行參數(shù)設(shè)置,會彈出參數(shù)設(shè)置對話框。
-
Slave ID為要訪問的Modbus從機的地址,
-
Function 功能碼的選擇,
-
Address 為寄存器起始地址,根據(jù)功能碼的不同,訪問地址不同
-
Quantity:為訪問寄存器個數(shù),
-
Scan Rate為讀取數(shù)據(jù)周期,輪詢發(fā)送,單位毫秒,
Modbus協(xié)議同時規(guī)定了二十幾種功能碼,但是常用的只有8種,用于對存儲區(qū)的讀寫,如下表所示:
功能碼 | 功能說明 |
---|---|
01H | 讀取輸出線圈 |
02H | 讀取輸入線圈 |
03H | 讀取保持寄存器 |
04H | 讀取輸入寄存器 |
05H | 寫入單線圈 |
06H | 寫入單寄存器 |
0FH | 寫入多線圈 |
10H | 寫入多寄存器 |
當(dāng)然我們用的最多的就是03和06 一個是讀取數(shù)據(jù),一個是修改數(shù)據(jù)。
關(guān)于功能碼以及寄存器地址
看這篇講解原理的文章:
詳解Modbus通信協(xié)議—清晰易懂
點擊Display可以設(shè)置數(shù)據(jù)的顯示方式,默認(rèn)為Signed方式(16進制無符號二進制),數(shù)據(jù)范圍為-32768~32767
點擊 Connection -> Connect或者按“F3”進行連接
端口主從機分別選擇我們虛擬出來的com10和com11端口,其他選項如波特率9600,比特位8,校驗位1,無等價位等可以保持不變,然后點擊確定進行連接,未連接成功窗口第二行會給出提示信息。
- Response Timeout,表示讀取超時時間,從站在超時時間內(nèi)沒有返回數(shù)據(jù),則認(rèn)為通訊失敗。
- Delay Between Polls,每次掃描的最小間隔時間,默認(rèn)為20ms。
- Remote Modbus Server,表示TCP/IP模式時的終端從站設(shè)備的網(wǎng)絡(luò)設(shè)置。
- IP Address,表示TCP/IP模式時從站IP地址。
- Port,表示TCP模式時從站網(wǎng)絡(luò)端口
- Connect Timeout 表示TCP鏈接超時時間
- IPV4/IPV6
這里我們等從機設(shè)置完成再進行連接
修改寄存器值(06或16功能碼時生效):
在主窗口寄存器地址上雙擊鼠標(biāo),彈出修改對話框,如下圖:
- Slave為Modbus從站的地址
- Address 為當(dāng)前操作的寄存器的地址
- Value 修改的值 范圍為-32768——32767
- Use Function 設(shè)置功能碼,是06還是16
Modbus Slave使用
安裝過程一直點next即可,安裝完成之后破解一下(輸一下密鑰,很簡單),軟件界面如下圖所示。
- ID 表示從機的地址
- F 功能碼
- 下方為寄存器數(shù)據(jù)
點擊Setup----slave definition 設(shè)置從機數(shù)據(jù)
點擊 Connection -> Connect或者按“F3”進行連接
要注意的一個區(qū)別是從機這里的Function 是4個存儲區(qū)
- 輸出線圈
- 輸入線圈
- 保持寄存器
- 輸入寄存器
Modbus協(xié)議規(guī)定了4個存儲區(qū) 分別是0 1 3 4區(qū) 其中1區(qū)和4區(qū)是可讀可寫,1區(qū)和3區(qū)是只讀。
區(qū)號 | 名稱 | 讀寫 | 地址范圍 |
---|---|---|---|
0區(qū) | 輸出線圈 | 可讀可寫布爾量 | 00001-09999 |
1區(qū) | 輸入線圈 | 只讀布爾量 | 10001-19999 |
3區(qū) | 輸入寄存器 | 只讀寄存器 | 30001-39999 |
4區(qū) | 保持寄存器 | 可讀可寫寄存器 | 40001-49999 |
和主機部分基本一致,不再闡述,就是要注意主機如果選擇COM10 從機就要選擇COM11
雙擊從機寄存器數(shù)據(jù)框,即可修改寄存器數(shù)據(jù)
查看通訊數(shù)據(jù)幀:
點擊“Display”----“Communicatio”,可以調(diào)出串口收發(fā)數(shù)據(jù)幀監(jiān)視信息對話框,用來查看分析收發(fā)的數(shù)據(jù)幀。如下圖所示:
如果是從機 Rx為接收到的主機消息幀
Tx為發(fā)送到的主機數(shù)據(jù)
我們可以對數(shù)據(jù)進行分析
1、主機對從機讀數(shù)據(jù)操作
主機發(fā)送報文格式如下:
從站地址 | 功能碼 | 起始(高) | 起始(低) | 數(shù)量(高) | 數(shù)量(低) | 校驗 |
---|---|---|---|---|---|---|
0x01 | 0x03 | 0x00 | 0x00 | 0x00 | 0x0A | 0x62 0x67 |
含義:
0x01:從機的地址
0x03:查詢功能,讀取從機寄存器的數(shù)據(jù)
0x00 0x00: 代表讀取的起始寄存器地址.說明從0x0000開始讀取.
0x00 0x0A: 查詢的寄存器數(shù)量為0x000A(10)個 Modbus把數(shù)據(jù)存放在寄存器中,通過查詢寄存器來得到不同變量的值,一個寄存器地址對應(yīng)2字節(jié)數(shù)據(jù); 寄存器地址對應(yīng)著從機實際的存儲地址
0x62 0x67: 循環(huán)冗余校驗 CRC
從機回復(fù)報文格式如下:
從站地址 | 功能碼 | 字節(jié)計數(shù) | 字節(jié)1 | 字節(jié)N | 校驗 |
---|---|---|---|---|---|
0x01 | 0x03 | 0x14 | 0x00 … | … 0x00 | 0x17 |
含義:
0x01:從機的地址
0x03:查詢功能,讀取從機寄存器的數(shù)據(jù)
0x14: 返回字節(jié)數(shù)為14個
0x00… 0x00:寄存器的值
0x62 0x67: 循環(huán)冗余校驗 CRC
從機修改寄存器值,主機接收也會改變 功能碼03
主機修改寄存器值,從機寄存器值會改變 功能碼06