OPC UA
OPC UA (Open Platform Communications Unified Architecture) ist ein leistungsfähiges und flexibles Protokoll, das eine große Bedeutung in der modernen Automatisierungstechnik bzw. der Industrie 4.0 hat, weil es Vernetzung und Datenaustausch zwischen verschiedenen Systemen und Geräten unterstützt.
Merkmale
- Interoperabilität: OPC UA unterstützt die Kommunikation zwischen Geräten und Systemen verschiedener Hersteller.
- Plattformunabhängigkeit: OPC UA ist plattformunabhängig und kann auf verschiedenen Betriebssystemen und Hardwarearchitekturen implementiert werden.
- Sicherheit: OPC UA unterstützt integrierte Sicherheitsfunktionen, einschließlich Authentifizierung, Autorisierung, Verschlüsselung und Datenintegrität.
- Modularität: Das Protokoll ist modular. Es unterstützt damit verschiedene Anforderungen und Anwendungsfälle mit einfachen und komplexen Datenstrukturen.
- Echtzeitkommunikation: OPC UA unterstützt sowohl synchronisierte als auch asynchrone Datenübertragung um, z.B. Daten in "Echtzeit" zu übertragen.

OPC UA - Protokollstapel (OPC Unified Architecture – Wikipedia 04.04.2025)
Konfigurieren des OPC UA-Servers
Voraussetzung für die Aktivierung des OPC-Servers ist eine S7 1200 ab Firmwareversion 4.4 oder eine S7 1500.
Im Falle eines Firmware Update muss das TIA-Portal ab Version 16 zur Verfügung stehen.
Aktivieren des OPC UA-Servers
Der OPC UA-Servers muss aktiviert werden (nur möglich bei S71200 ab Firmwareversion 4.4 oder bei S7 1500):
Aktivieren des OPC UA-Servers
Projekt schützen
Das Projekt mit einem Kennwort geschützt werden, um die Benutzerverwaltung und Authentifizierung zu aktivieren:
Der
Projektschutz kann nicht deaktiviert werden. Administratorname und
Kennwort nicht vergessen, sonst ist der Zugriff auf das Projekt nicht
mehr möglich! Es ist besser vorher eine Sicherheitskopie anzulegen!
Projekt mit Kennwort schützen
Einheitlicher VorschlagBN: prjAdmin
KW: prjAdmin123
Gastzugang sperren und Benutzer anlegen
Aus Sicherheitsgründen wird der anonyme Gastzugang des OPC UA-Servers gesperrt und ein Benutzer mit starkem Kennwort angelegt:
Benutzer anlegen für OPC UA-Zugang
Serverschnittstelle konfigurieren
Damit der OPC UA-Server die Variablen des Programms und deren Inhalte kommuniziert, muss die OPC UA-Serverschnittstelle konfiguriert werden. Nur OPC UA-Elemente, auf die auch tatsächlich zugegriffen werden soll, werden der OPC UA-Serverschnittstelle hinzugefügt. Die OPC UA-Elemente werden einfach per Drag and Drop in die Serverschnittstelle hinübergezogen.
Anschließend
wird die OPC UA-Schnittstelle aussagekräftig umbenannt (hier: Server-Schnittstelle_Motorsteuerung):
OPC UA-Serverschnittstelle konfigurieren
Einheitlicher Vorschlag
BN: opcUser
KW: opcUser123
Zertifikatsmanager konfigurieren
Zertifikatsmanager aktivieren
Der globale Zertifikatsmanager wird aktiviert, um später eigene generierten Zertifikate und Schlüssel verwalten und exportieren zu können. Dabei gehen eventuell vorhandene OPC UA-Zertifikate verloren.
Globalen Zertifikatsmanager aktivieren
Zertifikate ausstellen
Da jetzt keine Zertifikate mehr vorhanden sind, werden zwei neue Zertifikate mit dem Zertifikatsmanager erzeugt. Eines ist für den Server (S7-1200) und eines für den Client (Python-Anwendung).
Eigentlich wird nicht Zertifikate, sondern jeweils Schlüsselpaare bestehend aus einem privaten Schlüssel und einem Zertifikat (dem öffentlichen Schlüssel) erzeugt. Die Bezeichnung "Gerätezertifikate" ist daher eigentlich nicht ganz korrekt.
Zertifikate ausstellen
Erzeugung des Zertifikats für den Server - die S7-1200 SPS
Im folgenden Dialog, wird bei "Verwendungszweck" OPC UA-Server ausgewählt und ein aussagekräftiger Name bei "Zertifikatsinhaber" gewählt (hier: PLC-19/OPCUA-Server). Alle anderen Parameter belässt man am besten beim Vorschlag des TIA Portals.

