Vielen Dank für deine rasche Antwort:
Anbei der Daten Type Date_And_Time von der Siemens Hilfe:
Datentyp Länge (Bit) Format
DATE_AND_TIME 64 Jahr-Monat-Tag-h:min:s:ms
oder
DT Beispiel für das Format
DT#1995-02-02-08:30:01.999
Der Datentyp Date_And_Time wird im BCD-Format gespeichert:
Bytes Inhalt Bereich
0 Jahr 1990 ... 2089
1 Monat 01 ... 12
2 Tag 1 ... 31
3 Stunde 0 ... 23
4 Minute 0 ... 59
5 Sekunde 0 ... 59
6 2 MSD von ms 00 ... 99
7 (4 MSB) LSD von ms 0 ... 9
7 (4 LSB) Wochentag 1 ... 7 (1 = Sonntag)
Darstellung der Bytes 6 und 7:
MSD: Most Significant Decade
LSD: Least Significant Decade
Also Date_and_Time beinhaltet den ms Wert schon (siehe Byte 6 und 7). Habe den FC etwas angepasst und nun funktioniert es soweit, kann mir aber nicht erklären warum dies so ist.
Update: Soweit ich es verstand habe ist es dem Block DT_DINT geschuldet. Dieser rechnet die "Date and Time" in einen Sekundenwert um. Danach kommt die DST und Lokalzeit Offset Manipulation und dann wird zurück gerechnet (Sekunden in Date and Time). Dadurch gehen die Millisekunden verloren.
A7d1: NOP 0
L LW 8
SRW 4
SLD 16
L LW 16
SLW 12
OD
SRD 12
T LW 16
L LD 10
L P##RET_VAL
LAR1
TAK
L W [AR1,P#0.0]
T LW 20
TAK
AUF DB [LW 20]
L D [AR1,P#2.0]
LAR1
TAK
T D [AR1,P#0.0]
L LD 14
T D [AR1,P#4.0]
CLR
U L 18.1
SAVE
BE
Mit der Abänderung in dem kompilierten AWL Code kopiere ich nun den Millisekundenwert von der UTC in die Lokale Zeit dazu. Nun sollte alles funktionieren. Ob dies ebenso in der SCL Quelle möglich ist kann ich nicht sagen.
Anbei der Daten Type Date_And_Time von der Siemens Hilfe:
Datentyp Länge (Bit) Format
DATE_AND_TIME 64 Jahr-Monat-Tag-h:min:s:ms
oder
DT Beispiel für das Format
DT#1995-02-02-08:30:01.999
Der Datentyp Date_And_Time wird im BCD-Format gespeichert:
Bytes Inhalt Bereich
0 Jahr 1990 ... 2089
1 Monat 01 ... 12
2 Tag 1 ... 31
3 Stunde 0 ... 23
4 Minute 0 ... 59
5 Sekunde 0 ... 59
6 2 MSD von ms 00 ... 99
7 (4 MSB) LSD von ms 0 ... 9
7 (4 LSB) Wochentag 1 ... 7 (1 = Sonntag)
Darstellung der Bytes 6 und 7:
MSD: Most Significant Decade
LSD: Least Significant Decade
Also Date_and_Time beinhaltet den ms Wert schon (siehe Byte 6 und 7). Habe den FC etwas angepasst und nun funktioniert es soweit, kann mir aber nicht erklären warum dies so ist.
Update: Soweit ich es verstand habe ist es dem Block DT_DINT geschuldet. Dieser rechnet die "Date and Time" in einen Sekundenwert um. Danach kommt die DST und Lokalzeit Offset Manipulation und dann wird zurück gerechnet (Sekunden in Date and Time). Dadurch gehen die Millisekunden verloren.
A7d1: NOP 0
L LW 8
SRW 4
SLD 16
L LW 16
SLW 12
OD
SRD 12
T LW 16
L LD 10
L P##RET_VAL
LAR1
TAK
L W [AR1,P#0.0]
T LW 20
TAK
AUF DB [LW 20]
L D [AR1,P#2.0]
LAR1
TAK
T D [AR1,P#0.0]
L LD 14
T D [AR1,P#4.0]
CLR
U L 18.1
SAVE
BE
Mit der Abänderung in dem kompilierten AWL Code kopiere ich nun den Millisekundenwert von der UTC in die Lokale Zeit dazu. Nun sollte alles funktionieren. Ob dies ebenso in der SCL Quelle möglich ist kann ich nicht sagen.