_alert_hdl

Dieses Kapitel beschreibt die Attribute einer Meldebehandlung, Attribute einer Summenmeldebehandlung sowie die Statusbits für das Attribut _alert_hdl.._state (siehe Statusbits für Attribut _alert_hdl.._state).

Es wird zwischen zwei Arten von Attributen für eine Meldebehandlung unterschieden:

  • Attribute für die Parametrierung - Attribute der Parametrierung, z.B. die Grenzen der Meldebehandlung eines Datenpunktelementes, werden mit dpSet() gesetzt bzw. mit dpGet() oder dpConnect() abgefragt.

  • Attribute der Alarme - Attribute der Alarme, z.B. der Kommentar (_comment) für einen Alarm, der um 10:00 Uhr ausgelöst wurde, kann nur mit alertSet(), alertGet(), alertConnect() bzw. über dpQuery mit SELECT ALERT gesetzt bzw. abgefragt werden, da zu ihrer Bestimmung neben dem DPE auch die Alarmzeit notwendig ist.

VORSICHT:
dpQuery mit SELECT ALERT funktioniert ausschließlich mit Attributen, die mit alertConnect() abgefragt werden können. Das sind alle Attribute, die zu einer Alarminstanz gehören (siehe Attribute der Alarme oberhalb und in der Tabelle unterhalb). Attribute, die zur Parametrierung und nicht zur Alarminstanz gehören können damit nicht mit SELECT ALERT oder alertConnect() abgefragt werden.

Die folgende Tabelle zeigt alle Attribute einer Meldebehandlung. In der Tabelle finden Sie auch die Funktionen mit denen das Attribut gesetzt bzw. abgefragt werden kann.

*Typ "var" entspricht dem Typ des Elements, dem die Meldebehandlung zugeordnet wurde.

Attribute die mit dpQuery - SELECT ALERT abgefragt werden können

Bei folgenden Attributen ist eine Abfrage der aktuell anstehenden Alarme (dpQuery - SELECT ALERT) bzw. eine historische Abfrage (dpQuery - SELECT ALERT + TIMERANGE) möglich.

Attribute für Summenmeldungen

Attribute für Summenmeldungen Typ Beschreibung
_sumalerts dyn_dpid Zeigt bei einem Alarm, in welchen Summenalarmen er sich befindet.
_summed_abbr dyn_langString Liste der anstehenden Kurzzeichen
_summed_alerts dyn_atime Liste der anstehenden Alarme (DPE + Alarmzeit)
_summed_colors dyn_string Liste der anstehenden Meldefarben
_summed_classes dyn_dpid Liste der anstehenden Meldeklassen
_summed_prios dyn_char Liste der anstehenden Prioritäten
_summed_states dyn_int Liste der anstehenden Alarmzustände (kam quittiert. etc.)
_summed_alerts_count unsigned Zeigt die Anzahl der anstehenden Alarme, welche sich im Summenalarm befinden.

CTRL-Konstante

Int-Wert Beschreibung
DPCONFIG_NONE 0 keine Meldebehandlung
DPCONFIG_ALERT_BINARYSIGNAL 12 Meldebehandlung binärer Größen
DPCONFIG_ALERT_NONBINARYSIGNAL 13 Meldebehandlung analoger Größen

DPCONFIG_SUM_ALERT

59 Feldwärmebehandlung Summenalarme

Meldebehandlung "_alert_hdl.<i>._act_state"

Mit Integer-Konstanten kann der aktuelle Meldezustand (Quittierungsstatus) eines Meldungsbereichs wie der ganzen Meldebehandlung eines Datenpunktelements abgefragt werden. Die Detailnummer im Attribut bezieht sich auf den Index des Meldungsbereichs - siehe Attribute "_alert_hdl.<i>._type". Wird er weggelassen oder auf Null gesetzt, bezieht sich das Attribut auf den aktuellen Meldezustand der Meldebehandlung - siehe dpGet().

CTRL-Konstante Int-Wert Beschreibung
DPATTR_ALERTSTATE_NONE 0 keine Meldung
DPATTR_ALERTSTATE_APP_NOT_ACK 1 kam bzw. kam/unquittiert
DPATTR_ALERTSTATE_APP_ACK 2 kam/quittiert
DPATTR_ALERTSTATE_DISAPP_NOT_ACK 3 ging/unquittiert
DPATTR_ALERTSTATE_APP_DISAPP_NOT_ACK 4 kam/ging/unquittiert

Meldebehandlung "_alert_hdl.<i>._ack_state"

Mit folgenden Integer-Konstanten kann der aktuelle Quittierungszustand eines Meldungsbereichs eines Datenpunktelements abgefragt werden. Bei der Funktion alertSet() ist das Attribut _ack_state mit der richtigen Detailnummer (Alarmbereich bei analogen Meldungen) und der richtigen Zeit zu verwenden. Mit alertSet() kann man einen speziellen Alarm quittieren. Diese Funktion verwendet der AESchirm.

CTRL-Konstante Int-Wert Beschreibung
DPATTR_ACKTYPE_NOT 0 Nicht quittierbar!
DPATTR_ACKTYPE_MULTIPLE 1 Gesamtquittierung
DPATTR_ACKTYPE_SINGLE 2 Einzelquittierung

Meldebehandlung "_alert_hdl.<i>._event"

Mit den folgenden Integer-Konstanten können Meldeaktionen gesetzt werden.

CTRL-Konstante Int-Wert Beschreibung
DPATTR_ALERTEVENT_CAME 0 Meldung KAM.
DPATTR_ALERTEVENT_CAME_IMPULSE 1 Meldung KAM mit Impulsalarm.
DPATTR_ALERTEVENT_WENT 2 Meldung GING.
DPATTR_ALERTEVENT_MULTIPLE_ACK 3 Meldung wurde gesamtquittiert.
DPATTR_ALERTEVENT_SINGLE_ACK 4 Meldung wurde einzeln quittiert.
DPATTR_ALERTEVENT_WENT_INACTIVE 5 Deaktivierte Meldung GING.
DPATTR_ALERTEVENT_WENT_OBSOLETE 7

Weder eine KAM- noch eine GING-Meldung wird ausgelöst.

Die Konstante kann verwendet werden, um einen Alarm explizit zu löschen (z.B. wenn der Alarm auf der SPS nicht mehr existiert).

Meldebehandlung "_alert_hdl.<i>._hyst_type"

Mit den folgenden Integer-Konstanten kann bestimmt werden, ob einer Meldebehandlung eine Hysterese zugeordnet wird.

CTRL-Konstante Int-Wert Beschreibung
DPATTR_HYST_NONE 0 Keine Hysterese
DPATTR_HYST_VALUE 1 Hysterese
DPATTR_HYST_TIME 2 Das _hyst_time-Attribut (genannt Verzögerung in der alert_hdl-Konfiguration ) legt die Mindestzeit in Sekunden fest, wie lange ein Alarm in einem schlechten Bereich vorhanden sein muss, damit er ausgelöst wird. Wenn der Alarm wieder in einem guten Bereich ist, wird er sofort gelöscht. Für eine Alarm-Instanz kann die _alert_hdl.<detail>._hyst_time verwendet werden, um die für eine Alarminstanz verwendeten Werte zu erhalten. Die Konfiguration gilt pro Alarmbereich.

Meldebehandlung analoger Größen "_alert_hdl.<i>._type"

Mithilfe der im Folgenden aufgeführten Integer-Konstanten kann die Meldungsbehandlungart eines Meldungsbereichs eines Datenpunktelements bestimmt werden. Die Detailnummer im Attribut bestimmt den Meldungsbereich: "_alert_hdl.1._type" bezieht sich etwa auf den ersten, untersten Bereich - siehe dpSet().

CTRL-Konstante Int-Wert Beschreibung
DPDETAIL_RANGETYPE_NONE 0 kein Meldungsbereich
DPDETAIL_RANGETYPE_MINMAX 4 MinMax-Meldungsbereich

Summenmeldung

CTRL-Konstante Int-Wert Beschreibung
DPCONFIG_NONE 0 keine Meldebehandlung
DPCONFIG_SUM_ALERT 59 Summenmeldung

Beispiel

Anlegen einer Meldebehandlung analoger Größen mit 3 Bereichen:

main()
{
  dyn_float grenzen;
  dyn_string meldetext;
  dyn_string meldeklasse;
  dyn_bool grenzenincl;
  grenzen=makeDynFloat(20, 80);
  meldetext=makeDynString("Warnung", "OK", "Alarm");
  meldeklasse=makeDynString("System1:warning.", "System1:alert.");
  grenzenincl=makeDynBool(TRUE, TRUE);
  dpSetWait("TestDP_1.element:_alert_hdl.._type", 13,
  "TestDP_1.element:_alert_hdl.1._type", 4, // Min-Max Wertebereich
  "TestDP_1.element:_alert_hdl.2._type", 4,
  "TestDP_1.element:_alert_hdl.3._type", 4,
  "TestDP_1.element:_alert_hdl.1._u_limit", grenzen[1], /* Oberer Grenzwert */
  "TestDP_1.element:_alert_hdl.2._u_limit", grenzen[2],
  "TestDP_1.element:_alert_hdl.2._l_limit", grenzen[1], /* Unterer Grenzwert */
  "TestDP_1.element:_alert_hdl.3._l_limit", grenzen[2],
  "TestDP_1.element:_alert_hdl.1._u_incl", grenzenincl[1], /* Oberer Grenzwert zum Bereich gehörig */
  "TestDP_1.element:_alert_hdl.1._l_incl", grenzenincl[1], /* Unterer Grenzwert zum Bereich gehörig */
  "TestDP_1.element:_alert_hdl.2._u_incl", grenzenincl[2],
  "TestDP_1.element:_alert_hdl.2._l_incl", !grenzenincl[1],
  "TestDP_1.element:_alert_hdl.3._u_incl", grenzenincl[1],
  "TestDP_1.element:_alert_hdl.3._l_incl", !grenzenincl[2],
  "TestDP_1.element:_alert_hdl.1._text", meldetext[1], /* Meldetext für den Bereich 1 */
  "TestDP_1.element:_alert_hdl.2._text", meldetext[2],
  "TestDP_1.element:_alert_hdl.3._text", meldetext[3],
  "TestDP_1.element:_alert_hdl.1._class", meldeklasse[1], /* Meldeklasse für den Bereich 1 */
  "TestDP_1.element:_alert_hdl.3._class", meldeklasse[2],
  "TestDP_1.element:_alert_hdl.._orig_hdl", TRUE, /* Mit dem Originalwert arbeiten */
  "TestDP_1.element:_alert_hdl.._active", TRUE); /* Aktivieren
  der Meldebehandlung */
}

Beispiel

Anlegen einer Meldebehandlung diskreter Werte:

void addCondAlert(string dpeName)
{
  dyn_float limits;
  dyn_string alerttext;
  dyn_string alertclass;
  int rc;
  dyn_errClass err;
  limits=makeDynString("*","2","3","4");
  alerttext=makeDynString("", "Warning", "Fault", "Unavailable");
  alertclass=makeDynString("", "warning.", "alert.", "information.");
  rc = dpSetTimedWait(0, dpeName + ":_alert_hdl.._type", DPCONFIG_ALERT_NONBINARYSIGNAL,
  dpeName + ":_alert_hdl.1._type", DPDETAIL_RANGETYPE_MATCH,
  dpeName + ":_alert_hdl.2._type", DPDETAIL_RANGETYPE_MATCH,
  dpeName + ":_alert_hdl.3._type", DPDETAIL_RANGETYPE_MATCH,
  dpeName + ":_alert_hdl.4._type", DPDETAIL_RANGETYPE_MATCH,
  dpeName + ":_alert_hdl.1._text", alerttext[1],
  dpeName + ":_alert_hdl.2._text", alerttext[2],
  dpeName + ":_alert_hdl.3._text", alerttext[3],
  dpeName + ":_alert_hdl.4._text", alerttext[4],
  dpeName + ":_alert_hdl.1._class", alertclass[1],
  dpeName + ":_alert_hdl.2._class", alertclass[2],
  dpeName + ":_alert_hdl.3._class", alertclass[3],
  dpeName + ":_alert_hdl.4._class", alertclass[4],
  dpeName + ":_alert_hdl.1._match", limits[1],
  dpeName + ":_alert_hdl.2._match", limits[2],
  dpeName + ":_alert_hdl.3._match", limits[3],
  dpeName + ":_alert_hdl.4._match", limits[4],
  dpeName + ":_alert_hdl.._active", TRUE);
  err = getLastError();
  if(dynlen(err)>0)
  {
    DebugTN("Error " + err + " adding alert for " + dpeName);
  }
}

Statusbits für Attribut _alert_hdl.._state

Die Statusbits 0-15 sind für "KAM", die Bits 16-31 für "GING". Das Attribut _alert_hdl.._state fasst diese Statusbits in einem bit32 Muster zusammen. Neben den abfragbaren Attributen der Tabellen können auch

Bit 7/23 (wurde Einzelquittiert?)

Bit 8/24 (wurde Gesamtquittiert?)

Bit 13/29 + 14/30 für den Status der Summenalarme

gesetzt werden.

Für die Summenalarme gilt dabei, dass Bit 13/14 (KAM) oder 29/30 (GING) wie folgt gesetzt sind:

FALSE/FALSE GING quittiert

FALSE/TRUE GING unquittiert

TRUE/FALSE KAM quittiert

TRUE/TRUE KAM unquittiert

Weitere Details zum Config "_alert_hdl" finden Sie im Kapitel Modul PARA - _alert_hdl (Meldebehandlung)