一、創(chuàng)建產(chǎn)品
首選需要創(chuàng)建網(wǎng)關與子設備產(chǎn)品,建立子設備與網(wǎng)關的拓撲關系:參考 網(wǎng)關與子設備 文檔
至此,網(wǎng)關與子設備綁定的拓撲關系如下:

下面為子設備創(chuàng)建輪訓任務:
這里用子設備01距離創(chuàng)建任務:
找到子設備-設備詳情-輪訓任務

新增輪訓任務

支持的功能碼:

輪訓時間設置:
時間 |
---|
1分鐘 |
3分鐘 |
5分鐘 |
10分鐘 |
20分鐘 |
30分鐘 |
.... |
任務列表如下:

至此,modbus子設備的輪訓任務創(chuàng)建完成,當網(wǎng)關設備上線后,會自動下發(fā)輪詢指令。
主動采集與采集所有
主動采集:立即下發(fā)讀指令讀取當前物模型對應寄存器的值
采集所有:下發(fā)所有輪訓指令,讀取所有寄存器點位的值

二、Modbus協(xié)議
1. Modbus-RTU協(xié)議
個報文就是一幀數(shù)據(jù),一個數(shù)據(jù)幀就一個報文: 指的是一串完整的指令數(shù)據(jù),本質就是一串數(shù)據(jù)。


- 從機地址: 每個從機都有唯一地址,占用一個字節(jié),范圍0-255,其中有效范圍是1-247,其中255是廣播地址(廣播就是對所有從機發(fā)送應答)
- 功能碼: 占用一個字節(jié),功能碼的意義就是,知道這個指令是干啥的,比如你可以查詢從機的數(shù)據(jù),也可以修改從機的數(shù)據(jù),所以不同功能碼對應不同功能.
- 數(shù)據(jù): 根據(jù)功能碼不同,有不同功能,比方說功能碼是查詢從機的數(shù)據(jù),這里就是查詢數(shù)據(jù)的地址和查詢字節(jié)數(shù)等。
- 校驗: 在數(shù)據(jù)傳輸過程中可能數(shù)據(jù)會發(fā)生錯誤,CRC檢驗檢測接收的數(shù)據(jù)是否正確
2. Modbus功能碼
Modbus規(guī)定了多個功能,那么為了方便的使用這些功能,我們給每個功能都設定一個功能碼,也就是指代碼。如下:
標題 | 標簽 | 字段名 |
---|---|---|
01H | 讀取輸出線圈 | |
02H | 讀取輸入線圈 | |
03H | 讀取保持寄存器 | |
04H | 讀取輸入寄存器 | |
05H | 寫入單線圈 | |
06H | 寫入單寄存器 | |
0FH | 寫入多線圈 | |
10H | 寫入多寄存器 | |
_ |
3. 主機對從機讀數(shù)據(jù)操作

0x01:從機的地址 0x03:查詢功能,讀取從機寄存器的數(shù)據(jù) 0x00 0x01: 代表讀取的起始寄存器地址.說明從0x0001開始讀取. 0x00 0x01: 查詢的寄存器數(shù)量為0x0001個 Modbus把數(shù)據(jù)存放在寄存器中,通過查詢寄存器來得到不同變量的值,一個寄存器地址對應2字節(jié)數(shù)據(jù); 寄存器地址對應著從機實際的存儲地址 0xD5 0xCA: 循環(huán)冗余校驗 CRC
從機回復報文格式如下: | 從站地址 | 功能碼 | 字節(jié)計數(shù) | 字節(jié)1 |字節(jié)2 | 校驗 | | 0x01 | 0x03| 0x02| 0x01 | 0x00| 0x17| 0xF8 0x4A |
0x01:從機的地址 0x03:查詢功能,讀取從機寄存器的數(shù)據(jù) 0x02: 返回字節(jié)數(shù)為2個 一個寄存器2個字節(jié) 0x00 0x17:寄存器的值是0017 0xF8 0x4A: 循環(huán)冗余校驗 CRC
4. 主機對從機寫數(shù)據(jù)操作

x01:從機的地址 0x06:修改功能,修改從機寄存器的數(shù)據(jù) 0x00 0x01: 代表修改的起始寄存器地址.說明修改0x0000-0x0001的存儲內容 0x00 0x17: 要修改的數(shù)據(jù)值為0017 0x98 0x04: 循環(huán)冗余校驗 CRC
從機回復報文一樣
0106000100179804
0x01 | 06 | 00 01 | 00 17 | 98 04 |
---|---|---|---|---|
從機地址 | 功能號 | 數(shù)據(jù)地址 | 數(shù)據(jù) | CRC校驗 |
5.主機對從機讀數(shù)據(jù)操作
0103020017F84A
0x01 | 03 | 00 01 | 00 01 | D5 CA |
---|---|---|---|---|
從機地址 | 功能號 | 數(shù)據(jù)地址 | 讀取數(shù)據(jù)個數(shù) | CRC校驗 |
0x01 06 00 01 00 17 98 04 從機地址 功能號 數(shù)據(jù)地址 數(shù)據(jù) CRC校驗
0x01 06 00 01 00 17 98 04 從機地址 功能號 數(shù)據(jù)地址 數(shù)據(jù) CRC校驗
0x01 06 00 01 00 17 98 04 從機地址 功能號 數(shù)據(jù)地址 數(shù)據(jù) CRC校驗
0x01 06 00 01 00 17 98 04 從機地址 功能號 數(shù)據(jù)地址 數(shù)據(jù) CRC校驗
6. 報文實例
讀40005、40006兩個寄存器,假設從機地址為1
下行報文:01 03 00 04 00 02 85 ca
從機地址 | 功能碼 | 寄存器起始地址 | 讀取寄存器個數(shù) | CRC校驗 |
01 | 03 | 00 04 | 00 02 | 85 ca |
上行報文:01 03 04 00 00 00 00 21 33
從機地址 | 功能碼 | 返回字節(jié)個數(shù) | 寄存器40005數(shù)據(jù) | 寄存器40006數(shù)據(jù) | CRC校驗 |
01 | 03 | 04 | 00 00 | 00 00 | 21 33 |
7. Modbus-Rtu常用功能碼
數(shù)據(jù)類型 | 讀功能碼 | 寫功能碼 | 對象類型 |
離散量輸入 | 02 | 單個位 | |
線圈狀態(tài) | 01 | 05,15 | 單個位 |
輸入寄存器 | 04 | 16位字 | |
保持寄存器 | 03 | 06,16 | 16位字 |
8. 寄存器起始地址(起始數(shù)據(jù)地址)
數(shù)據(jù)類型 | 參數(shù)地址,寄存器編號 |
離散量輸入 | 00001~0FFFF |
線圈狀態(tài) | 10001~1FFFF |
輸入寄存器 | 30001~3FFFF |
保持寄存器 | 40001~4FFFF |