Uhrzeit - Datentyp - Zeitdifferenz

twincatter

Level-1
Beiträge
137
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte gerne einen Zeitpunkt A und einen Zeitpunkt B in der SPS erfassen.
Aus diesen beiden Zeiten soll dann in der SPS die Differenzzeit berechnet werden.

Mir ist im Moment nicht klar wie dies realisiert werden kann.

Zeitpunkt A wäre z.B. Start der Bearbeitung
Zeitpunkt B wäre z.B. Ende der Bearbeitung

Das Programm läuft auf einem CX1020.

Vielen Dank für Tips, Michael
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo StructuredTrash,

erst einmal Danke für Deine Antwort.

Die Genauigkeit kann im Sekundenbereich liegen. Die Zeitdifferenz wird zwischen einigen Sekunden bis ca. 15Minuten liegen.

Danke, Michael
 
Um eine Zeitdifferenz zu erfassen bietet sich GETSYSTEMTIME an.
Hier bekommst Du Nanosekunden zurück, mit denen am einfachsten gerechnet werden kann, um das dann in eine lesbare Form zu bringen musst Du allerdings das Ganze umrechnen, hier würde sich der Datentyp T_FILETIME anbieten.

hier ein kleines Beispiel:

Code:
FUNCTION fc_LocalTime : DT
VAR_INPUT
END_VAR
VAR
    GetSysTime        : FW_GetSystemTime;
    strFileTime        : T_FILETIME;
END_VAR

(* !!!! Summer- Wintertime is not taken into account !!!! *)

GetSysTime(dwTimeLo=> strFileTime.dwLowDateTime, dwTimeHi=> strFileTime.dwHighDateTime);

fc_LocalTime := FILETIME_TO_DT(strFileTime);

cheers :cool:
 
Warum so ein Aufwand? Ich würde einfach die Programmzyklen zwischen den Ereignissen A und B zählen. Die Zeiteinheit ergibt sich dann aus der eingestellten Zykluszeit.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

habe das Beispiel mit fc_LocalTime ausprobiert.

Als DateTime erhalte ich jedoch DT#2012-09-17-16:06:31.

D.h. Der Tag und die Uhrzeit ist falsch. Die Systemzeit im Windows Virtual PC steht z.B. auf 2012-09-18

Das Programm läuft zu Testzwecken unter Windows Virtual PC.

Außerdem stellt sich jetzt die Frage wie aus 2 Zeitpunkten die Zeitdifferenz berechnet werden kann.

Danke nochmals, Michael
 
Außerdem stellt sich jetzt die Frage wie aus 2 Zeitpunkten die Zeitdifferenz berechnet werden kann.
DT enthält die Zeit in Sekunden seit einem festgelegten Startdatum. Die Differenz in Sekunden ist also DT_TO_UDINT(DT_B)-DT_TO_UDINT(DT_A).
Aber nochmal meine Frage: Warum so kompliziert? Was macht es für einen Sinn, die Systemzeit mit Nanosekunden-Auflösung auszulesen, wenn nach der Umwandlung in DT doch nur eine Sekunden-Auflösung bleibt?
 
Warum der Aufwand;

Ich hab das mal so gebraucht um lesbare Uhrzeiten zu bekommen, die dann in log files geschrieben wurden.
relative Zeitmessung zwischen zwei punkten, wobei die Uhrzeit später auch noch ausgewertet werden soll, hat mich zu meiner Lösung geführt.

Werden die Uhrzeiten nicht weiter verwendet ist natürlich Zykluszähler x Zykluszeit wesentlich einfacher. *ACK*

Zu den Problem mit Tag und Uhrzeit bei der virtual PC Sache, ich nehm mal an, dass TwinCat einfach keine Rücksicht drauf nimmt und die CPU Zeit direkt holt.
Verwende C6920 und da ist ausser der Winter/Sommerzeit differenz keine Abweichung.
Auf einer virtuellen Maschine ist das mit dem Testen immer etwas schwierig, probiers doch mal am Zielsystem aus ;-)
 
Zurück
Oben