OPC-UA-Nodes im Detail verwenden
Über Community-Nodes wie node-red-contrib-opcua können Sie direkt mit externen OPC-UA-Servern (Kepware, Ignition, anderen Gateways) kommunizieren. Dieselben Nodes werden auch für die Verbindung zum OPC-UA-Server des Gateways selbst verwendet (opc.tcp://127.0.0.1:12000, NodeId ns=2;s=...).
Kopieren Sie TCP Endpoint URL und NodeId unverändert aus dem Bildschirmmenü OPC-UA-Viewer. Details siehe OPC-UA-Node-Viewer verwenden.
1. Node-Typen (node-red-contrib-opcua)
| Node | Verwendung |
|---|---|
OpcUa-Endpoint | Serververbindungsdaten (host/port/security/auth) — einmal anlegen und in anderen Nodes gemeinsam nutzen |
OpcUa-Item | Definition eines einzelnen Nodes — wandelt nodeId in eine Eingabe um |
OpcUa-Client | Haupt-Aktionsnode für Read / Write / Browse / Method call |
OpcUa-Subscribe | Abonnement von Änderungsereignissen (MonitoredItem) — Empfang per Push statt Polling |
OpcUa-Event | Abonnement von OPC-UA Alarm & Event |
2. Endpoint anlegen
Doppelklick auf den Node OpcUa-Client → Stift neben dem Feld Endpoint → neuer Endpoint:
| Feld | Wert (bezogen auf den integrierten Server des Gateways) |
|---|---|
| Endpoint | opc.tcp://127.0.0.1:12000 |
| Security Policy | None (intern) oder Basic256Sha256 (externer Betrieb) |
| Security Mode | None / Sign / Sign & Encrypt |
| Login | Username/Password aus dem OPC-UA-Viewer oder Anonymous (sofern zugelassen) |
3. Read-/Write-Muster
inject ─▶ OpcUa-Item (nodeId, msg.payload type) ─▶ OpcUa-Client (READ/WRITE) ─▶ debug
OpcUa-Item:
| Feld | Wert |
|---|---|
| Item | ns=2;s=SITE_00001.OPC_00303.TAG_TEST_00042 |
| DataType | Int32 (muss zum tatsächlichen Datentyp des Tags passen — andernfalls BadTypeMismatch) |
OpcUa-Client:
| Feld | Wert |
|---|---|
| Action | READ oder WRITE |
| Endpoint | der oben angelegte Endpoint |
Füllen Sie beim WRITE den Wert vor dem Node OpcUa-Item mit change entsprechend msg.payload = 9999 auf.
4. Subscribe — nur Änderungen empfangen, ohne Polling
Subscribe ist deutlich effizienter als Polling (zyklisches Read). Ohne Änderung entsteht kein Datenverkehr, und die Werte treffen im Mikrosekundenbereich ein.
inject (once after deploy) ─▶ OpcUa-Item ×N ─▶ join (배열) ─▶ OpcUa-Subscribe ─▶ debug / function
OpcUa-Subscribe:
| Feld | Wert |
|---|---|
| Action | SUBSCRIBE |
| Interval | 100 ms empfohlen (kleinstes Intervall, in dem der Server den Client benachrichtigt) |
| Queue size | 10 (Puffer bei Serverlastspitzen) |
Die eingehenden Nachrichten enthalten msg.payload (Wert) + msg.topic (NodeId) + msg.timestamp.
5. Browse — Node-Baum automatisch durchsuchen
Für Umgebungen wie KEPServerEX mit Hunderten oder Tausenden Nodes, wenn Sie wissen möchten, „welche NodeIds es gibt“.
inject ─▶ OpcUa-Client (action=BROWSE, msg.payload="ns=2;i=85") ─▶ debug
Die Antwort ist ein [ {nodeId, browseName, displayName, ...} ]-Array der untergeordneten Nodes. Damit lässt sich per function auch ein Flow zur automatischen Registrierung aufbauen.
6. Häufige Stolperfallen
| Symptom | Ursache / Abhilfe |
|---|---|
BadIdentityTokenInvalid | Benutzer/Passwort falsch oder Zertifikat nicht vertrauenswürdig. Client-Zertifikat in der Serverkonsole auf Trust setzen |
BadTypeMismatch | Der DataType in OpcUa-Item weicht vom tatsächlichen Node-Typ ab |
| Ständige Meldung Verbindung getrennt | Die Hostdomäne der Endpoint-URL stimmt nicht mit dem CN des Zertifikats überein — Zertifikat neu ausstellen oder Host in der URL an den CN des Zertifikats anpassen |
| Subscribe löst nur einmal aus | OpcUa-Subscribe muss nur einmal „registriert“ werden. Die Option once after deploy des inject-Nodes nur einmal verwenden |