OPC-UA
OPC-UA (OLE for Process Control - Unified Architecture, IEC 62541) ist der Standard für die Kommunikation in der industriellen Automatisierung. Nahezu alle SCADA- und Middleware-Produkte wie Kepware, Matrikon, Prosys oder Ignition bieten eine OPC-UA-Serverfunktion.
Da die meisten PLCs selbst keine OPC-UA-Serverfunktion besitzen, werden die PLC-Werte üblicherweise über eine Gateway-Software wie Kepware als OPC-UA bereitgestellt; dieses Gateway verbindet sich dann mit diesem OPC-UA-Server und ruft die Werte ab.
Der OPC-UA-Client dieses Gateways unterstützt bis zu OPC UA 1.04 (IEC 62541:2020) — basierend auf dem Eclipse Milo 0.6.16 SDK.
- Transport: opc.tcp:// (UA Binary encoding)
- Security: None / Basic256Sha256 / Aes128_Sha256_RsaOaep / Aes256_Sha256_RsaPss und weitere Standardrichtlinien
- User token: Anonymous / UserName+Password / X.509 Certificate
- Subscription: Das Gateway arbeitet im Polling-Verfahren (Intervall
timecycle) — MonitoredItem-Subscriptions von UA werden nicht verwendet
Eingabefelder des Registrierungsformulars
| Eingabefeld | Was wird eingetragen | Beispiel |
|---|---|---|
| IP-Adresse | IP des OPC-UA-Server-PCs | 192.168.0.40 |
| Port | Port des OPC-UA-Servers | 49320 (Kepware-Standard) / 4840 (Standard) |
| Benutzer (User) | Am OPC-UA-Server registrierte Benutzer-ID | kopens (serverabhängig) |
| Passwort | Passwort dieses Benutzers | *** |
| Servername (servername) | Servername am Ende des Endpunkts | (bei Kepware leer lassen) |
| Discovery verwenden | Ob die Endpunkte des Servers automatisch ermittelt werden | Normalerweise false. Falls das nicht funktioniert, true versuchen |
| Subscription verwenden (subscription-enabled) | Server-Push-Modus statt Polling | Bei Aktivierung true (effizient bei großen Tag-Mengen) |
| Publishing (publishing-interval) | Intervall, in dem der Server Datenänderungen publiziert (ms) | 1000 (Standard) |
| Sampling (sampling-interval) | Intervall, in dem der Server Werte abtastet (ms) | 1000 (Standard) |
| Queue Size (queue-size) | Größe der Warteschlange für Änderungswerte (verhindert Verlust von Notifications) | 10 (Standard) |
Bleiben die Felder Benutzer / Passwort beide leer, wird eine anonyme Verbindung (Anonymous) versucht. Der Server muss anonyme Verbindungen zulassen.
PLC-Adressnotation der Tags
Die Tag-Adresse in OPC-UA hat üblicherweise das folgende Format, die sogenannte NodeId.
| Notation | Beschreibung |
|---|---|
ns=2;s=Channel1.Device1.Tag1 | Namespace 2, String-Bezeichner — bei Kepware am häufigsten |
ns=2;i=1234 | Namespace 2, numerischer Bezeichner |
ns=3;g=09087e75-8e5e-499b-954f-f2a8624db28a | GUID-Form |
ns=ist die Namespace-Nummer. Üblicherweise2.- Nach
s=folgt ein Pfad der Form „Channel.Device.Tag“ (exakt der in Kepware angelegte Pfad).
Wie ermittelt man die NodeId
- In den Handbüchern des PLC-Herstellers bzw. von Kepware ist häufig eine Zuordnungstabelle enthalten.
- Mit einem kostenlosen OPC-UA-Client wie UA Expert direkt verbinden und im Baum per Rechtsklick auf den Knoten die NodeId kopieren.
- Dasselbe lässt sich auch mit dem Kepware-eigenen Werkzeug OPC Quick Client erledigen.
Kepware-Schnellkonfiguration
Vorgehen am Beispiel der häufig verwendeten Kombination mit Kepware.
- Kepware Server → Project → Kanal hinzufügen (z. B.
Simulator) - Gerät hinzufügen (z. B.
Simulator) → Modell =16 Bit Device - Tag hinzufügen → Name
Sine1, typeFloat, scan rate100ms - Unter Project Properties → OPC UA → Server Endpoint den Port
49320aktivieren - Anonymen Zugriff oder Benutzerkonto aktivieren
Im Registrierungsformular dieses Gateways:
| Feld | Wert |
|---|---|
| IP | IP des Kepware-Server-PCs |
| Port | 49320 |
| Benutzer/Passwort | Das oben angelegte Konto (bei anonymem Zugriff leer lassen) |
| PLC-Adresse des Tags | ns=2;s=Simulator.Simulator.Sine1 |
Häufige Probleme und Lösungen
| Symptom / Meldung | Mögliche Ursache | Lösung |
|---|---|---|
| „Connection refused“ / keine Verbindung | OPC-UA-Server ausgeschaltet oder Port blockiert | Prüfen, ob der OPC-UA-Server läuft und ob IP/Port korrekt sind |
| „User access denied“ | Falscher Benutzer/falsches Passwort oder anonymer Zugriff am Server nicht erlaubt | Benutzer am Server anlegen oder anonymen Zugriff zulassen |
| „Security checks failed“ | Sicherheitsrichtlinie des Servers passt nicht | Sicherheitsrichtlinie des Servers auf „None“ oder „Basic256Sha256“ einstellen |
Verbindung besteht, aber der Wert ist stets 0 oder null | Tippfehler in der NodeId, abweichende Namespace-Nummer | Mit UA Expert o. Ä. prüfen, ob dieselbe NodeId tatsächlich funktioniert |
| Verbindung bricht wiederholt ab und wird neu aufgebaut | Instabiles Netzwerk oder Auslastung des Server-PCs | Ressourcen des Server-PCs, Kabel und Switch einer Inspektion unterziehen |
Häufig verwendete Datenformate
| Wert in der PLC | Datenformat | Formatzusatz | Beispiel PLC-Adresse |
|---|---|---|---|
| Ein/Aus | Boolean | (leer) | ns=2;s=Pump.Status |
| Ganzzahl | Integer | (leer) | ns=2;s=Counter |
| Große Ganzzahl | Long | (leer) | ns=2;s=Total |
| Gleitkomma (32-bit) | Float | (leer) | ns=2;s=Pressure |
| Gleitkomma (64-bit, präzise) | Double | (leer) | ns=2;s=PrecisionTemp |
| Zeichenkette | String | (leer) | ns=2;s=Recipe.Name |
Bei OPC-UA bleibt das Feld format üblicherweise leer (der Server teilt den Datentyp mit).
Ausführlichere Beispiele / automatisierte Registrierung
Wenn Sie die Registrierung per Skript oder API automatisieren möchten, beachten Sie die OPC-UA-Beispiele auf der Seite Erweitert — REST API.