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

Ergebnis 1 bis 10 von 10

Thema: Zeit in Format REAL in Minuten und Stunden aufsplitten

  1. #1
    Registriert seit
    04.08.2014
    Beiträge
    10
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich programmiere mit CoDeSys Vers. 2.3 und würde gerne eine Zeit, die momentan im Format REAL vorhanden ist, so aufsplitten, dass ich Minuten und Stunden anzeigen kann. Ich denke mal, dass ich da irgendwie ins Format BYTE umwandeln muss? Und das, wenn möglich, mit FUP.

    Ich hoffe, mir kann jemand helfen.
    Zitieren Zitieren Zeit in Format REAL in Minuten und Stunden aufsplitten  

  2. #2
    ThomasKl ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.08.2014
    Beiträge
    10
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Habe ich das hier in der falschen Ecke geschrieben? Sollte ich die Frage nochmal woanders stellen?

  3. #3
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Nein, aber es fehlen ein paar Informationen.
    Was gibt deine Real-Zahl an: Eine Dauer in Tagen, Stunden, Minuten, Sekunden, Millisekunden?

    Das Prinzip wie man so eine Zahl zerlegt ist erstmal unabhängig von der Programmierung.

    Wie würdest du es denn im Kopf oder schriftlich rechnen, wenn dir jemand eine Zeitdauer von 2,5 Stunden sagt, und du das in Stunden und Minuten zerlegen willst?

  4. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    ThomasKl (24.08.2014)

  5. #4
    ThomasKl ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.08.2014
    Beiträge
    10
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Erst mal vielen Dank für die Antwort!

    Der REAL-Wert kommt aus dem WAGO-Baustein FbBetrDauer. Er gibt auch Tag (dw), Stunde(b) und Minute(b) aus.

    CoDeSys - PumpenBetriebszeitPause.jpg

    Ich habe aber mit den REAL-Werten gerechnet um die Differenz zu ermitteln und möchte nun die Diferenz als Stunden und Minuten anzeigen.

    Die Nachkommastellen (Mantisse) sind für die Minuten zuständig. Vor dem Komma sind die Stunden. Weiter komme ich mit meiner Logik grade leider nicht. Die real Zeit besteht aus 32 Bit. Bit 0 bis 23 sind die Minuten, 24 bis 31 die Stunden und 32 das Vorzeichen?

    Ach so, 2,5 Stunden sind 2 Stunden und 30 Minuten. Aber wie splitte ich das?

  6. #5
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Wie berechnest Du denn, dass 0,5 Stunden = 30 Minuten sind?

  7. #6
    ThomasKl ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.08.2014
    Beiträge
    10
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Indem ich mit 60 multipliziere. Dadurch käme ich aber bei 2,5 auf 150 Minuten. Was ja richtig ist, mir aber nicht weiter hilft. Ich hätte gern so eine Aufteilung wie es der Baustein oben macht. Hab grad wohl irgendwie ein Brett vor dem Kopf

  8. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Zitat Zitat von ThomasKl Beitrag anzeigen
    Die Nachkommastellen (Mantisse) sind für die Minuten zuständig. [...]
    Die real Zeit besteht aus 32 Bit. Bit 0 bis 23 sind die Minuten, 24 bis 31 die Stunden und 32 das Vorzeichen?
    Vergiss das, Mantisse ist nicht das selbe wie Nachkommastellen.
    REAL-Zahl nach IEEE 754: Bit 0..22 ist Mantisse, Bit 23..30 ist Exponent mit Bias, Bit 31 ist das Vorzeichen.

    Zitat Zitat von ThomasKl Beitrag anzeigen
    2,5 Stunden sind 2 Stunden und 30 Minuten. Aber wie splitte ich das?
    TRUNC ist Dein Freund.

    Zerlege den REAL-Wert in den Ganzzahl-Anteil vor dem Dezimalkomma (das sind die Stunden) und den gebrochenen Teil nach dem Komma.
    Multipliziere den Nachkommateil mit 60.0 und nimm von dem Ergebnis wieder nur den Ganzzahl-Anteil (das sind die Minuten).
    Code:
    Stunden   := TRUNC(realwert) ;
    Nachkomma := realwert - INT_TO_REAL(Stunden) ;
    Minuten   := TRUNC(Nachkomma * 60.0) ;
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    ThomasKl (24.08.2014)

  10. #8
    ThomasKl ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.08.2014
    Beiträge
    10
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hammer!! Danke an Euch!

    PN/DP: Wenn ich das so mache wie Du sagst, wird, sobald ich bei den Stunden etwas dazu tue, in der Differenz eine Minute zu wenig angezeigt. Was nicht wirklich tragisch ist! Aber kann ich das auch noch irgendwie weg bekommen?

    Auch wenn ich etwas berechnen lasse: 6 Minuten minus 4 ergibt dann 1. Es ist aber immer nur diese 1 Minute. Ist das irgendwo ein Rundungsfehler, weil ich die beiden Real-Werte subtrahiere?
    Geändert von ThomasKl (24.08.2014 um 14:55 Uhr)

  11. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Rundungsfehler kann möglich sein, das müßte man mal ausprobieren.
    Vielleicht hilft es, wenn Du bei der Ganzzahl-Wandlung der Minuten statt TRUNC besser REAL_TO_INT nimmst? Oder nach der Multiplikation noch 0.5 addierst?
    Code:
    Minuten   := REAL_TO_INT(Nachkomma * 60.0) ;
    
    oder
    
    Minuten   := TRUNC(Nachkomma * 60.0 + 0.5) ;
    
    oder
    
    Minuten   := REAL_TO_INT(Nachkomma * 60.0 + 0.5) ;
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  12. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    ThomasKl (24.08.2014)

  13. #10
    ThomasKl ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.08.2014
    Beiträge
    10
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Habe diese Version genommen:

    Code:
    Minuten   := TRUNC(Nachkomma * 60.0 + 0.5) ;
    Und klappt! Keine Rundungsfehler mehr! Und nochmals Danke!!!

    Thomas

Ähnliche Themen

  1. Step 7 TOD umwaneln in Minuten und Stunden
    Von S7_1500 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 12.10.2017, 09:45
  2. TIA Minuten in Stunden umwandeln
    Von kuti im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 07.10.2013, 21:52
  3. REAL ind 2 WORD aufsplitten
    Von Chris_the_new im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 21.07.2010, 15:49
  4. Eingabe vn Stunden ins Time-Format wandeln
    Von merlin im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 19.08.2009, 14:14
  5. Antworten: 4
    Letzter Beitrag: 07.04.2006, 14:52

Stichworte

Lesezeichen

Berechtigungen

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