Files
HundM_Fortna/2_ILSLib/FB/Misc/FB_CarrAccumulate1Sep.scl
T
2026-06-29 16:29:41 +02:00

57 lines
1.6 KiB
Plaintext

FUNCTION_BLOCK "FB_CarrAccumulate1Sep"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
stInSensor1 : "UDT_Sensor"; // Sensor vom 1. Sep
xInConvActive : Bool; // Conveyor Rückmeldung
stInTimes : Struct
tFreeSen1 : Time := T#5000ms; // Zeit welche Sep 1 frei ist
tTimerWait : Time := T#10000ms; // Wartezeit
END_STRUCT;
END_VAR
VAR_OUTPUT
xOutLockSep1 : Bool; // true = Sep 1 wird gesperrt
END_VAR
VAR
tOn1 {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME; // Timer zählt wie lange Sep 1 warten muss
xTimerQ : Bool; // Timerausgang
xLockSep1 : Bool;
END_VAR
BEGIN
(*
<====== Fahrtrichtung <======
... -------<----------|o|--------<------ ...
Sep 1
Sep 1 lässt Carrier raus die sich angestaut haben, bis In-Sensor wieder mal eine gewisse Zeit frei ist.
Dann beginnt Wartezeit wenn in diesem Zustand Sep 1 erstmals wieder ein In-Signal bekommt. Usw....
*)
IF NOT #stInSensor1.xDirectSensor AND #stInSensor1.tDirectChangeLast > #stInTimes.tFreeSen1 THEN
#xLockSep1 := TRUE;
ELSIF #xTimerQ THEN
#xLockSep1 := FALSE;
END_IF;
REGION Timer
#tOn1(IN := #xLockSep1 AND #stInSensor1.xDirectSensor AND #xInConvActive, //Conveyoer Full Speed ok und Sep 1 wartet
PT := #stInTimes.tTimerWait);
#xTimerQ := #tOn1.Q (* OR (#stInSensor1.xDirectSensor AND #stInSensor1.tDirectChangeLast > #stInTimes.tFullSen1) *);
END_REGION
REGION Outputs
#xOutLockSep1 := #xLockSep1;
END_REGION
END_FUNCTION_BLOCK