Zum Inhalt springen

OPC UA-Konnektor

Der OPC UA (Open Platform Communications Unified Architecture)-Konnektor ermöglicht die Kommunikation mit OPC UA-Servern, dem industriellen Standardprotokoll für industrielle Automatisierung und Datenaustausch.

Konnektor-Typen:

  • OpcuaReader - Daten von OPC UA-Servern lesen
  • OpcuaWriter - Daten auf OPC UA-Server schreiben
  • ✅ Industrielles Standardprotokoll für industrielle Automatisierung
  • ✅ Mehrere Authentifizierungsmethoden (Anonym, Basic, Zertifikat)
  • ✅ Sicherheitsmodi (None, Sign, SignAndEncrypt)
  • ✅ Konfigurierbare Abfrageraten
  • ✅ Unterstützung komplexer Knotenstrukturen
  • ✅ Lese- und Schreiboperationen
{
"type": "OpcuaReader",
"config": {
"endpoint": "opc.tcp://localhost:4840",
"pollingRate": 1000
},
"variables": [
{
"key": "temperature",
"nodeId": "ns=1;s=Temperature"
},
{
"key": "pressure",
"nodeId": "ns=1;s=Pressure"
}
]
}
{
"type": "OpcuaWriter",
"config": {
"endpoint": "opc.tcp://localhost:4840",
"auth": {
"mode": "Basic",
"username": "opcuser",
"password": "opcpassword"
}
},
"variables": [
{
"key": "setpoint",
"nodeId": "ns=1;s=Setpoint"
},
{
"key": "control_mode",
"nodeId": "ns=1;s=ControlMode"
}
]
}

Die Endpunkt-URL des OPC UA-Servers.

{
"endpoint": "opc.tcp://192.168.1.100:4840"
}

Format: opc.tcp://[host]:[port][/pfad]

Für Reader das Intervall in Millisekunden zwischen Datenlesungen.

{
"pollingRate": 1000 // Alle 1 Sekunde lesen
}

Empfohlene Werte:

  • Schnell: 100-500ms
  • Normal: 1000ms (1 Sekunde)
  • Langsam: 5000ms (5 Sekunden)

Keine Authentifizierung erforderlich:

{
// Kein auth-Feld erforderlich
}

Benutzername und Passwort:

{
"auth": {
"mode": "Basic",
"username": "your-username",
"password": "your-password"
}
}

X.509-Zertifikate:

{
"auth": {
"authCertificateFile": {
"mode": "DirectPath",
"fileName": "client-cert.pem",
"path": "/path/to/client-cert.pem"
},
"authKeyFile": {
"mode": "DirectPath",
"fileName": "client-key.pem",
"path": "/path/to/client-key.pem"
}
}
}

Sicherheitsmodus und -policy konfigurieren:

{
"security": {
"mode": "SignAndEncrypt",
"policy": "Basic256Sha256"
}
}

Sicherheitsmodi:

  • None - Keine Sicherheit (Standard)
  • Sign - Nur Nachrichten signieren
  • SignAndEncrypt - Nachrichten signieren und verschlüsseln

Sicherheits-Policies:

  • None
  • Basic128Rsa15
  • Basic256
  • Basic256Sha256 (empfohlen)

Variablen definieren, welche OPC UA-Knoten gelesen oder geschrieben werden.

{
"key": "temperature",
"nodeId": "ns=1;s=Temperature"
}

Felder:

  • key - Der Schlüsselname im Meddle-Payload
  • nodeId - Die OPC UA-Knoten-ID

OPC UA unterstützt verschiedene Node ID-Formate:

{
"key": "sensor1",
"nodeId": "ns=1;s=SensorName"
}

Format: ns=[namespace];[typ]=[identifier]

Wobei:

  • ns - Namespace-Index (0-65535)
  • typ - Node ID-Typ:
    • s - String
    • i - Numerisch
    • g - GUID
    • b - Opaque (Base64)
OPC UA-Server → OpcuaReader → Meddle-Payload

Beispiel:

OPC UA-Knoten:

  • ns=1;s=Temperature = 25.5
  • ns=1;s=Pressure = 101.3

Ausgabe-Payload:

{
"temperature": 25.5,
"pressure": 101.3
}
Meddle-Payload → OpcuaWriter → OPC UA-Server

Beispiel:

Eingabe-Payload:

{
"setpoint": 30.0,
"mode": "auto"
}

Schreibt auf:

  • ns=1;s=Setpoint ← 30.0
  • ns=1;s=Mode ← “auto”

Temperatursensoren von einer SPS lesen:

{
"type": "OpcuaReader",
"config": {
"endpoint": "opc.tcp://plc.local:4840",
"pollingRate": 1000
},
"variables": [
{
"key": "zone1_temp",
"nodeId": "ns=2;s=Zone1.Temperature"
},
{
"key": "zone2_temp",
"nodeId": "ns=2;s=Zone2.Temperature"
},
{
"key": "ambient_temp",
"nodeId": "ns=2;s=Ambient.Temperature"
}
]
}

