Definition der Peripherieadresse des OPC UA Treibers

Um ein OPC UA Item einem WinCC OA Datenpunktelement zuzuordnen, muss der Parametrierer eine Peripherieadresse am entsprechenden Datenpunktelement anlegen (WinCC OA Config _address). Die Peripherieadresse beschreibt die Zuordnung von der Hardwareadresse im Zielsystem zur Adresse des WinCC OA Client-Datenpunktelementes.

Für die Definition der Peripherieadresse klicken Sie auf das Adressen-Config (_address) eines Datenpunktelements, selektieren Sie den Treibertyp OPCUA CLIENT aus der Combobox und klicken Sie auf Parametrieren.... In dem geöffnetem Panel (siehe Abbildung unten) kann nun die Peripherieadresse des OPC UA Clients parametriert werden.

Nach dem folgenden Schema werden alle Datenpunktelemente mit ihrer Peripherieadresse versehen:

Server$Subscription$Art$Variante$Item

Im Treiber wird diese Peripherieadresse aufgespalten und umgewandelt.

Die Art gibt an, ob es sich um einen Datenwert, ein Ereignis oder einen Alarm & Zustand (das Datenpunktelement muss zusätzlich das WinCC OA Konfig _alert_hdl haben) handelt. Die Art ist im Peripherieadresspanel nicht konfigurierbar. Diese wird vom Subscription Typ (siehe Parametrierung einer Subscription) abgeleitet.

Ist die Subscription ein Leerstring (Polling wird verwendet), lautet die Peripherieadresse Server$$Variante$Item.

Abbildung 1. Definition einer OPC UA Peripherieadresse

Server

Server ist der Name des OPC UA Servers, von dem der Client den Wert erhält. Dieser Name muss identisch sein mit dem Namen des internen Verbindungsdatenpunktes (ohne ‘_‘) vom Typ _OPCUAServer.

Subscription

Der Name der Subscription, bei der die Monitored Items angelegt und überwacht werden. Jeder Server kann theoretisch beliebig viele Subscriptions haben. Aus Performancegründen sollte die Anzahl der Subscriptions pro Server aber kleiner als 100 sein. Der Name jeder Subscription muss identisch mit dem Namen des jeweiligen internen Datenpunktes (ohne ‘_‘) vom Typ _OPCUASubscription sein.

Klicken Sie auf die Schaltfläche "..." rechts neben dem Feld, um die Parameter der ausgewählten Subscription zu ändern.

Wenn keine Subscription verwendet wird, kann Empfangsmodus Polling oder Einzelabfrage ausgewählt werden. Wenn eine Subscription verwendet wird, stehen abhängig vom Typ der Subscription Spontan und Alarm zur Verfügung (Daten- bzw. Ereignis- Subscriptions: Spontan; Alarm-Subscription: Alarm).

Variante

Die Variante gibt an, ob das Item als NodeId oder als Browse Pfad in der Adresse angegeben wird (für detaillierte Informationen siehe weiter unten).

Treibernummer

Nummer des OPC UA Clients für den diese Peripherieadresse bestimmt ist, da in einem Projekt der OPC UA Client, wie andere Treiber auch, mit verschiedenen Managernummern laufen kann (z.B. -num 4).

Item

Das OPC UA Item kann entweder als Node ID oder als Browse Pfad angegeben werden. Intern arbeitet der Client mit NodeIds. Deshalb fällt bei Verwendung der NodeId in der Peripherieadresse eine Umwandlung weg. Die NodeId kann allerdings, abhängig vom Server, völlig "unleserlich" (z.B. eine fortlaufende Nummer) sein. In solch einem Fall kann es vorteilhaft sein den Browse Pfad zur Adressierung zu verwenden. Die Addressierungsvarianten können auch gemischt werden, obwohl sinnvollerweise eine einheitliche Adressierung verwendet werden sollte.

Mittels Klick auf die Schaltfläche "Get Item ID" kann in einem neuen Dialog nach Items gebrowst werden (siehe Browsen nach Items). Durch Auswahl eines der angezeigten (gebrowsten) Elemente im Browsing-Ergebnisfenster, wird die Peripherieadresse parametriert.

