OPC-UA-Integration

Vorstellung

OPC-UA (Unified Architecture) ist das Standardprotokoll für die industrielle Kommunikation zum sicheren Datenaustausch zwischen SPSen, SCADA-Systemen und Cloud-Systemen. Mit Eziwan können Sie über den sicheren OpenVPN-Tunnel von überall aus auf OPC-UA-Server in Ihrem OT-Netzwerk zugreifen.


Voraussetzungen

Auf der Steuerungsseite (OPC-UA-Server)

SteuerungOPC-UA-ServerMindest-Firmware-VersionSystemvoraussetzungen
Siemens S7-1500Integriert (nativ)FW 2.0 (2017)Aktivierung im TIA Portal
Siemens S7-1200Nicht verfügbarStattdessen Modbus TCP verwenden
B&R AutomationNativ (ArOpc)AR 4.34Aktivierung in Automation Studio
Beckhoff TwinCATTF6100 (TwinCAT OPC-UA-Server)TwinCAT 3.1.4020TF6100-Lizenz erforderlich
Phoenix Contact PLCnextIntegriertFW 2020.0Aktivierung über Web Based Management
Schneider EcoStruxureNativ (M262/M580)Aktivierung in SoMachine

Eziwan

  • Eziwan-Gateway mit Firmware ≥ 2.3
  • Das Gateway muss sich im selben Ethernet-Netzwerk wie die OPC-UA-Steuerung befinden oder mit dieser verbunden sein können (gleiches VLAN, keine Firewall, die Port 4840 blockiert)
  • Standard-OPC-UA-Port: TCP 4840

Architektur: Zugriff über einen VPN-Tunnel

Der OPC-UA-Fernzugriff über Eziwan erfolgt nach folgendem Schema:

Das Eziwan-Gateway fungiert als OPC-UA-Proxy: Es empfängt die Verbindungen von Remote-Clients über den OpenVPN-Tunnel und leitet sie an den OPC-UA-Server im lokalen OT-Netzwerk weiter. Der Remote-Client hat keinen direkten Zugriff auf das OT-Netzwerk.


Konfiguration im TIA Portal: OPC-UA-Server S7-1500 aktivieren

Schritt 1: Die Eigenschaften der CPU öffnen

  1. Doppelklicken Sie im TIA Portal in der Hardwareansicht auf die S7-1500-CPU.
  2. Wechseln Sie zur Registerkarte OPC UA.

Schritt 2: Den Server aktivieren

OPC UA
└── Server
[✓] Activate OPC UA server

Port: 4840
Max. sessions: 10
Session timeout: 10 000 ms

Security:
[✓] Keine Sicherheit (Basic256Sha256 wird auch in der Produktion empfohlen)
[✓] Basic256Sha256 - SignAndEncrypt

Access control:
[ ] Anonymen Zugriff zulassen (in der Produktionsumgebung deaktivieren)
[✓] Enable user access control

Schritt 3: Eine Server-Schnittstelle erstellen

Die Server-Schnittstelle definiert die über OPC-UA bereitgestellten Variablen:

OPC UA
└── Server interfaces
└── [New interface] → Nom: "Monitoring_Production"
└── Drag & Drop aus dem Projekt:
DB10.Temperature → wird als „Temperature“ angezeigt
DB10.Pressure → wird als „Pressure“ angezeigt
DB10.ProductCount → wird als „ProductCount“ angezeigt
DB10.Running → wird als „Running“ angezeigt

Schritt 4: Einen OPC-UA-Benutzer anlegen

OPC UA
└── Users
└── [Add user]
Username: eziwan_client
Password: MotDePasseStrong2026!
Rolle: Beobachter (nur Lesezugriff) oder Operator (Lese-/Schreibzugriff)

Schritt 5: Kompilieren und Herunterladen der Hardwarekonfiguration

Wichtig: Es muss lediglich die Hardwarekonfiguration neu kompiliert und hochgeladen werden. Das Anwenderprogramm (OB, FC, FB) bleibt unverändert.

Menü: „Build“ → „Build all“ (oder Strg+B)
Nur die Hardware-Kompilierung auf Fehler überprüfen
Menu : Online → Download to device → Hardware configuration

Verbindung über einen entfernten OPC-UA-Client