Server-Zertifikat erzeugen
Nun muss dieses Zertifikat in den Einstellungen der SPS als Server-Zertifikat für den OPC UA-Server ausgewählt werden:
Auswählen des OPC UA-Server Zertifikats
Erzeugung des Zertifikats für den Client - das Python-Programm
Erneut wird der Zertifikatsmanager aufgerufen (Allgemein → Schutz & Security → Zertifikatsmanager) und ein Zertifikat hinzugefügt:
Diesmal wird bei "Verwendungszweck" OPC UA-Client ausgewählt und ein anderer Name bei "Zertifikatsinhaber" eingetragen (hier: PLC-19/OPCUA-Client).
Beim alternativen Namen für Namen des Zertifikatsinhabers SAN (subject alternative name) wird bei URI (universal/uniform resource identifier) urn:freeopcua:client eingetragen:

Client-Zertifikat erzeugen
Security Policity auswählen
Im TIA Portal werden die Security Policys (Sicherheitsrichtlinien) ausgewählt, die ein Client einhalten muss, damit der Aufbau der Verbindung vom OPC UA-Server akzeptiert wird. Security Policys spezifizieren die verwendeten Algorithmen der Kryptographie (Verschlüsselung), Signierung (Unterzeichnung) und Schlüsselableitung).
Der OPC-Server (SPS) gibt beim Verbindungsaufbau diejenigen Security Policys bekannt, die er akzeptiert. Der Client wählt die sicherste aus, der er noch verarbeiten kann. Je sicherer eine Verschlüsselung ist, um so mehr Rechenleistung muss für die Verschlüsselung und Entschlüsselung zur Verfügung stehen.
"Keine Security" ist im Produktivbetrieb NICHT aktiviert, sonst kann eine Verbindung mitgelesen und Daten manipuliert werden.
Auch die beiden ersten Security Policys, die auf einer 128 Bit-RSA Verschlüsselung basieren, sind heute überholt, gelten als nicht mehr sicher genug und sollten nicht mehr zugelassen werden.
Hier wurde nur die sicherste Option ausgewählt. Die Rechenleistung des OPC UA-Clients ist hier ausreichend (Computer).
Auswahl der Security Policys
Konfiguration in das Gerät laden
Falls beim Laden der Konfiguration ein Fehler beim Kompilieren mit der Meldung: "Die ausgewählte OPC UA-Lizenz ist nicht ausreichend. Um OPC UA zu verwenden, erwerben Sie die korrekte Lizenz und wählen Sie diese aus." auftritt, einfach die Fehlermeldung
anklicken und die gültige Runtime-Lizenz kann ausgewählt werden. (Wenn Sie denn erworben wurde! 😉).
An der Werner-von-Siemens-Schule in Frankfurt konfigurieren Sie den Automation License Manager entsprechend!
Runtime-Lizenz für den OPC UA-Server auswählen
Falls auch der Fehler "Das Zertifikat, das für die Secure PG/PC- und HMI-Kommunikation und zum Schutz vertraulicher PLC-Konfigurationsdaten verwendet wird, fehlt." beim Übersetzen auftritt. Muss erst wieder ein entsprechendes Zertifikat für die Kommunikation mit dem TIA-Portal erzeugt werden. (Das alte wurde beim Aktivieren des globale Zertifikatsmanagers gelöscht.)

