PROGRAM WeeklyTimer
VAR
CurrentTime : TIME_OF_DAY; // Aktuelle Uhrzeit
CurrentDay : INT; // Aktueller Wochentag (1=Montag, 7=Sonntag)
Output : BOOL; // Ausgang, der gesteuert wird
Schedule : ARRAY[1..7, 1..10] OF TIME_OF_DAY; // Zeitplan für 7 Tage mit max. 5 Ein- und Ausschaltzeiten pro Tag
i : INT; // Schleifenvariable
END_VAR
// Beispiel-Zeitplan initialisieren (Montag: Schaltzeiten)
Schedule[1, 1] := T#08:00:00; // Montag: 1. EIN
Schedule[1, 2] := T#10:00:00; // Montag: 1. AUS
Schedule[1, 3] := T#12:00:00; // Montag: 2. EIN
Schedule[1, 4] := T#14:00:00; // Montag: 2. AUS
// Wiederhole dies für die restlichen Tage (angepasste Schaltzeiten hinzufügen)
CurrentDay := DAY_OF_WEEK(TODAY); // Bestimmt den aktuellen Wochentag
CurrentTime := TIME_OF_DAY(TIME()); // Bestimmt die aktuelle Zeit des Tages
Output := FALSE; // Standardmäßig AUS
// Überprüfe alle Schaltzeitintervalle des aktuellen Tages
FOR i := 1 TO 10 BY 2 DO // Schleife für Zeitintervalle (EIN/AUS)
IF (CurrentTime >= Schedule[CurrentDay, i]) AND (CurrentTime < Schedule[CurrentDay, i+1]) THEN
Output := TRUE; // Schalter EIN, wenn innerhalb eines Intervalls
END_IF;
END_FOR;