UTC-Time-LWORD-Formatspezifikation
Die TwinCAT UTC-Time Komponenten werden in LWORD auf folgende Weise codiert:
Bit | Komponente | Typ | Wertebereich | Beschreibung |
---|---|---|---|---|
0..31 | secondSinceEpoch | DT | 0..16#FFFFFFFF | Anzahl der vergangenen, ganzen Sekunden seit dem 1. Januar 1970. |
32..55 | fractionOfSecond | 0..16#FFFFFF | Sekundenbruchteil codiert als 24 Bit-Zahl. | |
56 | Quality.LeapSecondsKnown | BIT | 0..1 | Qualität der Schaltsekunden (0:=Unbekannt, 1:=Bekannt). |
57 | Quality.ClockFailure | BIT | 0..1 | Qualität des Zeitgebers (0:=Gut, 1:=Fehlerhaft). |
58 | Quality.ClockNotSynchronized | BIT | 0..1 | Qualität der Uhrzeitsynchronisierung (0:=Synchron, 1:=Nicht synchron). |
59 | Quality.Accuracy0 | BIT | 0..1 | Genauigkeit der Zeitinformation (Präzision des Bruchteils der Sekunde). Die Accuracy-Bits bestimmen die Anzahl der signifikanten Bits in der T_UtcTime.fractionOfSecond-Komponente. |
60 | Quality.Accuracy1 | BIT | 0..1 | |
61 | Quality.Accuracy2 | BIT | 0..1 | |
62 | Quality.Accuracy3 | BIT | 0..1 | |
63 | Quality.Accuracy4 | BIT | 0..1 |
Die UTC-Time.fractionOfSecond-Komponente wird in den 24 Bits des Typs: T_UINT24 auf folgende Weise codiert:
Bit | Komponente | Wert |
---|---|---|
0 | fractionOfSecond[0].0 | 0.5 s |
1 | fractionOfSecond[0].1 | 0.25 s |
2 | fractionOfSecond[0].2 | 0.125 s |
3 | fractionOfSecond[0].3 | 0.0625 s |
4 | fractionOfSecond[0].4 | 0.03125 s |
5 | fractionOfSecond[0].5 | 0.015625 s |
6 | fractionOfSecond[0].6 | 0.0078125 s |
7 | fractionOfSecond[0].7 | 0.00390625 s |
8 | fractionOfSecond[1].0 | 0.001953125 s |
9..15 | fractionOfSecond[1].1..7 | usw. |
16..23 | fractionOfSecond[2].0..7 | -/- |
Beispiele
Die folgende Tabelle enthält einige Sekundenbruchteilwerte und die Werte der fractionOfSecond-Arrayelemente nach der Konvertierung.
Sekundenbruchteil | T_UINT24 | Beschreibung |
---|---|---|
0 s | [0,0,0] | Alle Bits haben den Wert: 0. |
0.75 s | [3,0,0] | Bits 0 und 1 sind gesetzt. Wertberechnung: 0.5 s+0.25 s=0.75 s. |
0.875 s | [7,0,0] | Bits 0, 1, 2 sind gesetzt. Wertberechnung: 0.5 s+0.25 s+0.125 s=0.875 s. |
0.5625 s | [9,0,0] | Bits 0 und 3 sind gesetzt. Wertberechnung: 0.5 s+0.0625 s=0.5625 s. |
Codierung der Präzision in den UTC-Time.Quality.Accuracy0..4-Bits.
Präzision | Accuracy0 | Accuracy1 | Accuracy2 | Accuracy3 | Accuracy4 | E_UtcTimeAccuracy |
---|---|---|---|---|---|---|
0 Bit | 0 | 0 | 0 | 0 | 0 | Null |
1 Bit | 0 | 0 | 0 | 0 | 1 | _01 |
2 Bit | 0 | 0 | 0 | 1 | 0 | _02 |
3 Bit | 0 | 0 | 0 | 1 | 1 | _03 |
4 Bit | 0 | 0 | 1 | 0 | 0 | _04 |
5 Bit | 0 | 0 | 1 | 0 | 1 | _05 |
6 Bit | 0 | 0 | 1 | 1 | 0 | _06 |
7 Bit | 0 | 0 | 1 | 1 | 1 | _07 |
8 Bit | 0 | 1 | 0 | 0 | 0 | _08 |
9 Bit | 0 | 1 | 0 | 0 | 1 | _09 |
10 Bit | 0 | 1 | 0 | 1 | 0 | _10 |
11 Bit | 0 | 1 | 0 | 1 | 1 | _11 |
12 Bit | 0 | 1 | 1 | 0 | 0 | _12 |
13 Bit | 0 | 1 | 1 | 0 | 1 | _13 |
14 Bit | 0 | 1 | 1 | 1 | 0 | _14 |
15 Bit | 0 | 1 | 1 | 1 | 1 | _15 |
16 Bit | 1 | 0 | 0 | 0 | 0 | _16 |
17 Bit | 1 | 0 | 0 | 0 | 1 | _17 |
18 Bit | 1 | 0 | 0 | 1 | 0 | _18 |
19 Bit | 1 | 0 | 0 | 1 | 1 | _19 |
20 Bit | 1 | 0 | 1 | 0 | 0 | _20 |
21 Bit | 1 | 0 | 1 | 0 | 1 | _21 |
22 Bit | 1 | 0 | 1 | 1 | 0 | _22 |
23 Bit | 1 | 0 | 1 | 1 | 1 | _23 |
24 Bit | 1 | 1 | 0 | 0 | 0 | _24 |
Unzulässig | 1 | 1 | n | n | n | _25_invalid.._30_invalid |
Nicht spezifiziert | 1 | 1 | 1 | 1 | 1 | Unspecified |
Beispiele
Folgende Tabelle enthält einige LWORD-Werte und die Werte nach der Konvertierung in einen formatierten Binary-Time-String und den strukturierten Typ: T_UtcTime.
LWORD | STRING(39) | T_UtcTime | Beschreibung |
---|---|---|---|
16#0000000000000000 | 'UT#1970-01-01-00:00:00.000000000|000|0' | STRUCT(0) | Alle Komponenten haben den Wert: 0. Datum: 1. Januar 1970. Uhrzeit: 00:00:00 Uhr. Sekundenbruchteil: 0 ms. Präzision: 0 Bit. |
16#C4000000386D4380 | 'UT#2000-01-01-00:00:00.000000000|001|3' | STRUCT(secondSinceEpoch:=DT#2000-01-01-00:00:00, fractionOfSecond:=[0,0,0], quality:=(ClockNotSynchronized:=1, Accuracy3:=1, Accuracy4:=1)) | Datum: 1. Januar 2000. Uhrzeit: 00:00:00 Uhr. Sekundenbruchteil: 0 ms. Zeitgeber ist nicht synchronisiert. Präzision: 3 Bit. |
16#A4000001386D4380 | 'UT#2000-01-01-00:00:00.500000000|001|5' | STRUCT(secondSinceEpoch:=DT#2000-01-01-00:00:00, fractionOfSecond:=[1,0,0], quality:=(ClockNotSynchronized:=1, Accuracy2:=1, Accuracy4:=1)) | Datum: 1. Januar 2000. Uhrzeit: 00:00:00 Uhr. Sekundenbruchteil: 500 ms. Zeitgeber ist nicht synchronisiert. Präzision: 5 Bit. |
16#81000000FFFFFFFF | 'UT#2106-02-07-06:28:15.000000000|100|1' | STRUCT(secondSinceEpoch:=DT#2106-02-07-06:28:15, fractionOfSecond:=[0,0,0], quality:=(LeapSecondsKnown:=1, Accuracy4:=1)) | Datum: 7. Februar 2106. Uhrzeit: 06:28:15 Uhr. Sekundenbruchteil: 0 ms. Schaltsekunden sind unbekannt. Präzision: 1 Bit. |
16#C2000007FFFFFFFF | 'UT#2106-02-07-06:28:15.875000000|010|3' | STRUCT(secondSinceEpoch:=DT#2106-02-07-06:28:15, fractionOfSecond:=[7,0,0], quality:=(ClockFailure:=1, Accuracy3:=1, Accuracy4:=1)) | Datum: 7. Februar 2106. Uhrzeit: 06:28:15 Uhr. Sekundenbruchteil: 875 ms. Zeitgeber meldet einen Fehler. Präzision: 3 Bit. |
16#1C000007FFFFFFFF | 'UT#2106-02-07-06:28:15.875000000|001|24' | STRUCT(secondSinceEpoch:=DT#2106-02-07-06:28:15, fractionOfSecond:=[7,0,0], quality:=(ClockNotSynchronized:=1, Accuracy0:=1, Accuracy1:=1)) | Datum: 7. Februar 2106. Uhrzeit: 06:28:15 Uhr. Sekundenbruchteil: 875 ms. Zeitgeber ist nicht synchronisiert. Präzision: 24 Bit. |