oscat.lib > oscat.lib fuer Step 7
Bug: UTC_TO_LTIME (FC403)
Duerap:
Hallo OSCAT Community,
Hab aus der OSCAT 3.32 Bibliothek für STEP 7 den UTC_TO_LTIME Block in Verwendung, dabei hab ich einen Fehler in der Funktion entdeckt.
Der ms- Zeitwert wird in der Lokalzeit verworfen. Somit ist dieser beim RET_VAL Ausgang immer 0.
peewit:
Hallo
Bin mir nicht sicher ob ich dein Problem richtig verstanden habe.... aber
als Eingangsparameter hast du UTC vom Type Date_Time
Die Type Date_Time erfasst die Anzahl an Sekunden seit 1.1.1970
Da bedeutet das in dieser Datentype keine ms enthalten sind und beim Ergebnis diese auch immer als 0ms angesehen werden müssen
Duerap:
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.
peewit:
nachdem es nach oscat standard und bei allen anderen plattformen bei DATE_TIME keine ms gibt dürfte das so gelöst worden sein damit es einheitlich ist
Date_time Type hat normalerweise 32 Bit und kann unmöglich die ms enthalten -> siemens hat hier hat wieder seinen eigenen Standard
Aber das dürfte die ursache sein
aber ich bin kein simatic-fuzzy....
mattsches:
Aber spricht denn etwas gegen die Übernahme der obigen Lösung? Vielleicht mag Duerap sie ja direkt in die Quellen einarbeiten, und es gibt ein Update.
Duerap, ich würde gleich das komplette Byte 6 und 7 übernehmen. Dann bleibt die Wochentagsinformation ebenfalls erhalten.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln