文章目錄
- 使用Modbus poll&Modbus slave模拟Modbus主從通信
- 虛拟序列槽
- 基礎知識積累
-
- MODBUS-RTU封包模型
- 主機對從機寫資料操作
- 主機對從機寫資料操作後,從機的傳回内容
- 主機對從機讀資料操作
- 主機對從機讀資料操作後,從機對主機傳回内容
- Modbus-RTU常用功能碼
- 寄存器起始位址(起始資料位址)
使用Modbus poll&Modbus slave模拟Modbus主從通信
下載下傳和破解搜一下都很友善,使用的時候Modbus Poll作為Master,Modbus slave作為從機,設定相同的Setup和Connection就可以進行通信了。
詳細教程見部落格園的一篇不錯的的文章。
虛拟序列槽
虛拟序列槽,模仿序列槽,可以最大程度的模拟Slave與Master的通信情況,下載下傳連結如下
連結:https://pan.baidu.com/s/1-kz_vqt8RIEo-rVQ8aA7Qw
提取碼:abvx
基礎知識積累
MODBUS-RTU封包模型
裝置位址 | 功能代碼 | 資料 | CRC校驗L | CRC校驗H |
---|---|---|---|---|
8bit | 8bit | N*8bit | 8bit | 8bit |
1位元組 | 1位元組 | 0~252位元組 | 1位元組 | 1位元組 |
一個封包就是一幀資料,一個資料幀就一個封包: 指的是一串完整的指令資料,就像上面的一串資料。
裝置位址:指的是從機位址,用于通信,為0時表示的是廣播通信,如果單獨通信,從裝置傳回消息作為回應,如果是以廣播方式查詢的,則不作任何回應。
功能碼:主機有8個功能碼,從機有4個功能碼,多出來的4個功能碼是主機對從機的寫操作
資料格式:N個資料就有N*8bit長度,N最大值252
CRC校驗位:分為高低兩個位元組
ADU:是這一幀所有資料,0~256位元組
PDU:是功能代碼+資料,0~253位元組
主機對從機寫資料操作
如果單片機接收到一個封包那麼就對封包進行解析執行相應的處理
0x01 06 00 01 00 17 98 04
從機位址 功能号 資料位址 資料 CRC校驗
主機對從機寫資料操作後,從機的傳回内容
接收到主機的消息後,從機會在判斷是自己的消息(并且不是廣播消息後)原封不動的傳回接收到的消息
0x01 06 00 01 00 17 98 04
從機位址 功能号 資料位址 資料 CRC校驗
主機對從機讀資料操作
0x01 03 00 01 00 01 D5 CA
從機位址 功能号 資料位址 讀取資料個數 CRC校驗
單片機接收到這串資料根據資料計算CRC校驗判斷資料是否正确,如果判斷資料無誤,則結果是:傳回資訊給主機,傳回的資訊也是有格式的:
主機對從機讀資料操作後,從機對主機傳回内容
0x01 03 02 00 17 F8 4A
從機位址 功能号 資料位元組個數 兩個位元組資料 CRC校驗
這樣Modbus主機就完成了一次對從機資料的讀操作,實作了通訊。
Modbus-RTU常用功能碼
根據下表,可以設定對應的功能碼(Function)
功能碼 | 英文名 | 中文名 | 解釋 |
---|---|---|---|
01 | Read Coils | 讀線圈 | |
02 | Read Discrete Inputs | 讀離散寄存器 | |
03 | Read Hoiding Registers | 讀保持寄存器 | |
04 | Read Input Registers | 讀取輸入寄存器 | |
05 | Write Sinqle Coil | 寫線圈 | |
06 | Write Sinqle Register | 寫單個寄存器 | |
15 | Write Multiple Coils | 寫多個線圈 | |
16 | Write Multiple Registers | 寫多個寄存器 |
關于這幾個線圈/保持寄存器/離散寄存器的解釋見連接配接https://blog.csdn.net/lingshi75/article/details/105991450