Timer mit Start- und Endezeit: day_timer

Begonnen von wolfii, 26. Juni 2009, 14:46:54

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

wolfii

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;

peewit

hallo wolfii

danke, deine anregung wurde in die ToDo Liste aufgenommen.

hugo

in der nächsten release 310 findest du eine funktion timecheck
die macht genau das was du suchst