Option 1: Prosys OPC UA Browser (kostenlose grafische Benutzeroberfläche)

  1. Laden Sie den Prosys OPC UA Browser unter prosysopc.com herunter
  2. Starten Sie die Software
  3. Geben Sie die URL ein: opc.tcp://[IP_TUNNEL_EZIWAN]:4840
  4. Klicken Sie auf „Connect“
  5. Wählen Sie den Sicherheitsmodus aus (None für Tests, SignAndEncrypt für den Produktivbetrieb)
  6. Navigieren Sie durch die Knotenstruktur, um Ihre Variablen zu finden

Option 2: Python mit asyncua

import asyncio
from asyncua import Client
from asyncua import ua

# Configuration de connexion
OPC_UA_URL = "opc.tcp://[IP_TUNNEL_EZIWAN]:4840"
USERNAME = "eziwan_client"
PASSWORD = "MotDePasseStrong2026!"

async def lire_donnees_production():
"""Verbindung und Auslesen der Produktionsdaten über Eziwan."""

async with Client(url=OPC_UA_URL) as client:
# Authentifizierung über Benutzernamen
client.set_user(USERNAME)
client.set_password(PASSWORD)

print(f"Connecté à {OPC_UA_URL}")

# Methode 1: Direkter Zugriff über die Node-ID (sofern bekannt)
node_temp = client.get_node("ns=3;s=Monitoring_Production.Temperature")
temp = await node_temp.read_value()
print(f"Température : {temp} °C")

# Methode 2: Navigation in der Baumstruktur
root = client.get_root_node()
objects = await root.get_child(["0:Objects"])

# Untergeordnete Knoten auflisten
children = await objects.get_children()
for child in children:
name = await child.read_browse_name()
print(f"Nœud trouvé : {name.Name}")

# Methode 3: Abonnement bei Wertänderung
handler = ChangementValeurHandler()
sub = await client.create_subscription(period=1000, handler=handler)

nodes_a_surveiller = [
client.get_node("ns=3;s=Monitoring_Production.Temperature"),
client.get_node("ns=3;s=Monitoring_Production.Pressure"),
client.get_node("ns=3;s=Monitoring_Production.Running"),
]

await sub.subscribe_data_change(nodes_a_surveiller)
print("Abonnement actif. Ctrl+C pour arrêter.")

try:
while True:
await asyncio.sleep(1)
except KeyboardInterrupt:
pass
finally:
await sub.delete()

class ChangementValeurHandler:
"""Gestionnaire des notifications OPC-UA."""

def datachange_notification(self, node, val, data):
print(f"[{data.monitored_item.Value.SourceTimestamp}] {node}: {val}")

asyncio.run(lire_donnees_production())

Option 3: Node-RED mit node-opcua

[
{
"id": "opc-ua-input",
"type": "OpcUa-Client",
"endpoint": "opc.tcp://[IP_TUNNEL_EZIWAN]:4840",
"action": "subscribe",
"deadbandtype": "a",
"deadbandvalue": "1",
"time": "1",
"timeUnit": "s",
"certificate": "n",
"item": [
{"name": "Temperature", "nodeId": "ns=3;s=Monitoring_Production.Temperature"},
{"name": "Pressure", "nodeId": "ns=3;s=Monitoring_Production.Pressure"}
]
}
]

OPC-UA-Sicherheit: Modi und Zertifikate

Verfügbare Sicherheitsmodi

ModusAuthentifizierungVerschlüsselungEmpfehlung
KeineKeineKeineNur für Tests, niemals im Produktivbetrieb
SignX.509-ZertifikatNeinMittel
SignAndEncryptX.509-ZertifikatAES-256Im Produktivbetrieb obligatorisch

Unterstützte Sicherheitsrichtlinien

  • Basic128Rsa15: RSA 1024 Bit (veraltet, nicht verwenden)
  • Basic256: RSA 2048 Bit + SHA-1 (akzeptabel)
  • Basic256Sha256: RSA 2048 Bit + SHA-256 (empfohlen)
  • Aes128_Sha256_RsaOaep: AES-128 + SHA-256 (modern)
  • Aes256_Sha256_RsaPss: AES-256 + SHA-256 (am sichersten)

Zertifikatsverwaltung über Eziwan

Eziwan generiert automatisch die X.509-Zertifikate für die OPC-UA-Verbindung:

  1. Eziwan-Portal → Integrationen → OPC-UA → Zertifikate
  2. Auf „Zertifikat erstellen“ klicken
  3. Das Zertifikat im Format .der exportieren
  4. In die Vertrauensliste des OPC-UA-Servers importieren (TIA Portal → OPC UA → Vertrauenswürdige Clients)

Fehlerbehebung