NodeId

ns=<namespaceindex>;<type>=<value>

Feld Datentyp Beschreibung
<namespaceindex>

UInt16

Enum

Der Namespace-Index im Dezimalformat.

Achtung:

Es wird vorausgesetzt, dass der Namespace-Index im Server persistent ist, d.h. der Namespace-Index darf sich im Server nicht ändern, da dieser fest in der WinCC OA Peripherieadresse definiert wird.

<type> Enum

Dieses Flag identifiziert die nachfolgende NodeId:

  • i -> Numerisch (UInteger)

  • s -> String (String)

  • g -> Guid (Guid)

  • b -> Opaque (ByteString)

<value> Die NodeId.

Beispiele:

  • ns=0;i=13

  • ns=10;i=-1

  • ns=10;s=System.Pumpe1

  • ns=0;g=09087e75-8e5e-499b-954f-f2a9603db28a

  • n=1;b=M/RbKBsRVkePCePcx24oRA==

Beispiel für Peripherieadresse:

UASERVER1$Subscription1$1$1$ns=2;s=System.Pumpe1

Browse Pfad

Die einzelnen Teilelemente des Browse Pfades sind relative Pfad-Elemente. Diese relativen Pfad-Elemente bestehen immer aus einem Referenztyp, einem Namespace und dem Browse Name.

Pfadelement Symbol Beschreibung
Referenztyp / Referenztyp HierarchicalReferences wird verwendet
. Subtypen sind vom Typ Aggregates ReferenceType.
Namespace <[#!ns:]ReferenceType>

Eigener Referenztyp

  • # -> es folgen keine Subtypen

  • ! -> invers

  • ns -> Namespace Achtung:

    Es wird vorausgesetzt, dass der Namespace-Index im Server persistent ist, d.h. der Namespace-Index darf sich im Server nicht ändern, da dieser fest in der WinCC OA Peripherieadresse definiert wird.

&

Maskierungszeichen für Escapezeichen:

/, ., <, >, :, #, !, &

Beispiele:

  • “/1:SYSTEM/1:PUMPE/1:P1”

  • “/2:Block&.Output”

  • “/3:Truck.0:NodeVersion”

  • “<!HasChild>Truck”

  • “<1:ConnectedTo>1:Boiler/”

Beispiel für Peripherieadresse:

UASERVER1$Subscription1$1$2$/2:mein/2:browse/2:path

D.h. es wird im Namespace 2 (Position nach dem letzen $) eine Folge einer hierarchischen Referenz zu einem Node mit dem BrowseName "mein", dann einer hierarchischen Referenz zu "browse" und dann zu "path" (alle im Namespace 2) abgebildet.

Range

Im Textfeld "Range" wird eine Wertspanne zum Lesen und Schreiben eines einzelnen Elements, oder eine definierte Spanne an Elementen aus einem Array, festgelegt.

WinCC OA unterstützt Lesen und Schreiben für Spannen aus eindimensionalen Arrays. Für multidimensionale Arrays wird nur limitertes Lesen unterstützt. Daher ist nur das festlegen einer Spanne, die in einem einzelnen Element oder eindimensionalen Array resultiert, unterstützt.

Der Syntax für eine eindimensionale Spanne ist <start index>[:<end index>]. Wird ein multidimensionals Array verwendet, muss eine Spanne für jede Dimension angegeben werden. Der Index startet mit 0. Sollte der End-Index die Arraygröße überschreiten, werden die Werte bis zum Ende des Arrays beim Lesen zurückgegeben.

Beispiele für Arrays:

  • 2 -> Array1[2] eines eindimensionalen Arrays
  • 2:5 -> Array1[2..5] eines eindimensionalen Arrays
  • 2,4 -> Array2[2,4] eines zweidimensionalen Arrays
  • 2,4:5 -> Array2[2,4..5] eines zweidimensionalen Arrays ( Dies ist erlaubt, da das Resultat ein eindimensionales Arrays ist)

Beispiele, die in Fehlern resultieren:

  • 2 -> für ein zweidimensionales Array ist ein Fehler, da nicht alle Dimensionen angegeben werden.
  • 3:4,4:5 -> für ein zweidimensionales Array ist ein Fehler, da das Resultat ein zweidimensionales Array ist.

Wenn der Syntax falsch ist, wird eine Fehlermeldung in die Log-Datei geschrieben und die Adresse ignoriert. Ist der Syntax korrekt angegeben und die Spanne für dieses Item existiert nicht, wird das Invalid-Bit auf dem korrespondierenden Datenpunkt gesetzt.

Trans.Art

Der Transformationstyp ist nur für die Art "Wert" relevant. Wählen Sie den Transformationstyp aus der Combobox. Der Transformationstyp ist eine Interpretation der Daten, die vom OPC UA Server gesendet werden. Die Transformation muss immer zum Datentyp der Adresse im OPC UA Server passen (wenn z.B. im Server der Datentyp ein 32 Bit Integer ist, so muss die Art der Transformation z.B. int32 sein).

Wenn der Typ default aus der Combobox gewählt wird, bestimmt der Treiber die Transformationsart automatisch, abhängig vom Typ des WinCC OA Datenpunktelementes, an dem die Peripherieadresse parametriert ist. Diese automatische Bestimmung muss nicht immer richtig funktionieren. Das hängt davon ab, ob verschiedene Typen einfach ineinander konvertiert werden können. Zum Beispiel kann ein 16Bit Integer im Server automatisch zu einem Integer in WinCC OA übergeführt werden. Funktioniert die automatische Bestimmung nicht, wird eine entsprechende Fehlermeldung ins Log Viewer ausgegeben. In dem Fall muss die Transformation manuell passend zum OPC UA Typ eingestellt werden.

Anmerkung:

Im Falle eines Float Datentyps am OPC UA Server, muss die Transformationsart in WinCC OA explizit eingestellt werden (default ist hier nicht zulässig).

Anmerkung:

Aufgrund der unterschiedlichen Sprachkodierung zwischen WinCC OA (iso88591) und OPC UA (UTF-8), ergeben sich Probleme bei der Übertragung von Strings, falls diese Sonderzeichen enthalten, die in UTF-8 anders angezeigt werden. Um das Problem zu lösen, gibt es folgende Möglichkeit: - Clientseitig wird dann konvertiert, wenn die Transformationsart LocalizedText an der Peripherieadresse ausgewählt ist und zwar in der aktuellen Parametriersprache bzw. von der aktuellen Projektsprache, da in OPC UA nur eine Sprache vorhanden ist. - Im Server wird ein LocalizedText auf UTF-8 kodiert und zwar ebenfalls nur für die aktuelle Parametriersprache. - Ein normaler String wird nicht konvertiert.

Eine typische Zuordnung der OPC UA Basis-Datentypen, die vom WinCC OA OPC UA Client unterstützt werden, auf WinCC OA Datentypen ist in der unteren Tabelle ersichtlich. Es werden auch andere Zuordnungen unterstützt, solange ein WinCC OA Datentyp zu einem anderen Typ konvertiert werden kann. Z.B. kann ein OPC UA boolean auch auf einen WinCC OA DPEL_INT abgebildet werden.

OPC UA Datentyp WinCC OA Datentyp Variablen-Datentyp
Boolean DPEL_BOOL (bool) BIT_VAR
SByte DPEL_INT (int) INTEGER_VAR
bit64 DPEL_BIT64 (bit64) ULONG_VAR
Byte DPEL_CHAR (char) CHAR_VAR
Int16 DPEL_INT (int) INTEGER_VAR
UInt16 DPEL_UINT (uint) UINTEGER_VAR
Int32 DPEL_INT (int) INTEGER_VAR
UInt32 DPEL_UINT (uint) UINTEGER_VAR
Int64 DPEL_LONG (long) LONG_VAR
UInt64 DPEL_ULONG (ulong) ULONG_VAR
Float DPEL_FLOAT (float) FLOAT_VAR
Double DPEL_FLOAT (float) FLOAT_VAR
String DPEL_STRING (string) TEXT_VAR
DateTime DPEL_TIME (time) TIME_VAR
Guid DPEL_STRING (string) TEXT_VAR
ByteString DPEL_BLOB (blob) BLOB_VAR
XmlElement DPEL_STRING (string) TEXT_VAR
LocalizedText

DPEL_LANGSTRING (langstring)

Hinweis:

Clientseitig ist es nicht möglich, auf langstrings und dyn_langstrings eine Peripherieadresse zu parametrieren. Zu verwenden sind deshalb die Datentypen string und dyn_string mit dem Transformationstyp LocalizedText.

LANGTEXT_VAR
Array vom Basisdatentyp

DPEL_DYN_*

Anmerkung: * .. steht für einen Basisdatentyp
Einschränkung: dyn_blob Elemente werden nicht unterstützt.
Einschränkung: Es wird nur eine maximale Länge des Arrays von 65536 unterstützt.
DYN_VAR(WinCC OA Datentyp)

Alt/Neu-Vergleich

Diese Option kann nur aktiviert werden, wenn die Richtung auf Eingang oder Ein/Aus gesetzt wurde. Diese Option bewirkt, dass Daten nur dann gesendet werden, wenn sie sich geändert haben. Der Vergleich basiert auf Rohdaten ohne eine Konvertierung. Der Alt/Neu-Vergleich wird bereits mit den von dem OPC UA Server empfangenen Daten durchgeführt (im Gegensatz zur Glättung, wo die Daten bereits Datenpunkten zugewiesen werden). In einem Alt/Neu-Vergleich werden einzelne Werte mit den alten Werten verglichen und im Falle einer Unstimmigkeit entsprechend ersetzt.

Historie

Über diese Checkbox wird das _offset-Attribut gesetzt, welches kennzeichnet ob für diese Peripherieadresse am OPC UA Server historische Daten vorhanden sind und eine historische Abfrage durchgeführt werden kann (siehe auch Hinweise und Einschränkungen von Historical Access).

Richtung

Definiert, ob die Werte eines Datenpunktelements in die Senderichtung (Ausgang), in die Empfangsrichtung (Eingang) oder in beide Richtungen (Ein/Aus) übermittelt werden. Ereignisse und Alarms & Zustände können nur auf Empfangsrichtung eingestellt werden (das Peripherieadresspanel verhindert eine andere Eingabe).

Das WinCC OA Config _address besitzt mehrere Attribute, welche die notwendigen Informationen aufnehmen. Zum Beispiel, ist das Attribut _reference ein String, der die Adresse im Zielsystem beschreibt. Das Attribut _direction ist ein Integerwert, der die Datenrichtung beschreibt.

Bei einer Adresse in Richtung Ein/Aus schreibt der Client wieder den alten Wert auf den Datenpunkt, wenn nicht innerhalb einer bestimmten Zeit (Eintrag IOTransitionTimeout in der Konfigurationsdatei) eine Rückmeldung des Wertes erfolgt. Das WinCC OA Attribut _transition vom WinCC OA Konfig _original zeigt an, ob ein Wert gerade in Transaktion ist.

Empfangsmodus

Der Empfangsmodus für die Richtungen Eingang und Ein/Aus kann auf Spontan (Subscription wird verwendet), Polling (Subscription wird nicht verwendet), Einzelabfrage oder Alarm gesetzt werden.

Pollgruppe

Datenpunktelemente, die Werte von der Peripherie lesen bzw. lesen/schreiben, können einer Pollgruppe zugeordnet werden. Damit kann der WinCC OA OPC UA Client auch mit solchen OPC UA Servern sinnvoll kommunizieren, die keine Subscriptions und/oder keine Monitored Items unterstützen.

Adresse aktiv

Bei angehakter Checkbox "Adresse aktiv" wird die Adresse vom Treiber verwendet (siehe Referenztabellen). Eine inaktive Adresse ist zwar möglich und die Werte können gesetzt und abgefragt werden, jedoch werden sie vom Treiber nicht verwendet. Das bedeutet, dass für dieses Datenpunktelement keine Werte an den OPC UA Server gesendet oder vom Server empfangen werden können.