Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: Uhrzeit - Datentyp - Zeitdifferenz

  1. #1
    Registriert seit
    03.03.2011
    Ort
    Tettnang
    Beiträge
    123
    Danke
    24
    Erhielt 1 Danke für 1 Beitrag

    Standard


    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
    Zitieren Zitieren Uhrzeit - Datentyp - Zeitdifferenz  

  2. #2
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Wie genau soll es denn sein, und wieviel Zeit liegt in etwa zwischen A und B?

  3. #3
    twincatter ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.03.2011
    Ort
    Tettnang
    Beiträge
    123
    Danke
    24
    Erhielt 1 Danke für 1 Beitrag

    Standard

    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

  4. #4
    Registriert seit
    01.10.2009
    Ort
    Regensburg
    Beiträge
    77
    Danke
    8
    Erhielt 11 Danke für 11 Beiträge

    Standard

    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

  5. #5
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    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.

  6. #6
    twincatter ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.03.2011
    Ort
    Tettnang
    Beiträge
    123
    Danke
    24
    Erhielt 1 Danke für 1 Beitrag

    Standard

    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

  7. #7
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Zitat Zitat von twincatter Beitrag anzeigen
    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?

  8. #8
    Registriert seit
    01.10.2009
    Ort
    Regensburg
    Beiträge
    77
    Danke
    8
    Erhielt 11 Danke für 11 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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.

    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

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 22.12.2013, 22:13
  2. TwinCat, LREAL und Zeitdifferenz
    Von o-bi-wan-knobi im Forum CODESYS und IEC61131
    Antworten: 12
    Letzter Beitrag: 26.03.2008, 08:06
  3. Antworten: 10
    Letzter Beitrag: 02.01.2008, 16:54
  4. Zeitdifferenz berechnen
    Von Fuchs im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 10.10.2006, 08:49
  5. Antworten: 2
    Letzter Beitrag: 18.01.2006, 16:32

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •