Accuracy_To_UtcTimeQualityAccuracy

Converts the value of the enumeration type E_UtcTimeAccuracy (accuracy of the time information) into five Boolean values. These five output values correspond to the bit components: Accuracy0..Accuracy4 of the structured type T_UtcTimeQuality.

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

Syntax

FUNCTION Accuracy_To_UtcTimeQualityAccuracy
VAR_INPUT
    in         : E_UtcTimeAccuracy;
END_VAR
VAR_OUTPUT
    bAccuracy0 : BOOL;
    bAccuracy1 : BOOL;
    bAccuracy2 : BOOL;
    bAccuracy3 : BOOL;
    bAccuracy4 : BOOL;
END_VAR

Accuracy_To_UtcTimeQualityAccuracy 1: Inputs

Name

Type

Description

in

E_UtcTimeAccuracy

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

Accuracy_To_UtcTimeQualityAccuracy 2: Outputs

Converted information as T_UtcTimeQuality.Accuracy0..4 bit components. See: Coding of the UTC-Time.Quality.Accuracy0..4 bits.

Name

Type

Description

bAccuracy0

BOOL

Accuracy MSB bit 0.

bAccuracy1

BOOL

Accuracy bit 1.

bAccuracy2

BOOL

Accuracy bit 2.

bAccuracy3

BOOL

Accuracy bit 3.

bAccuracy4

BOOL

Accuracy MSB bit 4.

Accuracy_To_UtcTimeQualityAccuracy 3: Return value

None.

Sample

METHOD UtcTimeQualityAccuracy_ToFrom_Accuracy : BOOL
VAR_INPUT
    fbIED    : REFERENCE TO FB_IED;
END_VAR
VAR
    Quality  : T_UtcTimeQuality;
    sQuality : STRING;
END_VAR
IF NOT __ISVALIDREF(fbIED) THEN
    RETURN;
END_IF

Quality.LeapSecondsKnown := FALSE;
Quality.ClockFailure := FALSE;
Quality.ClockNotSynchronized := FALSE;
Accuracy_To_UtcTimeQualityAccuracy( E_UtcTimeAccuracy.Null,(* Null bits accuracy *)
                                    bAccuracy0=>Quality.Accuracy0, 
                                    bAccuracy1=>Quality.Accuracy1, 
                                    bAccuracy2=>Quality.Accuracy2, 
                                    bAccuracy3=>Quality.Accuracy3, 
                                    bAccuracy4=>Quality.Accuracy4 );
sQuality := UtcTimeQuality_To_String(Quality);(* sQuality := 'UQ#000|0' *)
IF fbIED.Relay.LLN0.Beh.t.eAccuracy <> UtcTimeQualityAccuracy_To_Accuracy(Quality) THEN
    Quality := fbIED.Relay.LLN0.Beh.t.Quality;
END_IF

Quality.LeapSecondsKnown := FALSE;
Quality.ClockFailure := FALSE;
Quality.ClockNotSynchronized := FALSE;
Accuracy_To_UtcTimeQualityAccuracy( E_UtcTimeAccuracy._03,(* 3 bits accuracy *)
                                    bAccuracy0=>Quality.Accuracy0, 
                                    bAccuracy1=>Quality.Accuracy1, 
                                    bAccuracy2=>Quality.Accuracy2, 
                                    bAccuracy3=>Quality.Accuracy3, 
                                    bAccuracy4=>Quality.Accuracy4 );
sQuality := UtcTimeQuality_To_String(Quality);(* sQuality := 'UQ#000|3' *)
IF fbIED.Relay.LLN0.Health.t.eAccuracy <> UtcTimeQualityAccuracy_To_Accuracy(Quality) THEN
    Quality := fbIED.Relay.LLN0.Health.t.Quality;
END_IF

Quality.LeapSecondsKnown := FALSE;
Quality.ClockFailure := FALSE;
Quality.ClockNotSynchronized := FALSE;
Accuracy_To_UtcTimeQualityAccuracy( E_UtcTimeAccuracy._05,(* 5 bits accuracy *)
                                    bAccuracy0=>Quality.Accuracy0, 
                                    bAccuracy1=>Quality.Accuracy1, 
                                    bAccuracy2=>Quality.Accuracy2, 
                                    bAccuracy3=>Quality.Accuracy3, 
                                    bAccuracy4=>Quality.Accuracy4 );
sQuality := UtcTimeQuality_To_String(Quality);(* sQuality := 'UQ#000|5' *)
IF fbIED.Relay.LLN0.Mod_.t.eAccuracy <> UtcTimeQualityAccuracy_To_Accuracy(Quality) THEN
    Quality := fbIED.Relay.LLN0.Mod_.t.Quality;
END_IF 

Quality.LeapSecondsKnown := FALSE;
Quality.ClockFailure := FALSE;
Quality.ClockNotSynchronized := FALSE;
Accuracy_To_UtcTimeQualityAccuracy( E_UtcTimeAccuracy.Unspecified,(* Unspecified accuracy *)
                                    bAccuracy0=>Quality.Accuracy0, 
                                    bAccuracy1=>Quality.Accuracy1, 
                                    bAccuracy2=>Quality.Accuracy2, 
                                    bAccuracy3=>Quality.Accuracy3, 
                                    bAccuracy4=>Quality.Accuracy4 );
sQuality := UtcTimeQuality_To_String(Quality);(* sQuality := 'UQ#000|31' *)
IF fbIED.Relay.MMXU1.phV.phsA.t.eAccuracy <> UtcTimeQualityAccuracy_To_Accuracy(Quality) THEN
    Quality := fbIED.Relay.MMXU1.phV.phsA.t.Quality;
END_IF

UtcTimeQualityAccuracy_ToFrom_Accuracy := TRUE;