Date To String

Hallo,
und dein Date-Format entspricht wahrscheinlich nicht dem aktuellen Tagesdatum ...? Wenn doch, dann wäre es relativ einfach - wenn nicht, dann mußt du dir die Date-Variable erstmal in TT und MM und JJJJ umrechnen.
Ich hätte dafür und auch für das Umwandeln in String Code-Schnipsel - allerdings nur in SCL. die du dann selber noch zusammenbauen müßtest. Kannst du damit etwas anfangen ?

Gruß
LL
 
Also denn ...

Der folgende Code ist eine FC und wandelt einen DATE in seine Einbestandteile :
Code:
FUNCTION FC431 : VOID                      // UP Date nach Tag, Monat, Jahr etc. umwandeln
Title   = 'UP Date nach TTMMJJ umwandeln'  
 
VAR_INPUT 
   IN_Date : DATE ;                 // Datum für Umwandlung 
      i_Date AT IN_Date : INT ;
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 ;       // Schaltjahr des Vorgabe-Date's
   Jahrestag         : INT ;       // Tag im Jahr des Vorgabe-Date's
   Kalenderwoche     : INT ;       // Kalenderwoche des Vorgabe-Date's
END_VAR
VAR_TEMP
   Anz_SJ : INT ; 
   Diff_J : INT ;
   JTag   : INT ;
END_VAR
 
 
BEGIN
   Jahr := (i_Date / 365) + 1990 ;
   Schaltjahr := 0 ; IF (Jahr MOD 4) = 0 THEN Schaltjahr := 1 ; END_IF ;
   
   Diff_J := Jahr - 1990;
   Anz_SJ := Diff_J / 4 ;
   Jahrestag := i_Date - Anz_SJ - (Diff_J * 365) ;
   Wochentag := (i_date MOD 7) + 1 ;
   Kalenderwoche := (Jahrestag + 7 + 3 - Wochentag) / 7 ;
  
   JTag := Jahrestag ;
   IF (JTag > 0) AND (JTag <= 31) THEN 
      Monat := 1 ; Tag := JTag ;
   END_IF ; 
   JTag := JTag - 31 ;
   IF (JTag > 0) AND (JTag <= (28 + Schaltjahr)) THEN 
      Monat := 2 ; Tag := JTag ;
   END_IF ; 
   JTag := JTag - 28 - Schaltjahr ;
   IF (JTag > 0) AND (JTag <= 31) THEN 
      Monat := 3 ; Tag := JTag ;
   END_IF ; 
   JTag := JTag - 31 ;
   IF (JTag > 0) AND (JTag <= 30) THEN 
      Monat := 4 ; Tag := JTag ;
   END_IF ; 
   JTag := JTag - 30 ;
   IF (JTag > 0) AND (JTag <= 31) THEN 
      Monat := 5 ; Tag := JTag ;
   END_IF ; 
   JTag := JTag - 31 ;
   IF (JTag > 0) AND (JTag <= 30) THEN 
      Monat := 6 ; Tag := JTag ;
   END_IF ; 
   JTag := JTag - 30 ;
   IF (JTag > 0) AND (JTag <= 31) THEN 
      Monat := 7 ; Tag := JTag ;
   END_IF ; 
   JTag := JTag - 31 ;
   IF (JTag > 0) AND (JTag <= 31) THEN 
      Monat := 8 ; Tag := JTag ;
   END_IF ; 
   JTag := JTag - 31 ;
   IF (JTag > 0) AND (JTag <= 30) THEN 
      Monat := 9 ; Tag := JTag ;
   END_IF ; 
   JTag := JTag - 30 ;
   IF (JTag > 0) AND (JTag <= 31) THEN 
      Monat := 10 ; Tag := JTag ;
   END_IF ; 
   JTag := JTag - 31 ;
   IF (JTag > 0) AND (JTag <= 30) THEN 
      Monat := 11 ; Tag := JTag ;
   END_IF ; 
   JTag := JTag - 30 ;
   IF (JTag > 0) AND (JTag <= 31) THEN 
      Monat := 12 ; Tag := JTag ;
   END_IF ; 
  
END_FUNCTION
des weiteren baut dir der folgende Code-Schnipsel den String (bei mir im Format TT.MM.JJ)
Code:
   hString := '' ; Datum_String := '' ;
   
   hString := RIGHT (IN:= INT_TO_STRING (IN:=100 + TT) , l:=2) ;    
     Datum_String := CONCAT (IN1:=Datum_String , IN2:=hString) ;
   hString := ':' ;    
     Datum_String := CONCAT (IN1:=Datum_String , IN2:=hString) ;
   hString := RIGHT (IN:= INT_TO_STRING (IN:=100 + MM) , l:=2) ;    
     Datum_String := CONCAT (IN1:=Datum_String , IN2:=hString) ;
   hString := ':' ;    
     Datum_String := CONCAT (IN1:=Datum_String , IN2:=hString) ;
   hString := RIGHT (IN:= INT_TO_STRING (IN:= JJ) , l:=2) ;    
     Datum_String := CONCAT (IN1:=Datum_String , IN2:=hString) ;
