81 lines
2.1 KiB
Plaintext
81 lines
2.1 KiB
Plaintext
FUNCTION_BLOCK "FB_Blinker"
|
|
{ S7_Optimized_Access := 'TRUE' }
|
|
VERSION : 0.1
|
|
VAR_INPUT
|
|
tInPeriodicTime : Time := T#500ms; // Eingestellte Zeit, entspricht 1/2*Clock
|
|
xInActivate : Bool; // true = Dauerblinken, false = Zeit pausieren
|
|
END_VAR
|
|
|
|
VAR_OUTPUT
|
|
xOutput : Bool; // eingestellte Zeit true, eingestellte Zeit false usw.
|
|
xOutFlag : Bool; // Flanke von xOutput
|
|
END_VAR
|
|
|
|
VAR
|
|
rTrigSignal {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
|
|
xSync : Bool;
|
|
timerTON {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME;
|
|
END_VAR
|
|
VAR RETAIN
|
|
timerTONR {InstructionName := 'TONR_TIME'; LibVersion := '1.0'} : TONR_TIME;
|
|
END_VAR
|
|
VAR
|
|
tTONTime : Time; // Verarbeitete Zeit
|
|
END_VAR
|
|
VAR RETAIN
|
|
xTONStart : Bool; // IN-Signal für Timer
|
|
xSignal : Bool; // Merker für Ausgangszustand
|
|
END_VAR
|
|
|
|
VAR_TEMP
|
|
xReset : Bool; // Bit um im Takt den Timer zu reseten
|
|
END_VAR
|
|
|
|
|
|
BEGIN
|
|
#xSignal := #xOutput;
|
|
|
|
REGION Cycle
|
|
IF #tInPeriodicTime = T#0s THEN
|
|
#tTONTime := T#500ms;//Defaultwert
|
|
ELSE
|
|
#tTONTime := #tInPeriodicTime;//Zeit durch Eingabe
|
|
END_IF;
|
|
|
|
IF #timerTONR.Q THEN //wenn Timer abgelaufen.....
|
|
IF #xSignal THEN //aktueller Zustand wird gewechselt
|
|
#xSignal := 0;
|
|
ELSE //aktueller Zustand wird gewechselt
|
|
#xSignal := 1;
|
|
END_IF;
|
|
#xTONStart := 0; //...dann nimm Eingangssignal weg...
|
|
#xReset := TRUE; //...und rücksetze Timer
|
|
ELSE
|
|
#xTONStart := 1;
|
|
END_IF;
|
|
|
|
IF #xSync (*OR (#TimerTONTime <> #TimerTON.PT) *) THEN
|
|
#xSync := 0;
|
|
#xTONStart := 0;
|
|
#xSignal := 0;
|
|
END_IF;
|
|
END_REGION
|
|
|
|
#rTrigSignal(CLK:=#xSignal);
|
|
|
|
REGION Outputs
|
|
#xOutput := #xSignal;
|
|
#xOutFlag := #rTrigSignal.Q;
|
|
END_REGION
|
|
|
|
REGION Timer
|
|
// #TimerTON(IN := #xTimerTONStart,
|
|
// PT := #TimerTONTime);
|
|
#timerTONR(IN:=NOT #xReset AND #xTONStart AND #xInActivate,
|
|
R:=#xReset,
|
|
PT:=#tTONTime);
|
|
END_REGION
|
|
|
|
END_FUNCTION_BLOCK
|
|
|