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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Date and Time mit x Monaten addieren

  1. #11
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Sorry, 24T... aber fast
    mfG Aventinus

  2. #12
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    dann eben auch keine Februare....
    mfG Aventinus

  3. #13
    Registriert seit
    06.11.2008
    Beiträge
    100
    Danke
    9
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Moin Zusammen,

    zu #10: mit der Funktion T_ADD aus dem TIA kann man direkt DT mit Time addieren. Bleibt weiterhin die Ermittlung der Anzahl der Tage. Und dazu ist mir halt nicht gescheiteres als in #5 beschrieben eingefallen.
    Zu dem Thema wäre ich an einer eleganteren Lösung auch brennend interessiert.


    Gruß

    MFreiberger
    _____________________________________________
    "Von nichts kommt was" von B. Trüger

  4. #14
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Zitat Zitat von MFreiberger Beitrag anzeigen
    Moin Zusammen,

    zu #10: mit der Funktion T_ADD aus dem TIA kann man direkt DT mit Time addieren. Bleibt weiterhin die Ermittlung der Anzahl der Tage. Und dazu ist mir halt nicht gescheiteres als in #5 beschrieben eingefallen.
    Zu dem Thema wäre ich an einer eleganteren Lösung auch brennend interessiert.


    Gruß

    MFreiberger
    Mit TIA bin ich nicht fit, aber reicht da das Time-Format weiter als 24 Tage?
    mfG Aventinus

  5. #15
    Registriert seit
    06.11.2008
    Beiträge
    100
    Danke
    9
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Moin Aventinus,

    Mit TIA bin ich nicht fit, aber reicht da das Time-Format weiter als 24 Tage?
    nein. Aber es gibt das LTime-Format (nur für S7-1500):

    Länge (Bit) Format Wertebereich Beispiele für Werteingabe
    64 Zeitdauer mit Vorzeichen LT#-106751d23h47m16s854ms775us808ns bis LT#+106751d23h47m16s854ms775us807ns LT#11350d20h25m14s830ms652us315ns, LTIME#11350d20h25m14s830ms652us315ns
    Hexadezimalzahlen 16#0 bis 16#8000000000000000 16#2


    Ich muss aber gestehen, dass ich damit noch nicht gearbeitet habe.

    Andere Frage: Was nutzt es Dir? Die Auflösung in Monate gibt es dabei auch nicht. Wenn Du die Anzahl der Tage ermittelt hast, ist es unerheblich, ob du einmal 500 Tage oder 500x 1 Tag (Schleife, Time-Format) hinzuaddierst , oder?

    Gruß

    MFreiberger
    _____________________________________________
    "Von nichts kommt was" von B. Trüger

  6. #16
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Code:
    FUNCTION FC253 : VOID
    VAR_INPUT
        inDT : DATE_AND_TIME;
        baDT AT inDT : STRUCT
            Year   : BYTE ;  // Jahr    BCD (19)90..(20)89
            Month  : BYTE ;  // Monat   BCD 01..12
            Day    : BYTE ;  // Tag     BCD 01..31
            Hour   : BYTE ;  // Stunde  BCD 00..23
            Minute : BYTE ;  // Minute  BCD 00..59
            Second : BYTE ;  // Sekunde BCD 00..59
            msMSD  : BYTE ;
            wDay_msLSD : BYTE ;
        END_STRUCT;
        inADDM : INT;
    END_VAR
    VAR_OUTPUT
        outDT : DATE_AND_TIME;
        bbDT AT outDT : STRUCT
            Year   : BYTE ;  // Jahr    BCD (19)90..(20)89
            Month  : BYTE ;  // Monat   BCD 01..12
            Day    : BYTE ;  // Tag     BCD 01..31
            Hour   : BYTE ;  // Stunde  BCD 00..23
            Minute : BYTE ;  // Minute  BCD 00..59
            Second : BYTE ;  // Sekunde BCD 00..59
            msMSD  : BYTE ;
            wDay_msLSD : BYTE ;
        END_STRUCT;
    END_VAR
    VAR_TEMP
        YEAR : INT;
        MONTH : INT;
        DAY : INT;
    END_VAR
    
        YEAR := BCD_TO_INT(baDT.Year);
        IF (YEAR < 90) THEN
            YEAR := YEAR + 2000;
        ELSE
            YEAR := YEAR + 1900;
        END_IF;
        
        
        
        MONTH := BCD_TO_INT(baDT.Month);
        MONTH := MONTH + inAddM;
        
        IF (MONTH > 12) THEN
            MONTH := MONTH - 12;
            YEAR := YEAR + 1;
        END_IF;
           
       IF (MONTH < 1) THEN
            MONTH := MONTH + 12;
            YEAR := YEAR - 1;         
        END_IF;
    
       IF (YEAR < 2000) THEN
            YEAR := YEAR - 1900;
        ELSE
            YEAR := YEAR - 2000;
        END_IF;
        
        outDT := inDT;    
        bbDT.Month := WORD_TO_BYTE(INT_TO_BCD(MONTH));
        bbDT.Year := WORD_TO_BYTE(INT_TO_BCD(YEAR));
        
    END_FUNCTION
    Geändert von vierlagig (17.07.2014 um 12:15 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. Folgende 2 Benutzer sagen Danke zu vierlagig für den nützlichen Beitrag:

    hucki (17.07.2014),rr_zx (17.07.2014)

  8. #17
    Registriert seit
    06.11.2008
    Beiträge
    100
    Danke
    9
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Moin vierlagig,

    ja, fehlt nur noch eine Schleife, falls >12Monate addiert oder subtrahiert werden sollen. Oder größere Zeitintervalle werden in Jahren angegeben.

    Gruß

    MFreiberger
    _____________________________________________
    "Von nichts kommt was" von B. Trüger

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

    Standard

    Zitat Zitat von MFreiberger Beitrag anzeigen
    ja, fehlt nur noch eine Schleife, falls >12Monate addiert oder subtrahiert werden sollen.
    Einfach die IF-Abfragen zu WHILE ändern:
    Zitat Zitat von vierlagig Beitrag anzeigen
    Code:
        IF (MONTH > 12) THEN
            MONTH := MONTH - 12;
            YEAR := YEAR + 1;
        END_IF;
           
        IF (MONTH < 1) THEN
            MONTH := MONTH + 12;
            YEAR := YEAR - 1;         
        END_IF;
    Code:
        WHILE (MONTH > 12) DO
            MONTH := MONTH - 12;
            YEAR := YEAR + 1;
        END_WHILE;
     
        WHILE (MONTH < 1) DO
            MONTH := MONTH + 12;
            YEAR := YEAR - 1;
        END_WHILE;

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

    rr_zx (17.07.2014)

  11. #19
    rr_zx ist offline Benutzer
    Themenstarter
    Registriert seit
    21.08.2006
    Ort
    Schweiz
    Beiträge
    82
    Danke
    9
    Erhielt 6 Danke für 4 Beiträge

    Standard

    Hallo zusammen

    Ich habe nochmals eine Frage zu diesem Thema.
    Ich habe die Umwandlung so wie oben realisiert. Funktioniert auch schon auf einer Anlage.
    Bis anhin habe ich diesen Wert auf einem Basic-Panel angezeigt. Das funktionierte auch.
    Jedoch habe ich jetzt das Problem beim Darstellen auf einem Comfort-Panel. Es zeigt nur noch ######### an.
    Zusätzlich kommt ein Fehler: Konvertierung felgeschlagen....

    Auf der SPS wird der Wert im DB richtig angezeigt.

    Kann es sein, das ich auch noch den Wochentag berechnen muss? Dieser Stimmt ja durch die Veränderung der Monate nicht mehr.

    Gruess Ralph

  12. #20
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich kann deine Annahme bestätigen.
    Eine DT-Variable wird nur dann angenommen wenn alle deren Inhalte korrekt sind - auch der Wochentag muss stimmen - auch wenn du ihn gar nicht brauchst.
    Das war (meine ich) nur bei ProTool noch egal gewesen ...

    Gruß
    Larry

Ähnliche Themen

  1. Beckhoff Date and Time an S7
    Von dr1101 im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 15.11.2013, 19:29
  2. Date and Time umwandeln in Time
    Von veritaz89 im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 24.05.2012, 08:07
  3. Time and Date
    Von paula23 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 22.10.2008, 08:50
  4. Date/Time in Diagnoserepeater
    Von Pilami im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 26.09.2007, 14:58
  5. Date and Time im DB
    Von godi im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 19.05.2006, 15:56

Lesezeichen

Berechtigungen

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