# LGF_SetTime (FB / 3.0.3)

Übersicht

Autor: Siemens Digital Industry

## Kurzbeschreibung

Dieser Baustein fasst die Funktionen Systemzeit, Lokalzeit und Zeitzone einstellen zusammen.

### Baustein Schnittstelle

| LGF_SetTime (FB) |
--- | --- | ---
Bool |  |  | execute |  | done |  |  | Bool
DTL |  |  | systemTime |  | busy |  |  | Bool
Bool |  |  | isLocalTime |  | error |  |  | Bool
Int |  |  | timeZone |  | lastSetTimeZone |  |  | String
Bool |  |  | isDaylightSavingTime |  | status |  |  | Word
|  |  |  |  | subFunctionStatus |  |  | Word

### Input Parameter

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
execute | Bool | FALSE | Steigende Flanke startet die Ausführung der Aktion einmal
systemTime | DTL | --- | Systemzeit, die in der CPU gesetzt werden soll
isLocalTime | Bool | FALSE | TRUE: `systemTime` ist Lokalzeit, FALSE: `systemTime` ist UTC-Zeit
timeZone | Int | 0 | Zeitzonen HHMM [-1200.. -330.. 0.. 930.. 1200.. 1300]
isDaylightSavingTime | Bool | FALSE | Sommerzeitumstellung, TRUE:= Aktiviert, FALSE:= Deaktiviert (weiter infos in "Parameter in Variable `statTimeZone` anpassen")

### Output Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
done | Bool | TRUE: FB abarbeitung erfolgreich fertiggestellt
busy | Bool | TRUE: FB ist aktive und neue Ausgabewerte können erwartet werden.
error | Bool | FALSE: Kein Fehler / TRUE: Während der Ausführung des FB ist ein Fehler aufgetreten
lastSetTimeZone | String | Zeitzone die von diesem Block zuletzt gesetzt wurde
status | Word | 16#0000-16#7FFF: Status des FB / 16#8000-16#FFFF: Fehleridentifikation (siehe folgende Tabelle)
subFunctionStatus | Word | Status oder Rückgabewert von aufgerufenen FB's / FC's und Systemfunktionen

### Status & Error Meldungen

Code / Wert | Bezeichner / Beschreibung
--- | ---
16#0000 | STATUS_EXECUTION_FINISHED_NO_ERROR Abarbeitung ohne Fehler beendet
16#7000 | STATUS_NO_CALL Keine aktuelle Abarbeitungsanforderung / keine Auftrag in Bearbeitung
16#7001 | STATUS_FIRST_CALL Erstaufruf nach neuer eingehender Job anforderung (steigende Flanke an 'execute')
16#7002 | STATUS_SUBSEQUENT_CALL Unterfunktionsaufruf in bearbeitung ohne weitere Detailierung
16#8201 | ERR_SET_TIME_LOCAL Fehler in Funktion WR_LOC_T: Schreibe Lokal Zeit - weitere infos in `subFunctionStatus`
16#8202 | ERR_SET_TIME_UTC Fehler in Funktion WR_SYS_T: Schreibe System Zeit - weitere infos in `subFunctionStatus`
16#8203 | ERR_SET_TIMEZONE Fehler in Funktion SET_TIMEZONE: Schreibe Zeitzonen information - weitere infos in `subFunctionStatus`
16#8600 | ERR_UNDEFINED_STATE Fehler in Funktion aufgrund eines undefinierten zustands in der Statemaschine
16#8601 | ERR_WRONG_TIMEZONE Fehler wegen einer undefinierten Zeitzone

## Funktionsbeschreibung

Hinweis
  In `subFunctionStatus` wird der Status von aufgerufenen Anweisungen ausge-geben. Der Ausgangswert in `status` gibt in diesem Fall an, welche Anweisung den Fehler verursacht hat. Holen Sie sich in diesem Fall die Informationen aus der TIA Portal Online Hilfe zu den jeweiligen Anweisungen.

Hinweis
  Die Funktion verwendet intern die Systemfunktion `WR_LOC_T` um die Lokalzeit der CPU zu schreiben oder `WR_SYS_T` um die koordinierte Weltzeit (UTC) zu schreiben. Weiter verwendet sie die Systemfunktion `SET_TIMEZONE` um die Zeitzone der PLC einzustellen.

Dieser Baustein fasst die Funktionen Systemzeit, Lokalzeit und Zeitzone einstellen zusammen.

Folgende Zeitzonen sind am Eingang `timeZone` möglich:

Eingang `timeZone` | Zeitzone
--- | ---
-1200 | (UTC -12:00) Eniwetok, Kwajalein
-1100 | (UTC -11:00) Midway Island
-1000 | (UTC -10:00) Hawaii
-930 | (UTC -09:30) (French) Polynesia
-900 | (UTC -09:00) Alaska
-800 | (UTC -08:00) Tijuana, Los Angeles, Seattle, Vancouver
-700 | (UTC -07:00) Arizona, Denver, Salt Lake City, Calgary
-600 | (UTC -06:00) Chicago, Dallas, Kansas City, Winnipeg
-500 | (UTC -05:00) Eastern Time (USA & Canada)
-400 | (UTC -04:00) La Paz, Georgetown
-330 | (UTC -03:30) Newfoundland
-300 | (UTC -03:00) Brasilia, Buenos Aires
-200 | (UTC -02:00) Mid-Atlantic
-100 | (UTC -01:00) Azores, Cape Verde Is.
0 | (UTC) Dublin, Edinburgh, Lisbon, London
100 | (UTC +01:00) Berlin, Bern, Brussels, Rome, Stockholm, Vienna
200 | (UTC +02:00) Athens, Istanbul, Minsk, Bucharest
300 | (UTC +03:00) Moscow, St. Petersburg, Baghdad, Kuwait, Riyadh
330 | (UTC +03:30) Iran: Teheran
400 | (UTC +04:00) Abu Dhabi, Muscat
430 | (UTC +04:30) Afghanistan: Kabul
500 | (UTC +05:00) Islamabad, Karachi, Tashkent
530 | (UTC +05:30) India, Sri Lanka
545 | (UTC +05:45) Nepal
600 | (UTC +06:00) Astana, Almaty, Dhaka, Colombo
630 | (UTC +06:30) Coco Island, Myanmar
700 | (UTC +07:00) Bangkok, Hanoi, Jakarta
800 | (UTC +08:00) Beijing, Chongqing, Hong Kong, Urumqi
830 | (UTC +08:30) North Korea old
845 | (UTC +08:45) Western Australia: Eucla
900 | (UTC +09:00) Yakutsk, Osaka, Sapporo, Tokyo, Seoul
930 | (UTC +09:30) Australia: Northern Territory, South Australia
1000 | (UTC +10:00) Brisbane, Canberra, Melbourne, Sydney
1030 | (UTC +10:30) Australia: Lord Howe Island
1100 | (UTC +11:00) Vladivostok, Magadan, Solomon Is., New Caledonia
1200 | (UTC +12:00) Auckland, Wellington
1245 | (UTC +12:45) Chatham Islands
1300 | (UTC +13:00) Tonga, Samoa
1400 | (UTC +14:00) Kiribati

Hinweis
  Sommer-/Winterzeit
  Die Parameter (Zeitunterschied, Beginn Sommerzeit, Beginn Winterzeit) müssen in der statischen Variablen `statTimeZone` an die gewünschte Zeitzone angepasst werden.

### Parameter in Variable `statTimeZone` anpassen

Die statische Variable `statTimeZone` in der Schnittstelle des Bausteins ist vom Systemdatentyp TimeTransformationRule. Im diesem Systemdatentyp sind die Parameter für die lokale Zeitzone und die Sommer-/Winterzeitumschaltung hinterlegt.

Die Defaultwerte der statischen Variablen `statTimeZone` sind in der Schnittstelle des Bausteins auf die Mitteleuropäische Sommerzeit eingestellt:

- Zeitunterschied: 60 min
- Beginn Sommerzeit: Letzter Sonntag im März, 02:00 a.m.
- Beginn Winterzeit: letzter Sonntag im Oktober, 03:00 a.m.

Die folgende Abbildung zeigt die Einstellungen für die Sommer-/Winterzeitumschaltung der Mitteleuropäischen Sommerzeit.

Der Parameter `Bias` wird vom Eingangsparameter `timeZone` bestimmt. Der Parameter `DaylightBias` ist abhängig vom Eingangsparameter `daylightSavingTime` und ist entweder `0` oder `60`.

Für andere Zeitzonen müssen die markierten Parameter zur Sommer-/Winterzeitumschaltung angepasst werden.

## Änderungshistorie

Version & Datum | Änderungsbeschreibung
--- | ---
| 1.0.0 | Siemens Industry Online Support
| 08.06.2015 | First released version
| 1.0.1 | Siemens Industry Online Support
| 02.01.2017 | Upgrade: TIA V14 Update 1
| 1.0.2 | Siemens Industry Online Support
| 02.03.2017 | Bugfix: FB number: automatic
| 1.0.3 | Siemens Industry Online Support
| 17.08.2018 | Upgrade: TIA V15 Update 2
| 1.0.4 | Siemens Industry Online Support
| 23.11.2018 | Upgrade: TIA V15.1
| 1.0.5 | Siemens Industry Online Support
| 20.02.2019 | Bugfix: Rising edge at input REQ of SET_TIMEOUT
| 1.0.6 | Simatic Systems Support
| 23.08.2019 | Reworked interface to PLC Open "execute" behavior Magic numbers removed, tag naming added, code reworked
| 3.0.0 | Simatic Systems Support
| 23.04.2020 | Set version to V3.0.0, harmonize the version of the whole library
| 3.0.2 | Simatic Systems Support
| 13.01.2020 | Bug fix - bias correction for time offsets (330) Insert documentation
| 3.0.3 | Simatic Systems Support
| 03.06.2022 | Bug fix - bias correction for time offsets (200)