一、創(chuàng)建產(chǎn)品
首選需要?jiǎng)?chuàng)建網(wǎng)關(guān)與子設(shè)備產(chǎn)品,建立子設(shè)備與網(wǎng)關(guān)的拓?fù)潢P(guān)系:參考 網(wǎng)關(guān)與子設(shè)備 文檔
至此,網(wǎng)關(guān)與子設(shè)備綁定的拓?fù)潢P(guān)系如下:

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

新增輪訓(xùn)任務(wù)

支持的功能碼:

輪訓(xùn)時(shí)間設(shè)置:
時(shí)間 |
---|
1分鐘 |
3分鐘 |
5分鐘 |
10分鐘 |
20分鐘 |
30分鐘 |
.... |
任務(wù)列表如下:

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

二、Modbus協(xié)議
1. Modbus-RTU協(xié)議
個(gè)報(bào)文就是一幀數(shù)據(jù),一個(gè)數(shù)據(jù)幀就一個(gè)報(bào)文: 指的是一串完整的指令數(shù)據(jù),本質(zhì)就是一串?dāng)?shù)據(jù)。


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

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

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