Meldebehandlung für Multiinstanzalarme
Eine Meldebehandlung für Multiinstanzalarme ermöglicht es, mehrere Alarme von der Peripherie über einen speziellen WinCC OA Treiber oder über einen Manager (siehe Multiinstanzalarme) auszulösen. Die Alarmeigenschaften (wie z.B. die Alarmklasse oder der Alarmtext) können beim Auslösen des Alarms dynamisch geändert werden.
Für diesen Zweck muss das Datenpunktelement über ein Meldebehandlungs-Config (_alert_hdl) verfügen. Ein Multiinstanzalarm kann über einen speziellen Treiber, einen Manager, ein CTRL-Script oder ein Panel ausgelöst werden, indem auf die entsprechenden Meldebehandlungsattribute gezielt Werte gesetzt werden.
Mittels alertSet() auf das Attribut _alert_hdl.._event werden die Meldeaktionen (KAM, QUITTIERT, GING, etc. - siehe Meldebehandlung "_alert_hdl.<i>._event") eines Multiinstanzalarms gesetzt. Multiinstanzalarme können direkt im Alarmschirm oder bei spezieller Alarmklasse auch indirekt über die Peripherie (siehedriverAckClassPrefix und Beispiele zur Meldebehandlung) quittiert werden. Das Attribut _alert_hdl.._multi_instance (bool) definiert, ob ein Meldebehandlungs-Config für die Multiinstanzalarme verwendet wird.
Hinweis
Bei der Verwendung eines speziellen Treibers ist die Peripherieadresse genau einer Treiberinstanz zugeordnet, wodurch Alarme nur über diese empfangen werden können.
Multiinstanzalarme (somit auch das Attribut _alert_hdl.._multi_instance) sollten grundsätzlich nur für extern erzeugte Alarme, von denen es auch mehrere Instanzen geben kann, verwendet werden.
Parametrierungen dürfen nicht mit dpSetTimed()/dpSetTimedWait() gesetzt werden. Eine Ausnahme bildet das Setzen der Quellzeit auf die Nullzeit mittels dpSetTimed()/dpSetTimedWait(), um eine anwachsende Parametrierhistorie zu verhindern.
Bei der Verwendung von Multiinstanzalarmen ist darauf zu achten, dass bei der Quittierung durch den Treiber nicht die Alarmklasse des Alarmes sondern die Alarmklasse der Parametrierung herangezogen wird.
Externe Alarme können nicht per dpSet auf das _alert_hdl.._ack-Attribut quittiert werden, da in diesem Fall der Geräte-Alarm nicht quittiert werden würde.
Bei Multiinstanzalarmen richtet sich die angezeigte Alarmfarbe (_act_state_color) nicht nach der Priorität sondern nach dem Quittierzustand der Meldung. Der Alarm der den Quittierzustand ändert, bestimmt die aktuelle Farbe. Z.B.:
Alarm mit Alarmklasse "information" (Prio 10) wird ausgelöst. Der Alarm ist nicht quittierbar, der Zustand ist daher "KAM/quittiert" -> _act_state_color entspricht der Farbe für KAM/quittiert bei "information"
Alarm mit Alarmklasse "warning" (Prio 40) wird ausgelöst. Der Alarm ist quittierbar, der Zustand ist daher "KAM/unquittiert" -> _act_state_color entspricht der Farbe für KAM/unquittiert bei "warning"
Alarm mit Alarmklasse "alert" (Prio 60) wird ausgelöst. Der Alarmzustand ändert sich nicht und ist immer noch bei "KAM/unquittiert" -> _act_state_color entspricht immer noch der Farbe von "warning"
Alarm mit Alarmklasse "information" wird ausgelöst. Der Alarmzustand ändert sich auf "KAM/quittiert" -> _act_state_color entspricht der Farbe von "KAM/quittiert" bei "information"
Multiinstanzalarme können für alle numerischen Datentypen eines Datenpunktelements parametriert werden (uint, int, float und bool).
Adressierung einer Alarminstanz
In den meisten Fällen generiert die Peripherie für jede Alarminstanz eine Alarmnachrichtnummer. Damit der Treiber/Manager dazu imstande ist, eine Alarminstanz eindeutig in der Peripherie zu identifizieren/referenzieren, sind einige Attribute erforderlich: Die Managernummer, die Gerätenummer, die Alarmquelle, die den Alarm behandelt, und die Alarmnachrichtnummer, die der Alarminstanz zugeordnet ist. Der Treiber/Manager kann diese Attribute verwenden (alle oder nur ausgewählte), um die Alarmzustände im Gerät zu ändern (z.B. um zu quittieren). Diese zusätzlichen Attribute werden in der Datenbank abgelegt. Es bleibt dem Treiber/Manager überlassen, diese Attribute zu befüllen und zu verwenden. Alle diese Attribute werden auf dem String-Attribut _alert_hdl.._alert_id gespeichert. Dieses Attribut kann zur Filterung von Alarmen (z.B. um alle Alarme eines bestimmten Alarmquelle zu finden) oder in dpQuery-, alertGet- oder alertConnect-Aufrufen verwendet werden. Die eindeutige Identifizierung von Datenpunktelementen mit Multiinstanzalarmen (sowie auch anderen Alarmen) erfolgt jedoch weiterhin über die Alarmzeit (atime) und den Count.
Der Count wird für Multiinstanzalarme zyklisch vergeben und für jeden Meldebereich gespeichert, ohne dabei die Parametrierhistorie zu überladen. Dadurch wird das Risiko minimiert, dass eine andere Meldung mit dem gleichen Count und der gleichen Zeit diese überschreibt. Um auf eine Meldung über ein Skript zuzugreifen bzw. deren Attribute zu ändern, muss der Count somit jedes Mal neu ermittelt werden.
Alarmbegleitwerte
Zusammen mit der Alarminstanz können zusätzliche Eigenschaften, so genannte Alarmbegleitwerte, auf einem Multiinstanzalarm gespeichert werden. Für weitere Informationen siehe Alarmbegleitwerte.
Unabhängige Alarmquittierung
Multiinstanzalarme können in einer beliebigen Reihenfolge quittiert werden. Das heißt, es kann ein jüngerer Alarm vor einem älteren Alarm oder ein GING Alarm vor einem KAM Alarm quittiert werden.
Voraussetzungen und Einschränkungen
- Der Treiber/Manager muss Multiinstanzalarme unterstützen.
- Für Summenmeldebehandlungen können keine Multiinstanzalarme parametriert werden.
- Glättung, Transformation und Low Level Alt/Neu Vergleich stehen für Datenpunktelemente, die eine die eine Multiinstanzalarm-Peripherieadresse tragen, nicht zur Verfügung.
- Beim (Neu-)Start des Treibers muss ein Abgleich der vorhandenen Alarme im Event-Manager durchgeführt und die vorhandenen Alarme am Peripheriegerät müssen von dem speziellen Treiber implementiert werden: Alarme die im Event Manager verblieben ohne einen entsprechenden Alarm am Peripheriegerät müssen auf GING gesetzt werden und automatisch quittiert werden; neue Alarme müssen erstellt werden und anstehende Alarme müssen auf den aktuellen Zustand aktualisiert werden. Die Implementierung des Abgleichs obliegt der Verantwortung des speziellen Treibers.
- Multiinstanzalarme können von verteilten Systemen mit einer WinCC OA Version < 3.10 nicht behandelt werden.
Die Möglichkeit für Multiinstanzalarme alle Alarminstanzen mit einem Befehl (dpSet unter Verwendung des Attributes _alert_hdl.._ack) zu quittieren ist für Datenpunktelemente mit mehr als 100 offenen Alarminstanzen nicht mehr gegeben.
Wenn mehr als 100 Alarminstanzen erkannt werden während einer Massenquittierung wird folgender Fehler ausgegeben und die Alarminstanzen bleiben unquittiert.WCCILevent (0), <TIMESTAMP>, PARAM,WARNING, 54, Unexpected state, DP: <DPE identifier>, EvDpManager, setAlertValueAttributes: bulk acknowledge for multi instance alarms is not allowed
Standardpanel Meldebehandlung numerischer Größen
Das Panel zur Parametrierung eines Multiinstanzalarms numerischer Größen (int, uint, float) besteht aus zwei Registerkarten - Grenzen und Parameter.
Registerkarte Grenzen
Eine Meldebehandlung für Multiinstanzen hat mindestens zwei Meldebereiche - einen GUT-Bereich und einen SCHLECHT-Bereich. Für Multiinstanzalarme wird eine neue Alarminstanz nur dann generiert, wenn der entsprechende Alarmbereich gesetzt ist (nicht durch das Setzen eines bestimmten Wertes wie bei der Meldebehandlung von diskreten/kontinuierlichen Werten). Alarme kommen, werden quittiert und gehen wie von der Peripherie/vom Manager vorgegeben. D.h. der Wert (_original.._value) hat keinen direkten Einfluss auf den Alarm (das Setzen eines Wertes löst/setzt keinen Alarm aus/zurück). Im Meldeschirm kann der Wert angezeigt werden, der auf dem ersten Begleitwert (_alert_hdl.._add_value_1) des Multiinstanzalarms gesetzt wurde (siehe auch Config-Eintrag attributesFromAddValues).
Achtung
Da Multiinstanzalarme nicht über den Wert ausgelöst werden, ist der Meldebereich für den GUT-Bereich nicht frei wählbar. Der GUT-Bereich ist immer der Meldebereich mit dem Index 1.
- Meldeklasse: Wählen Sie aus den angelegten Meldeklassen eine Meldeklasse für den SCHLECHT-Bereich aus (siehe auch Kapitel _alert_class). Dem GUT-Bereich wird keine Meldeklasse zugeordnet.
- Kam Text: Geben Sie für jeden Meldebereich einen Text ein, welcher angezeigt wird, wenn der Wert in einen dieser Meldebereiche kommt (KAM-Meldung). Der Text wird im Meldeschirm angezeigt, z.B. "Messsonde 2: CO Gehalt kritisch!". Der KAM-Text im Gutbereich wird im Meldeschirm nicht angezeigt, dennoch kann er für Abfragen festgelegt werden (z.B. für eine Verwendung im Enum-Kontext). Per Default ist der KAM-Text "nicht Ok kam" für den SCHLECHT-Bereich und "Ok kam" für den GUT-Bereich. Diese Defaulttexte sind im Nachrichtenkatalog para.msg unter den Schlüsseln "multiinstance_ok_came_alarmtext" und "multiinstance_not_ok_came_alarmtext" definiert und können dort geändert werden oder beim Auslösen des Alarms überschrieben werden. Wenn Begleitwerte gesetzt wurden, kann im Meldeschirm der Inhalt des zweiten Begleitwertes (_alert_hdl.._add_value_2) für den SCHLECHT-Bereich angezeigt werden (siehe Config-Eintrag attributesFromAddValues).
- Ging Text: Geben Sie für jeden Meldebereich einen Text ein, welcher angezeigt wird, wenn der Wert einen dieser Meldebereiche verlässt (GING-Meldung). Dieser Text wird im Meldeschirm angezeigt, z.B. "Messsonde 2: CO Gehalt nicht länger kritisch.". Der GING-Text im Gutbereich wird im Meldeschirm nicht angezeigt, dennoch kann er für Abfragen festgelegt werden (z.B.: für eine Verwendung im Enum-Kontext). Per Default ist der GING-Text "nicht Ok ging" für den SCHLECHT-Bereich und "Ok ging" für den GUT-Bereich. Diese Defaulttexte sind im Nachrichtenkatalog para.msg unter den Schlüsseln "multiinstance_ok_went_alarmtext" und "multiinstance_not_ok_went_alarmtext" definiert und können dort geändert werden oder beim Auslösen des Alarms überschrieben werden. Wenn Begleitwerte gesetzt wurden, kann im Meldeschirm der Inhalt des zweiten Begleitwertes (_alert_hdl.._add_value_2) für den SCHLECHT-Bereich angezeigt werden (siehe Config-Eintrag attributesFromAddValues).
Registerkarte Parameter
Die Registerkarte Parameter gleicht der Registerkarte "Parameter" in der Summenmeldebehandlung (ausgenommen der Einstellung Ignoriere Meldungen mit Priorität kleiner als).
Meldebehandlung boolescher Größe
Die Meldebehandlung boolescher Größen charakterisiert, dass das Eintreten einer Meldung nur von zwei Zuständen abhängig sein kann (TRUE oder FALSE).
Registerkarte Bereiche
- Gutbereich: Der GUT-Bereich (Aus (0)) ist bei Multiinstanzalarmen fixiert und kann nicht verändert werden.
- Farbbalken: Der rote Bereich ist der SCHLECHT-Bereich, grün ist der GUT-Bereich (Normalbereich), in dem das System vorschriftsmäßig läuft, also keine Meldung erfolgen soll.
- KAM Text: Geben Sie für jeden der beiden Meldebereiche (gleich 1 (TRUE) bzw. 0 (FALSE)) einen Text an. Der Text des Alarmbereiches wird bei einer Zustandsänderung im Meldeschirm angezeigt. Der KAM-Text im Gutbereich wird im Meldeschirm nicht angezeigt, dennoch kann er für Abfragen festgelegt werden (z.B.: für eine Verwendung im Enum-Kontext). Per Default ist der KAM-Text "nicht Ok kam" für den SCHLECHT-Bereich und "Ok kam" für den GUT-Bereich. Diese Defaulttexte sind im Nachrichtenkatalog para.msg unter den Schlüsseln "multiinstance_ok_came_alarmtext" und "multiinstance_not_ok_came_alarmtext" definiert und können dort geändert werden oder beim Auslösen des Alarms überschrieben werden. Wenn Begleitwerte gesetzt wurden, kann im Meldeschirm der Inhalt des zweiten Begleitwertes (_alert_hdl.._add_value_2) für den SCHLECHT-Bereich angezeigt werden (siehe Config-Eintrag attributesFromAddValues).
- Meldeklasse: Weisen Sie der Meldung (= nicht Gutbereich) eine der vorgeschlagenen Meldeklassen zu (siehe auch Kapitel _alert_class) oder übernehmen Sie eine eigene Meldeklasse über den DP-Selektor rechts. Diese Meldeklasse kann auch überschrieben werden - für mehr Informationen siehe "Meldeklasse" weiter oben.
Registerkarte Parameter
Die Registerkarte Parameter gleicht der Registerkarte "Parameter" in der Summenmeldebehandlung (ausgenommen der Einstellung Ignoriere Meldungen mit Priorität kleiner als).
Beispiele finden Sie im Kapitel Beispiele zur Meldebehandlung.