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

Ergebnis 1 bis 10 von 10

Thema: Datum umwandeln

  1. #1
    Registriert seit
    20.11.2008
    Ort
    Hochstadt
    Beiträge
    67
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    habe ein kleines Problem:
    Es soll ein String an einen Laser gesendet werden.
    Der String soll wie folht aufgebaut sein:

    Tag.monat.Jahr 1234 S1

    Also Datum in deutescher Notation Stückzäfler und einen Schichtcode.
    Wie bekomme ich am einfachsten das Datum in das richtige Format und dann in Stringformat gewandelt.
    Habe mir das Date Format auseinandergenommen, damit ich je ein Byte für Tag, monat und Jahr habe.
    Beim zusammen setzen und wandeln habe ich Probleme.
    Die Funktion SFC20 liefert mir nur ein "=" zurück??.

    Gruß Peraho
    Zitieren Zitieren Datum umwandeln  

  2. #2
    Registriert seit
    04.01.2008
    Ort
    Wien
    Beiträge
    773
    Danke
    136
    Erhielt 39 Danke für 35 Beiträge

    Standard

    überprüf mal mit der Variablentabelle ob du die Zeichen richtig zurück bekommst (Byte liste).
    Den SFC20 muß man byte als Datentyp geben!
    irgendetwas ist ja immer...
    ING. Gerald Miedler

  3. #3
    peraho ist offline Benutzer
    Themenstarter
    Registriert seit
    20.11.2008
    Ort
    Hochstadt
    Beiträge
    67
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    werde jetzt vor Ort sein und das überprüfen.

    Werde mich später nochmal melden.

    Gruß Peraho

  4. #4
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.235
    Danke
    640
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Ist der SFC20 nicht der Kopierbaustein?
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  5. #5
    Registriert seit
    04.01.2008
    Ort
    Wien
    Beiträge
    773
    Danke
    136
    Erhielt 39 Danke für 35 Beiträge

    Standard

    ja, strings gehen nur so kopieren und verschieben
    irgendetwas ist ja immer...
    ING. Gerald Miedler

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Es gibt wie immer viele Möglichkeiten.
    Hier mal ein Stück Code für die Wandlung der Jahreszahl in Char "zu Fuß":

    Charvars ist eine Struct in den Statischen Variablen des FB mit folgenden Elementen:

    Charvars : STRUCT
    Jahr : WORD ;
    Wochennummer : WORD ;
    Seriennummer_1 : BYTE ;
    Seriennummer_2 : BYTE ;
    Seriennummer_3 : BYTE ;
    Seriennummer_4 : BYTE ;
    Seriennummer_5 : BYTE ;
    Anlagennummer : BYTE ;
    Revisionsnummer : BYTE ;
    END_STRUCT ;

    Ist zwar als Byte angelegt, aber ich schreibe dort den Code als Char hinein.

    Code:
          
          CALL  SFC    1
           RET_VAL:=#RetVal
           CDT    :=#Zeit                //Date_Time in Temp
    
          CALL  FC   306
           IN     :=#Zeit
           RET_VAL:=#Datum          //Date in Temp
    
    //Jahr in Stringword wandeln
          L     0
          T     #Charvars.Jahr 
    
          L     P##Zeit
          LAR1  
    
          L     B [AR1,P#0.0]               //Jahr
          T     #HM_Char2                  //Word in Temp
    
          L     #HM_Char2
          SRW   4
          L     W#16#30
          +I    
          SLW   8
          T     #HM_Char1                 //Word in Temp
    
          L     #HM_Char2
          SLW   12
          SRW   12
          L     W#16#30
          +I    
          T     #HM_Char2
    
          L     #Charvars.Jahr
          L     #HM_Char1
          OW    
          L     #HM_Char2
          OW    
          T     #Charvars.Jahr       //hier steht nun der Charcode für das Jahr drin
    Seriennummer wandeln:

    Code:
    //Seriennummer umwandeln
          L     #Seriennummer;            //DINT in IN
          DTB   ; 
          T     #Seriennummer_BCD;     //DWORD in TEMP
    
          L     P##Seriennummer_BCD; 
          LAR1  ; 
    
    //1. Zeichen
          L     LB [AR1,P#3.0]; 
          SLW   12; 
          SRW   12; 
          L     W#16#30; 
          +I    ; 
          T     #Charvars.Seriennummer_1; 
    
    //2. Zeichen
          L     LB [AR1,P#3.0]; 
          SRW   4; 
          L     W#16#30; 
          +I    ; 
          T     #Charvars.Seriennummer_2; 
    
    //3. Zeichen
          L     LB [AR1,P#2.0]; 
          SLW   12; 
          SRW   12; 
          L     W#16#30; 
          +I    ; 
          T     #Charvars.Seriennummer_3; 
    
    //2. Zeichen
          L     LB [AR1,P#2.0]; 
          SRW   4; 
          L     W#16#30; 
          +I    ; 
          T     #Charvars.Seriennummer_4; 
    
    //5. Zeichen
          L     LB [AR1,P#1.0]; 
          SLW   12; 
          SRW   12; 
          L     W#16#30; 
          +I    ; 
          T     #Charvars.Seriennummer_5;
    Das kannst du für die restlichen Daten wiederholen, für den Stückzähler kannst du aus den IEC-Funktionen die Stringwandlung nutzen und dir dann aus dem String die benötigten Zeichen herausnehmen. Immer darauf achten, daß hier jeweils BCD in Char gewandelt wird!

    Und hier noch das "Zusammenbasteln" des Strings:

    TITLE =Daten in den Schreibstring legen

    Code:
          L     P##Schreibstring;         //String [254] in  INOUT
          LAR1  ; 
          L     W [AR1,P#0.0]; // DB_Nr Schreibstring
          T     #DB_NR;                    //Int in Temp
          AUF   DB [#DB_NR]; 
          L     D [AR1,P#2.0]; // Pointer auf Datenbereich Schreibstring
          LAR1  ; // ins Adressregister
    
          L     11; //Das ist die Länge des Strings, diese ist fest!!!
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#1.0]; 
          L     #Charvars.Jahr; 
          AUF   DB [#DB_NR]; 
          T     W [AR1,P#2.0]; //0.0 und 1.0 sind Stringlänge
    
          L     #Charvars.Wochennummer; 
          AUF   DB [#DB_NR]; 
          T     W [AR1,P#4.0]; 
    
          L     #Charvars.Seriennummer_5; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#6.0]; 
          L     #Charvars.Seriennummer_4; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#7.0]; 
          L     #Charvars.Seriennummer_3; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#8.0]; 
          L     #Charvars.Seriennummer_2; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#9.0]; 
          L     #Charvars.Seriennummer_1; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#10.0]; 
    
          L     #Charvars.Anlagennummer; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#11.0]; 
    
          L     #Charvars.Revisionsnummer; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#12.0];
    Du müßtest natürlich Charvars und auch die Stringlänge (hier 11) anpassen.

    Das ganze ist in einem FB programmiert. Die Daten werden außen angelegt, Datum wird mit SFC1 ausgelesen. Das Ergebnis steht in dem an "Schreibstring" angelegten DB-String zur Verfügung und wird bei mir dann später auch an einen LASER gesendet.
    Geändert von Ralle (27.04.2009 um 08:51 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

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

    peraho (27.04.2009),SIGGI (27.04.2009)

  8. #7
    peraho ist offline Benutzer
    Themenstarter
    Registriert seit
    20.11.2008
    Ort
    Hochstadt
    Beiträge
    67
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Rainer Hönle Beitrag anzeigen
    Ist der SFC20 nicht der Kopierbaustein?
    Ja stimmt das ist der Blockmove

  9. #8
    peraho ist offline Benutzer
    Themenstarter
    Registriert seit
    20.11.2008
    Ort
    Hochstadt
    Beiträge
    67
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi Ralle,

    das ja mal ne Menge Quelltesxt. Aber da kommt man wohl bei Siemens nicht drum herum.
    Vielen Dank mal für die Hilfe. Habe heute ne Zeit lan probiert bis es lief.
    Hatte noch Probelem, dass bei der Umwandlung in String die führende null ignoriert wird. So ähnlich war es dann auch beim Stückzähler.

    Aber passt jetzt alles. Hoffe ich doch

    Vielen dank für eure Hilfe nochmal!!!!

    Gruß Peraho

  10. #9
    Registriert seit
    09.01.2009
    Ort
    Wernberg-Köblitz
    Beiträge
    203
    Danke
    17
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Es gibt wie immer viele Möglichkeiten.
    Hier mal ein Stück Code für die Wandlung der Jahreszahl in Char "zu Fuß":

    Charvars ist eine Struct in den Statischen Variablen des FB mit folgenden Elementen:

    Charvars : STRUCT
    Jahr : WORD ;
    Wochennummer : WORD ;
    Seriennummer_1 : BYTE ;
    Seriennummer_2 : BYTE ;
    Seriennummer_3 : BYTE ;
    Seriennummer_4 : BYTE ;
    Seriennummer_5 : BYTE ;
    Anlagennummer : BYTE ;
    Revisionsnummer : BYTE ;
    END_STRUCT ;

    Ist zwar als Byte angelegt, aber ich schreibe dort den Code als Char hinein.

    Code:
          
          CALL  SFC    1
           RET_VAL:=#RetVal
           CDT    :=#Zeit                //Date_Time in Temp
    
          CALL  FC   306
           IN     :=#Zeit
           RET_VAL:=#Datum          //Date in Temp
    
    //Jahr in Stringword wandeln
          L     0
          T     #Charvars.Jahr 
    
          L     P##Zeit
          LAR1  
    
          L     B [AR1,P#0.0]               //Jahr
          T     #HM_Char2                  //Word in Temp
    
          L     #HM_Char2
          SRW   4
          L     W#16#30
          +I    
          SLW   8
          T     #HM_Char1                 //Word in Temp
    
          L     #HM_Char2
          SLW   12
          SRW   12
          L     W#16#30
          +I    
          T     #HM_Char2
    
          L     #Charvars.Jahr
          L     #HM_Char1
          OW    
          L     #HM_Char2
          OW    
          T     #Charvars.Jahr       //hier steht nun der Charcode für das Jahr drin
    Seriennummer wandeln:

    Code:
    //Seriennummer umwandeln
          L     #Seriennummer;            //DINT in IN
          DTB   ; 
          T     #Seriennummer_BCD;     //DWORD in TEMP
    
          L     P##Seriennummer_BCD; 
          LAR1  ; 
    
    //1. Zeichen
          L     LB [AR1,P#3.0]; 
          SLW   12; 
          SRW   12; 
          L     W#16#30; 
          +I    ; 
          T     #Charvars.Seriennummer_1; 
    
    //2. Zeichen
          L     LB [AR1,P#3.0]; 
          SRW   4; 
          L     W#16#30; 
          +I    ; 
          T     #Charvars.Seriennummer_2; 
    
    //3. Zeichen
          L     LB [AR1,P#2.0]; 
          SLW   12; 
          SRW   12; 
          L     W#16#30; 
          +I    ; 
          T     #Charvars.Seriennummer_3; 
    
    //2. Zeichen
          L     LB [AR1,P#2.0]; 
          SRW   4; 
          L     W#16#30; 
          +I    ; 
          T     #Charvars.Seriennummer_4; 
    
    //5. Zeichen
          L     LB [AR1,P#1.0]; 
          SLW   12; 
          SRW   12; 
          L     W#16#30; 
          +I    ; 
          T     #Charvars.Seriennummer_5;
    Das kannst du für die restlichen Daten wiederholen, für den Stückzähler kannst du aus den IEC-Funktionen die Stringwandlung nutzen und dir dann aus dem String die benötigten Zeichen herausnehmen. Immer darauf achten, daß hier jeweils BCD in Char gewandelt wird!

    Und hier noch das "Zusammenbasteln" des Strings:

    TITLE =Daten in den Schreibstring legen

    Code:
          L     P##Schreibstring;         //String [254] in  INOUT
          LAR1  ; 
          L     W [AR1,P#0.0]; // DB_Nr Schreibstring
          T     #DB_NR;                    //Int in Temp
          AUF   DB [#DB_NR]; 
          L     D [AR1,P#2.0]; // Pointer auf Datenbereich Schreibstring
          LAR1  ; // ins Adressregister
    
          L     11; //Das ist die Länge des Strings, diese ist fest!!!
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#1.0]; 
          L     #Charvars.Jahr; 
          AUF   DB [#DB_NR]; 
          T     W [AR1,P#2.0]; //0.0 und 1.0 sind Stringlänge
    
          L     #Charvars.Wochennummer; 
          AUF   DB [#DB_NR]; 
          T     W [AR1,P#4.0]; 
    
          L     #Charvars.Seriennummer_5; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#6.0]; 
          L     #Charvars.Seriennummer_4; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#7.0]; 
          L     #Charvars.Seriennummer_3; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#8.0]; 
          L     #Charvars.Seriennummer_2; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#9.0]; 
          L     #Charvars.Seriennummer_1; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#10.0]; 
    
          L     #Charvars.Anlagennummer; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#11.0]; 
    
          L     #Charvars.Revisionsnummer; 
          AUF   DB [#DB_NR]; 
          T     B [AR1,P#12.0];
    Du müßtest natürlich Charvars und auch die Stringlänge (hier 11) anpassen.

    Das ganze ist in einem FB programmiert. Die Daten werden außen angelegt, Datum wird mit SFC1 ausgelesen. Das Ergebnis steht in dem an "Schreibstring" angelegten DB-String zur Verfügung und wird bei mir dann später auch an einen LASER gesendet.
    Wenn ich denn Quellcode lese, dann wird mir schwindelig!!!
    Aus welchem Buch stammt den das?
    Schwarz ist Rot und Plus ist Minus!!!
    Zitieren Zitieren Schwindelig!?  

  11. #10
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Kein Buch.Aus den unendlichen Windungen von Ralles Gehirn.
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

Ähnliche Themen

  1. Zahlen in Datum
    Von 4Josh im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 22.04.2011, 11:05
  2. Datum und Uhrzeit
    Von HDF im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 18.12.2009, 09:08
  3. Uhrzeit und Datum
    Von Gosi01 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 19.10.2007, 11:26
  4. Datum S7
    Von 1schilcher im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 18.04.2006, 12:22
  5. Datum ?
    Von edi im Forum Stammtisch
    Antworten: 5
    Letzter Beitrag: 04.03.2005, 12:10

Lesezeichen

Berechtigungen

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