Zum Hauptinhalt springen

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=...).

Beim Zugriff auf den integrierten OPC-UA-Server

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)

NodeVerwendung
OpcUa-EndpointSerververbindungsdaten (host/port/security/auth) — einmal anlegen und in anderen Nodes gemeinsam nutzen
OpcUa-ItemDefinition eines einzelnen Nodes — wandelt nodeId in eine Eingabe um
OpcUa-ClientHaupt-Aktionsnode für Read / Write / Browse / Method call
OpcUa-SubscribeAbonnement von Änderungsereignissen (MonitoredItem) — Empfang per Push statt Polling
OpcUa-EventAbonnement von OPC-UA Alarm & Event

2. Endpoint anlegen

Doppelklick auf den Node OpcUa-Client → Stift neben dem Feld Endpoint → neuer Endpoint:

FeldWert (bezogen auf den integrierten Server des Gateways)
Endpointopc.tcp://127.0.0.1:12000
Security PolicyNone (intern) oder Basic256Sha256 (externer Betrieb)
Security ModeNone / Sign / Sign & Encrypt
LoginUsername/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:

FeldWert
Itemns=2;s=SITE_00001.OPC_00303.TAG_TEST_00042
DataTypeInt32 (muss zum tatsächlichen Datentyp des Tags passen — andernfalls BadTypeMismatch)

OpcUa-Client:

FeldWert
ActionREAD oder WRITE
Endpointder 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:

FeldWert
ActionSUBSCRIBE
Interval100 ms empfohlen (kleinstes Intervall, in dem der Server den Client benachrichtigt)
Queue size10 (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

SymptomUrsache / Abhilfe
BadIdentityTokenInvalidBenutzer/Passwort falsch oder Zertifikat nicht vertrauenswürdig. Client-Zertifikat in der Serverkonsole auf Trust setzen
BadTypeMismatchDer DataType in OpcUa-Item weicht vom tatsächlichen Node-Typ ab
Ständige Meldung Verbindung getrenntDie 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 ausOpcUa-Subscribe muss nur einmal „registriert“ werden. Die Option once after deploy des inject-Nodes nur einmal verwenden

7. Nächste Schritte