Historical Access
In diesem Kapitel wird die OPC UA Historical Access Funktionalität des WinCC OA OPC UA Clients näher beschrieben. Hierdurch wird der Zugriff auf historische Daten eines OPC UA Servers ermöglicht.
Die Datenabfrage kann über einen internen Datenpunkt ausgelöst und definiert werden. Zur Verwendung der abgefragten Daten stehen die folgenden zwei Möglichkeiten zur Verfügung:
-
Schreiben der Daten auf internen DP: In diesem Fall werden die erhaltenen Daten auf einen internen Datenpunkt abgebildet, über welchen die weitere Datenverarbeitung erfolgen kann. Dadurch ist es möglich, historische Abfragen auf Knoten des Servers durchzuführen, die im WinCC OA System nicht über Peripherieadressen konfiguriert sind.
-
Schreiben der Daten auf DPE mit entsprechender Peripherieadresse: Dieser Modus ermöglicht es, die abgefragten Daten automatisch in das _archive-Config aller Datenpunktelemente mit der entsprechenden Peripherieadresse einzubinden. Dadurch können beispielsweise Daten innerhalb eines bestimmten Intervalls vom Server abgefragt und in das Archiv geschrieben werden, die durch einen Verbindungsausfall zwischen Server und Client verloren gegangen wären.
Abfrage historischer Daten
Über das interne Datenpunktelement _OPCUAServer.Command.HistoryRead wird die Abfrage der historischen Daten gestartet sowie die entsprechenden Parameter konfiguriert.
Abhängig von der Konfiguration dieses Datenpunktelements wird entweder auf einen Response-Datenpunkt vom Typ _OPCUAHistoryReadResponse oder in das Archiv von Datenpunktelementen mit der entsprechenden Peripherieadresse geschrieben. Die beiden Konfigurationsmöglichkeiten werden in den folgenden Beispielen gezeigt:
1. Speichern auf Datenpunkt
Um die abgefragten Daten auf einem Response-Datenpunkt abzubilden, gehen Sie folgendermaßen vor:
Anlegen eines Response-Datenpunktes
Zuerst muss ein Datenpunkt vom Datenpunkttyp _OPCUAHistoryReadResponse erstellt werden, auf den im Anschluss die erhaltenen Daten geschrieben werden können.
Beispiel: responseDP1
Damit der Response-Datenpunkt verwendet werden kann, muss dieser anschließend am internen Datenpunktelement _OPCUA<Treibernummer>.Config.HistoryReadResponseDps eingetragen werden.
Abfrage starten
Die Abfrage der historischen Daten kann jetzt über das interne Datenpunktelement _OPCUAServer.Command.HistoryRead gestartet werden. Um die erhaltenen Daten auf den zuvor erstellten Datenpunkt zu schreiben, muss entweder Methode 1 (Angabe des abzufragenden Items als NodeId) oder Methode 2 (Angabe des abzufragenden Items als Browsepfad) gewählt werden (siehe auch _OPCUAServer.Command.HistoryRead - Method).
Beispiel - Methode 1:
RequestId123
ReadRaw
1
ns=2;s=AirConditioner_2.Temperature
2015.03.03 09:00:00.000
2015.03.03 09:10:00.000
20
0
responseDP1
Beispiel - Methode 2:
RequestId1234
ReadRaw
2
/0:Objects/0:Server/2:AreaAirConditioner/2:AirConditioner_2/2:Temperature
2015.03.03 09:00:00.000
2015.03.03 09:10:00.000
20
0
responseDP1
Durch Klick auf die Übernehmen-Schaltfläche im PARA-Modul wird die Abfrage mit den definierten Parametern durchgeführt. Eine genaue Parameterbeschreibung finden Sie hier.
Datenverarbeitung
Das Ergebnis der Datenabfrage wird auf den zuvor erstellten Response-Datenpunkt (responseDP1) geschrieben und kann zur weiteren Verarbeitung verwendet werden.
2. Schreiben auf _archive-Config eines Datenpunktelements
Bei Verwendung von Methode 3 werden die historischen Werte auf die Datenpunktelemente mit den angegebenen Peripherieadressen geschrieben.
Peripherieadresse
Die gültige Peripherieadresse kann über das Datenpunktelement HW.HWMask vom internen Datenpunkttyp _DriverCommon ermittelt werden. Ist beispielsweise das _address-Config eines Datenpunktelements mit der Item ID "ns=2;s=AirConditioner_2.Temperature" verknüpft, so entspricht dieser Wert nicht der Peripherieadresse. Die gültige Peripherieadresse wäre in diesem Fall "opcua_server$Subscription$1$1$ns=2;s=AirConditioner_2.Temperature".
Alternativ dazu kann auch eine Wildcard so definiert werden, dass genau diese eine gewünschte Adresse abgefragt wird. In diesem Fall wäre das *ns=2;s=AirConditioner_2.Temperature
Durch die Verwendung von Wildcards ist es auch möglich, die Abfrage für alle übereinstimmenden Peripherieadressen durchzuführen und das Ergebnis in das Archiv des jeweiligen Datenpunktelementes zu schreiben.
Beim Schreiben der Daten der historischen Abfrage in das WinCC OA Archiv wird der Zeitstempel verwendet, der in der Subscription des entsprechenden Datenpunktelements definiert wurde.
Über das interne Datenpunktelement OPCUAServer.Config.HistoryReadTimestamps kann festgelegt werden, welcher Zeitstempel verwendet werden soll, wenn am entsprechenden Datenpunktelement keine Subscription definiert ist. Per Default wird in diesem Fall der Quellzeitstempel verwendet.
Der OPC UA Client führt historische Abfragen nur für jene Datenpunktelemente aus, bei denen für die Peripherieadresse die "Historie"-Checkbox gesetzt ist (siehe auch Hinweise und Einschränkungen). Um die abgefragten Daten mit einem bestimmten Userbit als historische Werte zu markieren wird der Config-Eintrag userBitHistoryRead verwendet. Sollen die historischen Werte als Korrekturwerte geschrieben werden muss zusätzlich noch der Config-Eintrag histDataBits gesetzt werden.
Response-Datenpunkt
Der Response-Datenpunkt ist in diesem Anwendungsfall nicht zwingend notwendig, liefert wenn angegeben aber wichtige Informationen zur Abfrage, wie zum Beispiel RequestId, ReturnCode oder DpList.
Abfrage starten
Nachdem Methode 3 sowie eine gültige Peripherieadresse definiert wurden, kann die Abfrage per Klick auf die Übernehmen-Schaltfläche im PARA-Modul gestartet werden.
Beispiel:
RequestId1234
ReadRaw
3
*.Temperature
2015.03.03 09:00:00.000
2015.03.03 09:10:00.000
20
0
responseDP2
Redundanzverhalten
OPC UA Server-Redundanz
Das History Access Interface des WinCC OA OPC UA Clients unterstützt OPC UA Server-Redundanz.
Per Default sendet der OPC UA Client im Fall eines nicht-transparenten redundanten OPC UA Servers nur an den ersten erreichbaren Server eine HistoryRead-Abfrage. Zum Handhaben von fehlenden historischen Daten an einem der beiden redundanten Server bietet der OPC UA Client die Möglichkeit, an beide Server die HistoryRead-Abfrage zu senden. In diesem Fall wird das Ergebnis der Lese-Abfrage beider Server zusammengeführt.
Für den Fall, dass die beiden Server für einen identischen Zeitstempel unterschiedliche Werte übermitteln, wird der Wert des ersten Servers übernommen.
Zur Konfiguration des Redundanzverhaltens wird das Redu.Config.HistoryReadMode-Datenpunktelement verwendet.
OPC UA Client-Redundanz
Im Fall von redundanten WinCC OA Clients senden beide Clients die historische Abfrage an den Server. Für den Server stellt sich das wie zwei getrennte Abfragen dar. Der tatsächliche Aktiv/Passiv Mechanismus und das damit verbundene Verwerfen erfolgt innerhalb von WinCC OA. Um einen Datenverlust während einer Reduumschaltung zu verhindern, wird empfohlen, beide Clients die historischen Abfragen durchführen zu lassen.
Der Vorteil dieser Variante ist, dass der Server keine Redufähigkeiten unterstützen muss.
Soll der passive Client keine historischen Abfragen an den Server senden, kann über den Config-Eintrag historyReduMode das Verhalten des passiven Clients konfiguriert werden.
Hinweise & Einschränkungen
Hinweise
Nicht jede Node im OPC UA Adressraum enthält historische Daten. Über das interne Datenpunktelement _OPCUAServer.Browse.AccessLevel wird angezeigt, ob für die entsprechenden Nodes historische Daten verfügbar sind.
In WinCC OA wird zum Kennzeichnen von Peripherieadressen für die am Server historische Daten vorhanden sind das _offset-Attribut des _address-Configs verwendet. Nur wenn für eine Peripherieadresse das _offset-Attribut gesetzt ist, führt der OPC UA Client bei Verwendung von Methode 3 eine Abfrage durch und schreibt die Daten auf das Element. Hierfür muss die "Historie"-Checkbox am Panel zur Definition der Peripherieadresse gesetzt werden.
Das _offset-Attribut weist folgende Struktur auf:
Bit | Beschreibung |
---|---|
0 |
Zeigt an, ob am Server historische Daten für diese Peripherieadresse vorhanden sind. 0 = Keine historischen Daten vorhanden 1 = Historische Daten verfügbar |
1-15 | Derzeit nicht verwendet. |
Einschränkungen
-
Es ist nur möglich, historische Daten eines OPC UA Servers zu lesen, Schreibzugriffe werden nicht unterstützt.
-
Vom WinCC OA OPC UA Client wird nur die Funktion ReadRaw des OPC UA Services History Read unterstützt.
-
Historische Aggregate werden vom WinCC OA OPC UA Client nicht unterstützt.
Beispielpanel
Zusätzlich existiert ein Beispielpanel (/panels/examples/OPCUA_HA_Example.pnl) welches folgende Funktionalität zur Verfügung stellt:
-
Browsen und Anzeigen der Server-Items
-
Durchführung von historischen Abfragen mit benutzerdefinierten Parametern
-
Anzeige der Daten in Tabellen