OPC-UA Knoten
Über Community-Knoten wie node-red-contrib-opcua können Sie direkt mit externen OPC-UA Servern (Kepware, Ignition, andere Gateways) kommunizieren. Dieselben Knoten werden auch verwendet, um auf den OPC-UA Server des Gateways selbst zuzugreifen (opc.tcp://127.0.0.1:12000/opcua, NodeId ns=2;s=...).
Kopieren Sie die TCP Endpoint-URL und die NodeId direkt aus dem Menü OPC UA 서버 › Tab Serverinformationen. Weitere Einzelheiten finden Sie unter OPC UA Server verwenden.
1. Knotentypen (node-red-contrib-opcua)
| Knoten | Verwendung |
|---|---|
OpcUa-Endpoint | Server-Verbindungsdaten (Host/Port/Security/Auth) — einmal erstellen und in anderen Knoten teilen |
OpcUa-Item | Definition eines Einzelknotens — wandelt nodeId in Eingabewerte um |
OpcUa-Client | Hauptfunktionsknoten 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 erstellen
Knoten OpcUa-Client doppelt anklicken → Stiftsymbol neben dem Feld Endpoint → Neuer Endpoint:
| Feld | Wert (bezogen auf den integrierten Gateway-Server) |
|---|---|
| Endpoint | opc.tcp://127.0.0.1:12000/opcua |
| Security Policy | None (intern) oder Basic256Sha256 (externer Betrieb) |
| Security Mode | None / Sign / Sign & Encrypt |
| Login | Benutzername/Passwort aus der OPC UA Server-Maske oder Anonymous (falls erlaubt) |
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 mit dem Datentyp des Tags übereinstimmen — sonst BadTypeMismatch) |
OpcUa-Client:
| Feld | Wert |
|---|---|
| Action | READ oder WRITE |
| Endpoint | oben erstellter Endpoint |
Füllen Sie bei WRITE vor dem Knoten OpcUa-Item den Wert mit change wie msg.payload = 9999 aus.
4. Subscribe — Änderungen ohne Polling empfangen
Ein Subscribe ist wesentlich effizienter als Polling (zyklisches Lesen). Bei ausbleibenden Änderungen gibt es keinen Datenverkehr, und die Daten treffen im Mikrosekundenbereich ein.
inject (once after deploy) ─▶ OpcUa-Item ×N ─▶ join (배열) ─▶ OpcUa-Subscribe ─▶ debug / function
OpcUa-Subscribe:
| Feld | Wert |
|---|---|
| Action | SUBSCRIBE |
| Interval | Empfohlen 100 ms (Mindestintervall, mit dem der Server den Client benachrichtigt) |
| Queue size | 10 (Buffer bei Serverüberlastung) |
Die eingehenden Nachrichten enthalten msg.payload (Wert) + msg.topic (NodeId) + msg.timestamp.
5. Browse — Automatische Suche im Knotenbaum
Nützlich in Umgebungen wie KEPServerEX mit Hunderten oder Tausenden von Knoten, wenn man wissen möchte, welche NodeIds vorhanden sind.
inject ─▶ OpcUa-Client (action=BROWSE, msg.payload="ns=2;i=85") ─▶ debug
Die Antwort ist ein Array von [ {nodeId, browseName, displayName, ...} ] der Kindknoten. Dies kann mit function verarbeitet werden, um einen automatischen Registrierungsflow zu erstellen.
6. Häufige Fehlerquellen
| Symptom | Ursache / Lösung |
|---|---|
BadIdentityTokenInvalid | Benutzer/Passwort oder Zertifikat nicht vertrauenswürdig. Im Server-Konsole das Client-Zertifikat auf Trust setzen |
BadTypeMismatch | Der DataType von OpcUa-Item weicht vom tatsächlichen Knotentyp ab |
| Ständige Meldung Verbindung unterbrochen | Die Host-Domain der Endpoint-URL stimmt nicht mit dem CN des Zertifikats überein — Zertifikat neu ausstellen oder Host der URL an CN anpassen |
| Subscribe löst nur einmal aus | OpcUa-Subscribe muss nur einmal „registriert“ werden. Verwenden Sie die Option once after deploy beim Inject nur einmal |