OPC UA¶
Das OPC UA Plugin stellt zwei GInOut-Hardwaretypen bereit, mit denen die GInOut-Datenblöcke einer Station über OPC UA ausgetauscht werden können:
OPC UA Server: Veröffentlicht die GInOut-Datenblöcke als Variablen im OPC-UA-Adressraum. Fremde Clients (SPS, SCADA, Leitsystem, …) lesen und schreiben darüber die Daten der Station. Dies ist der eigentliche Anwendungsfall.
OPC UA Client: Verbindet sich mit einem fremden OPC-UA-Server und hält je Datenblock einen lokalen Puffer aktuell. Dient als Test-/Simulator-Gegenstelle zum Server bzw. zum Anbinden eines vorhandenen OPC-UA-Servers.
Bemerkung
Das Plugin liegt als eigenständiger, entnehmbarer Ordner
<exe>\Plugins\OpcUaPlugin\ neben der Anwendung (Plugin-DLL,
GInOutPlugin.xml und der mitgelieferte OPC-UA-Stack der OPC Foundation).
Ordner entfernen bedeutet Hardwaretyp entfernen. Das Plugin kann alternativ
pro Projekt unter <Projekt>\Plugins bereitgestellt werden.
OPC UA Server¶
Type: OPC UA Server
ID: ID vergeben
Name suffix: Steuerung benennen
Create: Button drücken, um das Objekt zu generieren
DisplayName: Steuerung benennen
In den Einstellungen der Server-Hardware stehen folgende Parameter zur Verfügung:
Port [Default
4840]: TCP-Port des OPC-UA-Endpoints.ApplicationName [Default
Viper.NET OPC UA Server]: Anwendungsname für die ApplicationDescription, den Endpoint-Pfad und das Zertifikats-Subject.ApplicationUri [Default
urn:gefasoft:viper:opcuaserver]: Application-URI für die ApplicationDescription und das Instanzzertifikat.EnableBasic256Sha256 [Default
false]: Bietet zusätzlich die sichere SecurityPolicy Basic256Sha256 (Sign & Encrypt) an. Der unverschlüsselte, anonyme Endpoint (None) ist immer verfügbar. Siehe Sicherheit / Zertifikate.AutoAcceptUntrustedCertificates [Default
false]: Akzeptiert Client-Zertifikate automatisch, statt sie manuell vom rejected- in den trusted-Store zu verschieben.CertificateStorePath [Default
%ProgramData%\Gefasoft\OpcUa\pki]: Wurzelverzeichnis des PKI-Stores. Umgebungsvariablen werden aufgelöst (z.B.%ProgramData%oder%VIPER_PROJECT_DIR%).AdditionalBaseAddresses [Default leer]: Semikolon-getrennte Liste zusätzlicher Hostnamen/IPs, die der Server den Clients ankündigt (z.B. eine extern erreichbare NAT-Adresse). Der eigene Rechnername wird immer automatisch ergänzt.
ExposedVariableLists [Default leer]: Semikolon-getrennte Namen von GInOut-Variablenlisten, deren Variablen zusätzlich als benannte, typisierte Nodes exponiert werden (siehe Adressraum). Leer = keine Variablen. Änderungen wirken erst nach einem Neustart des Servers.
Zusätzlich zeigt der Eigenschaftendialog schreibgeschützte Statuswerte an:
EndpointUrl (opc.tcp://localhost:<Port>/OpcUaServer),
AdvertisedAlternateAddresses, SessionCount und IsRunning.
Adressraum¶
Der Datenblock-Dialog des Servers entspricht dem Standard (ID, Name, Länge); es gibt keine protokollspezifischen Zusatzfelder. Aus jedem Datenblock wird eine Variable im Adressraum erzeugt:
Ordner DataBlocks unter Objects, Namespace
urn:gefasoft:viper:opcuaserver.Je Datenblock eine ByteString-Variable:
NodeId = numerisch,
i=<DataBlockId>im Server-Namespace.BrowseName / DisplayName = Name des Datenblocks.
DataType =
ByteStringmit der Länge des Datenblocks (in Byte).AccessLevel = Lesen und Schreiben. Ein Schreibzugriff muss exakt die festgelegte Länge liefern.
Sind in ExposedVariableLists Listennamen eingetragen, entsteht zusätzlich ein
Ordner Variables mit der Struktur Variables/<Listenname>/<Variable>. Dort
wird jede Variable der genannten Listen als typisierte Node angeboten
(bool→Boolean, int→Int32, float→Float, double→Double, string→String,
byte[]→ByteString, Arrays als 1D-Array). Diese Variablen sind lediglich eine
typisierte Sicht auf dieselben Bytes, die roh bereits im DataBlocks-Ordner
sichtbar sind.
Bemerkung
Der Server startet erst, sobald der GInOutManager initialisiert ist und die Variablenlisten geparst hat. Änderungen an den Listen werden erst nach einem Server-Neustart wirksam.
OPC UA Client¶
Type: OPC UA Client
ID: ID vergeben
Name suffix: Steuerung benennen
Create: Button drücken, um das Objekt zu generieren
DisplayName: Steuerung benennen
In den Einstellungen der Client-Hardware stehen folgende Parameter zur Verfügung:
EndpointUrl [Default
opc.tcp://localhost:4840/OpcUaServer]: Endpoint-URL des anzubindenden OPC-UA-Servers.UseBasic256Sha256 [Default
false]: Verwendet die SecurityPolicy Basic256Sha256 statt None.RemoteNamespaceUri [Default
urn:gefasoft:viper:opcuaserver]: Namespace-URI, die beim Verbinden in den tatsächlichen Namespace-Index aufgelöst wird. Daraus werden die Standard-NodeIds (i=<DataBlockId>) abgeleitet, sofern ein Datenblock keine explizite RemoteNodeId besitzt.ReconnectCycleTimeMs [Default
5000]: Zeit in [ms] zwischen Reconnect-Versuchen, solange keine Verbindung besteht.UseSubscription [Default
false]: Hält die Datenblöcke über eine echte OPC-UA-Subscription (Server-Push) aktuell statt über Polling. Siehe Warnung unten.PollIntervalMs [Default
200]: Zeit in [ms] zwischen den Lesezyklen, die beiUseSubscription=falseden lokalen Puffer aktuell halten.SubscriptionPublishingIntervalMs [Default
200]: PublishingInterval der OPC-UA-Subscription in [ms] (beiUseSubscription=true); bewusst getrennt vom Poll-Intervall.CertificateStorePath [Default
%ProgramData%\Gefasoft\OpcUa\pki_client]: Wurzelverzeichnis des PKI-Stores des Clients (Umgebungsvariablen werden aufgelöst).MirrorToVariableList [Default leer]: Name einer GInOut-Variablenliste, in die im Variablen-Browser ausgewählte Server-Variablen als typisierte, datenblocklose Variablen gespiegelt (bidirektional synchron gehalten) werden. Leer = keine Spiegelung. Die Liste wird bei Bedarf angelegt; die Änderung wirkt beim nächsten Verbindungsaufbau.
Als schreibgeschützte Statuswerte zeigt der Dialog IsConnected und LastError. Über die Schaltfläche OPC UA Mirror-Variablen aus Server-Browser… lässt sich die Zielliste festlegen und der verbundene Server nach Variablen durchsuchen, die als Spiegel-Variablen hinzugefügt bzw. entfernt werden.
Datenblöcke¶
Der Datenblock-Dialog des Clients enthält neben ID, Name und Länge das Feld:
RemoteNodeId [Default leer]: Optionale explizite NodeId auf dem Server (z.B.
ns=2;i=123). Leer = es wirdi=<DataBlockId>im über RemoteNamespaceUri aufgelösten Namespace verwendet (identisch zum Standardschema des OPC UA Servers).
Über den Variablen-Browser des Dialogs (Update list) wird der Adressraum des Servers durchsucht; mit Set werden NodeId und aktuelle Byte-Länge der ausgewählten Variable in RemoteNodeId bzw. Length übernommen.
Warnung
UseSubscription: Der Subscription-Modus hat gegen den
mitgelieferten OPC UA Server dieser Codebasis in der aktuellen SDK-Version
einen serverseitigen Absturz (BadServerHalted) ausgelöst. Der Standard- und
empfohlene Modus ist Polling (UseSubscription=false). Den
Subscription-Modus vor produktivem Einsatz sorgfältig testen.
Sicherheit / Zertifikate¶
Der CertificateStorePath zeigt auf die PKI-Wurzel mit den Unterordnern
own / trusted / issuer / rejected. Beim ersten Start wird
automatisch ein Instanzzertifikat erzeugt.
Default Server:
%ProgramData%\Gefasoft\OpcUa\pkiDefault Client:
%ProgramData%\Gefasoft\OpcUa\pki_client
Der unverschlüsselte, anonyme Endpoint (None) ist immer verfügbar. Für einen
sicheren Betrieb wird am Server EnableBasic256Sha256=true gesetzt; dann bietet
er zusätzlich die verschlüsselten Endpoints (Sign & Encrypt) an. Beim ersten
sicheren Verbindungsversuch legt der Server ein unbekanntes Client-Zertifikat im
rejected-Store ab und lehnt ab. Um dem Client zu vertrauen, wird sein
Zertifikat von rejected\certs nach trusted\certs verschoben; alternativ
akzeptiert AutoAcceptUntrustedCertificates=true unbekannte Zertifikate
automatisch (nur für Test- bzw. geschlossene Netze empfohlen).
Bemerkung
Als Authentifizierung wird ausschließlich Anonymous unterstützt (optional zusätzlich abgesichert über Basic256Sha256); eine Anmeldung mit Benutzername/Passwort gibt es nicht.