OPC UA
Ein OPC UA-Client für fremde Server, mit Vertrauen über Zertifikate, Adressierung über Node-IDs und Gerätesuche im Adressraum.
Der Treiber OPC UA ist ein Client für fremde OPC UA-Server, also Steuerungen, Gateways,
Archivsysteme und andere Leitsysteme, über opc.tcp. Er ist das ausgehende Gegenstück zum
eingebetteten OPC UA-Server, der den eigenen Adressraum dieser Station veröffentlicht
(beschrieben unter Einstellungen); beide teilen sich die
Anwendungsidentität der Station, vertrauen ihren Gegenstellen aber unabhängig voneinander.
Gerät
| Feld | Bedeutung | Standard |
|---|---|---|
| Host | DNS-Name, IPv4- oder IPv6-Adresse des Servers. | localhost, wenn leer gelassen |
| Port | TCP-Port des Endpunkts. | 4840 (eine eingestellte 0 fällt auf 4840 zurück) |
| Ressourcenpfad | Der Pfad des Endpunkts, den manche Server nach Host und Port verlangen, was opc.tcp://host:port/path ergibt. Leer lassen, wenn der Server an der Wurzel antwortet. |
leer |
| Sitzungssicherheit | Aus wird die Sitzung signiert und verschlüsselt, und eine Anlage, die nichts Besseres anbietet, wird abgewiesen. Sitzung ohne Sicherheit zulassen öffnet sie trotzdem, unverschlüsselt, für eine Anlage, die keinen sicheren Endpunkt anbietet. | aus |
| Benutzername / Passwort | Die Benutzeridentität der Sitzung. Ein leerer Benutzername bedeutet eine anonyme Sitzung. Das Passwort ist im Ruhezustand mit der Windows-DPAPI je Benutzer geschützt und lässt sich nur auf dem Rechner und im Windows-Konto lesen, in dem es eingegeben wurde. | anonym |
| Abfrageintervall (ms) | Standardtakt des zyklischen Lesens für Tags, die ihn nicht selbst festlegen. | 1000 |
Sicherheit und Zertifikate
Das Verbinden beginnt mit der Endpunktliste des Servers: Der Client wählt den sichersten Endpunkt, den der Server anbietet, und weist die Anwendung mit dem eigenen Zertifikat dieser Station aus, derselben OPC UA-Anwendungsidentität, die auch der eingebettete Server verwendet. Viele Server verlangen, dass dieses Zertifikat auf ihrer Seite als vertrauenswürdig gilt, bevor sie die Sitzung annehmen; dieser Schritt geschieht an der Anlage.
Eine Anlage, die nichts Besseres als einen ungesicherten Endpunkt anbietet, wird
abgewiesen, und das Gerät sagt, warum. Diese Sitzung würde die Messwerte und die Anmeldung
unverschlüsselt übertragen und keine Identität der Anlage belegen, deshalb öffnet sie nur
dort, wo Sie sie an diesem Gerät verlangt haben: Sitzungssicherheit, Sitzung ohne
Sicherheit zulassen, auf der Verbindungskarte. Die Wahl gehört zu diesem einen Gerät,
reist in seiner Adresse als ?security=none und gilt für die lesende Sitzung wie für das
Durchsuchen der Gerätesuche. Sie einzuschalten stuft eine Anlage, die Sicherheit anbietet,
nie herab: Genommen wird weiterhin der sicherste angebotene Endpunkt.
In der anderen Richtung ist das Vertrauen im Zweifel geschlossen und ausdrücklich. Das Zertifikat der Anlage wird geprüft, bevor die Sitzung geöffnet wird:
- Ein Zertifikat, das diese Station nie freigegeben hat, wird abgewiesen, zur Prüfung aufgezeichnet, und der Bereich des Geräts zeigt einen Hinweis, der die Freigabe nennt, auf die er wartet: Das Gerät ist nicht "offline", es wartet auf eine Entscheidung.
- Sie prüfen Zertifikate unter Einstellungen → Anlagenzugriff, der ausgehenden Hälfte des Vertrauens über Zertifikate: Ein aufgezeichnetes Zertifikat sitzt unter Warten auf Freigabe, bis Sie es Freigeben (neue Sitzungen dürfen öffnen) oder Sperren (abgewiesen, ohne immer wieder zu fragen). Das ist die Liste der Anlagen; Clientzugriff auf derselben Seite ist die andere Richtung, also wer eingehend zum eigenen Server dieser Station verbinden darf.
- Freigabe zurücknehmen in einer freigegebenen Zeile schließt die laufenden Sitzungen auf diesem Zertifikat und legt es zurück in die Prüfliste, die nächste Verbindung fragt Sie also erneut.
- Eine Anlage, die gar kein Zertifikat vorlegt, belegt nichts darüber, wer geantwortet hat, also gibt es nichts freizugeben und die Sitzung wird abgewiesen, mit ihrer Adresse im Journal. Sie verbindet nur unter demselben Sitzung ohne Sicherheit zulassen, das dann an die Stelle der Freigabe tritt.
Den Server einer Anlage freizugeben erlaubt diesem Zertifikat nie, eingehend zum eigenen Server dieser Station zu verbinden: Die beiden Richtungen führen ihre Listen mit Absicht getrennt.
Verhalten der Sitzung
Tags werden zyklisch gelesen: Jeder Lesevorgang fragt den Server nach dem aktuellen Wert des Knotens. Das Urteil des Servers reist mit jeder Stichprobe mit: Ein Wert, der als Bad oder Uncertain gestempelt ist, wird abgewiesen, und der Tag liest schlechte Qualität, eine zweifelhafte Quelle wird also nie zu einem guten Messwert weißgewaschen. Ein Knoten, den es auf dem Server nicht mehr gibt, liest als kein Wert, statt das ganze Gerät fehlschlagen zu lassen.
Die Sitzung wird mit Keep-Alive-Nachrichten überwacht; nach drei ausgebliebenen Keep-Alive-Nachrichten beginnt der Client, sich automatisch neu zu verbinden, und macht weiter. Die Wiederholschleife der Anwendung im Hintergrund besitzt die erste Verbindung, ein nicht erreichbarer Server kostet beim Start also nichts.
Adressierung der Tags
Ein Tag wird über seine Node-ID adressiert, als Freitext eingetippt und wortgetreu gesendet. Angenommen werden die üblichen Schreibweisen von OPC UA:
| Beispiel | Bedeutung |
|---|---|
ns=2;s=Temperature |
Zeichenkette als Bezeichner im Namensraum mit Index 2 |
i=2258 |
Numerischer Bezeichner im Namensraum 0 (hier: die CurrentTime des Servers) |
ns=3;i=1042 |
Numerischer Bezeichner im Namensraum mit Index 3 |
nsu=urn:vendor:app;s=Line1.Speed |
Ausgeschriebene Form, die den Namensraum über seine URI statt über den Index nennt, robust gegen Indexwechsel über Neustarts hinweg |
Der Tag liest und schreibt das Attribut Value des Knotens.
Werttypen
| Angebotene Typen |
|---|
| Boolean, Byte, Int16, Int32, Int64, Float, Double und String |
Werte sind nur Skalare: Felder, Strukturen und andere zusammengesetzte Werte werden als unlesbar abgewiesen, statt zu einer irreführenden Zahl plattgedrückt zu werden, und der Tag liest schlechte Qualität. Ein solcher Tag scheitert für sich allein; die übrigen Tags des Geräts lesen weiter, und deswegen wird nichts neu verbunden. Eine leere Zeichenkette ist ein Wert, kein Fehlschlag. Typen außerhalb der angebotenen Menge (vorzeichenlose Breiten, DateTime, Guid, ByteString) gibt es bei diesem Treiber nicht.
Ein Suchlauf über einen Server bietet deshalb weniger Kanäle an, als der Server hält: Ein Knoten, der eine Liste von Werten erklärt, und ein Knoten, dessen Typ außerhalb der angebotenen Menge liegt, bleiben außen vor. Sie fallen aber nicht stillschweigend weg. Der Suchlauf zählt sie, und seine Abschlussmeldung sagt, wie viele und welcher Art, zum Beispiel "5 Kanal/Kanäle blieben außen vor: 3 vom Typ UInt32, 2, die eine Liste von Werten statt eines Werts halten.", eine kurze Liste liest sich also als kurze Liste und nicht als nackte Steuerung.
Schreiben
Ein schreibbarer Tag schreibt das Attribut Value des Knotens über den Dienst Write von OPC UA. Die Antwort des Servers ist das Urteil: Ein abgelehnter Schreibvorgang zeigt sich als Fehlschlag, und der zwischengespeicherte Wert rückt nur bei Annahme nach. Wie überall nimmt das Schreibfeld den technischen Wert, und die Wertkette wird rückwärts durchlaufen, bevor der Rohwert gesendet wird.
Gerätesuche
Der Befehl Suchen nimmt ein Ziel im Feld daneben: die Adresse eines OPC UA-Servers wie
opc.tcp://plc-host:4840. Der Suchlauf hat zwei Stufen, und die Fortschrittszeile nennt
die laufende:
- Endpunkte: Der Standarddienst zur Suche am Ziel wird abgefragt, und jede angebotene Such-URL wird zu einem Kandidaten für einen Endpunkt. Eigene Ports und Serverpfade wandern unverändert in die Verbindungsfelder des Kandidaten.
- Kanäle: Der Adressraum jedes Kandidaten wird vom Ordner Objects abwärts durchsucht, und jede lesbare Variable wird als Kandidat für einen Tag aufgeführt, mit ihrem Typ und ihrem Zugriff. Die Diagnosebereiche des Servers werden übersprungen.
Das Durchsuchen meldet sich anonym an (mit derselben Wahl des sichersten Endpunkts, derselben Abweisung einer ungesicherten Sitzung und demselben Tor über das Zertifikat der Anlage). Ein Server, der anonyme Sitzungen ablehnt, ein Server, der keinen sicheren Endpunkt anbietet, oder ein Durchsuchen, das aus irgendeinem Grund fehlschlägt, lässt den Endpunkt trotzdem mit null Tags hinzufügbar: Fügen Sie ihn hinzu, hinterlegen Sie die Anmeldedaten und die Sitzungssicherheit am Gerät und richten Sie die Tags von Hand ein. Nichts wird gespeichert, bevor Sie einen Kandidaten hinzufügen, und ein Abbruch behält die Kandidaten, die bereits vollständig waren.
Grenzen, die man kennen sollte
- Lesevorgänge sind zyklische Abfragen des Attributs Value; der Treiber legt auf dem fremden Server keine Abonnements an.
- Nur skalare Werte: Ein Tag kann weder ein Element eines Feldes noch ein Feld einer Struktur adressieren.
- Das Tor der Freigabe gilt je Zertifikat: Eine Anlage, die ihr Zertifikat wechselt, kehrt in die Prüfliste zurück und wartet auf eine neue Entscheidung.