Zum Inhalt springen

Konzept

Einführung

Die Konzepte, die jede Server-Entwicklung mit dem OPC UA .NET SDK voraussetzt: Server starten und stoppen, Adresse, Endpunkte und Sicherheit.

Konzept

Einführung ​

Der Server ​

Starten ​

Das passiert beim Aufruf der Methode Start:

  1. Der Server prüft, ob eine Adresse festgelegt ist (Eigenschaft OpcServer.Address). Ohne Angabe verwendet der Server die Adresse opc.tcp://localhost:4840. Wenn alle Adressen wieder abgemeldet wurden, löst Start eine InvalidOperationException aus.
  2. Der Server prüft seine Lizenz und ändert seinen Status (Eigenschaft OpcServer.State) auf den Wert Starting. Wenn sich der Server nicht im Status Created oder Stopped befindet, bleibt der Aufruf ohne Wirkung.
  3. Der Server prüft seine Konfiguration auf Gültigkeit und Schlüssigkeit.
  4. Anschließend versucht der Server, für jede Endpunktbeschreibung einen Host zu erstellen.
  5. Danach startet der Server alle Manager, zum Beispiel die Node-Manager und den SessionManager.
  6. Schließlich startet der Server jeden erstellten Host. Die Hosts sind für die endpunktspezifische Kommunikation mit den Clients zuständig.
  7. Der Server ändert seinen Status (Eigenschaft OpcServer.State) auf den Wert Started.

Stoppen ​

Das passiert beim Aufruf der Methode Stop:

  1. Der Server ändert seinen Status (Eigenschaft OpcServer.State) auf den Wert Stopping.
  2. Der Server beendet alle Manager, zum Beispiel die Node-Manager und den SessionManager.
  3. Der Server gibt alle erworbenen Ressourcen wieder frei.
  4. Der Server beendet die Hosts der Endpunktbeschreibungen.
  5. Der Server ändert seinen Status (Eigenschaft OpcServer.State) auf den Wert Stopped.

Ein Server lässt sich auch aus dem Status Suspended heraus beenden.

Anhalten und fortsetzen ​

Wenn der Server für eine Wartung vorübergehend als nicht verfügbar gelten soll, ohne dass Sie ihn beenden, rufen Sie die Methode Suspend auf. Der Server wechselt dann über den Status Suspending in den Status Suspended und meldet seinen Clients über den Serverstatus den Zustand Suspended. Seine Endpunkte bleiben dabei erreichbar. Über die Eigenschaft OpcServer.EstimatedReturnTime kann der Server den Clients zuvor mitteilen, wann er voraussichtlich wieder verfügbar ist. Die Eigenschaft lässt sich nur im Status Started setzen. Die Methode Resume setzt den Server über Starting wieder in den Status Started. Beide Methoden wirken nur aus dem jeweils passenden Status heraus: Suspend aus Started, Resume aus Suspended.

csharp
// Announce the expected end of the maintenance to the clients.
server.EstimatedReturnTime = DateTime.UtcNow.AddMinutes(10);
server.Suspend();
...
server.Resume();
vbnet
'Announce the expected end of the maintenance to the clients.
server.EstimatedReturnTime = DateTime.UtcNow.AddMinutes(10)
server.Suspend()
...
server.Resume()

Adresse und Parameter ​

Damit der Server den Clients Zugang zu seinen OPC-UA-Services geben kann, legen Sie die richtigen Parameter fest. Der Server benötigt immer die Adresse, unter der er erreichbar ist (Eigenschaft OpcServer.Address). Die Adresse ist ein URI (= Uniform Resource Identifier) und liefert allen Clients die wesentlichen Informationen über den Server. Die Serveradresse opc.tcp://192.168.0.80:4840 enthält zum Beispiel das Schema opc.tcp. Das Schema legt fest, über welches Protokoll die Daten wie ausgetauscht werden. Möglich sind opc.tcp und https. Für OPC UA Server im lokalen Netzwerk empfehlen wir opc.tcp. Für Server außerhalb des lokalen Netzwerks kann sich https anbieten. Außerdem legt die Adresse fest, dass der Server auf dem Rechner mit der IP-Adresse 192.168.0.80 läuft und auf Anfragen über den Port 4840 wartet. Das ist der Standardport für OPC UA, benutzerdefinierte Portnummern sind ebenfalls möglich. Anstelle der statischen IP-Adresse können Sie auch den DNS-Namen des Rechners verwenden, zum Beispiel localhost anstelle von 127.0.0.1.

Wenn der Server keinen Endpunkt (engl. Endpoint) bereitstellen soll, dessen Policy den Sicherheitsmodus None hat, konfigurieren Sie mindestens eine Endpoint-Policy (Eigenschaft OpcServer.Security.EndpointPolicies). Möglich sind zudem die Sicherheitsmodi Sign und SignAndEncrypt. Wenn der Server dagegen einen Endpunkt mit der Policy None bereitstellt, kann ein Client diesen automatisch für eine einfache und schnelle Verbindung auswählen. Jeder Endpoint-Policy ordnet das SDK einen Policy-Level zu, also eine Zahl. Das SDK berechnet ihn aus dem Sicherheitsmodus und dem Sicherheitsalgorithmus und teilt ihn den Clients mit (Eigenschaft OpcSecurityPolicy.Level). Zuweisen lässt sich der Level nicht. Die OPC Foundation sieht vor: Je höher der Level der Policy eines Endpunkts, desto besser ist der Endpunkt. Das ist lediglich eine Richtlinie, die niemand prüft oder durchsetzt.

Wenn der Server eine Zugriffssteuerung verwenden soll, zum Beispiel über eine ACL (= Access Control List, also eine Zugriffskontrollliste), legen Sie die gültigen Identitäten seiner Benutzer fest. Das funktioniert auch im laufenden Betrieb. Die Identitäten der Benutzer lassen sich über ein Benutzername-Passwort-Paar (Klasse OpcServerIdentity) oder über ein Zertifikat (Klasse OpcCertificateIdentity) festlegen. Übergeben Sie die Identitäten dem Server über die Eigenschaften OpcServer.Security.UserNameAcl und OpcServer.Security.CertificateAcl. Damit der Server diese Zugriffskontrolllisten berücksichtigt, aktivieren Sie sie über ihre Eigenschaft IsEnabled. Die Zugriffskontrollliste für anonyme Benutzer (Eigenschaft OpcServer.Security.AnonymousAcl) ist nur so lange aktiv, wie keine andere Zugriffskontrollliste aktiv ist, es sei denn, ihre Eigenschaft IsEnabled ist ausdrücklich gesetzt. Wenn Sie also zum Beispiel die UserNameAcl aktivieren, schalten Sie damit den anonymen Zugriff ab. Weitere Möglichkeiten wie Rollen und eigene Zugriffskontrolllisten beschreibt die Seite Server absichern.

Endpunkte ​

Die Endpunkte ergeben sich aus dem Kreuzprodukt der Basis-Adressen des Servers und der Sicherheitsstrategien, die der Server unterstützt. Jede Basis-Adresse ergibt sich aus einem unterstützten Paar aus Schema und Port. Für den Datenaustausch lassen sich mehrere Schemen (möglich sind opc.tcp und https) auf unterschiedlichen Ports festlegen. Die so verknüpften Strategien (engl. Policies) legen das Vorgehen beim Datenaustausch fest. Jede Policy besteht aus dem Policy-Level, dem Sicherheitsmodus (engl. Security Mode) und dem Sicherheitsalgorithmus (engl. Security Algorithm) und legt damit die Art des sicheren Datenaustauschs fest.

Angenommen, der Server unterstützt zwei Sicherheitsstrategien:

  • Security Policy A: Level 0, Sicherheitsmodus None, Sicherheitsalgorithmus None
  • Security Policy B: Level 1, Sicherheitsmodus Sign, Sicherheitsalgorithmus Basic256Sha256

Dazu kommen drei Basis-Adressen für verschiedene Schemen:

  • Basis-Adresse A: https://mydomain.com/
  • Basis-Adresse B: opc.tcp://192.168.0.123:4840/
  • Basis-Adresse C: opc.tcp://192.168.0.123:12345/

Das Kreuzprodukt ergibt daraus die folgenden Endpunktbeschreibungen:

  • Endpunkt 1: Adresse https://mydomain.com/, Level 0, Sicherheitsmodus None, Sicherheitsalgorithmus None
  • Endpunkt 2: Adresse https://mydomain.com/, Level 1, Sicherheitsmodus Sign, Sicherheitsalgorithmus Basic256Sha256
  • Endpunkt 3: Adresse opc.tcp://192.168.0.123:4840/, Level 0, Sicherheitsmodus None, Sicherheitsalgorithmus None
  • Endpunkt 4: Adresse opc.tcp://192.168.0.123:4840/, Level 1, Sicherheitsmodus Sign, Sicherheitsalgorithmus Basic256Sha256
  • Endpunkt 5: Adresse opc.tcp://192.168.0.123:12345/, Level 0, Sicherheitsmodus None, Sicherheitsalgorithmus None
  • Endpunkt 6: Adresse opc.tcp://192.168.0.123:12345/, Level 1, Sicherheitsmodus Sign, Sicherheitsalgorithmus Basic256Sha256

Den Adressteil des Endpunkts legt immer der Server fest, über den Konstruktor oder über die Eigenschaft Address. Solange keine Policy konfiguriert ist, definiert der Server einen Endpunkt mit dem Sicherheitsmodus None. Wenn der Server stattdessen oder zusätzlich andere Policies verwenden soll, konfigurieren Sie sie über die Eigenschaft OpcServer.Security.EndpointPolicies.

Zertifikate und Sicherheit ​

Das SDK soll den Einstieg in OPC UA so einfach wie möglich machen. Deshalb ist die Verbindung zwischen Client und Server ohne weitere Konfiguration des Servers nicht vollständig abgesichert. Sobald Sie den finalen Spike implementiert und getestet haben, sollten Sie sich mit der Sicherheit befassen: