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