Hallo miteinander,
vielleicht kann das jemand brauchen:
In der oscat-lib gibts einen Timer-Baustein, den man mit Starttermin und Laufzeit füttert. Für manche Anwendungsfälle war mir ein Timer lieber, den ich mit Start- und Endezeit adressieren kann (beispielsweise brennt unsere Aussenbeleuchtung mit diesem Baustein ab Sonnenuntergang+10min bis zu einer festen Zeit nachts). Liegt die Endezeit vor der Startzeit, geht der Timer davon aus, dass er über Mitternacht laufen soll. Hier also der Quellcode für day_timer
FUNCTION_BLOCK day_timer
VAR_INPUT
DT_IN: DT;
starttime: TOD;
endtime: TOD;
END_VAR
VAR_OUTPUT
outval: BOOL;
END_VAR
VAR
currenttime: TOD;
last_check: TIME := T#0s;
tx: TIME;
END_VAR
(*
Output is set to TRUE if DT_IN is in between START and END. IF START > END it is
assumed that the timer is meant to run over midnight.
*)
tx := DWORD_TO_TIME(T_PLC_MS());
IF tx - last_check <= T#100ms THEN
RETURN;
END_IF;
currenttime := DT_TO_TOD(DT_IN);
IF starttime < endtime THEN
IF currenttime > starttime AND currenttime < endtime THEN
outval := TRUE;
ELSE
outval := FALSE;
END_IF
ELSE
IF currenttime > starttime OR currenttime < endtime THEN
outval := TRUE;
ELSE
outval := FALSE;
END_IF
END_IF
last_check := tx;
hallo wolfii
danke, deine anregung wurde in die ToDo Liste aufgenommen.
in der nächsten release 310 findest du eine funktion timecheck
die macht genau das was du suchst