Reset Alarm

Název funkce
Reset Alarm
Volání v ST
VAR retain
Alarm : AlarmPoint;
END_VAR
...
ResetAlarm(Alarm := adr Alarm);
...
Popis
Provede smazání (reset) odeznělého alarmu ve struktuře AlarmPoint.
Proměnná typu AlarmPoint je základ pro zpracování alarmů v Domat IDE, je obsažena i v předdefinovaných alarmových blocích BD56 (Single Alarm Memory with Delay) a BD57 (Alarm Memory Extended). Definice a volání proměnné typu AlarmPoint umožňuje tvorbu vlastních alarmových struktur s nestandardním chováním, přičemž takto vytvořené alarmové bloky jsou automaticky zpracovávány alarmovými procesy v PLC, messagingu, HMI atd. (tedy objevují se v alarmových logách, lze jimi vyvolat alarmový e-mail atd.).
Vstupy
| Vstup | Typ | Význam |
|---|---|---|
| Alarm | PTR_TO AlarmPoint | Ukazatel na instanci alarmu |
Výstupy
| Výstup | Typ | Význam |
|---|---|---|
| => | BOOL | nemá význam |
Příklad použití
Zdrojový text bloku BD56, Single Alarm Memory with Delay:
USING Alarms.v1_0;
NAMESPACE Lib NAMESPACE Core NAMESPACE V1_1
FUNCTION_BLOCK BD56_SingleAlarmMemoryDelay
VAR
DelayBlock : Lib.Core.v1_0.BD12_SwitchOnDelay;
MkoAck, MkoAckSw, MkoRst, MkoRstSw : Lib.Core.v1_0.MonostableFlipFlop := (Delay := T#1s);
END_VAR
VAR_INPUT
In : BOOL := FALSE;
Ack : BOOL := FALSE;
Reset : BOOL := FALSE;
Delay : TIME := T#30s;
Priority : AlarmPriorityType := 50;
END_VAR
VAR_OUTPUT
AlrStatus : INT;
Acknowledged : BOOL;
Memory : BOOL;
END_VAR
VAR retain
Alarm : AlarmPoint;
END_VAR
VAR
ResetLast, AcknowledgeLast : BOOL;
tmpInt : INT;
END_VAR
(*function block's body*)
DelayBlock(In := In, Ton := Delay);
MkoAck(In := Ack);
MkoAckSw();
MkoRst(In := Reset);
MkoRstSw();
mutexlock();
AlarmStateMachine(Trigger := DelayBlock.Out, Alarm := adr Alarm);
(* copy to outputs *)
tmpInt := 0;
Acknowledged := (Alarm.State = AlarmStateType#ActiveAcked) or (Alarm.State = AlarmStateType#AckedMemory);
Memory := (Alarm.State <> AlarmStateType#Normal);
if DelayBlock.Out then
tmpInt := tmpInt or to_int(16#100);
end_if;
if Acknowledged then
tmpInt := tmpInt or to_int(16#200);
end_if;
if Memory then
tmpInt := tmpInt or to_int(16#400);
end_if;
mutexunlock();
(* reset alarms *)
if MkoRst.Out or MkoRstSw.Out then
ResetAlarm(Alarm := adr Alarm);
end_if;
(* acknowledge alarms *)
if MkoAck.Out or MkoAckSw.Out and (not AcknowledgeLast) then
AcknowledgeAlarm(Alarm := adr Alarm);
end_if;
AcknowledgeLast := MkoAck.Out or MkoAckSw.Out;
AlrStatus := tmpInt;
END_FUNCTION_BLOCK
END_NAMESPACE END_NAMESPACE END_NAMESPACE