Problem 1: Verbindungszeitüberschreitung

Symptom: ServiceResultException: BadTimeout oder fehlgeschlagene Verbindung.

Ursachen und Lösungen:

UrsacheÜberprüfungLösung
Port 4840 gesperrttelnet [IP_OT] 4840 vom Gateway ausPort in der lokalen OT-Firewall öffnen
OPC-UA-Server nicht aktiviertIn TIA Portal → OPC UA → Server überprüfenAktivieren und Konfiguration erneut herunterladen
Falsche Gateway-IPPing vom Gateway zur SPSNetzwerkkonfiguration des Gateways überprüfen
Timeout zu kurzClient-Timeout erhöhenclient.session_timeout = 30000 (asyncua)

Problem 2: Abgelehnte Zertifikate

Symptom: BadCertificateUntrusted oder BadSecurityChecksFailed

Lösungen:

  1. Auf dem S7-1500-Server: TIA Portal → OPC UA → Trusted Clients → Eziwan-Zertifikat hinzufügen
  2. Temporärer Modus: TIA Portal → OPC UA → Server → „Alle Zertifikate automatisch akzeptieren“ (nach der Konfiguration deaktivieren)
  3. Zertifikate neu generieren: Wenn das Zertifikat abgelaufen ist, generieren Sie es im Eziwan-Portal neu

Problem 3: Knoten nicht gefunden (BadNodeIdUnknown)

Symptom: BadNodeIdUnknown beim Lesen eines Knotens.

Ursachen:

  • Der Namespace (ns=X) ist falsch
  • Die Server-Schnittstelle wurde im TIA Portal nicht angelegt
  • Der Name des Knotens ist falsch geschrieben

Lösung: Verwenden Sie den Prosys OPC UA Browser, um durch die tatsächliche Baumstruktur zu navigieren und die genauen NodeIDs zu kopieren.

Problem 4: Häufige Verbindungsabbrüche

Symptom: Der Client wird regelmäßig getrennt, Fehler BadConnectionClosed.

Lösungen:

  • Den Wert für keepaliveInterval auf der Client-Seite erhöhen
  • Die Stabilität der Netzwerkverbindung überprüfen (OpenVPN-Keepalive konfiguriert)
  • Überprüfen, ob der max_sessions des S7-1500-Servers nicht erreicht ist (TIA Portal → OPC UA → Server → Max. Sessions)

Diagnosebefehle über das Gateway

Über die Eziwan-Konsole (SSH oder Weboberfläche → Terminal):

# Verbindung zum OPC-UA-Server testen
nc -zv 192.168.20.10 4840

# Den Status des OpenVPN-Tunnels überprüfen
systemctl status openvpn-client@eziwan --no-pager

# OPC-UA-Verbindungsprotokolle (nach Fehlern gefiltert)
journalctl -u eziwan-opcua-client -n 50 --no-pager | grep -i error

Häufig gestellte Fragen

OPC-UA oder Modbus: Was sollte man für die Datenübertragung wählen?

OPC-UA bietet Typisierung, Einheiten, Knotenhierarchie und Sicherheit durch Zertifikate; Modbus ist für eine schnelle Nachrüstung weiterhin einfacher. Bei einer S7-1500 oder einem neueren SCADA-System sollten Sie OPC-UA bevorzugen; bei einem älteren, heterogenen Systembestand hingegen Modbus.

Was ist ein OPC-UA-Knoten?

Die Informationseinheit des Servers: eine Variable (Messwert, Sollwert), ein Objekt oder eine Methode, die durch eine NodeId in einem Namensraum identifiziert wird. Der Eziwan-Client durchläuft die Baumstruktur und abonniert die ausgewählten Knoten.

Wie verwaltet man OPC-UA-Zertifikate?

Client und Server tauschen X.509-Zertifikate aus: Das Zertifikat des Eziwan-Clients muss serverseitig (TIA Portal, UaExpert) akzeptiert und eine Verschlüsselungsrichtlinie ausgewählt werden (empfohlen wird Basic256Sha256).

Welche Geräte werden von einem OPC-UA-Server bereitgestellt?

Aktuelle Steuerungen (Siemens S7-1500/S7-1200, Schneider M580, Beckhoff), SCADA-Systeme (WinCC, Ignition, AVEVA) sowie zahlreiche hochwertige Sensoren und Antriebe. Für den übrigen Anlagenbestand erfasst das Gateway die Daten über Modbus.

Weiterführende Ressourcen