數(shù)據(jù)本地化
業(yè)務(wù)個性化
標(biāo)準(zhǔn)Modbus RTU指令 | ||||||||||||||||
寄存器單元(十進制) | 功能碼 | 作用 | 請求及響應(yīng)格式 | |||||||||||||
線圈寄存器 CoilStatus (00001 - 09999) 1位 讀寫 |
0x01 | 讀線圈 | 指示狀態(tài)1 = ON,0 = OFF 示例:讀取0x0001到0x000A單元的開關(guān)狀態(tài),現(xiàn)場狀態(tài)為全開(即全1) | |||||||||||||
請求: | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 寄存器單元長度 | CRC校驗 | |||||||||||
id | 01 | 00 | 00 | 00 | 0A | crcl | crch | |||||||||
響應(yīng): | 設(shè)備號 | 功能碼 | 字節(jié)數(shù) | 數(shù)據(jù) | CRC校驗 | |||||||||||
id | 01 | 02 | FF | 03 | crcl | crch | ||||||||||
0x05 | 寫單個線圈 | 十六進制FF 00置狀態(tài)為ON,十六進制00 00 置狀態(tài)為OFF 示例:將0x00AD單元狀態(tài)置為ON/OFF | ||||||||||||||
請求: | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 置為ON/OFF | CRC校驗 | |||||||||||
id | 05 | 00 | AC | FF | 00 | crcl | crch | |||||||||
id | 05 | 00 | AC | 00 | 00 | crcl | crch | |||||||||
響應(yīng): | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 置為ON/OFF | CRC校驗 | |||||||||||
id | 05 | 00 | AC | FF | 00 | crcl | crch | |||||||||
id | 05 | 00 | AC | 00 | 00 | crcl | crch | |||||||||
0x0F | 寫多個線圈 | 示例:從0x0014開始寫入10個狀態(tài)值,數(shù)據(jù)內(nèi)容為2個字節(jié):十六進制CD 01(二進制 1100 1101 0000 0001) | ||||||||||||||
請求: | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 寄存器單元長度 | 字節(jié)數(shù) | 數(shù)據(jù) | CRC校驗 | |||||||||
id | 0F | 00 | 13 | 00 | 0A | 02 | CD | 01 | crcl | crch | ||||||
響應(yīng): | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 寄存器單元長度 | CRC校驗 | |||||||||||
id | 0F | 00 | 13 | 00 | 0A | crcl | crch | |||||||||
離散寄存器 InputStatus (10001 - 19999) 1位 只讀 |
0x02 | 讀離散輸入 | 示例:讀取197—218的開關(guān)狀態(tài),204-197內(nèi)容為0xAC(即二進制1010 1100),212-205內(nèi)容為0xDB(即二進制1101 1011),218-213內(nèi)容為0x35(即二進制0011 0101) | |||||||||||||
請求: | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 寄存器單元長度 | CRC校驗 | |||||||||||
id | 02 | 00 | C4 | 00 | 16 | crcl | crch | |||||||||
響應(yīng): | 設(shè)備號 | 功能碼 | 字節(jié)數(shù) | 數(shù)據(jù) | CRC校驗 | |||||||||||
id | 02 | 03 | AC | DB | 35 | crcl | crch | |||||||||
保持寄存器 Holding Register(40001 - 49999) 16位 讀寫 |
0x03 | 讀保持寄存器 | 示例:讀取寄存器108—110的值,108的內(nèi)容為0x022B(即555),109的內(nèi)容為0x0000(即0),110的內(nèi)容為0x0064(即100) | |||||||||||||
請求: | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 寄存器單元長度 | CRC校驗 | |||||||||||
id | 03 | 00 | 6B | 00 | 03 | crcl | crch | |||||||||
響應(yīng): | 設(shè)備號 | 功能碼 | 字節(jié)數(shù) | 數(shù)據(jù) | CRC校驗 | |||||||||||
id | 03 | 06 | 02 | 2B | 00 | 00 | 00 | 64 | crcl | crch | ||||||
0x06 | 寫單個寄存器 | 示例:將數(shù)據(jù)0x0003寫入寄存器單元0x0002 | ||||||||||||||
請求: | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 數(shù)據(jù) | CRC校驗 | |||||||||||
id | 06 | 00 | 01 | 00 | 03 | crcl | crch | |||||||||
響應(yīng): | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 數(shù)據(jù) | CRC校驗 | |||||||||||
id | 06 | 00 | 01 | 00 | 03 | crcl | crch | |||||||||
0x10 | 寫多個寄存器 | 示例:將數(shù)據(jù)0x000A和0x0102寫入從0x0002開始的兩個寄存器單元 | ||||||||||||||
請求: | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 寄存器單元長度 | 字節(jié)數(shù) | 數(shù)據(jù) | CRC校驗 | |||||||||
id | 10 | 00 | 01 | 00 | 02 | 04 | 00 | 0A | 01 | 02 | crcl | crch | ||||
響應(yīng): | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 寄存器單元長度 | CRC校驗 | |||||||||||
id | 10 | 00 | 01 | 00 | 02 | crcl | crch | |||||||||
輸入寄存器 Input Register(30001 - 39999) 16位 只讀 |
0x04 | 讀輸入寄存器 | 示例:讀取輸入寄存器0x0009單元的值,現(xiàn)場數(shù)據(jù)為0x000A | |||||||||||||
請求: | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 寄存器單元長度 | CRC校驗 | |||||||||||
id | 04 | 00 | 08 | 00 | 01 | crcl | crch | |||||||||
響應(yīng): | 設(shè)備號 | 功能碼 | 字節(jié)數(shù) | 數(shù)據(jù) | CRC校驗 | |||||||||||
id | 04 | 02 | 00 | 0A | crcl | crch | ||||||||||
有人擴展指令(本擴展指令非Modbus RTU標(biāo)準(zhǔn),僅適用于設(shè)備與有人云網(wǎng)絡(luò)通訊的規(guī)則) | ||||||||||||||||
為什么要做擴展指令 | 由于Modbus RTU協(xié)議適用于半雙工的總線協(xié)議,只能一問一答,服務(wù)器做主機,接入設(shè)備做從機,可以實現(xiàn)主機主動采集和控制。 但由于網(wǎng)絡(luò)通訊考慮流量、服務(wù)器并發(fā)量、網(wǎng)絡(luò)延遲等原因,無法實現(xiàn)類似在總線中毫秒級的輪詢讀取,而網(wǎng)絡(luò)通訊屬于全雙工,能夠同時雙向?qū)υ?,故擴展指令提出支持從機狀態(tài)主動上報的規(guī)則。 |
|||||||||||||||
應(yīng)用場景1 從機主動上報狀態(tài) |
如Modbus協(xié)議的環(huán)境控制器,服務(wù)器做主機10分鐘輪詢采集,但若前端人工主動控制,服務(wù)器必須等到下個輪詢才能得知狀態(tài)變化。 利用擴展指令可實現(xiàn)人工主動控制,從機主動上報當(dāng)前的狀態(tài)。 注:本協(xié)議僅適用于使用有人網(wǎng)絡(luò)模塊自主開發(fā)的產(chǎn)品,若在RS-485總線中使用,會造成總線混亂。 |
|||||||||||||||
應(yīng)用場景2 低功耗通訊上報格式 |
如NB-IoT、Lora這類低功耗通訊方式,低功耗模式僅支持主動向服務(wù)器上報,上報后斷電斷網(wǎng)休眠,此時服務(wù)器無法做主機主動采集數(shù)據(jù)。 利用擴展指令格式主動上報數(shù)據(jù)解決上述問題,服務(wù)器按照Modbus協(xié)議解析,完成后面的數(shù)據(jù)存儲、報警、推送等功能。 補充:NB-IoT在高功耗模式下也可支持云端主動下發(fā)查詢指令。 |
|||||||||||||||
寄存器單元(十進制) | 功能碼 | 作用 | 請求及響應(yīng)格式 | |||||||||||||
線圈寄存器 CoilStatus (00001 - 09999) 1位 讀寫 |
0x45 | 上報多個線圈 | 示例:從0x0014開始寫入10個狀態(tài)值,數(shù)據(jù)內(nèi)容為2個字節(jié):十六進制CD 01(二進制 1100 1101 0000 0001) | |||||||||||||
(格式與寫多個線圈相同) | 請求: | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 寄存器單元長度 | 字節(jié)數(shù) | 數(shù)據(jù) | CRC校驗 | ||||||||
id | 45 | 00 | 13 | 00 | 0A | 02 | CD | 01 | crcl | crch | ||||||
響應(yīng): | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 寄存器單元長度 | CRC校驗 | |||||||||||
id | 45 | 00 | 13 | 00 | 0A | crcl | crch | |||||||||
離散寄存器 InputStatus(10001 - 19999) 1位 只讀 |
0x42 | 上報多個離散寄存器 | (格式與寫多個線圈相同) | |||||||||||||
保持寄存器 Holding Register(40001 - 49999) 16位 讀寫 |
0x46 | 上報多個保持寄存器 | 示例:將數(shù)據(jù)0x000A和0x0102寫入從0x0002開始的兩個寄存器單元 | |||||||||||||
(格式與寫多個保持寄存器相同) | 請求: | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 寄存器單元長度 | 字節(jié)數(shù) | 數(shù)據(jù) | CRC校驗 | ||||||||
id | 46 | 00 | 01 | 00 | 02 | 04 | 00 | 0A | 01 | 02 | crcl | crch | ||||
響應(yīng): | 設(shè)備號 | 功能碼 | 寄存器起始地址 | 寄存器單元長度 | CRC校驗 | |||||||||||
id | 46 | 00 | 01 | 00 | 02 | crcl | crch | |||||||||
(暫不支持) 輸入寄存器 Input Register(30001 - 39999) 16位 只讀 |
(暫不支持) 0x44 |
(暫不支持) 上報多個輸入寄存器 |
(暫不支持,格式與寫多個保持寄存器相同) | |||||||||||||
注意和補充 | ||||||||||||||||
協(xié)議解釋: 1、數(shù)據(jù)、地址、長度等默認(rèn)大端在前,但CRC校驗是小端在前(低字節(jié)在前)crcl crch; 2、有人擴展協(xié)議僅適用于設(shè)備與透傳云的網(wǎng)絡(luò)通訊層; |
||||||||||||||||