新聞中心
PRESS CENTER本文主要實現(xiàn)的功能:使用EG系列網(wǎng)關(guān),對Modbus TCP協(xié)議從站實現(xiàn)寫數(shù)據(jù)操作。Modbus RTU與Modbus TCP協(xié)議的區(qū)別在網(wǎng)關(guān)上的體現(xiàn)僅僅是一個配置項,因此不單獨區(qū)分介紹。
節(jié)點使用詳情查看:此處為語雀內(nèi)容卡片,點擊鏈接查看:https://iotrouter.yuque.com/zn3vdn/eg8000/deauhgopg8ggogap
確認點位信息
線圈:
功能碼:01/05/0F | ||
寄存器地址 | 權(quán)限 | 解析方式 |
0x0000 | 讀寫 | 位 |
0x0001 | 讀寫 | 位 |
保持寄存器:
功能碼:03/06/10 | ||
寄存器地址 | 權(quán)限 | 解析方式 |
0x0000 | 讀寫 | 16位無符號整型 |
0x0001 | 讀寫 | 16位無符號整型 |
寫單個線圈(靜態(tài)方式寫)
從節(jié)點庫拖出一個Modbus 寫節(jié)點,兩個注入節(jié)點來注入開和關(guān),調(diào)試節(jié)點打印寫入成功還是失敗。如下圖所示:當點擊注入的時候,左側(cè)Modbus模擬從機的第一個線圈點位會跟隨變化。
寫單個線圈(動態(tài)方式寫)
Json格式:
{ uid: 1, //從機地址 fc: 5,//功能碼寫單個線圈 address: 0,//寄存器地址 value: false//寫入的狀態(tài) } |
相比于靜態(tài)的優(yōu)勢:不需要一個點位用一個寫節(jié)點,要寫入的寄存器地址以及要寫入的值都可以通過傳參的方式去動態(tài)修改。
寫多個線圈(靜態(tài)方式寫)
示例寫入兩個線圈 0x0000和0x0001。當點擊注入的時候,左側(cè)Modbus模擬從機的兩個線圈點位也會跟隨變化:
Q:為什么注入3兩個繼電器閉合,注入0兩個繼電器會斷開?
[3](十進制) = [00000011](二進制) ,按照Modbus協(xié)議規(guī)范,寫線圈是按位寫。因此 [00000011]表示從起始寄存器開始的兩個線圈閉合。同理, [0]表示斷開。
寫多個線圈(動態(tài)方式寫)
Json格式:
{ uid: 1, //從機地址 fc: 15,//功能碼寫多個線圈 address: 0,//寄存器地址 quantity: 2,//寫入的寄存器數(shù)量 value: [3]//寫入的值,寫多個傳入數(shù)組 } |
以下示例為,收到“open”字符串則閉合兩個線圈,收到“close”字符串則斷開兩個線圈:
寫單個保持寄存器(靜態(tài)方式寫入)
向寄存器0x0000寫入100,當點擊寫入后左側(cè)Modbus從機寄存器0x0000的值變成100:
寫單個保持寄存器(動態(tài)的方式寫入)
Json格式:
{ uid: 1, //從機地址 fc: 6,//功能碼 寫單個保持寄存器 address: 0,//寄存器地址 value: msg.payload//寫入的值,寫多個傳入數(shù)組 } |
寫多個保持寄存器(動態(tài)寫入)
Json格式:
{ uid: 1, //從機地址 fc: 16,//功能碼 寫多個保持寄存器 address: 0,//寄存器地址 quantity: 2, //寫入的寄存器數(shù)量 value: [0x03,0xE8,0x00,0xC8]//寫入的值,寫多個傳入數(shù)組 } |
寫多個不支持靜態(tài)寫入,因為需要傳入?yún)?shù)格式是數(shù)組。以上參數(shù)配置為動態(tài)的形式向寄存器0x0000寫入1000,0x0001寫入200。
Q:為什么寫入1000,2000,實際傳參是 [0x03,0xE8,0x00,0xC8]?
[1000](十進制) = [0x03E8](十六進制HEX)
[200](十進制) = [0x00C8](十六進制HEX)
如上所示,實際傳參為要寫入值的十六進制,拆分為2個字節(jié)的表現(xiàn)形式。(Modbus協(xié)議規(guī)范)
源碼:https://iotrouter.yuque.com/zn3vdn/eg8000/nm3zgvrtlcssmlbd