Ein Zeitschalter ist eine Uhr, die eine Reihe von Ausgängen zu festgelegten Zeiten ein- oder ausschaltet. Die Schaltzeiten sind individuell konfigurierbar.
Der folgende Ausschnitt zeigt die Definition einer bestimmten TimeZone.
Beispiel
Die Hauptinseln Neuseelands nutzen die Neuseeland-Standardzeit (NZST), 12 Stunden vor UTC. In den Sommermonaten - vom letzten Sonntag im September bis zum ersten Sonntag im April - wird die Sommerzeit (NZDT) berücksichtigt und die Uhren um eine Stunde vorgestellt.
Siehe: https://en.wikipedia.org/wiki/Time_in_New_Zealand
tzTimeZoneNZST : TimeZone :=
(
iBias := 12*60 (* T#1M *),
asgPeriod := [
( (* (NZDT -> NZST) - First Sunday in April at 03:00:00.000 (NZDT) *)
sName:='NZST',
dtDate := (uiMonth := 4, eWeekday := WEEKDAY.SUNDAY, uiDay := 1, uiHour := 3)
),( (* (NZST -> NZDT) - Last Sunday in September at 02:00:00.000 (NZST) *)
sName := 'NZDT',
dtDate := (uiMonth := 9, eWeekday := WEEKDAY.SUNDAY, uiDay := 5, uiHour := 2),
iBias := 60 (* T#1M *)
)]
);
Aufgrund aktueller Mängel im Compiler können für den Eingang tzTimeZone des Bausteins TimerSwitch keine Konstanten verwendet werden. Daher ist es notwendig, eine Variable vom Typ TimeZone zu deklarieren und dieser Variable dann die Werte der vordefinierten Konstanten (z.B. TSW.gc_tzTimeZoneCET oder TSW.gc_tzTimeZoneUTC) zuzuordnen.
tzTimeZoneUTC : TimeZone := TSW.gc_tzTimeZoneUTC;
myTimerSwitch : TimerSwitch := (tzTimeZone := tzTimeZoneUTC);
Aufgrund eines weiteren Mangels im Compiler wird der Datentyp des Eingangs aslSchedule des Bausteins TimerSwitch falsch angezeigt. Das Folgende wäre richtig:
FUNCTION_BLOCK PUBLIC FINAL TimerSwitch EXTENDS CBML.LConC IMPLEMENTS ITimeSwitch, IDateTimeProvider
VAR_INPUT CONSTANT
/// Source for the current date and time information in milliseconds since 1.1.1970 00:00:00.000
itfDateTimeProvider : IDateTimeProvider := Globals.g_dtpDateTimeProvider;
/// Compensation speed [ms/h] for the transition from one time zone period to another.
tCompensationSpeed : TIME;
END_VAR
VAR_IN_OUT (* CONSTANT *)
/// Switching Schedule
aslSchedule : ARRAY[*] OF Schedule;
END_VAR
[...]