概述
【T3000】边缘一体机中的【Modbus-请求】/【Modbus-解析】节点是配合【串口】节点使用的Modbus-RTU问询帧构造节点/Modbus-RTU应答帧解析节点。
【Modbus-请求】节点会根据用户填入的 "地址码"、"功能码"、"读取寄存器起始地址"、"读取寄存器数量"来生成对应的Modbus-RTU问询帧。
【Modbus-解析】节点会根据用户指定的【Modbus-请求】中的 "寄存器解析规则"来解析对应的Modbus-RTU应答帧。
PS-1: 【Modbus-请求】/【Modbus-解析】节点只用于问询帧构造/应答帧解析,通常要配合【串口】节点使用。
PS-2:由于Modbus问询帧和应答帧存在局限性, 例如使用者使用两个“Modbus请求”节点同时采集40001开始的两个寄存器和40005开始的两个寄存器时, 应答帧都是“01 03 04 …”结构的, 解析节点无法根据应答帧来分辨其所属的解析方式。 因而需要使用同一个“Modbus请求”节点同时采集40001-40006的所有寄存器后再分别做对应解析。
输入
【Modbus-请求】节点的输入:
#msg.payload 输入或输入内容通常根据FC(功能码)来确定
#当FC(功能码)为1、2、3、4时,msg.payload输入无意义,仅作节点激活作用。
#FC 5:写单个线圈(msg.payload:1/0)PS:1:开 / 0:关
#FC 6:写单个保持寄存器(msg.payload:0-65535) PS:要写入寄存器的内容
#FC15:写多个线圈(msg.payload:字节数组,每个字节表示8个线圈)PS:例如[0x15]表示00001111,0表示关、1表示开。
#FC16:写多个保持寄存器(msg.payload:一个寄存器2个字节,要写入的具体字节数组,详见示例)
#PS:例如[0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08] 表示写入4个寄存器的内容。
【Modbus-解析】节点的输入:
一般是串口节点输出的Modbus-RTU应答帧
输出
#Modbus-RTU问询帧/应答帧(buffer)
msg.payload
【Modbus-请求】节点配置项
【Modbus-请求】节点配置说明:
地址码:1-255 十进制数字输入
功能码:FC 1读线圈(功能码:0x01)
FC 2读触点(功能码:0x02)
FC 3读保持寄存器(功能码:0x03)
FC 4读输入寄存器(功能码:0x04)
FC 5写单个线圈(功能码:0x05)
FC 6写单个保持寄存器(功能码:0x06)
FC 15写多个线圈(功能码:0x0F)
FC 16写多个寄存器(功能码:0x10)
起始地址:5位十进制数字,请根据厂家提供的数据寄存器表填写
功能码 寄存器起始地址(十进制)
01 0xxxx
02 1xxxx
03 4xxxx
04 3xxxx
05 0xxxx
06 4xxxx
15 0xxxx
16 4xxxx
数量:根据实际情况填写
寄存器解析:根据厂家提供的数据解析方法/实际情况填写
【Modbus-解析】节点配置项
选择要解析的Modbus-请求】节点即可。
示例
接入一个RS485传感器设备和一个RS232传感器设备并使用【串口】节点采集数据
节点接线图:
上图是设备厂家提供的RS485温湿度传感器说明书部分内容。
根据该内容,对RS485串口采集的【Modbus-请求】节点的配置应该为:
演示视频
此处为语雀视频卡片,点击链接查看:2025-06-26 13-59-08.mp4
node-red完整流程代码
[{"id":"1c74e2c27857c3f6","type":"serial port","z":"bfc81969979a1c7d","name":"","serial":"30ac3af3c165ef97","x":470,"y":260,"wires":[["137caa536304dd32","8dfa614eaa73d1c3"]]},{"id":"2fd870e1376ba002","type":"serial port","z":"bfc81969979a1c7d","name":"","serial":"c1fe5768a388185d","x":460,"y":380,"wires":[["6108ae0d2c922864","d5b699c34c410f95"]]},{"id":"137caa536304dd32","type":"modbus_in","z":"bfc81969979a1c7d","name":"RS485解析","outputs":2,"modbusOut":"RS485","func":"3","uid":"1","regAddr":"40001","regNum":"2","nodeID":"085c1eec71b04a3e","props":[{"addr":40001,"num":1,"dataType":"u16AB","byteAddr":0},{"addr":40002,"num":1,"dataType":"u16AB","byteAddr":1}],"x":770,"y":260,"wires":[["c3dd86b54be24f3e"],["a5c2a52374c896e1"]]},{"id":"6108ae0d2c922864","type":"modbus_in","z":"bfc81969979a1c7d","name":"RS232解析","outputs":3,"modbusOut":"RS232","func":"3","uid":"1","regAddr":"40001","regNum":"3","nodeID":"bf1385fb6fda8b9b","props":[{"addr":40001,"num":1,"dataType":"u16AB","byteAddr":0},{"addr":40002,"num":1,"dataType":"u16AB","byteAddr":1},{"addr":40003,"num":1,"dataType":"u16AB","byteAddr":2}],"x":780,"y":380,"wires":[["a1fc4fbe211bd3e4"],["b16f7e61cc9d50c2"],["83df5afdd36738f5"]]},{"id":"085c1eec71b04a3e","type":"modbus_out","z":"bfc81969979a1c7d","name":"RS485","uid":"1","func":"3","regAddr":"40001","regNum":"2","props":[{"addr":40001,"num":1,"dataType":"u16AB","byteAddr":0},{"addr":40002,"num":1,"dataType":"u16AB","byteAddr":1}],"x":250,"y":260,"wires":[["1c74e2c27857c3f6","af4dd75888e0a031"]]},{"id":"bf1385fb6fda8b9b","type":"modbus_out","z":"bfc81969979a1c7d","name":"RS232","uid":"1","func":"3","regAddr":"40001","regNum":"3","props":[{"addr":40001,"num":1,"dataType":"u16AB","byteAddr":0},{"addr":40002,"num":1,"dataType":"u16AB","byteAddr":1},{"addr":40003,"num":1,"dataType":"u16AB","byteAddr":2}],"x":250,"y":380,"wires":[["2fd870e1376ba002","d0fd35b9f74603d9"]]},{"id":"3a54dc6d7d757575","type":"inject","z":"bfc81969979a1c7d","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":70,"y":260,"wires":[["085c1eec71b04a3e"]]},{"id":"c5915da921f9981e","type":"inject","z":"bfc81969979a1c7d","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":90,"y":380,"wires":[["bf1385fb6fda8b9b"]]},{"id":"c3dd86b54be24f3e","type":"debug","z":"bfc81969979a1c7d","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":940,"y":240,"wires":[]},{"id":"a5c2a52374c896e1","type":"debug","z":"bfc81969979a1c7d","name":"debug 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":940,"y":280,"wires":[]},{"id":"a1fc4fbe211bd3e4","type":"debug","z":"bfc81969979a1c7d","name":"debug 3","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":940,"y":340,"wires":[]},{"id":"b16f7e61cc9d50c2","type":"debug","z":"bfc81969979a1c7d","name":"debug 4","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":940,"y":380,"wires":[]},{"id":"83df5afdd36738f5","type":"debug","z":"bfc81969979a1c7d","name":"debug 5","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":940,"y":420,"wires":[]},{"id":"af4dd75888e0a031","type":"debug","z":"bfc81969979a1c7d","name":"debug 6","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":410,"y":180,"wires":[]},{"id":"d0fd35b9f74603d9","type":"debug","z":"bfc81969979a1c7d","name":"debug 7","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":410,"y":320,"wires":[]},{"id":"8dfa614eaa73d1c3","type":"debug","z":"bfc81969979a1c7d","name":"debug 8","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":660,"y":180,"wires":[]},{"id":"d5b699c34c410f95","type":"debug","z":"bfc81969979a1c7d","name":"debug 9","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":660,"y":300,"wires":[]},{"id":"30ac3af3c165ef97","type":"serial config","name":"","serialport":"/dev/ttyS8","baudrate":"9600","databits":"8","stopbits":"1","parity":"none","timeout":"50","reqtimeout":"1000"},{"id":"c1fe5768a388185d","type":"serial config","name":"","serialport":"/dev/ttyS6","baudrate":"9600","databits":"8","stopbits":"1","parity":"none","timeout":"50","reqtimeout":"1000"}]