集成 · 集成

把 OPC UA 连接到 Node-RED

产品Node-RED
类别集成
OPC UA 角色客户端

Node-RED 通过社区节点而非内建能力来使用 OPC UA,这使它非常适合在一个下午里做出客户端原型,而作为生产采集器则有风险。反复出现的两个问题是证书处理(这些节点只暴露了一部分)和单线程运行时(高速率订阅会把它压垮)。

开始之前

  • 一个安装了受支持 Node.js 运行时的 Node-RED,以及在其上安装面板节点的权限。在 OT 网络中,这个权限往往才是真正的阻碍。
  • 从 palette 安装的一套 OPC UA 客户端节点。存在多个相互竞争的社区包,节点名称不同、配置方式不同、维护状态也不同;选定一个,并在所有 flow 中保持一致。
  • 一个可用的端点 URL,以及关于安全的明确决定。如果你打算使用签名并加密,请在构建 flow 之前确认你选的 node 包支持服务器提供的策略。
  • 一个不是 Node-RED 的数据去处。它自身没有持久化缓冲。

配置方法

  1. 只安装一个 OPC UA node 包并一直用它从 palette manager 安装,然后在项目笔记中记下包名和版本。在同一个 Node-RED 实例中混用两个 OPC UA 包会产生令人困惑的重复节点类型和相互冲突的证书目录。
  2. 先用安全模式 None 验证端点为客户端节点配置端点 URL 且不启用安全,读取一个已知节点。这能把网络和端点问题与证书问题区分开,而且只需一分钟。
  3. 显式完成证书工作找到你的 node 包在磁盘上存放客户端证书以及 trusted 和 rejected 文件夹的位置,然后双向完成交换:服务器必须信任 Node-RED 客户端证书,客户端必须信任服务器证书。正是这一步把一个演示变成能通过安全评审的东西。
  4. 在软件包允许时按命名空间 URI 寻址节点大多数社区节点接受带字面命名空间索引的 NodeId 字符串,通常由消息主题携带。如果软件包支持按命名空间 URI 解析,就使用它。如果不支持,就在流程启动时用一个 function 节点读取 NamespaceArray,并据此构造 NodeId 字符串,而不是把索引粘贴到每个节点里。
  5. 用订阅代替轮询,并在下游之前做限流使用该包的订阅或监听节点,publishing interval 与消费端的实际需要相匹配。然后在订阅与任何实际处理的节点之间加入限流节点或聚合节点,因为每条消息都运行在与其余 flow 相同的事件循环上。
  6. 把重连当作一等情况处理把客户端节点的状态输出接到能记录日志并告警的地方。在防火墙上阻断端点来测试,观察流程是自行恢复还是需要重新部署,因为答案因软件包和版本而异。
  7. 立即把数据送到持久存储把消息直接发送到 MQTT broker、时序数据库或文件,变换放在这一跳之后。Node-RED 每次部署都会重启,此刻只保存在 flow context 中的内容都会丢失。

地址空间是什么样子

Node-RED 不构建模型。每条消息携带一个值或一小批值,其中包含节点包选择暴露的那部分 DataValue:通常是值本身,有时包含 StatusCode 和时间戳,往往不含类型信息。地址空间结构需要在每个 flow 中用 browse 节点重新发现,并且不会被保留。这对原型验证和粘合工作是可以接受的,但这意味着数据的语义存在于 flow 的布局和节点名称中,而它们不可查询、默认不受版本管理、也无法移植到下一台机器。如果同一套映射要用两次,就用一次 browse 生成 NodeId 列表,并作为文件保存供 flow 读取。

陷阱

  • 社区节点在质量和维护上并不一致。节点名称、消息格式和证书目录布局在不同包之间、以及同一个包的不同版本之间都有差异,因此请记录某个 flow 是基于哪个包的哪个版本构建的。
  • 把字面命名空间索引粘贴到每个节点里,是 Node-RED 的典型失效模式。一次 PLC 程序下载之后,整个流程会同时返回 BadNodeIdUnknown,而且没有一个统一的地方可以修改。
  • 证书处理是大多数包中最薄弱的部分,这正是如此多生产环境的 Node-RED 采集器悄悄以安全模式 None 运行的原因。这应当是有人有意识做出的决定,而不是被继承下来的默认值。
  • Node-RED 是单线程的。在几百个项上使用 50 ms 发布间隔的订阅会让事件循环饥饿,连编辑器本身都会失去响应,而症状看起来像是网络问题。
  • 一次 deploy 会重启 flow,从而断开会话和订阅。部署一处小小的看板改动就会中断采集,因此负责采集的 Node-RED 实例不应同时是人们在班中编辑的那个实例。
  • 没有存储转发。如果下游接收端不可用,除非你自己做了缓冲,否则消息就直接丢失。
  • 服务器端的会话上限按客户端节点消耗,一个包含多个客户端节点、连向同一台嵌入式 PLC 服务器的 flow 就可能把它们耗尽。

从中获取 OEE 数据

Node-RED 适合用来探查一台设备暴露了什么,不适合用来计算 OEE。它可以读取状态变量、计数器和原因代码并转发出去,这对概念验证或对其他手段无法接入的设备确实有用。它给不了计算所需的可靠性:没有持久缓冲,每次部署都会中断采集,时序取决于与实例中其他一切共享的事件循环。如果 Node-RED 采集器要上生产,就只让它做一件事,保持服务器时间戳不变、立即把值送到 broker 或数据库,并在下游计算可用率、性能和质量,那里的缺口可见且可重新处理。计划生产时间、班次日历和标准节拍时间不在设备里,也不应硬编码进 flow。

在依赖它之前请先核实:当前维护中的社区 OPC UA 包是哪一个、它提供哪些节点类型和消息格式、支持哪些安全策略、证书库存放在哪里,都会随包本身和 Node-RED 的变化而变化,任何第三方页面(包括本页)都不是可靠来源。请查阅你所安装版本的包自身当前文档和 issue 跟踪,并在 OT 主机上部署前确认所支持的 Node.js 版本。

最后核对日期 2026 年 9 月 7 日,对照 OPC UA 1.05.07。OPC UA Connect 是教育资源,与 OPC Foundation 无隶属关系。

免费下载
OPC UA Machine Data → OEE Mapping Kit
该订阅哪些节点、它们如何变成可用率、性能和质量,以及哪一个伴随规范已经给出了答案:从此不必再自己发明标签。
获取免费映射工具包 →
免费,无需课程,无需登录