跳到主要内容

故障排查 — 流程中常见的陷阱

现象原因 / 解决方法
Deploy 之后仍无变化节点上残留红点 = 未保存。重新 Deploy。或者看到的是缓存的 inject 结果 — 点击触发新的 inject
标签值读取始终为 null标签 ID 拼写错误 / 该标签未注册到网关 / OPC 连接断开。请先在 자주 하는 작업 → 실시간 값 보기 中确认
inject 过快导致网关负载过高不建议低于 1 秒的轮询。若确实需要高速刷新,请考虑 SparkplugMQTT 直接订阅
开启 Fresh 选项的同时轮询大量标签PLC 并发 read 激增。平时使用缓存(default)即可,仅在诊断时使用 fresh
Node-RED 突然停止怀疑存在无限循环(节点输出 → 同一节点输入)。放置 Catch 节点可简化调试
外部互联网调用失败检查网关防火墙 / DNS。若为内网环境,需要配置 代理
“Maximum call stack size exceeded”function 节点中的无限递归。检查 return msg 是否形成自我重复触发的结构
Deploy 后流程全部消失/data1/pp-data/node-red/flows.json 损坏。需要从备份恢复。node/bin/start.sh 虽会与 master conf 自动 sync,但一旦损坏状态固化到磁盘就必须恢复
MQTT 消息一次都没收到主题通配符(#/+)拼写错误。使用 MQTT Explorer 等独立工具确认主题树
OPC-UA BadIdentityTokenInvalid用户名/密码错误或证书未受信任。在服务器控制台将客户端证书设为 Trust
OPC-UA BadTypeMismatchOpcUa-Item 的 DataType 与实际节点类型不一致

调试技巧

  1. debug 节点设置为 完整 msg 对象,确认哪些字段正在流转。
  2. Catch 节点放在一侧捕获所有错误并输出到 debug — 可立即定位是哪个节点出错。
  3. Status 节点可捕获 mqtt/opcua 节点的 已连接 / 已断开 变化,便于诊断外部通信问题。
  4. 利用 inject 的 Inject once after deploy 实现“Deploy 时执行一次”,并通过 debug 确认结果。
  5. function 中的 node.warn(...)node.error(...) 可自由输出到侧边栏。

后续步骤