Viel Spaß und Erfolg damit ...

Gruß
LL
 
Hallo,
und dein Date-Format entspricht wahrscheinlich nicht dem aktuellen Tagesdatum ...? Wenn doch, dann wäre es relativ einfach -

genau dieses problemhabe ich derzeit
Ich muss das aktuelle SPS Datum in einen String TT.MM.JJJJ wandeln.

könntest du mir einen Tipp geben wie das relativ einfach geht, danke

van
 
@LL
ich habe dein ursprungs posting so gedeutet das es da einen ganz einfachen weg gibt und dein scl code der harte weg ist

habs aber mittlerweile selber hin bekommen, zwar nicht schön aber es funktioniert

@jabba
meinst du DT_TO_STRF? Die Funktion habe ich gerade auch gefunden, und ich habe jedes bit einzelnd aus dem DT gefummelt....
Muss ich am Montag gleich mal testen.

danke

van
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@jabba
meinst du DT_TO_STRF? Die Funktion habe ich gerade auch gefunden, und ich habe jedes bit einzelnd aus dem DT gefummelt....
Muss ich am Montag gleich mal testen.

Ich hab jetzt nicht genau nachgesehen womit dies geht, aber ohne nachzusehen viel mir da direkt di OSCAT.LiB ein. Die Jungs machen tolle Arbeit und warum soll man das Rad neu erfinden.
Mittlerweile hab ich für vieles meine eigenen Funktionen, aber hätte es die OSCAT schon früher gegeben hätte ich mir bestimmt einige Arbeit sparen können.

Deshalb auch wenn an falscher Stelle, einen Dank an die Jungs der OSCAT-Fraktion.
 
@LL
ich habe dein ursprungs posting so gedeutet das es da einen ganz einfachen weg gibt und dein scl code der harte weg ist.

Ist ja eigentlich alles gesagt - nur zu dieser Aussage noch einmal ...
SCL ist bei solchen Sachen nicht "der harte Weg" sondern aus meiner Sicht eher "der gute Weg". Ich habe zu diesen und ähnlichen Funktionen in aller Regel nur SCL-Code - in AWL ist mir das viel zu kompliziert zu Erstellen.

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe zu diesen und ähnlichen Funktionen in aller Regel nur SCL-Code - in AWL ist mir das viel zu kompliziert zu Erstellen.

Gruß
LL

Ja Du glücklicher darfst das ja auch. Ich würde gerne mehr mit SCL machen ist aber bei allen Kunden verboten. Den aktuellen Auftrag nehme ich mal zum üben, SCL ist zwar verboten aber AWL nicht. Wenn die meckern wollen lösche ich die Quelle und die können mich mal.
Ist die Maschine aus dem anderen Tread mit Sicherheit, permanent kommen da neue Vorgaben, aber billig solls sein. Nachdem mein Programm in KOP/FUP fertig war , kam dann raus das alles in Graph sein sollte.:sw9:

Sorry ich schweife vom Thema ab...:-D

Gibt ja halt Sachen die in SCL
1. viel einfacher zu schreiben sind
2. viel einfacher nachzuvollziehen sind
aber
S7 macht das ein RiesenBaustein draus.
 
Hallo Larry,
ich habe dein Code in mein Programm eingesetzt und habe festgestellt, dass Jahrestag falsch berechnet wird. Z.B. für den 13.04.16 wird der Jahrestag 103 anstatt 104 berechnet. Dadurch stimmt auch String später nicht und wird als 12.04.16 angezeigt. Ich weiß leider nicht wie du auf die Berechnung Jahrestag gekommen bist. Kannst du mir dabei helfen? Ich könnte JTag := Jahrestag+1 nehmen aber weiß dann nicht ob ich später dadurch probleme bekomme.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
das ist mir auch irgendwann schon einmal aufgefallen und in einem anderen Thread habe ich dazu auch schon einmal den geänderten Code gepostet. Ist aber kein Problem, dass hier auch noch einmal zu tun :
Code:
FUNCTION FC437 : VOID                      // UP DATE nach Tag, Monat, Jahr etc. umwandelnTitle   = 'UP DATE nach TTMMJJ umwandeln'  // UP DATE nach Tag, Monat, Jahr etc. umwandeln
AUTHOR  : 'Larry'
VERSION : '1.4'     //    30.09.2014
FAMILY  : 'LL_Std'
KNOW_HOW_PROTECT

//     Bausteinparameter

VAR_INPUT 
   IN_Date : DATE ;                 // Datum für Umwandlung 
      w_Date AT IN_Date : WORD ; 
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
   c_Date : DINT ; 
   Anz_SJ : INT ; 
   Diff_J : INT ;
   JTag   : 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
END_VAR
CONST 
   c_Januar := 31 ;
   c_Februar := 28 ;
   c_Maerz := 31 ;
   c_April := 30 ;
   c_Mai := 31 ;
   c_Juni := 30 ;
   c_Juli := 31 ;
   c_August := 31 ;
   c_September := 30 ;
   c_Oktober := 31 ;
   c_November := 30 ;
   c_Dezember := 31 ;
END_CONST 
LABEL
   Chk_weiter ;
END_LABEL
 
//     Anweisungsteil

BEGIN
   c_Date := 1 + WORD_TO_DINT(w_Date) ;
   Diff_J := REAL_TO_INT(DINT_TO_REAL(c_Date) / 365.25 - 0.5) ;
   Jahr := Diff_J + 1990 ;
   Schaltjahr := 0 ; IF ((Jahr MOD 4) = 0) AND (NOT ((Jahr MOD 100) = 0) OR ((Jahr MOD 400) = 0)) THEN Schaltjahr := 1 ; END_IF ;
   
   Anz_SJ := (Diff_J + 2) / 4 ; 
   Anz_SJ := Anz_SJ - ((Diff_J - 10) / 100) ;
   Jahrestag := Schaltjahr - Anz_SJ + DINT_TO_INT(c_Date - (INT_TO_DINT(Diff_J) * 365)) ;
   Wochentag := DINT_TO_INT(c_date MOD 7) + 1 ;
   Kalenderwoche := (Jahrestag + 7 + (4 - Wochentag)) / 7 ;
   IF (Kalenderwoche = 0) THEN Kalenderwoche := 53 ; END_IF ;
   JTag := Jahrestag ;
   IF (JTag > 0) AND (JTag <= c_Januar) THEN 
      Monat := 1 ; Tag := JTag ;
   ELSE    
      JTag := JTag - c_Januar ;
      IF (JTag > 0) AND (JTag <= (c_Februar + Schaltjahr)) THEN 
         Monat := 2 ; Tag := JTag ;
      ELSE 
         JTag := JTag - c_Februar - Schaltjahr ;
         IF (JTag > 0) AND (JTag <= c_Maerz) THEN 
            Monat := 3 ; Tag := JTag ;
         ELSE    
            JTag := JTag - c_Maerz ;
            IF (JTag > 0) AND (JTag <= c_April) THEN 
               Monat := 4 ; Tag := JTag ;
            ELSE 
               JTag := JTag - c_April ;
               IF (JTag > 0) AND (JTag <= c_Mai) THEN 
                  Monat := 5 ; Tag := JTag ;
               ELSE 
                  JTag := JTag - c_Mai ;
                  IF (JTag > 0) AND (JTag <= c_Juni) THEN 
                     Monat := 6 ; Tag := JTag ;
                  ELSE 
                     JTag := JTag - c_Juni ;
                     IF (JTag > 0) AND (JTag <= c_Juli) THEN 
                        Monat := 7 ; Tag := JTag ;
                     ELSE 
                        JTag := JTag - c_Juli ;
                        IF (JTag > 0) AND (JTag <= c_August) THEN 
                           Monat := 8 ; Tag := JTag ;
                        ELSE 
                           JTag := JTag - c_August ;
                           IF (JTag > 0) AND (JTag <= c_September) THEN 
                              Monat := 9 ; Tag := JTag ;
                           ELSE 
                              JTag := JTag - c_September ;
                              IF (JTag > 0) AND (JTag <= c_Oktober) THEN 
                                  Monat := 10 ; Tag := JTag ;
                              ELSE 
                                 JTag := JTag - c_Oktober ;
                                 IF (JTag > 0) AND (JTag <= c_November) THEN 
                                    Monat := 11 ; Tag := JTag ;
                                 ELSE 
                                    JTag := JTag - c_November ;
                                    IF (JTag > 0) AND (JTag <= c_Dezember) THEN 
                                       Monat := 12 ; Tag := JTag ;
                                    END_IF ; 
                                 END_IF ; 
                              END_IF ; 
                           END_IF ; 
                        END_IF ; 
                     END_IF ; 
                  END_IF ; 
               END_IF ; 
            END_IF ; 
         END_IF ; 
      END_IF ; 
   END_IF ; 
// Sommerzeit ?  
  
   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 ; END_IF ;
   
END_FUNCTION

Viel Spaß
Larry
 
Zurück
Oben