物联网中的 Node-RED(6):与设备 / 网关对接(串口 · Modbus · TCP)

物联网中的 Node-RED(6):与设备 / 网关对接(串口 · Modbus · TCP)

Node-RED 不只是"云边中转",它也能直接坐在边缘,把现场设备的数据嚼碎了再往上送。三种最常用入口:串口(RS485/232)、Modbus、TCP 长连接。

一、是什么

  • 串口节点 serial in / serial out:直接读写本机串口(/dev/ttyS8、COM3…),吃 RS485/232 的裸字节流。
  • Modbus 节点 modbus-flex-getter / modbus-write / modbus-client:封装了 Modbus RTU(跑串口)和 Modbus TCP(跑网口),按"从站地址 + 功能码 + 寄存器地址 + 数量"批量读点表。
  • TCP 节点 tcp in / tcp out / tcp request:建立或监听 TCP 长连接,发自定义应用层帧、收设备回包。

这三类是 Node-RED 吃工业设备的"三把筷子"——你的边缘网关、EG828 工业网关、华测设备,本质都是通过这些入口进来的。

二、怎么用

串口(RS485 仪表)

  1. 装 node-red-node-serialport,拖 serial in,Port 选 /dev/ttyS8,Baud 9600 / 8 / N / 1(必须和仪表一致)。
  2. 收到的 msg.payload 是 Buffer,用 function 按帧结构解析(帧头/长度/CRC,见系列二第04、07篇)。
  3. 下发用 serial out 把拼好的字节 Buffer 写回去。

Modbus(华测设备 / PLC)

  1. 拖 modbus-client 配连接:RTU 选串口+从站,TCP 填 IP+端口(502)。
  2. 拖 modbus-flex-getter,Topic/配置里填 fc(如 3=读保持寄存器)、address(注意偏移,40001→0)、quantity。
  3. 输出 msg.payload 是寄存器值数组,function 里按"字节序 + 缩放系数"换算成工程量(温度/位移…)。
  4. 控制用 modbus-write 写线圈/寄存器。你地灾平台 P03 对接华测测斜仪/倾角,就是 Modbus RTU 走 /dev/ttyS8 读上来的。

TCP(自定义长连接设备)

  1. tcp in 配 host+port 做 client 连设备,或开 server 监听设备连上来。
  2. 收发的是字节流,粘包/半包要按"长度域 + CRC"切帧(系列二第06、07篇)。
  3. 解析后转 MQTT 推平台(接第04篇的 mqtt out)。

三、用在哪里

  • 边缘网关汇聚:一台 Node-RED 把现场 PLC、仪表、Modbus 设备的数据统一读上来,再聚成 MQTT 推云。
  • 地灾平台 P03 转发:Node-RED 跑在工业网关上,Modbus 读华测 12 类设备(测斜/倾角/GNSS/裂缝/雨量/水位…),解析后转 MQTT 推地灾平台。
  • EG828 工业网关 DI/DO:通过 Modbus RTU 控制 /dev/ttyS8 上的 DI/DO 继电器,做联动。
  • 异构设备统一上云:串口老表 + TCP 新设备 + Modbus PLC,在 Node-RED 里归一化成同一套 JSON 再发。

四、怎么能用好(避坑)

  • 串口参数三统一:波特率/数据位/校验/停止位必须和终端设备一字不差,否则全是乱码或断流。
  • Modbus 地址偏移:屏上写的 40001 在节点里填 0,30001 填 0 配 FC=4,填错读不到或越界。
  • 字节序 + 缩放系数:32 位浮点可能是 AB CD 也可能是 CD AB,还有 10 倍/100 倍缩放,逐项和设备点表对齐,别想当然。
  • TCP 粘包/半包:TCP 是字节流,设备一次发的可能被拆成两包或两包粘一包,必须靠"长度域 + CRC"重组(系列二第06、07篇),不能按"一次收=一帧"处理。
  • 断线重连:串口拔了、TCP 断了要自动重连;Modbus 节点有 reconnect 设置,tcp in 要接 status/catch 做重连逻辑。
  • 轮询节奏:Modbus 轮询间隔别太狠(如 <200ms 扫几十个点)把从站压死,按设备能力定。

五、原理

  • 串口节点底层是 serialport 库,按配置的帧参数打开端口,收到字节触发 data 事件 → 进 msg.payload(Buffer)。
  • Modbus 节点底层是 modbus-serial,按你填的 FC/地址发请求帧、解析响应帧,把寄存器数组塞进 msg.payload。
  • TCP 节点底层是 Node net 库,tcp in 建连接收流、tcp out 写流;因为是裸字节流,所以切帧逻辑得自己写。

说白了:这些节点都是"协议库 + 事件回调"的封装,把字节流翻译成 Node-RED 能跑的 msg.payload 对象,后面你想转 MQTT、HTTP、落库都行。

六、背景:它从哪里来

串口和 Modbus 是工业现场几十年的老黄历(见系列二第01、03篇),TCP 长连接是互联网传输层基础(系列二第06篇)。Node-RED 社区把这些协议做成了现成节点(serialport、modbus-serial、net 封装),让"写几行 function 就能吃工业设备"变成现实——这正是它适合做边缘网关大脑的原因。

误区澄清

  • "Node-RED 能替代工业网关":错。它只是软件层,串口/网口/协议转换的活它能干,但网关的宽温/隔离/断网缓存/看门狗是硬件能力,Node-RED 补不了。
  • "Modbus 地址直接填 40001 就行":错。节点里填偏移 0,填 40001 会越界读不到。
  • "串口随便插、参数差不多就行":错。差一位(比如校验位 N 变 E)整条链路全乱。
  • "TCP 收到一包就是一帧":错。字节流会粘包/断包,必须靠长度域+CRC 切帧,否则数据错位。
posted @ 2026-09-24 20:41  星辰手  阅读(7)  评论(0)    收藏  举报