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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: DATE_AND_TIME in String konvertieren

  1. #1
    Registriert seit
    08.12.2010
    Beiträge
    62
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    bezüglich eines SMS Versand mit CP341 und MD720-3 möchte ich die Uhrzeit und Datum mitversenden.
    Wie kann ich den Datentyp DATE_AND_TIME in ein String konvertieren. Oder welche Möglcihkeiten gibt es die Uhrzeit und Datum in ein String zu speichern?

    Vielen Dank schonmal
    Zitieren Zitieren DATE_AND_TIME in String konvertieren  

  2. #2
    Registriert seit
    28.02.2006
    Ort
    Ostsee 5 min zum Strand
    Beiträge
    780
    Danke
    92
    Erhielt 110 Danke für 98 Beiträge

    Standard

    Kennst du Oscat.Lib ? Dort gibt es den Baustein DT_TO_STRF

    DT_TO_STRF konvertiert einen DATETIME Wert in eine formatierte Zeichenkette.
    Gruß von der Ostsee

    Nordischerjung
    _____________________

    Wenn man seinem Paßbild ähnlich zu sehen beginnt, sollte man schleunigst Urlaub machen. (Vico Torriani, schw. Entertainer)

    Ich habe eine Diät gemacht und fettem Essen und Alkohol abgeschworen - in zwei Wochen verlor ich 14 Tage. (Joe E. Lewis)

  3. #3
    Registriert seit
    06.09.2008
    Beiträge
    45
    Danke
    8
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Hallo,
    müsste mit den stdlibs/iec fc5 und fc2 ebenfalls funktionieren.

    mfg Erick
    Zitieren Zitieren DATE_AND_TIME in String konvertieren  

  4. #4
    Registriert seit
    30.06.2007
    Ort
    Minden (Westf.)
    Beiträge
    178
    Danke
    42
    Erhielt 21 Danke für 21 Beiträge

    Standard

    Code:
    FUNCTION_BLOCK  FB202
    TITLE = 'DT_To_STR'
    // 
    VERSION : '1.1'
    AUTHOR  : SKSE
    NAME    : DT2STR
    FAMILY  : Lib10
    
    VAR_INPUT
      DtValue : DATE_AND_TIME ;
        atDT AT DtValue: STRUCT
            Jahr    : BYTE ;
            Monat   : BYTE ;
            Tag     : BYTE ;
            Stunde  : BYTE ;
            Minute  : BYTE ;
            Sekunde : BYTE ;
            MSD     : BYTE ;
            LSDWT   : BYTE ;
        END_STRUCT;
    END_VAR
    VAR_OUTPUT
        DtStr : STRING[8] ;
    END_VAR
    VAR
        tJahr  : STRING[5] ;
        tMonat : STRING[3] ;
        tTag   : STRING[3] ;
    END_VAR
    
    BEGIN
    
        (* Variablen initialisieren *)
        DtStr := '00000000';
        (* Jahr wandeln *)
        tJahr := DELETE (IN:= I_STRNG(2000 + BCD_TO_INT(atDT.Jahr)), L:= 1, P:= 1);
        (* Monat wandeln *)
        IF BCD_TO_INT(atDT.Monat) < 10 THEN
            tMonat := CONCAT(IN1 := '0' , IN2 := DELETE(IN:= I_STRNG(BCD_TO_INT(atDT.Monat)), L:= 1, P:= 1));
        ELSE ;
            tMonat := DELETE(IN:= I_STRNG(BCD_TO_INT(atDT.Monat)), L:= 1, P:= 1);
        END_IF ;
        (* Tag wandeln *)
        IF BCD_TO_INT(atDT.Tag) < 10 THEN
            tTag := CONCAT(IN1 := '0' , IN2 := DELETE (IN:= I_STRNG(BCD_TO_INT(atDT.Tag)), L:= 1, P:= 1));
        ELSE ;
            tTag := DELETE (IN:= I_STRNG(BCD_TO_INT(atDT.Tag)), L:= 1, P:= 1);
        END_IF ;
        (* Zeichenketten zusammenführen, Ergebnis ausgeben *)
        DtStr   := CONCAT(IN1 := tJahr , IN2 := CONCAT(IN1 := tMonat , IN2 := tTag));
    
    END_FUNCTION_BLOCK
    Gruß
    Stefan


    Zitieren Zitieren Oder so.......  

  5. #5
    toto45 ist offline Benutzer
    Themenstarter
    Registriert seit
    08.12.2010
    Beiträge
    62
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Stefan K

    muss ich bei deiner Lösung nur DtValue als DATE_AND_TIME übergeben und kann
    Bin da absoluter Neuling. Wir bei dieser Lösung nur dieser FB202 benötigt?
    Wie kann ich dann auf die Uhrzeit und die Tage zugreifen?

    Vielen Dank schon mal!!

  6. #6
    Registriert seit
    30.06.2007
    Ort
    Minden (Westf.)
    Beiträge
    178
    Danke
    42
    Erhielt 21 Danke für 21 Beiträge

    Standard

    Hallo,
    es muss nur ein Date_and_Time übergeben werden.
    Der FB benutzt außerdem die Bausteine: CONCAT, I_STRNG, DELETE aus der S7 Standard Library. Diese werden aber deinem S7-Projekt hinzugefügt, wenn du die SCL-Quelle übersetzt.
    Allerdings ist hier die Uhrzeit nicht enthalten. Die ist aber in der Stuktur:
    Code:
        atDT AT DtValue: STRUCT
            Jahr    : BYTE ;
            Monat   : BYTE ;
            Tag     : BYTE ;
            Stunde  : BYTE ;
            Minute  : BYTE ;
            Sekunde : BYTE ;
            MSD     : BYTE ;
            LSDWT   : BYTE ;
        END_STRUCT;
    enthalten. Du mußt eigentlich den Baustein lediglich um die Uhrzeit nach dem gleichen Schema, wie Monat oder Tag erweitern und dabei nicht vergessen, die String-Länge der Ausgangsvariablen anzupassen.

    Der FB stammt aus einer Druckeransteuerung. Für deine Anforderungen müsstest du evtl. noch das Format anpassen, so wie der Baustein oben steht, gibt er das Datum im folgenden Format aus:

    '20110117'

    für heute.

    Wenn du bis heute-abend warten kannst, kann ich den Baustein auch nach deinen Anforderungen anpassen. Oder du nutzt den Baustein aus der Oscat-Lib (siehe #2), dort kann man die Ausgabe formatieren.

    Gruß
    Stefan
    Geändert von StefanK (17.01.2011 um 13:52 Uhr)


    Zitieren Zitieren nur Datum...  

  7. #7
    toto45 ist offline Benutzer
    Themenstarter
    Registriert seit
    08.12.2010
    Beiträge
    62
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo

    das mit dem Oscat habe ich probiert aber irgendwas mache ich da falsch. Wäre super wenn du denn FB so anpassen könntest.

    Ich danke dir schon mal.

    Bei mir sollte der String folgendermaßen aussehen: 17-01-2010 15:22 Uhr

  8. #8
    Registriert seit
    30.06.2007
    Ort
    Minden (Westf.)
    Beiträge
    178
    Danke
    42
    Erhielt 21 Danke für 21 Beiträge

    Standard

    Hallo toto45,
    das sollte kein Problem sein. könnte jetzt allerdings ein bisschen dauern, da ich zwischendurch noch ein bisschen Geld verdienen muss

    Die Oscat-Lib solltest du dir dennoch anschauen, da ist sehr viel nützliches drin.

    Gruß


    Zitieren Zitieren ok  

  9. #9
    Registriert seit
    30.06.2007
    Ort
    Minden (Westf.)
    Beiträge
    178
    Danke
    42
    Erhielt 21 Danke für 21 Beiträge

    Standard

    So, habs noch mal schnell dazwischengeschoben:

    Code:
    FUNCTION_BLOCK  FB203
    TITLE = 'DaT_To_STR'
    // 
    // Uses: CONCAT, I_STRNG, DELETE from the S7 Standard Library
    // 
    VERSION : '1.0'
    AUTHOR  : SKSE
    NAME    : DaT2STR
    FAMILY  : Lib10
    
    VAR_INPUT
      DtValue : DATE_AND_TIME ;
        atDT AT DtValue: STRUCT
            Jahr    : BYTE ;
            Monat   : BYTE ;
            Tag     : BYTE ;
            Stunde  : BYTE ;
            Minute  : BYTE ;
            Sekunde : BYTE ;
            MSD     : BYTE ;
            LSDWT   : BYTE ;
        END_STRUCT;
    END_VAR
    VAR_OUTPUT
        DtStr : STRING[20] ;
    END_VAR
    VAR
        tJahr  : STRING[5] ;
        tMonat : STRING[3] ;
        tTag   : STRING[3] ;
        tStd   : STRING[3] ;
        tMin   : STRING[3] ;
    END_VAR
    
    BEGIN
    
        (* Variablen initialisieren *)
        DtStr := '0000-00-00 00:00 Uhr';
        (* Jahr wandeln *)
        tJahr := DELETE (IN:= I_STRNG(2000 + BCD_TO_INT(atDT.Jahr)), L:= 1, P:= 1);
        (* Monat wandeln *)
        IF BCD_TO_INT(atDT.Monat) < 10 THEN
            tMonat := CONCAT(IN1 := '0' , IN2 := DELETE(IN:= I_STRNG(BCD_TO_INT(atDT.Monat)), L:= 1, P:= 1));
        ELSE ;
            tMonat := DELETE(IN:= I_STRNG(BCD_TO_INT(atDT.Monat)), L:= 1, P:= 1);
        END_IF ;
        (* Tag wandeln *)
        IF BCD_TO_INT(atDT.Tag) < 10 THEN
            tTag := CONCAT(IN1 := '0' , IN2 := DELETE (IN:= I_STRNG(BCD_TO_INT(atDT.Tag)), L:= 1, P:= 1));
        ELSE ;
            tTag := DELETE (IN:= I_STRNG(BCD_TO_INT(atDT.Tag)), L:= 1, P:= 1);
        END_IF ;
        (* Stunden wandeln *)
        IF BCD_TO_INT(atDT.Stunde) < 10 THEN
            tStd := CONCAT(IN1 := '0' , IN2 := DELETE (IN:= I_STRNG(BCD_TO_INT(atDT.Stunde)), L:= 1, P:= 1));
        ELSE ;
            tStd := DELETE (IN:= I_STRNG(BCD_TO_INT(atDT.Stunde)), L:= 1, P:= 1);
        END_IF ;    
        (* Minuten wandeln *)
        IF BCD_TO_INT(atDT.Minute) < 10 THEN
            tMin := CONCAT(IN1 := '0' , IN2 := DELETE (IN:= I_STRNG(BCD_TO_INT(atDT.Minute)), L:= 1, P:= 1));
        ELSE ;
            tMin := DELETE (IN:= I_STRNG(BCD_TO_INT(atDT.Minute)), L:= 1, P:= 1);
        END_IF ;    
        (* Zeichenketten zusammenführen, Ergebnis ausgeben *)
        DtStr   := CONCAT(IN1 := tJahr  , IN2 := '-');
        DtStr   := CONCAT(IN1 := DtStr  , IN2 := tMonat);
        DtStr   := CONCAT(IN1 := DtStr  , IN2 := '-');
        DtStr   := CONCAT(IN1 := DtStr  , IN2 := tTag);
        DtStr   := CONCAT(IN1 := DtStr  , IN2 := ' ');
        DtStr   := CONCAT(IN1 := DtStr  , IN2 := tStd);
        DtStr   := CONCAT(IN1 := DtStr  , IN2 := ':');
        DtStr   := CONCAT(IN1 := DtStr  , IN2 := tMin);
        DtStr   := CONCAT(IN1 := DtStr  , IN2 := ' Uhr');
    
    END_FUNCTION_BLOCK
    Ist eigentlich nicht kompliziert.
    Den Baustein aus der Oscat-Lib habe ich mir mal kurz angeschaut, da musst du neben der eigentlichen Quelle noch eine (meiner Meinung nach große) Anzahl zusätzlicher Quellen (Funktionen & Datentypen) in dein Projekt kopieren. Welche, steht im Header der SCL-Quelle.

    Gruß
    Stefan


    Zitieren Zitieren fertig  

  10. #10
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nachfolgend ein Programmbeispiel für das Auslesen der Systemzeit der SPS und das Abspeichern der Systemzeit in einem STRING:

    Code:
    FUNCTION_BLOCK FB 100
    TITLE =Systemzeit
    //16
    AUTHOR : Kai
    FAMILY : SPSForum
    NAME : '41995'
    VERSION : 1.0
     
    VAR_OUTPUT
      OUT_Systemzeit : STRING  [16 ] := '00-00-2000 00:00'; 
    END_VAR
    VAR_TEMP
      TEMP_DBO_Register : WORD ; 
      TEMP_AR1_Register : DWORD ; 
      TEMP_Systemzeit : DATE_AND_TIME ; 
      TEMP_RETVAL : INT ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =Register sichern
     
          L     DBNO; // DBO-Register
          T     #TEMP_DBO_Register; 
     
          TAR1  ; // AR1-Register
          T     #TEMP_AR1_Register;
     
    NETWORK
    TITLE =Systemzeit (DATE_AND_TIME)
    //DATE_AND_TIME - Alle Angaben im BCD-Format
    //
    //Byte 0 -  Jahr         - 0 bis 99
    //Byte 1 -  Monat        - 1 bis 12
    //Byte 2 -  Tag          - 1 bis 31
    //Byte 3 -  Stunde       - 0 bis 23
    //Byte 4 -  Minute       - 0 bis 59
    //Byte 5 -  Sekunde      - 0 bis 59
    //Byte 6 -  Millisekunde - 0 bis 999
    //Byte 7 -  Wochentag    - 1 Sonntag bis 7 Samstag
    //   
     
          CALL SFC    1 (
               RET_VAL                  := #TEMP_RETVAL,
               CDT                      := #TEMP_Systemzeit);
          NOP   0; 
     
    NETWORK
    TITLE =Systemzeit (DATE_AND_TIME) -> Systemzeit (STRING)
    //ASCII-Zeichensatz
    //
    //DEZ 48 = HEX 30 = CHAR '0'
    //DEZ 49 = HEX 31 = CHAR '1'
    //DEZ 50 = HEX 32 = CHAR '2'
    //DEZ 51 = HEX 33 = CHAR '3'
    //DEZ 52 = HEX 34 = CHAR '4'
    //DEZ 53 = HEX 35 = CHAR '5'
    //DEZ 54 = HEX 36 = CHAR '6'
    //DEZ 55 = HEX 37 = CHAR '7'
    //DEZ 56 = HEX 38 = CHAR '8'
    //DEZ 57 = HEX 39 = CHAR '9'
    //   
    // Systemzeit
     
          L     P##TEMP_Systemzeit; // Systemzeit (POINTER)
          LAR1  ; 
     
    // Systemzeit Tag
     
          L     LB [AR1,P#2.0]; // Systemzeit Tag
          SRW   4; 
          L     48; 
          +I    ; 
          T     #OUT_Systemzeit[1]; // Systemzeit Tag Zehnerstelle
     
          L     LB [AR1,P#2.0]; // Systemzeit Tag
          SLW   12; 
          SRW   12; 
          L     48; 
          +I    ; 
          T     #OUT_Systemzeit[2]; // Systemzeit Tag Einerstelle
     
    // Systemzeit Monat
     
          L     LB [AR1,P#1.0]; // Systemzeit Monat
          SRW   4; 
          L     48; 
          +I    ; 
          T     #OUT_Systemzeit[4]; // Systemzeit Monat Zehnerstelle
     
          L     LB [AR1,P#1.0]; // Systemzeit Monat
          SLW   12; 
          SRW   12; 
          L     48; 
          +I    ; 
          T     #OUT_Systemzeit[5]; // Systemzeit Monat Einerstelle
     
    // Systemzeit Jahr
     
          L     LB [AR1,P#0.0]; // Systemzeit Jahr
          SRW   4; 
          L     48; 
          +I    ; 
          T     #OUT_Systemzeit[9]; // Systemzeit Jahr Zehnerstelle
     
          L     LB [AR1,P#0.0]; // Systemzeit Jahr
          SLW   12; 
          SRW   12; 
          L     48; 
          +I    ; 
          T     #OUT_Systemzeit[10]; // Systemzeit Jahr Einerstelle
     
    // Systemzeit Stunde
     
          L     LB [AR1,P#3.0]; // Systemzeit Stunde
          SRW   4; 
          L     48; 
          +I    ; 
          T     #OUT_Systemzeit[12]; // Systemzeit Stunde Zehnerstelle
     
          L     LB [AR1,P#3.0]; // Systemzeit Stunde
          SLW   12; 
          SRW   12; 
          L     48; 
          +I    ; 
          T     #OUT_Systemzeit[13]; // Systemzeit Stunde Einerstelle
     
    // Systemzeit Minute
     
          L     LB [AR1,P#4.0]; // Systemzeit Minute
          SRW   4; 
          L     48; 
          +I    ; 
          T     #OUT_Systemzeit[15]; // Systemzeit Minute Zehnerstelle
     
          L     LB [AR1,P#4.0]; // Systemzeit Minute
          SLW   12; 
          SRW   12; 
          L     48; 
          +I    ; 
          T     #OUT_Systemzeit[16]; // Systemzeit Minute Einerstelle
     
    NETWORK
    TITLE =Register wiederherstellen
     
          AUF   DB [#TEMP_DBO_Register]; // DBO-Register
     
          L     #TEMP_AR1_Register; // AR1-Register
          LAR1  ; 
     
    END_FUNCTION_BLOCK
    Gruß Kai
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg VAT.jpg (285,7 KB, 122x aufgerufen)
    Angehängte Dateien Angehängte Dateien

  11. Folgende 2 Benutzer sagen Danke zu Kai für den nützlichen Beitrag:

    fmayer (09.01.2014),olddragon (14.03.2012)

Ähnliche Themen

  1. String nach Date_and_Time konvertieren
    Von McFly82 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.08.2011, 14:16
  2. string in int ode rreal konvertieren
    Von Bensen83 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 06.12.2010, 10:25
  3. String-->date_and_time
    Von rolusch im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 14.12.2009, 09:16
  4. Antworten: 5
    Letzter Beitrag: 11.09.2009, 08:04
  5. WinnCC String in Ulong konvertieren
    Von Steffen44 im Forum HMI
    Antworten: 0
    Letzter Beitrag: 21.03.2006, 08:17

Lesezeichen

Berechtigungen

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