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

Ergebnis 1 bis 9 von 9

Thema: Konvertieren von Date_and_Time zu String

  1. #1
    Registriert seit
    21.01.2015
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,


    Ich setze TIA V12 mit einer 300er Steuerung ein.


    Ich habe folgendes Problem. Ich muss einen String generieren, der sich aus der letzten Ziffer des Kalenderjahres, des Wochentags, der Kalenderwoche und einigen anderen Dingen zusammensetzt.



    Das Auslesen der Systemzeit und Aufsplitten in Datum, Uhrzeit und Wochentag ist kein Problem. Allerdings liegt mir das Datum dann nur als Datentyp "Date" vor. Ich finde keine Möglichkeit den Datentyp Date nach string zu konvertieren um die letzte Ziffer aus dem Jahr zu extrahieren.

    Hat jemand eine Idee dazu?



    Die Kalenderwoche muss ich mir auch noch ermitteln.



    Vielen Dank für eure Bemühungen.



    Zitieren Zitieren Konvertieren von Date_and_Time zu String  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo,

    wenn dir mir SCL an dieser Stelle geholfen ist dann hätte ich einen Baustein, der dir das Datum einliest und in seine Einzelbestandteile (also Tag, Monat, Jahr - aber auch KW) zergliedert.
    Ist allerdings S7-Classic.

    Gruß
    Larry

  3. #3
    Der Basti ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.01.2015
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Wäre nett wenn du es mal schicken könntest. Funktioniert das dann auch im TIA Portal? Und schreibt dein Programm die Einzelbestandteile in einen String?

    Gruß Basti

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Nein, die Einzel-Bestandteile werden als INT ausgegeben. Aber um von INT zu String zu kommen gibt es (auch bei TIA) entsprechende Umwandlungs-FC's.
    Ich poste dir mal den FC. Du kannst in dir ja ggf. anpassen / umbauen ...

    Code:
        
    FUNCTION FC440 : VOID                                        // UP Tag, Monat, Jahr etc. von Systemuhr abfragen
    Title   = 'UP Tag, Monat, Jahr etc. von Systemuhr abfragen'  // UUP Tag, Monat, Jahr etc. von Systemuhr abfragen
    AUTHOR  : 'Larry'
    VERSION : '1.0'     //    30.09.2014
    FAMILY  : 'LL_Std'
    KNOW_HOW_PROTECT
    // --------------------------------------------------------------------------------------
    //     Bausteinparameter
    // --------------------------------------------------------------------------------------
    VAR_INPUT 
    END_VAR
    VAR_IN_OUT 
    END_VAR
    VAR_OUTPUT
       Jahr              : INT ;       // Jahr des Vorgabe-Date's
       Monat             : INT ;       // Monat des Vorgabe-Date's
       Tag               : INT ;       // Tag des Vorgabe-Date's
       Wochentag         : INT ;       // Wochentag des Vorgabe-Date's  [1=So ... 7=Sa]
       Schaltjahr        : INT ;       // =1: Vorgabe-Date ist ein Schaltjahr
       Jahrestag         : INT ;       // Tag im Jahr des Vorgabe-Date's
       Kalenderwoche     : INT ;       // Kalenderwoche des Vorgabe-Date's
       SommerZeit        : INT ;       // =1: Vorgabe-Date ist innerhalb der Sommerzeit
    END_VAR
    VAR_TEMP
       Date_Time : DT ;                 // Date_and_Time für Umwandlung 
          at_Date_Time AT Date_Time : ARRAY [0..7] OF BYTE ;
       Error           : INT ; 
       b_Jahr : INT ;
       Anz_SJ : INT ; 
       Diff_J : INT ;
       h_Wochentag : INT ;
       h_Datum     : INT ;
       
       Tag_Wechsel_SZ   : INT ;          // - Jahrestag, an dem nach Sommerzeit gewechselt wird
       Tag_Wechsel_WZ   : INT ;          // - Jahrestag, an dem nach Winterzeit gewechselt wird
       Stunde           : INT ;
    END_VAR
    // --------------------------------------------------------------------------------------
    //     Anweisungsteil
    // --------------------------------------------------------------------------------------
    BEGIN
      Error := READ_CLK (CDT := Date_Time) ; 
      WochenTag := BCD_TO_INT (at_Date_Time [7] AND 2#0000_1111) ;
      b_Jahr := BCD_TO_INT (at_Date_Time [0]) ; 
         IF b_Jahr < 90 THEN Jahr := 2000 + b_Jahr ; ELSE Jahr := 1900 + b_Jahr ; END_IF ;
      Monat  := BCD_TO_INT (at_Date_Time [1]) ;
      Tag    := BCD_TO_INT (at_Date_Time [2]) ;
      
      Schaltjahr := 0 ; IF ((Jahr MOD 4) = 0) AND (NOT ((Jahr MOD 100) = 0) OR ((Jahr MOD 400) = 0)) THEN Schaltjahr := 1 ; END_IF ;
      Jahrestag := Tag ;
         IF Monat >  1 THEN Jahrestag := Jahrestag + 31 ; END_IF ;
         IF Monat >  2 THEN Jahrestag := Jahrestag + 28 + Schaltjahr ; END_IF ;
         IF Monat >  3 THEN Jahrestag := Jahrestag + 31 ; END_IF ;
         IF Monat >  4 THEN Jahrestag := Jahrestag + 30 ; END_IF ;
         IF Monat >  5 THEN Jahrestag := Jahrestag + 31 ; END_IF ;
         IF Monat >  6 THEN Jahrestag := Jahrestag + 30 ; END_IF ;
         IF Monat >  7 THEN Jahrestag := Jahrestag + 31 ; END_IF ;
         IF Monat >  8 THEN Jahrestag := Jahrestag + 31 ; END_IF ;
         IF Monat >  9 THEN Jahrestag := Jahrestag + 30 ; END_IF ;
         IF Monat > 10 THEN Jahrestag := Jahrestag + 31 ; END_IF ;
         IF Monat > 11 THEN Jahrestag := Jahrestag + 30 ; END_IF ;
         
       Kalenderwoche := (Jahrestag + 7 + 3 - Wochentag) / 7 ;
      
    // Sommerzeit ?  
       Stunde := BCD_TO_INT (at_Date_Time [3]) ;
     
       h_Datum := Anz_SJ + (Diff_J * 365) + 83 ;  // 83 = Jahrestag vom 24.03. im nicht-Schaltjahr
       h_Wochentag := 6 - (h_Datum MOD 7) ;
       IF (h_Wochentag = 0) THEN h_Wochentag := 7 ; END_IF ;
           
       Tag_Wechsel_SZ := 83 + h_Wochentag ;
           
       h_Datum := Anz_SJ + (Diff_J * 365) + 297 ;  // 297 = Jahrestag vom 24.10. im nicht-Schaltjahr
       h_Wochentag := 6 - (h_Datum MOD 7) ;
       IF (h_Wochentag = 0) THEN h_Wochentag := 7 ; END_IF ;
           
       Tag_Wechsel_WZ := 297 + h_Wochentag ;
      
       SommerZeit := 0 ;
       IF    (Jahrestag > Tag_Wechsel_SZ) AND (Jahrestag < Tag_Wechsel_WZ) THEN SommerZeit := 1 ;
       ELSIF (Jahrestag = Tag_Wechsel_SZ) AND (Stunde >= 02)               THEN SommerZeit := 1 ;
       ELSIF (Jahrestag = Tag_Wechsel_WZ) AND (Stunde <= 02)               THEN SommerZeit := 1 ; 
       END_IF ;
       
    // --------------------------------------------------------------------------------------
    END_FUNCTION  
    // --------------------------------------------------------------------------------------

  5. #5
    Der Basti ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.01.2015
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich hab leider noch nie mit SCL gearbeitet und hab dein Programm kopiert und in meins eingefügt und bekomme jetzt ungefähr 150 Fehlermeldungen.

  6. #6
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    So ist der Baustein damit du ihn in TIA importieren kannst.

    Ich habe Den Know_how_protect entfernt damit man ihn beobachten kann.
    Ausserdem ist der aufruft von RD_SYS_T in TIA etwas anders als in Step7

    Code:
    FUNCTION FC440 : VOID                                        // UP Tag, Monat, Jahr etc. von Systemuhr abfragenTitle   = 'UP Tag, Monat, Jahr etc. von Systemuhr abfragen'  // UUP Tag, Monat, Jahr etc. von Systemuhr abfragen
    AUTHOR  : 'Larry'
    VERSION : '1.0'     //    30.09.2014
    FAMILY  : 'LL_Std'
    // --------------------------------------------------------------------------------------
    //     Bausteinparameter
    // --------------------------------------------------------------------------------------
    VAR_INPUT 
    END_VAR
    VAR_IN_OUT 
    END_VAR
    VAR_OUTPUT
       Jahr              : INT ;       // Jahr des Vorgabe-Date's
       Monat             : INT ;       // Monat des Vorgabe-Date's
       Tag               : INT ;       // Tag des Vorgabe-Date's
       Wochentag         : INT ;       // Wochentag des Vorgabe-Date's  [1=So ... 7=Sa]
       Schaltjahr        : INT ;       // =1: Vorgabe-Date ist ein Schaltjahr
       Jahrestag         : INT ;       // Tag im Jahr des Vorgabe-Date's
       Kalenderwoche     : INT ;       // Kalenderwoche des Vorgabe-Date's
       SommerZeit        : INT ;       // =1: Vorgabe-Date ist innerhalb der Sommerzeit
    END_VAR
    VAR_TEMP
       Date_Time : DT ;                 // Date_and_Time für Umwandlung 
          at_Date_Time AT Date_Time : ARRAY [0..7] OF BYTE ;
       Error           : INT ; 
       b_Jahr : INT ;
       Anz_SJ : INT ; 
       Diff_J : INT ;
       h_Wochentag : INT ;
       h_Datum     : INT ;
       
       Tag_Wechsel_SZ   : INT ;          // - Jahrestag, an dem nach Sommerzeit gewechselt wird
       Tag_Wechsel_WZ   : INT ;          // - Jahrestag, an dem nach Winterzeit gewechselt wird
       Stunde           : INT ;
    END_VAR
    // --------------------------------------------------------------------------------------
    //     Anweisungsteil
    // --------------------------------------------------------------------------------------
    BEGIN
    	Error := RD_SYS_T(Date_Time);
      WochenTag := BCD_TO_INT (at_Date_Time [7] AND 2#0000_1111) ;
      b_Jahr := BCD_TO_INT (at_Date_Time [0]) ; 
         IF b_Jahr < 90 THEN Jahr := 2000 + b_Jahr ; ELSE Jahr := 1900 + b_Jahr ; END_IF ;
      Monat  := BCD_TO_INT (at_Date_Time [1]) ;
      Tag    := BCD_TO_INT (at_Date_Time [2]) ;
      
      Schaltjahr := 0 ; IF ((Jahr MOD 4) = 0) AND (NOT ((Jahr MOD 100) = 0) OR ((Jahr MOD 400) = 0)) THEN Schaltjahr := 1 ; END_IF ;
      Jahrestag := Tag ;
         IF Monat >  1 THEN Jahrestag := Jahrestag + 31 ; END_IF ;
         IF Monat >  2 THEN Jahrestag := Jahrestag + 28 + Schaltjahr ; END_IF ;
         IF Monat >  3 THEN Jahrestag := Jahrestag + 31 ; END_IF ;
         IF Monat >  4 THEN Jahrestag := Jahrestag + 30 ; END_IF ;
         IF Monat >  5 THEN Jahrestag := Jahrestag + 31 ; END_IF ;
         IF Monat >  6 THEN Jahrestag := Jahrestag + 30 ; END_IF ;
         IF Monat >  7 THEN Jahrestag := Jahrestag + 31 ; END_IF ;
         IF Monat >  8 THEN Jahrestag := Jahrestag + 31 ; END_IF ;
         IF Monat >  9 THEN Jahrestag := Jahrestag + 30 ; END_IF ;
         IF Monat > 10 THEN Jahrestag := Jahrestag + 31 ; END_IF ;
         IF Monat > 11 THEN Jahrestag := Jahrestag + 30 ; END_IF ;
         
       Kalenderwoche := (Jahrestag + 7 + 3 - Wochentag) / 7 ;
      
    // Sommerzeit ?  
       Stunde := BCD_TO_INT (at_Date_Time [3]) ;
     
       h_Datum := Anz_SJ + (Diff_J * 365) + 83 ;  // 83 = Jahrestag vom 24.03. im nicht-Schaltjahr
       h_Wochentag := 6 - (h_Datum MOD 7) ;
       IF (h_Wochentag = 0) THEN h_Wochentag := 7 ; END_IF ;
           
       Tag_Wechsel_SZ := 83 + h_Wochentag ;
           
       h_Datum := Anz_SJ + (Diff_J * 365) + 297 ;  // 297 = Jahrestag vom 24.10. im nicht-Schaltjahr
       h_Wochentag := 6 - (h_Datum MOD 7) ;
       IF (h_Wochentag = 0) THEN h_Wochentag := 7 ; END_IF ;
           
       Tag_Wechsel_WZ := 297 + h_Wochentag ;
      
       SommerZeit := 0 ;
       IF    (Jahrestag > Tag_Wechsel_SZ) AND (Jahrestag < Tag_Wechsel_WZ) THEN SommerZeit := 1 ;
       ELSIF (Jahrestag = Tag_Wechsel_SZ) AND (Stunde >= 02)               THEN SommerZeit := 1 ;
       ELSIF (Jahrestag = Tag_Wechsel_WZ) AND (Stunde <= 02)               THEN SommerZeit := 1 ; 
       END_IF ;
       
    // --------------------------------------------------------------------------------------
    END_FUNCTION  
    // ---------------

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von Der Basti Beitrag anzeigen
    Ich hab leider noch nie mit SCL gearbeitet
    Auch in AWL/FUP/KOP machbar:
    Du könntest eine Struktur oder UDT anlegen, welche den Byte-Aufbau des Datentyps DATE_AND_TIME abbildet (siehe TIA Hilfe), Deine Zeit auf diese Struktur kopieren, auf die Einzelbestandteile direkt symbolisch zugreifen, ggf. von BCD zu Dezimal wandeln, in CHAR wandeln und in Deinen String schreiben.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Jetzt ärgere ich mich gerade darüber, dass ich das Beispiel gepostet habe :
    Zitat Zitat von Der Basti Beitrag anzeigen
    Ich hab leider noch nie mit SCL gearbeitet und hab dein Programm kopiert und in meins eingefügt und bekomme jetzt ungefähr 150 Fehlermeldungen.
    Dann bin ich ja mal gespannt, ob du nach der Änderung von René mit dem Baustein nun etwas anfangen kannst und vor Allem : ob du die von dir noch benötigten String-Funktionen da hinein bekommst.

    Gruß
    Larry

  9. #9
    Der Basti ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.01.2015
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Habe es hin bekommen. Vielen dank für eure schnelle Hilfe

Ähnliche Themen

  1. Step 7 String konvertieren
    Von phivog im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 14.01.2015, 11:30
  2. DATE_AND_TIME von S7 nach WAGO konvertieren
    Von RSH-Rainer im Forum WAGO
    Antworten: 3
    Letzter Beitrag: 16.10.2014, 18:30
  3. DATE_AND_TIME in String konvertieren
    Von toto45 im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 14.03.2012, 13:58
  4. String nach Date_and_Time konvertieren
    Von McFly82 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.08.2011, 14:16
  5. String-->date_and_time
    Von rolusch im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 14.12.2009, 09:16

Stichworte

Lesezeichen

Berechtigungen

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