UtcTime_To_SystemTime

Converts the time information of type T_UtcTime to the time information of type TIMESTRUCT (system time format).

Namespace: Tc3_Collections
Library: Tc3_Collections (Tc3_Collections.compiled-library)

Syntax

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

UtcTime_To_SystemTime 1: Inputs

Name

Type

Description

in

T_UtcTime

The time information to be converted as a UTC-Time structure.

UtcTime_To_SystemTime 2: Outputs

Name

Type

Description

wMicroseconds

WORD(0..999)

Optional output parameter. Fraction of the millisecond in microseconds.

wNanoseconds

WORD(0..999)

Optional output parameter. Fraction of the microsecond in nanoseconds.

bLeapSecondsKnown

BOOL

Optional output parameter. Quality of the leap seconds.

bClockFailure

BOOL

Optional output parameter. Quality of the timer.

bClockNotSynchronized 

BOOL

Optional output parameter. Quality of the time synchronization.

eAccuracy

E_UtcTimeAccuracy

Accuracy of the seconds fraction. This value determines the max. number of significant bits of the T_UtcTime.fractionOfSecond component.

UtcTime_To_SystemTime 3: Return value

Name

Type

Description

UtcTime_To_SystemTime

TIMESTRUCT

Converted time information as a System-Time structure.

Sample

The time information: 2018-03-20-11:33:05.125000000 is converted with the max. accuracy of 24 bits (max. resolution ~60ns). The components of the system time have the following values:

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;