Zertifikat für die Kommunikation mit dem TIA-Portal erzeugen
Dabei können die Voreinstellungen belassen werden:

Zertifikat für die Kommunikation mit dem TIA-Portal erzeugen
Client-Zertifikat vorbereiten
- Das Client-Zertifikat muss exportiert werden.
- Dann wird dieser Zertifikatcontainer mit OpenSSL in den privaten Schlüssel und das Zertifikat (öffentlicher Schlüssel) konvertiert.
- Das Client-Zertifikat wird vom Pythonprogramm genutzt.
Client-Zertifikat exportieren
Der Zertifikatsmanager wird über die Security-Einstellungen aufgerufen (Security-Einstellungen → Schutzfunktionen→ Zertifikatsmanager), im Reiter "Gerätezertifikate" werden die Zertifikate angezeigt. Das Client-Zertifikat wird ausgewählt und mit einem
Rechten-Maus-Klick öffnet sich Als Container für das Zertifikat wird PKCS12 ausgewählt. Da der private Schlüssel und das Zertifikat (öffentliche Schlüssel) enthalten sind, muss ein Kennwort für den Export eingegeben, um das komplette Archiv
zu schützen.
Client-Zertifikat exportieren
Zertifikat konvertieren
Das Zertifikat wurde mit der Dateiendung .p12 exportiert. Mit dem Konsolenprogramm openssl werden nun eine Datei mit dem Zertifikat und eine weitere Datei mit dem privaten Schlüssel im PEM-Format (Privacy-enhanced electronic mail) extrahiert:
openssl pkcs12 -in PLC-1OPCUA-Client.p12 -out PLC-1OPCUA-Client_cert.pem -clcerts -nokeys-password pass:YourPassword
openssl pkcs12 -in PLC-1OPCUA-Client.p12 -out PLC-1OPCUA-Client_key.pem -nocerts -nodes -password pass:YourPassword
Danach wird die Zertifikatsdatei in das binäre DER-Format (Distinguished Encoding Rules) konvertiert:
openssl x509 -outform der -in PLC-1OPCUA-Client_cert.pem -out PLC-1OPCUA-Client_cert.der
Aschließend werden URI und IP-Adresse des Servers überprüft:
openssl x509 -in PLC-1OPCUA-Client_cert.der -inform der -text -noout

URI und IP in Zertifikat überprüfen
URI ist urn:freeopcua.client
Daher wird naheliegenderweise wird im weiteren die Python-Bibliothek opcua-asyncio verwendet, die früher freeopcua hieß.
Man sieht die IP-Adresse die der SPS im TIA Portal zugewiesen wurde. Sollte die IP-Adresse der SPS nochmal verändert werden, dann muss dieses für den Client bestimmte Zertifikat neu erzeugt werden, sonst lässt sich keine Verbindung mit dem OPC UA-Server der SPS aufbauen.
OPC UA-Verbindung testen
Die Python3-Bibliotheken müssen vorab installiert werden:
pip3 install asyncua opcua-client
Wenn ev. weitere Abhängigkeiten (z.B.: pyQt) bestehen, müssen weitere Pakete nachinstalliert werden.
OPC UA-Client starten
Zum Testen der Verbindung wird der FreeOpcUA Client gestartet, indem er mit
opcua-client
von der Konsole gestartet wird.
Falls das nicht funktioniert, kann die ausführbare Datei auch hier heruntergeladen werden:
https://moodle.eick-at.de/pluginfile.php/1134/mod_page/content/48/opcua-client.exe
OPC UA-Client konfigurieren
Die URL wie folgt aufgebaut:
opc.tcp://opcUser:Kennwort@IP-Adresse:Portnummer
Hier in diesem Projekt wurden folgende Einstellungen gewählt:
opc.tcp://opcUser:asdUIZFD5367478!!@192.168.178.25:4840
Mit der Schaltfläche "Connect options" können die Sicherheitsparameter festgelegt werden:

Festlegen der Verbindungsoptionen
OPC UA-Verbindung testen und Werte von Knoten auslesen und verändern
Sollte sich die Verbindung in Folge eines Timeout (Zeitlimit überschritten) nicht herstellen lassen, so kann temporär und testweise unter Gerätekonfiguration → Eigenschaften → Allgemein → OPC UA → Server → Security → Security Channel die Security Policy "Keine Security" aktiviert werden. Im Produktivbetrieb darf die Security Policy "Keine Security" aus Sicherheitsgründen NICHT aktiv sein.Nach dem Herstellen der Verbindung wird zur Serverschnittstelle navigiert und die Attribute angezeigt und entsprechend verändert werden, indem die "Refresh"-Schaltfläche angeklickt wird:
Motor einschalten: WebStart True => Motorschütz True
Motor ausschalten: WebStop False => Motorschütz False

OPC UA-Client
Eigenes Python3-Programm als OPC UA-Client
Verlief der Verbindungstest erfolgreich, und wurden die interessanten NodeId notiert, kann ein einfaches Testprogramm geschrieben werden, mit dem der Motor des Beispielprogramm ein- bzw. ausgeschaltet werden kann (RemoteControlPLC/PythonOpcClient at main · ateachment/RemoteControlPLC · GitHub):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | from asyncua.sync import Client, ua import settings #Benutzer verbinden client = Client(settings.SERVER_ADDRESS,timeout=20) client.set_security_string(settings.SECURITY_STRING) try: client.connect() print("Verbindung hergestellt") # Knoten über die Knoten-ID holen WebStartNode = client.get_node('ns=4;i=3') WebStopNode = client.get_node('ns=4;i=4') MotorschützNode = client.get_node('ns=4;i=5') MotorschutzschalterNode = client.get_node('ns=4;i=6') # Deklaration von Unified Architekture - Variablen on = ua.DataValue(ua.Variant(True, ua.VariantType.Boolean)) off = ua.DataValue(ua.Variant(False, ua.VariantType.Boolean)) # Motorschütz EIN WebStartNode.write_value(on) # Motorschütz AUS WebStopNode.write_value(off) WebStart = WebStartNode.get_value() WebStop = WebStopNode.get_value() Motorschutzschalter = MotorschutzschalterNode.get_value() Motorschütz = MotorschützNode.get_value() print("WebStart: " + str(WebStart)) print("WebStop: " + str(WebStop)) print("Motorschütz: " + str(Motorschütz)) print("Motorschutzschalter: " + str(Motorschutzschalter)) finally: client.disconnect() |
Eigenes Python3-Programm als OPC UA-Client
Zeile 1: Die Bibliothek asyncua.sync wird importiert.
Zeile 5: Das Client-Objekt wird erzeugt. Sollte es beim Herstellen der Verbindung einen Timeout geben, kann der Wert des Parameters timeout erhöht werden.
Zeilen 12-15: Knoten werden geholt, indem die NodeId übergeben wird.
Zeilen 18-19: Variablen im Unified Architecture - Format werden erzeugt
Zeilen 20 bzw. 22: Diese ua-Variablen werden in den entsprechenden WebStart- bzw. WebStop-Node geschrieben umd den Motorschütz zu aktivieren bzw. zu deaktivieren.
Zeilen 26-29: Die Werte der Knoten werden geholt.
Zeilen 30-33: Die Werte der Knoten werden ausgegeben. Da es sich dabei um den Datentyp bool handelt, müssen sie mit str() erst in eine Zeichenkette umgewandelt werden, damit sie gemeinsam mit der vorangesetzten Bezeichnung ausgegeben werden können.
Quellen:
OPC Unified Architecture – Wikipedia (04.04.2025)









