S7: Umwandlung Real -> Date and Time -> Standardbaustein

DATE_AND_TIME definiert einen Bereich mit 64 Bits (8 Bytes) und wird in einem binärcodierten Dezimalformat gespeichert.
Wenn dein Real Wert auch
[FONT=Arial, Helvetica, sans-serif]binär codiert ist kannst du das über ein DB machen [/FONT]
 
Wenn ich nun eine Zeitdifferenz wird ermitteln lasse, indem eine Date-And-Time-Variable (Startzeit) von einer anderen Date-And_time-Variable (Endzeit) über FC34 SB_DT_DT subtrahiert wird, gibt der Baustein Differenz im Time Format zurück. Wie kann ich dieses nach Date-And-Time konvertieren?
Gibt es hierfür einen Baustein?
Danke.
Gruß
Markus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich nun eine Zeitdifferenz wird ermitteln lasse, indem eine Date-And-Time-Variable (Startzeit) von einer anderen Date-And_time-Variable (Endzeit) über FC34 SB_DT_DT subtrahiert wird, gibt der Baustein Differenz im Time Format zurück. Wie kann ich dieses nach Date-And-Time konvertieren?
Gibt es hierfür einen Baustein?
Danke.
Gruß
Markus

Der Datentyp DT definiert ja jeweils ein fixes Datum - er ist nicht dafür gedacht eine Zeitdifferenz (z.B. 1 Monat, 6 Tage, 23 Stunden, 2 Minuten) anzugeben.
Von daher gibt der Siemens FC34 die Zeitdifferenz im TIME-Format an.
Das TIME-Format lässt sich aber relativ simpel zerlegen.
Der Datentyp TIME ist ein vorzeichenbehafteter 32-Bit Integer-Wert, indem die Zeitangabe in Millisekunden gespeichert sind.
Der maximale TIME-Wert ist somit auf T#24D_20H_31M_23S_647MS begrenzt - mehr geben die 31-Bit + 1 Bit Vorzeichen nicht her.
Der Siemens FC34 gibt meines Wissens bei Überschreitung dieser Grenze einen Fehler aus.

Wenn du jetzt den TIME-Datentyp zerlegen möchtest in Tage, Stunden, Minuten, Sekunden, Millisekunden, dann musst du ja nur wissen, wieviele Millisekunden ein Tag bzw. eine Stunde bzw. eine Minute, etc. hat.
Ein Tag hat dann eben 86400000 Millisekunden - Eine Stunde 3600000 Millisekunden - usw.
Wenn du jetzt die Time-Variable mit 86400000 dividierst, dann hast du schon mal die Tage - den verbleibenden Rest dividierst du dann noch mit 3600000 dann hast du die Stunden - usw.

Rein theoretisch könntest du dir dann mit diesen Informationen zwar wieder einen DT-Datentyp (8-Byte Zeitstempel) basteln, der die Zeitdifferenz darstellt - das macht aber keinen Sinn und scheitert auch schon an der Jahresangabe.
Beim Siemens Datentyp DT ist das Jahr minimal mit 1990 und maximal mit 2089 definiert.

Mfg
uncle_tom
 
Zurück
Oben