OPC-UA 节点详解
通过 node-red-contrib-opcua 这类社区节点,可以直接与外部 OPC-UA 服务器(Kepware、Ignition、其他网关)通信。接入网关自身的 OPC-UA 服务器时也使用相同的节点(opc.tcp://127.0.0.1:12000,NodeId ns=2;s=...)。
接入内置 OPC-UA 服务器时
在界面菜单 OPC-UA 查看器 中直接复制 TCP Endpoint URL 与 NodeId 使用。详见 使用 OPC-UA 节点查看器。
1. 节点种类 (node-red-contrib-opcua)
| 节点 | 用途 |
|---|---|
OpcUa-Endpoint | 服务器连接信息 (host/port/security/auth) — 创建一次即可在其他节点中共享 |
OpcUa-Item | 单个节点定义 — 将 nodeId 转换为输入 |
OpcUa-Client | Read / Write / Browse / Method call 的主要动作节点 |
OpcUa-Subscribe | 订阅变更事件(MonitoredItem) — 无需轮询,以 push 方式接收 |
OpcUa-Event | 订阅 OPC-UA Alarm & Event |
2. 创建 Endpoint
双击 OpcUa-Client 节点 → Endpoint 栏旁的铅笔图标 → 新建 endpoint:
| 项目 | 值(以网关内置服务器为准) |
|---|---|
| Endpoint | opc.tcp://127.0.0.1:12000 |
| Security Policy | None(内部)或 Basic256Sha256(外部运行) |
| Security Mode | None / Sign / Sign & Encrypt |
| Login | OPC-UA 查看器界面中的 Username/Password,或 Anonymous(允许时) |
3. Read / Write 模式
inject ─▶ OpcUa-Item (nodeId, msg.payload type) ─▶ OpcUa-Client (READ/WRITE) ─▶ debug
OpcUa-Item:
| 项目 | 值 |
|---|---|
| Item | ns=2;s=SITE_00001.OPC_00303.TAG_TEST_00042 |
| DataType | Int32(必须与实际标签的数据类型一致 — 不一致会出现 BadTypeMismatch) |
OpcUa-Client:
| 项目 | 值 |
|---|---|
| Action | READ 或 WRITE |
| Endpoint | 上面创建的 endpoint |
WRITE 时,请在 OpcUa-Item 节点前用 change 按 msg.payload = 9999 的形式填入值。
4. Subscribe — 无需轮询,仅接收变更
相比轮询(周期性 read),Subscribe 效率高得多。没有变更就没有流量,并且可在微秒级到达。
inject (once after deploy) ─▶ OpcUa-Item ×N ─▶ join (배열) ─▶ OpcUa-Subscribe ─▶ debug / function
OpcUa-Subscribe:
| 项目 | 值 |
|---|---|
| Action | SUBSCRIBE |
| Interval | 建议 100 ms(服务器通知客户端的最小周期) |
| Queue size | 10(服务器突发时的缓冲) |
传入的消息中包含 msg.payload(值) + msg.topic(NodeId) + msg.timestamp。
5. Browse — 自动遍历节点树
在 KEPServerEX 这类拥有数百/数千个节点的环境中,用于了解“存在哪些 NodeId”。
inject ─▶ OpcUa-Client (action=BROWSE, msg.payload="ns=2;i=85") ─▶ debug
响应为子节点的 [ {nodeId, browseName, displayName, ...} ] 数组。也可以用 function 对其加工,构建自动注册流程。
6. 常见陷阱
| 现象 | 原因 / 解决 |
|---|---|
BadIdentityTokenInvalid | 用户名/密码错误或证书未被信任。在服务器控制台将客户端证书设为 Trust |
BadTypeMismatch | OpcUa-Item 的 DataType 与实际节点类型不符 |
| 频繁出现连接断开消息 | Endpoint URL 的主机域名与证书 CN 不一致 — 重新签发证书,或将 URL 中的主机 与证书 CN 保持一致 |
| Subscribe 只触发一次 | OpcUa-Subscribe 只需“注册”一次。inject 的 once after deploy 选项只使用 1 次 |