OSCAT Forum

oscat.lib => Modulentwicklung / Module Development => Thema gestartet von: wolfii am 26. Juni 2009, 14:46:54

Titel: Timer mit Start- und Endezeit: day_timer
Beitrag von: wolfii am 26. Juni 2009, 14:46:54
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;
Titel: Re: Timer mit Start- und Endezeit: day_timer
Beitrag von: peewit am 26. Juni 2009, 21:25:57
hallo wolfii

danke, deine anregung wurde in die ToDo Liste aufgenommen.
Titel: Re: Timer mit Start- und Endezeit: day_timer
Beitrag von: hugo am 19. Juli 2009, 14:42:26
in der nächsten release 310 findest du eine funktion timecheck
die macht genau das was du suchst