SystemTime_To_UtcTime

Konvertiert die Zeitinformation des Typs TIMESTRUCT (System-Time-Format) in die Zeitinformation des Typs T_UtcTime.

Namensraum: Tc3_Collections
Bibliothek: Tc3_Collections (Tc3_Collections.compiled-library)

Syntax

FUNCTION SystemTime_To_UtcTime : T_UtcTime
VAR_INPUT
    in                    : TIMESTRUCT;
    wMicroseconds         : WORD(0..999);
    wNanoseconds          : WORD(0..999);
    bLeapSecondsKnown     : BOOL;
    bClockFailure         : BOOL;
    bClockNotSynchronized : BOOL;
    eAccuracy             : E_UtcTimeAccuracy;
END_VAR

SystemTime_To_UtcTime 1: Eingänge

Name

Typ

Beschreibung

in

TIMESTRUCT

Die zu konvertierende Zeitinformation als System-Time-Struktur.

wMicroseconds

WORD(0..999)

Bruchteil der Millisekunde in Mikrosekunden: „0..999“.

wNanoseconds

WORD(0..999)

Bruchteil der Mikrosekunde in Nanosekunden: „0..999“.

bLeapSecondsKnown

BOOL

Qualität der Schaltsekunden:
„FALSE“ := Unbekannt;
„TRUE“ := Bekannt;

bClockFailure

BOOL

Qualität des Zeitgebers:
„FALSE“ := Gut;
„TRUE“ := Fehlerhaft;

bClockNotSynchronized

BOOL

Qualität der Uhrzeitsynchronisierung:
„FALSE“ := Synchron;
„TRUE“ := Nicht synchron;

eAccuracy

E_UtcTimeAccuracy

Genauigkeit des Bruchteils der Sekunde als Aufzählungstyp.

SystemTime_To_UtcTime 2: Rückgabewert

Name

Typ

Beschreibung

SystemTime_To_UtcTime

T_UtcTime

Konvertierte Zeitinformation als UTC-Time-Struktur.

Beispiel

Die Zeitinformation: 2018-03-20-11:33:05.125000000 wird mit der max. Genauigkeit von 24 Bits (max. Auflösung ~60ns) konvertiert. Die Komponenten der Systemzeit haben folgende Werte:

wYear := 2018, wMonth := 3, wDay := 20, wHour := 11, wMinute := 33, wSecond := 5, wMilliseconds := 125, wDayOfWeek := 2.

METHOD UtcTime_ToFrom_SystemTime : BOOL
VAR
    tSystem       : TIMESTRUCT;
    sSystem       : STRING;
    tUtc          : T_UtcTime;
    sUtc          : STRING;
    wMicroseconds : WORD;
    wNanoseconds  : WORD;
END_VAR
tSystem.wYear := 2000;
tSystem.wMonth := 1;
tSystem.wDay := 1;
tSystem.wHour := 0;
tSystem.wMinute := 0;
tSystem.wSecond := 0;
tSystem.wMilliseconds := 0;
tSystem.wDayOfWeek := 0;
sSystem := SystemTime_To_String(tSystem);(* sSystem := '2000-01-01-00:00:00:000' *)
tUtc := SystemTime_To_UtcTime(tSystem, 0, 0, FALSE, FALSE, TRUE, E_UtcTimeAccuracy.Unspecified);
sUtc := UtcTime_To_String(tUtc);(* sUtc := 'UT#2000-01-01-00:00:00:000000000|001|31' *)

IF tUtc.quality.ClockNotSynchronized THEN
    tUtc.secondSinceEpoch := DT#2018-03-20-11:33:05;
    tUtc.fractionOfSecond := LTIME_TO_UtcTimeFractionOfSecond( LTIME#125MS0US0NS );
    tUtc.quality.LeapSecondsKnown := FALSE;
    tUtc.quality.ClockFailure := FALSE;
    tUtc.quality.ClockNotSynchronized := FALSE;
    Accuracy_To_UtcTimeQualityAccuracy( E_UtcTimeAccuracy._03, 
                                        bAccuracy0=>tUtc.quality.Accuracy0, 
                                        bAccuracy1=>tUtc.quality.Accuracy1, 
                                        bAccuracy2=>tUtc.quality.Accuracy2, 
                                        bAccuracy3=>tUtc.quality.Accuracy3, 
                                        bAccuracy4=>tUtc.quality.Accuracy4 );

    sUtc := UtcTime_To_String(tUtc);(* sUtc := 'UT#2018-03-20-11:33:05.125000000|000|3' *)
    tSystem := UtcTime_To_SystemTime(tUtc, wMicroseconds=>wMicroseconds, wNanoseconds=>wNanoseconds);
    sSystem := SystemTime_To_String(tSystem);(* sSystem := '2018-03-20-11:33:05.125' *)
END_IF


UtcTime_ToFrom_SystemTime := TRUE;