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

Ergebnis 1 bis 1 von 1

Thema: Format Date richtig setzen

  1. #1
    Registriert seit
    25.09.2006
    Beiträge
    1
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe ein Programm geschrieben das ein eingegebenes Datum im Format Char (DD.MM.JJJJ) in das Format Date (D#1990-01-01) wandelt.
    Da ich aus diesem Beitrag gewusst habe das die DATE-variable eine vorzeichenlose Zahl ist, habe ich das Programm dementsprechend geschrieben (der Code mit dem Char zu Int hab ich mir hier mal gespart):

    Code:
          L     #S_JAHR_INT_EING            //Jahr INT PPC
          ITD                               // zu Ganzzahl
          DTR                               // zu real
          L     2.000000e+003               // jahr 2000 für berechn.
          +R    
          T     #S_B_JAHR_REAL_JJJJ         // Jahr PPC Eingabe als Real im Format JJJJ
          L     #S_MONAT_INT_EING           //Monat INT PPC im Format MM
          L     #S_TAG_INT_EING             //Tag INT PPC im Format DD
    //-------------------------------------------------------
    // Berechne ob das eingegebene Jahr ein Schaltjahr ist:
          L     #S_B_JAHR_REAL_JJJJ         // Jahr PPC Eingabe als Real im Format JJJJ
          RND   
          T     #S_B_JAHR_DINT_JJJJ         // Jahr PPC eingabe als DINT im Format JJJJ
          L     4                           // Jahr durch 4 Teilbar?
          MOD   
          L     0
          ==D   
          =     #S_B_Schaltjahr_d_4_teilb   // Eingabe Jahr durch 4 teilbar
     
          L     #S_B_JAHR_DINT_JJJJ         // Jahr PPC eingabe als DINT im Format JJJJ
          L     100
          MOD   
          L     0
          <>D   
          =     #S_B_Schaltja_nic_d_100_t   // Eingegebenes Jahr nicht durch 100 teilbar
     
          L     #S_B_JAHR_DINT_JJJJ         // Jahr PPC eingabe als DINT im Format JJJJ
          L     400                         // Jahr durch 4 Teilbar?
          MOD   
          L     0
          ==D   
          =     #S_B_Schaltja_d_400_teilb   // Eingegebenes Jahr durch 400 teilbar
     
          U     #S_B_Schaltjahr_d_4_teilb   // Eingabe Jahr durch 4 teilbar
          UN    #S_B_Schaltja_nic_d_100_t   // Eingegebenes Jahr nicht durch 100 teilbar
          O     
          U     #S_B_Schaltja_d_400_teilb   // Eingegebenes Jahr durch 400 teilbar
          =     #S_B_Eingabe_ist_Schaltja   // Eingegebenes Jahr ist Schaltjahr
          L     0.000000e+000
          T     #S_B_Schaltjahr             // wenn kein Schaltjahr Variable nullen
     
          U     #S_B_Eingabe_ist_Schaltja   // wenn Schaltjahr Variable auf 1 setzen
          SPBN  schj
          L     1.000000e+000
          T     #S_B_Schaltjahr
    schj: NOP   0
    //-------------------------------------------------------
    // Berechne Tage von 1988 bis zum eingegebenen Jahr:
          L     #S_B_JAHR_REAL_JJJJ         // Jahr PPC Eingabe als INT im Format JJJJ
          L     1.988000e+003               // ab dem jahr 1988 (da Schaltjahr)
          -R    
          T     #S_B_ANZ_JAHRE_v_1988       // Anzahl berechnete Jahre von 1988 an
          L     3.652425e+002               // 3.652500e+002               // Anzahl Tage in einem Jahr mit Schaltjahrestag (365,25 Tage)
          *R    
          L     7.310000e+002               // 731 Tage abziehen da das S7-Format ab 1990 beginnt
          -R    
          T     #S_B_TAG_V_90_bis_Ein_Jah   // Tage von 1990 bis zum Eingegebenen Jahr
    //-------------------------------------------------------
    // Berechne Tage der eingegebenen Monate in einem Jahr:
          L     #S_MONAT_INT_EING           //Monat INT PPC im Format MM
          ITD                               // zu Ganzzahl
          DTR                               // zu real
          L     1.000000e+000               // 1 Monat abziehen
          -R    
          L     3.043687e+001               //  3.043750e+001               // Tage in einem Monat mit Schaltjahrestag
          *R    
          T     #S_B_TAGE_MONATE_STA_JAHR   // Tage der Monate im Startjahr
    //-------------------------------------------------------
    // Berechne die eingegebenen Tage:
          L     #S_TAG_INT_EING             //Tag INT PPC im Format DD
          ITD                               // zu Ganzzahl
          DTR                               // zu real
          L     1.000000e+000               // 1 tag abziehen
          -R    
          T     #S_B_TAGE_STARTJAHR         // Tage des Monats des Startjahres
    //-------------------------------------------------------
    // Berechne die Gesamttage für das Format DATE:
          L     #S_B_TAG_V_90_bis_Ein_Jah   // Tage von 1990 bis zum Eingegebenen Jahr
          L     #S_B_TAGE_MONATE_STA_JAHR   // Tage der Monate im Startjahr
          +R    
          L     #S_B_TAGE_STARTJAHR         // Tage des Monats des Startjahres
          +R    
          L     #S_B_Schaltjahr             // Falls Schaltjahr einen Tag dazuzählen
          +R    
          T     #S_B_ANZ_TAGE_GESAMT_REAL   // Die Gesamte Anzahl der Tage im Format real
          TRUNC 
          T     #S_B_DATE_ANZ_GESAMT_TAGE
          T     #S_DATE_EINGABE             // Eingegebenes Datum im Format DATE (Endergebnis)
    Dieses Programm brauche ich dazu damit ich aus dem DATE-Format und einem TIME Format in das DATE-AND-TIME Format wandeln kann um die Eingabe mit dem aktuellen Datum und der aktuellen Uhrzeit vergleichen zu können. Ich konnte die Eingabe nicht direkt im PPC (PanelPC) als DATE-AND-TIME machen da ich das aktuelle Datum den Bediener vorschlagen wollte. Leider funktionert dieses Programm nur Teilweise, in einem Schaltjahr (Ein Schaltjahr ist durch 4 teilbar und nicht durch 100 oder durch 400 teilbar) funktionert es. Am 26. 10. 2006 würde es funktionieren
    doch am 26.09.2006 gibt es den 25.09.2006 aus... Ich kann mir das nicht erklären warum es in manchen konstillationen falsch rechnet.
    Als Quelle zur Berechnung der Formel habe ich diese_Seite genommen.
    Ich habe mit 365,2425 Tagen pro Jahr gerechnet.
    Ich habe nicht beim 01.01.1990 angefangen mit der Berechnung sondern am 01.01.1988 (-781 Tage) da dies ein Schaltjahr ist.
    Vielleicht könnt ihr mir den Denkfehler in dieser komplexen Berechnung erklären! Ich habe mich jetzt schon für einen einfacheren Lösungsweg entschieden indem ich das aktuelle CPU-Datum und die aktuelle CPU-Zeit ebenfalls in Char umwandle und die Eingabe mit der umgewandelten CPU-Zeit und dem CPU-Datum vergleiche, es wäre aber trotzdem interassnt zu sehen ob es mit dem oben gezeigten Weg möglich wäre immer auf das richtige Datum zu kommen! Schonmal vielen Dank das ihr euch die Mühe gemacht habt bis hier hin zu lesen!

    MfG Ello
    Zitieren Zitieren Format Date richtig setzen  

  2. Folgender Benutzer sagt Danke zu Ello für den nützlichen Beitrag:

    SIGGI (05.03.2009)

Ähnliche Themen

  1. DaveGetBlockInfo, format von modification date ??
    Von Ruud im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 20.04.2015, 09:34
  2. Format Date zerlegen
    Von online im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 05.11.2010, 13:08
  3. S7 Format DATE
    Von fmbux im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 18.10.2009, 19:53
  4. Date nach DINT Format
    Von PhilippL im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 07.09.2007, 08:44
  5. S7 Format Date in WINCC
    Von JoeJo im Forum HMI
    Antworten: 0
    Letzter Beitrag: 12.02.2007, 15:05

Lesezeichen

Berechtigungen

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