OPC UA Alarme und Zustände
In diesem Kapitel wird die OPC UA Alarms & Conditions (AC) Funktionalität des WinCC OA OPC UA Clients näher beschrieben. Diese ermöglicht es, Alarme von einem OPC UA Alarmserver zu empfangen und zu quittieren.
Die Abbildung des Alarms erfolgt auf ein Datenpunktelement im WinCC OA OPC UA Client Projekt über eine entsprechende Peripherieadresse. Damit ein Alarm am WinCC OA Client System ausgelöst wird, muss eine Meldebehandlung für Multiinstanzalarme an diesem Datenpunktelement parametriert sein (_alert_hdl Config). Multiinstanzalarme haben den Vorteil, dass eine Alarmaktion wie Kommen, Quittieren, Gehen extern auslösbar ist und nicht vom Event-Manager berechnet wird. Zudem können bei diesem Alarmtyp Zusatzinformationen in Alarmbegleitwerten (siehe Inhalte von Alarmbegleitwerten für OPC UA) gespeichert werden. Des Weiteren kann für jeden Alarm eine spezielle Alarmklasse mitgegeben werden, d.h. es wird nicht die parametrierte Alarmklasse verwendet.
Wichtige Hinweise und Einschränkungen zu OPC UA AC finden Sie unter Alarme und Zustände (Alarms&Conditions) und Unterstützte Alarmtypen und Einschränkungen.
Voraussetzungen
Damit der OPC UA Client Alarme und Conditions empfangen kann, müssen folgende Voraussetzungen erfüllt sein:
- Der Config-Eintrag [driver] driverAckClassPrefix muss gesetzt sein. Siehe Quittierung von Alarmen.
- Ein OPC UA Verbindungsdatenpunkt zum Server (siehe Parametrierung der Server) mit einer Subscription vom Typ Alarme & Zustände wurde erstellt (siehe Parametrierung einer Subscription).
- Das Mapping der OPC UA Severity auf WinCC OA Alarmklassen hat stattgefunden. Siehe Abbildung der Alarmdaten.
- Am DPE, welcher die Alarme empfangen soll, wurde eine Peripherieadresse (_address) mit der oben erstellten Subscription und dem Empfangsmodus Alarm angelegt. Die konfigurierte Adresse muss die Node-ID oder den Suchpfad der Alarmbedingung enthalten. Siehe Parametrierung einer Peripherieadresse.
- Am gleichen DPE wurde eine Meldebehandlung für Multiinstanzalarme (_alert_hdl) angelegt. Der Alarm in WinCC OA wird nicht über den Wert des Datenpunktelementes, sondern direkt ausgelöst. D.h. es wird das Attribut _alert_hdl.._event vom Treiber gesetzt. Siehe Meldebehandlung für Multiinstanzalarme.
In diesem Kapitel wird anhand eines Beispiels Schritt für Schritt beschrieben, wie Alarme empfangen und quittiert werden können. Das hier angegebene Beispiel zeigt die Konfiguration eines diskreten Alarms bei Verwendung des WinCC OA OPC UA Servers.
Quittierung von Alarmen
Damit Alarme nicht direkt in WinCC OA, sondern über den OPC UA Server quittiert werden, ist folgende Vorgangsweise notwendig:
- Im Projekt müssen individuelle Alarmklassen mit einem eindeutigen Präfix angelegt werden. Erstellen Sie hierfür die entsprechenden Datenpunkte vom Typ _AlertClass und konfigurieren Sie die Alarmklasse.
- In der Config-Datei des Client Projektes muss der folgende Eintrag gesetzt
werden:
[driver] driverAckClassPrefix = "<Präfix>" #z.B. "OPCUA" für die Alarmklasse OPCUA_Alarm
Dieser Eintrag wird vom UI gelesen und führt dazu, dass der Alarm nicht mehr über den Event-Manager, sondern über den internen Treiberdatenpunkt _DriverCommon quittiert wird (siehe auch driverAckClassPrefix). Erst dann sendet der Server eine Bestätigung der Quittierung an den Client, damit das UI den Alarm in WinCC OA wie gewohnt quittieren kann.
Parametrierung einer Subscription
Die Node-ID des Alarm-Condition-Type muss in der Subscription ausgewählt werden. Dieser Typ wird als Filter in der Subscription verwendet. Wenn Sie also einen falschen Alarmzustandstyp angeben, werden Sie den Alarm nicht erhalten. In der ComboBox haben wir eine Liste von vordefinierten Alarmtypen, für die es eine definierte Knoten-ID gibt:
- SimaticAlarmConditionType
- SimaticAlarmConditionOverloadType
Wenn der Server eine andere Art von Alarmbedingung hat, müssen Sie die Node-ID manuell mit dem Typ „Manual ...“ angeben. Dazu müssen Sie die Dokumentation des UA-Servers konsultieren.
Da Sie nur einen Alarmtyp in einem Abonnement angeben können, benötigen Sie eine Subscription pro Alarm.
- OffNormalAlarm
- ExclusiveLimitAlarm
- ExclusiveDeviationAlarm
- WinCCOADiscreteAlarm
- WinCCOAContinuousAlarm
Der konfigurierte Alarmbedingungstyp muss vom OPC-UA-Standard AlarmConditionType abgeleitet sein, da dieser Typ alle Felder enthält, die der Client benötigt, um den Status des Alarms zu bewerten (Active, Acknowledged, etc.).
Für weitere Informationen siehe auch Unterstützte Alarmtypen und Einschränkungen weiter unten.
Die Felder des Panels sind im Kapitel Konfiguration einer Subscriptionbeschrieben.
Event Notifier
Wenn eine Alarm-Subskription erstellt wird, ist das überwachte Element ein Event Notifier (Ereignismelder).
Das bedeutet, dass der Client einen Notifer Node (Meldeknoten) abonnieren muss, der die Ereignisse für die konfigurierten Alarmbedingungen auslöst.
Unser UA-Client verwendet das Objekt "Server" als Default Notifier (Standard-Melder), wenn das Feld in der Subskription leer ist.
Dies sollte ausreichend sein, da alle Ereignisse über diesen Knoten abgefeuert werden sollten. Es gibt zwei Gründe, den Detektor zu ändern. Der erste ist, dass der Server diesen Knoten nicht verwendet, obwohl die OPC UA Spezifikation dies vorschreibt. In diesem Fall müssen Sie in der UA Server Dokumentation nachschlagen, um die korrekte Knoten-ID des Notifiers (Melders) zu ermitteln. Die zweite ist die Begrenzung der Ereignisse, da der Serverknoten, wie oben erwähnt, alle Ereignisse auslöst.
Mapping Tabelle
Falls notwendig können in der Tabelle OPC UA Alarme einem bestimmten Alarmbereich in WinCC OA zugeordnet werden. Das ist nur dann sinnvoll, wenn das _alert_hdl mit mehr als zwei Bereichen konfiguriert wurde. Normalerweise wird für Multiinstanzalarme nur ein Gut- und ein Schlecht-Bereich verwendet.
In der Spalte "Status" kann eine Kombination aus UA Zustandsattributwerten definiert werden. Die Spalte "Range" definiert den Alarmbereich welcher gesetzt werden soll, wenn der Wert übereinstimmt.
Beispiel
Status | Bereich |
---|---|
ActiveState=false | 1 |
ActiveState=true;Range2=true | 2 |
ActiveState=true;Range3=true | 3 |
Die Attributnamen müssen für den ausgewählten Conditiontyp (oder Alarmtyp) gültig sein.
Abbildung der Alarmdaten
Damit in WinCC OA ein Alarm ausgelöst wird, muss am entsprechenden Datenpunktelement ein _alert_hdl Config vom Typ Multiinstanzalarm existieren.
Die konfigurierte Alarmklasse (_alert_class) ist irrelevant, wenn die Checkbox "UA Severity" in der Subskription aktiviert ist und ein Mapping von OPC UA Serverity zu Alarmklasse konfiguriert ist.
Die Abbildung von der OPC UA Gewichtung auf die WinCC OA Alarmklasse wird im Panel OPC UA Alarmgewichtung definiert. Dieses Panel ist über das WinCC OA Systemmanagement aufrufbar.
Über die Registerkarte Mapping der OPC UA Alarmgewichtung :
öffnen Sie dieIn WinCC OA wird die Priorität und der Quittierungsmodus des Alarms durch die Alarmklasse bestimmt. Dies kann entweder die gemappte Alertklasse aus der OPC UA Severity sein, wenn dieses Mapping konfiguriert ist, oder die Alertklasse, die in der Multi-Instance Alert hdl config konfiguriert ist. Dies bedeutet, dass die Priorität und der Quittierungsmodus während der Lebensdauer der Meldung nicht geändert werden können.
Treiber
Wählen Sie hier den Treiberdatenpunkt _OPCUA<num> vom Typ _OPCUA, für den das Alarmgewichtungsmapping verwendet werden soll. <num> entspricht der Managernummer, mit der der OPC UA Client gestartet ist.
Bereiche
Geben Sie hier die Anzahl der Bereiche ein, auf die Gesamtgewichtung von 1000 aufgeteilt werden soll. Die maximale Anzahl von definierbaren Bereichen ist 30.
Mapping der OPC UA Severity auf die WinCC OA Alarmklasse
Die Severity (Gewichtung) in OPC UA erstreckt sich von 1 bis 1000, wobei 1 die kleinste Gewichtung darstellt und 1000 die höchste. Das Alarmmodell von WinCC OA wird über die Prioritäten 1 bis 255 definiert, wobei auch hier 1 die kleinste Priorität darstellt. Folglich müssen beliebig große Severity-Bereiche, die zusammen den gesamten Severity-Bereich abdecken, auf WinCC OA Alarmklassen abgebildet werden. Diese Alarmklassen können entweder bereits definierte WinCC OA Alarmklassen sein oder können selbst erstellt werden, falls der Alarm ebenso an der Peripherie quittiert werden soll (für weitere Informationen siehe Quittierung von Alarmen).
Das Mapping wird auf das interne Datenpunktelement _OPCUA.Config.AlarmPrioMapping geschrieben. Dieses DPE ist vom Typ dyn_string und speichert das Mapping im folgenden Format "<start severity> <alert class>", wie im folgenden Beispiel gezeigt.
1 OPCUA_Info
75 OPCUA_Warning
125 OPCUA_Alarm
175 OPCUA_Danger
...
Das bedeutet, dass die WinCC OA Alarmklasse OPCUA_Info für die OPC UA Severity 1 bis 74 verwendet wird, OPCUA_Warning von 75 bis 124 und so weiter. Der letzte Eintrag OPCUA_Danger wird von 175 bis zum höchsten OPC UA Severity-Wert (1000) verwendet.
Parametrierung einer Peripherieadresse
Fügen Sie dem Datenpunktelement, das die Alarme empfangen soll, ein _address-Konfig hinzu und wählen Sie im Peripherieadresspanel den OPC UA Server aus. Danach muss die entsprechende Subscription vom Typ Alarme und Zustände ausgewählt werden.
In der Peripherieadresse muss die entsprechende Bedingung (Node-ID) ausgewählt werden. Abhängig vom eingestellten Alarmtyp im Subscription-Parametrierpanel erfolgt das Browsen (Schaltfläche Get Item ID) im entsprechenden Modus.
Wie bei Daten und Ereignissen ist es ebenso bei Alarmen & Zuständen möglich entweder die Node ID oder Browse Pfad zu verwenden.
Als Element müssen Sie die Alarm-Condition-ID auswählen, die für die Zuordnung von UA-Alarmen zu DPEs in WinCC OA verwendet wird.
- Es ist möglich, mit dem WinCC OA UA-Client nach den Condition-IDs zu suchen. Das Durchsuchen nach Alarm-Condition-IDs kann funktionieren oder auch nicht, da es nicht zwingend erforderlich ist, dass sich die Alarm-Conditions im OPC UA-Adressraum befinden müssen. Wenn sie nicht vorhanden sind, können sie nicht durchsucht werden. Selbst wenn sie sich im Adressraum befinden, ist es möglich, dass sie nicht über das Server-Objekt central notifier zugänglich sind, das vom WinCC OA-Client benötigt wird.
- Die Condition ID können Sie der UA Server-Dokumentation entnehmen.
- Weder Option 1 noch 2 sind anwendbar. Es kann vorkommen, dass die Condition IDs nicht im Voraus bekannt sind oder dynamisch sind. In diesem Fall können Sie sie nicht in der Adress-Config konfigurieren. In diesem Fall muss die alarmFallbackAddress Condition ID verwendet werden (siehe Dynamische Alarm-Condition unten).
Parametrierung der Meldebehandlung
Legen Sie am gleichen Datenpunktelement eine Meldebehandlung für Multiinstanzalarme an. Der Alarm wird in diesem Fall nicht über den Wert des Datenpunktelementes, sondern direkt vom Treiber ausgelöst.
Siehe den obigen Abschnitt Abbildung der Alarmdaten.
Inhalte von Alarmbegleitwerten für OPC UA
Mithilfe der Meldebehandlung für Multiinstanzalarme ist es möglich, die unterschiedlichen Ereignisparameter als Alarmbegleitwerte auszugeben (für Informationen zu Alarmbegleitwerten allgemein siehe Begleitwerte und für Informationen zu den Konfig-Attributen für Alarmbegleitwerte siehe _alert_hdl). Die folgende Tabelle zeigt das aktuelle Mapping:
Attribut (vom Konfig _alert_hdl) | OPC UA Ereignisdaten |
---|---|
_add_value_1 | leer |
_add_value_2 | OPC UA Alarmmeldungstext |
_add_value_3 | OPC UA Severity (Gewichtung) |
_add_value_4 | OPC UA Quality Information vom Event |
_add_value_5 | Ausgewählte Ereignisfelder als JSON-String (siehe Subscription-Konfiguration ). |
Sortierung von zeitgleichen Alarmen im Alarm- und Ereignisschirm
Um im Alarmschirm zeitgleiche Alarme sortieren zu können, kann ein Counter verwendet werden, der bei zeitgleichen Alarmen erhöht wird. Dieser Counter wird in den Begleitwerten abgespeichert.
Der Counter wird über den Eintrag "alertCounterAddValue" in der [opcua] Sektion der Konfigdatei aktiviert.
Anschließend muss in der Tabellenkonfiguration vom Alarm- und Ereignisschirm noch eine neue Spalte für den im Begleitwert gespeicherten Counter erstellt werden. Dann können Alarme zuerst nach der Zeit und sollte diese identisch sein, nach dem Counter sortiert werden.
Unterstützte Alarmtypen und Einschränkungen
Die korrekte Verarbeitung von Alarmen eines OPC UA Servers mit dem WinCC OA OPC UA Client hängt von einigen Faktoren ab. Wobei korrekte Verarbeitung bedeutet, dass der Zyklus eines Alarms am Server am Client richtig wiedergegeben wird.
Einerseits hängt das von den verwendeten Alarmtypen ab, andererseits auch von der Art wie sich die Alarmattribute am Server ändern. Da OPC UA Alarme sehr flexibel definiert sind und in WinCC OA nur fixe Alarmmodelle vorhanden sind, können nur eingeschränkte Modelle vom Client auf WinCC OA abgebildet werden.
Dabei gelten folgende Einschränkungen:
- Die Alarm Severity darf sich nach dem Aktivieren eines Alarms bis zu seinem Verschwinden am Server nicht ändern.
- Jeder Alarm darf nur einen Gutbereich und einen Alarmbereich haben.
- Der Quittierungszustand eines Alarms darf sich von "Quittiert" nicht auf "Unquittiert" ändern, ohne dass der Alarm am Server neu ausgelöst wurde.
So ergibt sich aktuell eine Matrix für die unterstützten Kombinationen für die Konfiguration des WinCC OA UA Client (diese folgende Matrix gilt nur für WinCC OA OPC UA Client - die Matrix für den OPC UA Server finden Sie unter Unterstützte Alarmtypen und Quittierungsarten).
- Die Quittierungseinstellung Alte Alarme quittieren wird nicht unterstützt.
- Der Quittierungsart KAM und GING müssen quittiert werden wird für Impulsalarme nicht unterstützt.
- Innerhalb des Alarmschirms werden nur die Werte des _alert_hdl.._event Attributes angezeigt, d.h. den Wert 0 für "Meldung KAM" und 2 für "Meldung GING".
- Bei der Verwendung von "KAM und GiNG sind getrennt quittierungspflichtig" innerhalb des AES Schirmes ist es auf Seite des Clients nicht möglich, momentan nicht quittierbare Alarme zu blockieren (graue Hinterlegung und nicht klickbar) da diese Information nur serverseitig zur Verfügung steht. Dies führt dazu, dass ein mehrfaches quittieren innerhalb des Clients möglich ist, dieses jedoch entsprechend des korrekten Verhaltens nicht auf dem Server durchgeführt wird.
Nicht quittierbar | Quittierung löscht | KAM ist quittierbar | KAM oder GING musst quittiert werden | KAM und GING müssen quittiert werden | |
---|---|---|---|---|---|
Binärer Alarm | ✔ | ❌ | ✔ | ✔ | ✔ |
Binärer Alarm (diskret) | ❌ | ❌ | ❌ | ❌ | ❌ |
Binärer Alarm (Impuls) | ❌ | ❌ | ❌ | ❌ | N/A |
Binärer Alarm (diskret, Impuls) | ❌ | ❌ | ❌ | ❌ | N/A |
Alarm kontinuierlicher Werte (2 Bereiche) | ✔ | ❌ | ✔ | ✔ | ✔ |
Alarm diskreter Werte (2 Bereiche) | ✔ | ❌ | ✔ | ✔ | ✔ |
Alarm diskreter Werte (Impuls, 2 Bereiche) | ❌ | ❌ | ❌ | ❌ | ❌ |
Alarm kontinuierlicher Werte (n Bereiche) | ❌ | ❌ | ❌ | ❌ | ❌ |
Alarm diskreter Werte (n Bereiche) | ✔ | ❌ | ✔ | ✔ | ✔ |
Alarm diskreter Werte (Impuls, n Bereiche) | ❌ | ❌ | ❌ | ❌ | ❌ |
Dynamic Alarm Conditions
Wie bereits im Abschnitt Parametrierung der Peripherieadresse erwähnt, muss die Node-ID des Alarmzustandes in der Adresse konfiguriert werden, um den Alarm einem DPE zuzuordnen. Da es Situationen gibt, in denen diese Node-ID nicht oder nur schwer im Voraus bestimmt werden kann, wurde die Fallback Address-Option eingeführt. Damit ist es auch möglich, Alarme zu empfangen, die eine dynamische Condition-ID haben. Dies ist z.B. bei dem OPC UA Server einer SPS 1500 der Fall.
Konfiguration
Um auch den Empfang von Alarmen ohne Konfiguration der ConditionId zu unterstützen, wird das Konzept einer Fallback-Adresse verwendet. Dadurch können alle Alarme, die über eine Alarm-Subscription, und die nicht auf eine explizit konfigurierte ConditionId abgebildet werden, auf eine beliebige Fallback-Alarmadresse abgebildet werden.
Diese Fallback-Adresse kann mit dem Config-Eintrag [opcua] alarmFallbackAddress konfiguriert werden. In diesem Fall kann das empfangende DPE eine hohe Anzahl an aktiven Alarminstanzen haben, was möglich ist da _alert_hdl einen Multi-Instanz-Alarm verwendet.
Wenn einem DPE mehr als eine Bedingung zugeordnet ist, sollten Sie in der
Subscription immer UA Alarm text
und UA Severity
auswählen, da unterschiedliche Bedingungen einen unterschiedlichen Alarmtext und
-schweregrad aufweisen können.