OPC-UA 节点
您可以通过像 node-red-contrib-opcua 这样的社区节点直接与 外部 OPC-UA 服务器(Kepware, Ignition, 其他网关)进行通信。连接到网关自身的 OPC-UA 服务器时也使用相同的节点 (opc.tcp://127.0.0.1:12000/opcua, NodeId ns=2;s=...)。
连接内置 OPC-UA 服务器时
直接复制屏幕菜单 OPC UA 服务器 › 服务器信息选项卡中的 TCP 终点 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/opcua |
| 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 次 |