新聞中心
PRESS CENTERModbus讀:用于Modbus RTU/Modbus TCP協(xié)議的數(shù)據(jù)讀取。
Modbus寫:用于Modbus RTU/Modbus TCP協(xié)議的數(shù)據(jù)寫入。
Modbus服務(wù):用于Modbus RTU/Modbus TCP協(xié)議的服務(wù)端,即從站,寄存器地址可以自定義。
以上3個(gè)節(jié)點(diǎn)在原Modbus請求Modbus解析節(jié)點(diǎn)的基礎(chǔ)上增加了多個(gè)特色功能:寄存器配置導(dǎo)入導(dǎo)出、動(dòng)態(tài)配置采集參數(shù)、結(jié)果基本計(jì)算、數(shù)據(jù)匯總輸出等等。
Modbus基礎(chǔ)概念此處不在介紹,如果不熟悉,請參考以下資料:Modbus協(xié)議【完整版】-https://iotrouter.yuque.com/attachments/yuque/0/2025/pdf/38696274/1753768218220-93df9205-5f53-458d-9ad9-38e48c0ed131.pdf
如下源碼:https://iotrouter.yuque.com/zn3vdn/eg8000/deauhgopg8ggogap#yXy1k
支持Modbus RTU/Modbus TCP協(xié)議,選擇不同的配置項(xiàng)即可,以下介紹不在區(qū)分。
輸入
msg.payload.uid
#從機(jī)地址,1-255
msg.payload.fc
#功能碼,十進(jìn)制表示,取值范圍:1/2/3/4
msg.payload.columns
#數(shù)據(jù)點(diǎn),多個(gè)數(shù)據(jù)點(diǎn)以數(shù)組的形式表示:
{
"Key":"",//數(shù)據(jù)點(diǎn)名稱:字符串格式
"Address":0,//寄存器地址:十進(jìn)制表示(無需加1),例如:0x0000-->00x0100-->256
"Type":1,//數(shù)據(jù)類型:1--24,對應(yīng)關(guān)系詳見配置頁面下拉選型
"Tdata":1//數(shù)據(jù)處理方式:對于位解析為必填參數(shù),取值1-16表示哪一位;對于其他類型為選填,表示結(jié)果乘的系數(shù),10表示放大10倍,0.1表示縮小10倍
}
輸出
msg.payload
#正常返回:數(shù)據(jù)以對象的形式存儲在msg.payload中
#異常返回:null
msg.status
#正常返回:OK
#異常返回:ERROR
#超時(shí)返回:TIMEOUT
msg.reqpayload
#發(fā)送的原始指令
msg.reppayload
#響應(yīng)的原始指令
示例
1. 寄存器導(dǎo)入導(dǎo)出
在寄存器比較多的時(shí)候,手動(dòng)依次錄入是比較麻煩的,Modbus讀節(jié)點(diǎn)增加了導(dǎo)入導(dǎo)出配置的功能,大大提高了錄入效率:
2. 動(dòng)態(tài)配置/結(jié)果計(jì)算/匯總輸出
新增動(dòng)態(tài)配置功能,允許通過msg攜帶配置參數(shù)修改采集指令,從而根據(jù)需求動(dòng)態(tài)采集傳感器數(shù)據(jù)。例如:云端根據(jù)業(yè)務(wù)需求,不同情況下,下發(fā)不同的采集命令。
新增字段“Tdata”,支持對寄存器返回的結(jié)果進(jìn)行簡單的計(jì)算,最終的結(jié)果以對象的形式存儲在msg.payload中,方便后續(xù)統(tǒng)一處理。
支持Modbus RTU/Modbus TCP協(xié)議,選擇不同的配置項(xiàng)即可,以下介紹不在區(qū)分。
輸入
msg.payload.uid
#從機(jī)地址,1-255
msg.payload.fc
#功能碼,十進(jìn)制表示,取值范圍:5/6/15/16
msg.payload.address
#寄存器起始地址,十進(jìn)制表示(無需加1),例如:0x0000-->00x0100-->256
msg.payload.quantity
#寄存器寫入的數(shù)量,寫單個(gè)可不填,寫多個(gè)必須填
msg.payload.value
#FC 5:寫單個(gè)線圈(msg.payload.value:1/0)
#FC 6:寫單個(gè)保持寄存器(msg.payload.value:0-65535)
#FC15:寫多個(gè)線圈(msg.payload.value:字節(jié)數(shù)組,每個(gè)字節(jié)表示8個(gè)線圈)
#FC16:寫多個(gè)保持寄存器(msg.payload.value::一個(gè)寄存器2個(gè)字節(jié),要寫入的具體字節(jié)數(shù)組)
輸出
msg.payload
#寫入成功:true
#寫入失敗:false
msg.status
#正常返回:OK
#異常返回:ERROR
#超時(shí)返回:TIMEOUT
msg.reppayload
#發(fā)送的原始指令
msg.reqpayload
#響應(yīng)的原始指令
示例
1. 寫多個(gè)保持寄存器
Modbus服務(wù)作為Modbus從站,支持將不同來源的數(shù)據(jù)重新映射為新的寄存器地址,統(tǒng)一響應(yīng)主站的請求,從而提高主站的采集效率。目前僅支持讀操作,不支持寫操作。
Modbus服務(wù)節(jié)點(diǎn)實(shí)際工作原理是將傳入數(shù)據(jù)重新映射為新的地址存儲,當(dāng)有Modbus請求時(shí),在把存儲的數(shù)據(jù)格式化為合法的Modbus響應(yīng)輸出。
輸入
msg.coils
#數(shù)組,取值為0/1,索引為寄存器地址,如果只更新某個(gè)參數(shù),請將其它索引值置為null或不初始化
msg.discretes
#數(shù)組,取值為0/1,索引為寄存器地址,如果只更新某個(gè)參數(shù),請將其它索引值置為null或不初始化
msg.holdings
#數(shù)組,取值最大32位,索引為寄存器地址,如果某個(gè)值超出16位請將下個(gè)索引置為null或不初始化
msg.inpus
#數(shù)組,取值最大32位,索引為寄存器地址,如果某個(gè)值超出16位請將下個(gè)索引置為null或不初始化
msg.payload
#如果不存在以上屬性,則會(huì)把msg.payload作為請求指令解析
輸出
輸出1
msg.payload
#modbus響應(yīng)報(bào)文
輸出2(只有msg.coils/msg.discretes/msg.holdings/msg.input屬性注入時(shí)才會(huì)輸出2)
msg.coils
#顯示coils中當(dāng)前存放的數(shù)據(jù)
msg.discretes
#顯示discretes中當(dāng)前存放的數(shù)據(jù)
msg.holdings
#顯示holdings中當(dāng)前存放的數(shù)據(jù)
msg.inpus
#顯示inpus中當(dāng)前存放的數(shù)據(jù)
示例
1. 保持寄存器
本示例設(shè)置保持寄存器數(shù)量為10個(gè),其中:寄存器0x0000-0x0001,0x0002-0x0003,0x0004-0x0005,0x0006-0x0007為32位浮點(diǎn)型數(shù)據(jù)(ABCD),寄存器0x0008,0x0009為16位整型數(shù)據(jù)(AB)。
配置界面設(shè)置內(nèi)容如下圖所示: