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

Ergebnis 1 bis 10 von 10

Thema: Zeitdifferenz im ms Bereich bilden in CoDeSys 2.3

  1. #1
    Registriert seit
    28.07.2014
    Beiträge
    17
    Danke
    8
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Für Statistikdaten möchte ich gerne Zeitdifferenzen bilden und je nach Zustand auf bestimmte Variablen aufaddieren. Die Differenzen bewegen sich dabei im zwei bis dreistelligen Millisekundenbereich. Zielsteuerung ist eine Wago 750-880. Zwar kann die Differenz einfach mit tDiff := TIME()-tLast bestimmt werden, jedoch können TIME Variablen keine 50 Tage groß sein.
    Nun ist meine Frage : Wird der Rückgabewert von TIME() bei einem Überlauf wieder auf t#0ms zurückgesetzt?
    Dann könnte der Sonderfall dieses Wechsels mit einer einfachen Abfrage behandelt werden.
    Zitieren Zitieren Zeitdifferenz im ms Bereich bilden in CoDeSys 2.3  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.797
    Danke
    398
    Erhielt 2.418 Danke für 2.014 Beiträge

    Standard

    Hallo,
    du hast hier m.E. einen Widerspruch drin : zum Einen geht es dir um Millisekunden - zum Anderen um Tage.
    Wie auch immer. In dem Falle würde ich mit DATE und TimeOfDay arbeiten und mir daraus entsprechende Differenzen bilden. Der TIME-Wert selbst mag einen Überlauf zulassen/bilden können - aber kann es auch der IEC-Timer ? M.E. wahrscheinlich nicht.

    Gruß
    Larry

  3. #3
    buzzer ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.07.2014
    Beiträge
    17
    Danke
    8
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Das habe ich ungünstig formuliert. TIME() gibt soweit ich das sehe die verstrichene Zeit seit einem bestimmten Ereignis zurück (~Start des Controllers?). Läuft mein Controller nun 50 Tage oder länger erwarte ich, dass TIME() an seine Grenzen stößt.
    Es kommen auch größere zu messende Zeitdifferenzen vor und für diese verwende ich auch DATE_AND_TIME. Nur löst dies eben nur bis zu den Sekunden auf, weshalb ich nach einer Lösung im ms Bereich suche.
    Einen IEC-Timer wie z.B. TON verwende ich an dieser Stelle nicht.

  4. #4
    Registriert seit
    12.08.2014
    Ort
    Basel
    Beiträge
    208
    Danke
    23
    Erhielt 20 Danke für 19 Beiträge

    Standard

    Also, die definition von TIME():
    Zitat Zitat von Handbuch
    TIME()-Funktion
    Diese Funktion liefert die Zeit auf Millisekunden-Basis, die seit Systemstart vergangen ist.
    Der Datentyp ist TIME.

    Naja, ich hab die bei mir mal ausgelesen, ich bin bei 47.5 Tagen. Wenn du dich noch 1.6 Tage gedulden kannst (der Datentyp TIME geht bis maximal 49 Tage 17 Stunden 2 Minuten 47 Sekunden und 295 Millisekunden) kann ich dir sagen was passiert.

    Damit du die Gefahr eines Überlaufen ausschliessen kannst (ich denke mal TIME() wird beim überlaufen zurückgesetzt) einfach den Wert in eine Variable schreiben und mit dieser weiterarbeiten. Dann nach jeder Differenzauswertung den Wert der Variable neu von TIME() übernehmen. Wäre das eine Lösung?

  5. Folgender Benutzer sagt Danke zu JanB1 für den nützlichen Beitrag:

    buzzer (10.10.2014)

  6. #5
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.752
    Danke
    323
    Erhielt 1.527 Danke für 1.286 Beiträge

    Standard

    Time wird beim Überlauf einfach wieder 0, folglich ist es aufgrund des wohl definierten Max-Wertes ein leichtes dieses Mathematisch in diesem Sonderfall zu berücksichtigen.
    IF ELSE und so halt.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  7. Folgender Benutzer sagt Danke zu MSB für den nützlichen Beitrag:

    buzzer (10.10.2014)

  8. #6
    buzzer ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.07.2014
    Beiträge
    17
    Danke
    8
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Das war was ich wissen wollte, nur hatte ich keine Aussagen diesbezüglich gefunden. Bilde die Gesamtdifferenz in diesem Sonderfall jetzt als tDiff := TIME() + tMax - tOld
    Mal sehen ob der praktische Versuch die Aussagen bestätigt.

  9. #7
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    757
    Danke
    27
    Erhielt 166 Danke für 144 Beiträge

    Standard

    Zitat Zitat von buzzer Beitrag anzeigen
    Bilde die Gesamtdifferenz in diesem Sonderfall jetzt als tDiff := TIME() + tMax - tOld
    Da wird Dir eine Millisekunde fehlen.
    Wenn schon, dann tDiff:=TIME()+tMax+1-tOld.
    Eine besondere Behandlung des Überlaufs ist aber bei DWORD-Subtraktionen gar nicht notwendig.
    Beispiel: TIME=0, tOld=tMax, also ist eine Millisekunde vergangen, und 0-tMax ergibt auch 1.

  10. Folgender Benutzer sagt Danke zu StructuredTrash für den nützlichen Beitrag:

    buzzer (16.10.2014)

  11. #8
    Registriert seit
    13.12.2011
    Beiträge
    1.511
    Danke
    163
    Erhielt 181 Danke für 164 Beiträge

    Standard

    Hm, vielleicht übersehe ich was...
    (Antwort gelöscht, weil völliger Blödsinn)
    Geändert von oliver.tonn (16.10.2014 um 11:54 Uhr)

  12. #9
    buzzer ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.07.2014
    Beiträge
    17
    Danke
    8
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Habe das jetzt mal getestet indem ich TIME Variablen mit festen Werten versehe und 16#FFFFFFFF in TIME umwandle. Die DWORD Subtraktion benötigt tatsächlich keine Sonderfallbehandlung. Auch die direkte Differenz aus zwei TIME Variablen liefert den Betrag der Differenz zurück. Damit ist mein Problem gelöst, bzw. hat eigentlich nie existiert.

    Danke für euer Feedback. Die Millisekunde beim Wechsel habe ich tatsächlich übersehen.

  13. #10
    Registriert seit
    13.10.2013
    Ort
    shertogenbosch niederlande
    Beiträge
    120
    Danke
    0
    Erhielt 8 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    die millisekunde die gibt es nicht wenn mann UINT benutzt.

Ähnliche Themen

  1. Uhrzeit - Datentyp - Zeitdifferenz
    Von twincatter im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 18.09.2012, 12:00
  2. Mittelwert bilden für einen DB-Bereich
    Von GFI im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 03.09.2009, 17:32
  3. TwinCat, LREAL und Zeitdifferenz
    Von o-bi-wan-knobi im Forum CODESYS und IEC61131
    Antworten: 12
    Letzter Beitrag: 26.03.2008, 08:06
  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
  •