Skip to main content

Sektion: alg.Alarm

Die Sektion SEC alg.Alarm definiert einen Modulalarm. Ein Modulalarm entspricht im wesentlichen einem Alarm des CODESYS-Alarmmanagements, der in einer Alarmgruppe konfiguriert wurde. Ein Modulalarm enthält jedoch noch modulspezifische Zusätze.

Für weitere Informationen siehe Kapitel Syntax der Moduldeklaration und Objekt: Alarmgruppe

Spezifikation

SEC alg.Alarm                                       //optional: yes, modifier: [UPDATE]
    SEC SetAlarm <alarm identifier>                 //optional: yes, modifier [UPDATE]
            Class := <class name>;                    //optional: no, type: ID
            Message := <TextlistEntry>;                 //optional: no, type: TextListEntry
            LatchVar1 := <LatchVariable1>;              //optional: yes, type: InstancePath
            LatchVar2 := <LatchVariable2>;              //optional: yes, type: InstancePath
            Deactivation := <DeactivationVariable>;     //optional: yes, type: InstancePath
            PendingTime := <PendingTime>;               //optional: yes, type: LiteralOrConstant
            PendingTimeParameter := <string>            //optional: no, type: literal/string
            HigherPrioAlarm := <HigherPrioAlarm_ID>;    //optional: yes, type: ID
            ModuleCalls := <ModuleCallFlags>;           //optional: yes, type:  ModuleCallFlag
            SEC Messages : <alarm identifier>           //optional: yes, modifier: [UPDATE]
                    Message := <TextlistEntry>;             //optional: no, type: TextListEntry
                    Number := <ColumnNumber>;               //optional: no, type: Literal
            END_SEC
            SEC LatchVar <latch var identifier>         //optional: yes, modifier [UPDATE]
                    LatchVar := <LatchVariable>;            //optional: no, type: InstancePath
                    Number := <LatchVarNumber>              //optional: no, type: LiteralOrConstant
            END_SEC
            SEC UpperLimit                              //optional: yes, modifier: [UPDATE]
                    Expression := <Expression>;             //optional: no, type: Literal/String
                    IncludeBorder := TRUE/FALSE;            //optional: no, type: FlagBool
                    UpperExpression := <UpperExpression>;   //optional: no, type: Literal/String
                    Hyteresis := <HysteresisValue>;         //optional: yes, type: LiteralOrConstant
            END_SEC
            SEC LowerLimit                              //optional: yes, modifier: [UPDATE]
                    Expression := <Expression>;             //optional: no, type: Literal/String
                    IncludeBorder := TRUE/FALSE;            //optional: no, type: FlagBool
                    LowerExpression := <LowerExpression>;   //optional: no, type: Literal/String
                    Hyteresis := <HysteresisValue>;         //optional: yes, type: LiteralOrConstant
            END_SEC
            SEC InsideRange                             //optional: yes, modifier: [UPDATE]
                    Expression := <Expression>;             //optional: no, type: Literal/String
                    AreaLow := <AreaLowValue>;              //optional: no, type: Literal/String
                    LowIncludeBorder := TRUE/FALSE;         //optional: no, type: FlagBool
                    HighIncludeBorder := TRUE/FALSE;        //optional: no, type: FlagBool
                    AreaHigh := <AreaHighValue>;            //optional: no, type: Literal/String
                    Hyteresis := <HysteresisValue>;         //optional: yes, type: LiteralOrConstant
            END_SEC
            SEC OutsideRange                            //optional: yes, modifier: [UPDATE]
                    Expression := <Expression>;             //optional: no, type: Literal/String
                    AreaLow := <AreaLowValue>;              //optional: no, type: Literal/String
                    LowIncludeBorder := TRUE/FALSE;         //optional: no, type: FlagBool
                    HighIncludeBorder := TRUE/FALSE;        //optional: no, type: FlagBool
                    AreaHigh := <AreaHighValue>;            //optional: no, type: Literal/String
                    Hyteresis := <HysteresisValue>;         //optional: yes, type: LiteralOrConstant
            END_SEC
            SEC Digital                                 //optional: yes, modifier: [UPDATE]
                    Expression := <Expression>;             //optional: no, type: Literal/String
                    Equal := TRUE/FALSE;                    //optional: no, type: FlagBool
                    EqualsExpression := <Expression>;       //optional: no, type: Literal/String
            END_SEC
            SEC Change                                  //optional: yes, modifier: [UPDATE]
                    Expression := <Expression>;             //optional: no, type: Literal/String
            END_SEC
            SEC Event                                  //optional: yes, modifier: [UPDATE]
            END_SEC
    END_SEC
END_SEC

SEC SetAlarm

Die Untersektionen von SetAlarm definieren alle Eigenschaften, die für einen Alarm nötig oder möglich sind. Das Target von SetAlarm identifiziert den Alarm unter den anderen Alarmen eines Moduls und wird dazu verwendet, letzteren zu referenzieren (hauptsächlich in Definition HigherPrioAlarm).

Class

Alarmklassenname, unter der der Alarm liegen wird.

Wenn die Alarmklasse bereits in der Applikation vorhanden ist, wird der Alarm unter dieser Klasse automatisch angelegt. Wenn die Klasse nicht vorhanden ist, wird nach einem Alarmklassen-Template-Objekt gesucht, das in der Ansicht POUs liegen muss. Wenn kein entsprechendes Alarmklassen-Template-Objekt gefunden wird, wird beim Modul-Scan ein Fehler ausgegeben.

Message

ID (der Form TextListenName.TextListenEintragID) des Textlisteneintrags für den Alarmtext

Die über die ID referenzierte Nachricht kann Platzhalter enthalten, so wie der Text in einer Alarmgruppenkonfiguration Platzhalter enthalten kann. Beispielsweise können Platzhalter wie etwa LATCH1 oder LATCH2 verwendet werden.

Beim Scan wird eine Warnung ausgegeben, falls ein angegebener Textlisteneintrag nicht gefunden werden kann.

Entspricht der Einstellung Nachricht im Objekt Alarmgruppe.

LatchVar1

LatchVar2

Platzhaltervariablen

Im vorliegenden Fall der modulespezifischen Alarme können hier nur Variablen direkt aus dem Modul-FB angegeben werden (genauso, wie Variablen für Parameter in der Moduldeklaration angegeben werden).

Entspricht der Einstellung Latch-Variable 1 / Latch-Variable 2 für Platzhalter <LATCH1> / <LATCH2> im Objekt Alarmgruppe.

Deactivation

Deaktivierungsvariable (BOOL).

TRUE: Deaktiviert den definierten Alarm, wobei wieder nur Modul-FB-Variablen angegeben werden können.

Wenn eine Variable mit einem anderen Typ als BOOL angegeben ist, wird ein Fehler beim Scan ausgegeben.

Entspricht der Einstellung Deaktivierung im Objekt Alarmgruppe‘.

PendingTime

Minimale Anstehzeit. Gibt die Zeitspanne an, bevor der Alarm nach Erreichen seiner Grenzen tatsächlich auslöst.

Beispiel: TIME#5S

Entspricht der Einstellung Min. Anstehzeit im Objekt Alarmgruppe.

PendingTimeParameter

Parameter, um die minimale Anstehzeit einzustellen

Der Wert, der dem Parameter zugewiesen wird, ist ein String, der als Zeit interpretiert werden kann. Oder auch als Ausdruck bestehend aus Modul-Parametern und Zeitliteralen.

. Beispiel:
  • TIME#5S

  • 'NoVar'

  • 'WithVar'

  • 'WithVar - NoVar + TIME#5S'

HigherPrioAlarm

ID des höherprioren Alarms

Um den Alarm zu identifizieren, unter dem der momentane Alarm eingeordnet wird, wird bei den vorliegenden Modulalarmen eine Target-ID einer SetAlarm-Sektion angegeben. Um die SetAlarm-Sektion mit entsprechender Target-ID zu finden, wird hierarchisch vom eigenen Modul aus nach oben in den Elternmodulinstanzen nach passenden IDs unter den Alarmdeklarationen gesucht. Wenn kein entsprechender Elternalarm gefunden wird, wird beim Generator-Check ein Fehler ausgegeben.

Entspricht der Einstellung Höherpriorer Alarm im Objekt Alarmgruppe.

ModuleCalls

Für die modulspezifischen Alarmverwaltung können Modul-FBs spezifische Schnittstellen anbieten, die aufgerufen werden können, wenn ein Modulalarm auslöst. Die Flags legen fest, für welche Fälle dies geschehen wird.

. ModuleCallFlags, die zur Verfügung stehen:
  • NONE: Keine Aufrufe treten auf.

  • THIS: Ein Aufruf tritt nur für die eigenen Modulalarme auf.

  • PARENTS: Ein Aufruf tritt bei allen Elternmodule dieses Moduls auf.

  • ALL: Aufrufe treten an allen Modulen auf.

Module-FBs, die über dieses Flag aufgerufen werden, müssen die Schnittstelle IModuleAlarming implementieren. Der Aufruf erfolgt dann über die Funktion ConsumeModuleAlarm dieser Schnittstelle.

Wenn für ein Toplevel-Modul das Flag PARENTS angegeben wurde, wird beim Scan eine Warnung ausgegeben (, da bei einem Toplevelmodul dieses Flag nicht gesetzt sein kann).

SEC Messages

Die Untersektion erfüllt die gleiche Aufgabe wie der Parameters Message, erlaubt jedoch mehrere Meldungen pro Alarm. Der (alte) Parameter Message bleibt aus Kompatibilitätsgründen weiterhin gültig. Die Nachricht kann die selben Platzhalter wie der tatsächliche Text in einer Alarmgruppenkonfiguration enthalten. D. h. auch Platzhalter wie etwa <LATCH1> oder <LATCH2> können verwendet werden. Wenn ein angegebener Textlisteneintrag nicht gefunden werden kann, wird beim Scan eine Warnung ausgegeben.

Messages: Alarmtext in Form eines Textlisteneintrages (der Form TextListenName.TextListenEintragID)

Number: Spalte in der Alarmtabelle, in der die Ausgabe erfolgt.

SEC LatchVar

Latchvariablen. In dieser Sektion können bis zu 10 Latchvariablen definiert werden.

Wenn zusätzlich zu dieser Sektion die Einträge LatchVar1 oder LatchVar2 definiert sind, werden die Variablen aus dieser Sektion verwendet.

LatchVar: Latchvariable

Number: Nummer, zur Identifikation der Latchvariable

SEC UpperLimit

SEC LowerLimit

Gibt die Alarmbedingungen an für Alarme, die beim Überschreiten von Ober- oder Untergrenzen auslösen.

Darf nur einmal unter einer Sektion SEC SetAlarm auftreten. Wenn dies nicht der Fall ist, wird beim Scan ein Fehler ausgegeben.

Expression: IEC-Ausdruck oder Wert, der geprüft wird. In Ausdrücken können lokale Variablen des Modul-FBs sowie globale Konstanten verwendet werden.

IncludeBorder: TRUE entspricht <= (UpperLimit) oder >= (LowerLimit). FALSE entspricht < (UpperLimit) oder > (LowerLimit).

UpperExpresssion, LowerExpresssion: IEC-Ausdruck oder Wert, gegen den Expression geprüft wird. In Ausdrücken können lokale Variablen des Modul-FBs sowie globale Konstanten verwendet werden.

Hysteresis: Alarmhysterese in %.

Entspricht den Einstellungen Obere Grenze / Untere Grenze für die Überwachungstypen im Objekt Alarmgruppe.

SEC InsideRange

SEC OutsideRange

Alarmbedingungen, die einen Alarm definieren, der auslöst, wenn ein Ausdruck in oder aus einem bestimmten Wertebereich gerät.

Darf nur einmal unter einer Sektion SEC SetAlarm auftreten. Wenn dies nicht der Fall ist, wird beim Scan ein Fehler ausgegeben.

Hysteresis: Alarmhysterese in %

  • Expression: IEC-Ausdruck oder Wert, der geprüft wird. In Ausdrücken können lokale Variablen des Modul-FBs sowie globale Konstanten verwendet werden.

  • AreaLow: Untere Grenzen des Bereichs (Wert oder IEC-Ausdruck). In Ausdrücken können lokale Variablen des Modul-FBs sowie globale Konstanten verwendet werden.

  • LowIncludeBorder: Das boolesche Flag legt fest, ob die Untergrenze selbst zum Vergleichsbereich gezählt wird (entspricht <=)

  • HighIncludeBorder: Das boolesche Flag legt fest, ob die Obergrenze selbst zum Vergleichsbereich gezählt wird (entspricht >=)

  • AreaHigh: Obere Grenzen des Bereichs (Wert oder IEC-Ausdruck). In Ausdrücken können lokale Variablen des Modul-FBs sowie globale Konstanten verwendet werden.

Entspricht den Einstellungen Innerhalb des Bereichs / Außerhalb des Bereichs für die Überwachungstypen im Objekt Alarmgruppe.

SEC Digital

Alarmbedingung für einen Alarm an, der auslöst wenn 2 Ausdrücke miteinander verglichen werden.

Darf nur einmal unter einer Sektion SEC SetAlarm auftreten. Wenn dies nicht der Fall ist, wird beim Scan ein Fehler ausgegeben.

  • Expression: IEC-Ausdruck oder Wert, der geprüft wird. In Ausdrücken können lokale Variablen des Modul-FBs sowie globale Konstanten verwendet werden.

  • Equal: TRUE/FALSE: Ausdrücke (Wert oder IEC-Ausdruck) werden auf Gleichheit/Ungleichheit geprüft.

  • EqualsExpression: IEC-Ausdruck oder Wert, gegen den Expression geprüft wird. In Ausdrücken können lokale Variablen des Modul-FBs sowie globale Konstanten verwendet werden.

Entspricht der Einstellungen Digital für die Überwachungstypen im Objekt Alarmgruppe.

SEC Change

Alarm, der auslöst, wenn ein Ausdruck seinen Wert ändert.

Darf nur einmal unter einer Sektion SEC SetAlarm auftreten. Wenn dies nicht der Fall ist, wird beim Scan ein Fehler ausgegeben.

Expression: IEC-Ausdruck oder Wert, der auf Veränderung geprüft wird. In Ausdrücken können lokale Variablen des Modul-FBs sowie globale Konstanten verwendet werden.

Entspricht der Einstellungen Änderung für die Überwachungstypen im Objekt Alarmgruppe.

SEC Event

Kennzeichnet, dass die aktuelle Alarmsektion einen Eventalarm erzeugt. Dieser kann mit der Funktion RaiseModuleEvent() aus der Bibliothek AC_Alarming ausgelöst werden.

Beispiel

Beispiel 37. ValueRange
SEC SetAlarm : ValueRange
        Class := Error;
        Message := TL.Alarm_Temperature;
        LatchVar1 := rAlarmValueLow;
        LatchVar2 := rAlarmValueHigh;
        ModuleCalls := THIS | PARENTS;
        SEC Messages : msg2
                Message := TL.msg5_Message;
                Number := 5;
        END_SEC
        SEC OutsideRange
                Expression := 'rValue';
                AreaLow := 'rAlarmValueLow';
                LowIncludeBorder := TRUE;
                HighIncludeBorder := TRUE;
                AreaHigh := 'rAlarmValueHigh';
        END_SEC
END_SEC
Beispiel 38. Sektion PendingTime
SEC alg.Alarm
	SEC SetAlarm : NoVar
		Class := AlarmClassTemplate;
		Message := TL.NoVar_Message;
		PendingTimeParameter := 'NoVar';
		SEC Digital
			Expression := 'xAlarm';
			Equal := TRUE;
			EqualsExpression :='TRUE'; 
		END_SEC
	END_SEC
	SEC SetAlarm : WithVar
		Class := AlarmClassTemplate;
		Message := TL.NoVar_Message;
		PendingTimeParameter := 'WithVar';
		SEC Digital
			Expression := 'xAlarm';
			Equal := TRUE;
			EqualsExpression :='TRUE'; 
		END_SEC
	END_SEC
	SEC SetAlarm : SimpleMath
		Class := AlarmClassTemplate;
		Message := TL.NoVar_Message;
		PendingTimeParameter := 'WithVar - NoVar + TIME#5S';
		SEC Digital
			Expression := 'xAlarm';
			Equal := TRUE;
			EqualsExpression :='TRUE'; 
		END_SEC
	END_SEC	
	SEC SetAlarm : NoParam
		Class := AlarmClassTemplate;
		Message := TL.NoVar_Message;
		PendingTime := TIME#5S;
		SEC Digital
			Expression := 'xAlarm';
			Equal := TRUE;
			EqualsExpression :='TRUE'; 
		END_SEC
	END_SEC
END_SEC