Sollwerte zum Steuern eines Prozesses schreiben:

{
"type": "OpcuaWriter",
"config": {
"endpoint": "opc.tcp://plc.local:4840",
"auth": {
"mode": "Basic",
"username": "operator",
"password": "secure123"
}
},
"variables": [
{
"key": "temperature_setpoint",
"nodeId": "ns=2;s=Control.TempSetpoint"
},
{
"key": "pressure_setpoint",
"nodeId": "ns=2;s=Control.PressureSetpoint"
}
]
}

Mehrere Maschinen überwachen:

{
"type": "OpcuaReader",
"config": {
"endpoint": "opc.tcp://scada.local:4840",
"pollingRate": 500
},
"variables": [
{
"key": "machine1_status",
"nodeId": "ns=3;s=Machine1.Status"
},
{
"key": "machine1_speed",
"nodeId": "ns=3;s=Machine1.Speed"
},
{
"key": "machine1_count",
"nodeId": "ns=3;s=Machine1.ProductCount"
},
{
"key": "machine2_status",
"nodeId": "ns=3;s=Machine2.Status"
},
{
"key": "machine2_speed",
"nodeId": "ns=3;s=Machine2.Speed"
}
]
}

Problem: Kann nicht mit OPC UA-Server verbinden

Lösungen:

  1. Endpunkt-URL überprüfen
  2. Netzwerkkonnektivität prüfen: ping [server-ip]
  3. Port-Öffnung überprüfen: telnet [server-ip] 4840
  4. Firewall-Regeln überprüfen
  5. Sicherstellen, dass OPC UA-Server läuft

Problem: Authentifizierungsfehler

Lösungen:

  1. Benutzername und Passwort überprüfen
  2. Benutzerberechtigungen prüfen
  3. Bei Zertifikat-Auth sicherstellen, dass Zertifikate gültig und nicht abgelaufen sind
  4. Zertifikatspfade überprüfen

Problem: “Knoten nicht gefunden”-Fehler

Lösungen:

  1. OPC UA-Client (wie UaExpert) zum Durchsuchen des Servers verwenden
  2. Namespace-Index überprüfen
  3. Node ID-Format mit Server-Format abgleichen
  4. Sicherstellen, dass Knoten existiert und zugänglich ist

Problem: Sicherheits-Policy-Fehler

Lösungen:

  1. Vom Server unterstützte Sicherheits-Policies prüfen
  2. security.policy mit unterstützter Policy abgleichen
  3. Zertifikate für verschlüsselte Verbindungen korrekt konfigurieren

Problem: Langsame Datenaktualisierungen oder hohe CPU-Auslastung

Lösungen:

  1. pollingRate erhöhen, um Frequenz zu reduzieren
  2. Anzahl gelesener Variablen reduzieren
  3. Abonnement-basiertes Lesen verwenden, falls unterstützt
  4. Netzwerklatenz überprüfen

Nicht schneller abfragen als nötig:

  • Kritische Daten: 100-500ms
  • Normale Überwachung: 1000ms
  • Langsam ändernde Werte: 5000ms+

In Produktion immer Authentifizierung und Verschlüsselung verwenden:

{
"auth": {
"mode": "Basic",
"username": "user",
"password": "pass"
},
"security": {
"mode": "SignAndEncrypt",
"policy": "Basic256Sha256"
}
}

Verwandte Variablen im selben Konnektor für bessere Organisation halten:

{
"variables": [
// Temperatursensoren
{"key": "temp1", "nodeId": "ns=1;s=Temp1"},
{"key": "temp2", "nodeId": "ns=1;s=Temp2"},
// Drucksensoren
{"key": "press1", "nodeId": "ns=1;s=Press1"},
{"key": "press2", "nodeId": "ns=1;s=Press2"}
]
}

Meddle behandelt Verbindungsverlust und Wiederverbindung automatisch, aber berücksichtigen Sie:

  • Merge-Konnektor mit Timeout für fehlende Daten verwenden
  • Alert-Konnektoren für Verbindungsprobleme hinzufügen

Mit anonymer Authentifizierung beginnen, um Konnektivität zu überprüfen, dann Sicherheit hinzufügen:

  1. Ohne Auth testen
  2. Username/Passwort hinzufügen
  3. Verschlüsselung hinzufügen
  4. Zertifikat-Auth hinzufügen
OpcuaReader → Filter → Reshape → InfluxDb2Writer
Trigger → Alert (E-Mail bei hoher Temp)
  1. OpcuaReader: Temperatur und Druck lesen
  2. Filter: Nur relevante Felder behalten
  3. Reshape: Metadaten hinzufügen (Standort, Einheit)
  4. InfluxDb2Writer: In Zeitreihendatenbank speichern
  5. Trigger: Auf hohe Temperatur prüfen
  6. Alert: E-Mail senden, wenn Schwellenwert überschritten
  • Modbus - Alternatives industrielles Protokoll
  • Siemens S7 - Direkte Siemens-SPS-Kommunikation
  • Filter - OPC UA-Daten filtern
  • Trigger - Bedingte Logik für OPC UA-Daten