You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node-RED中监测Modbus模拟量增量并设置0/1标志的实现求助

Node-RED实现Modbus值递增监测逻辑

核心方案:用Function节点替代Filter节点

Filter节点仅负责过滤消息的通过/不通过,无法直接设置变量值。改用Function节点可同时完成历史值存储、数值比较和变量赋值三个操作,具体步骤如下:

1. 配置Function节点逻辑

替换原流程中的Filter节点为Function节点,写入以下代码:

// 从上下文读取前一次的A值(初始值设为0,可根据实际场景调整)
const prevA = context.get('prevA') || 0;
// 获取当前Modbus读取到的A值(假设值存在msg.payload.A,需根据实际路径修改)
const currentA = msg.payload.A;

// 比较当前值与历史值,设置变量B
msg.payload.B = currentA > prevA ? 1 : 0;

// 更新上下文,将当前A值保存为下一次的历史值
context.set('prevA', currentA);

return msg;

2. 适配你的Modbus流程

  • 确保Modbus读取合并寄存器后,目标模拟点的值能被Function节点正确获取(若值的存储路径不是msg.payload.A,修改currentA的取值路径即可)
  • 保留原有的5秒定时触发逻辑(比如用Inject节点定时启动Modbus读取)

3. 告警触发(可选)

若需基于B的值触发告警,在Function节点后添加Switch节点:

  • 设置条件msg.payload.B === 1,连接递增状态的告警节点(如Notification、MQTT输出等)
  • 设置条件msg.payload.B === 0,连接非递增状态的处理节点

为什么不用Filter节点?

Filter节点的核心是筛选消息:满足条件则放行,不满足则丢弃。但你需要的是无论是否满足条件,都要输出带有B值的完整消息,因此Function节点更适合这种需要全量处理并修改消息payload的场景。


内容的提问来源于stack exchange,提问作者Hazarath Voleti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:22:05