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

Ergebnis 1 bis 7 von 7

Thema: SCL CHARs to Word

  1. #1
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.636
    Danke
    786
    Erhielt 654 Danke für 497 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi zusammen

    Ich habe hier ein Verständnisproblem in SCL.

    Ich habe einen Baustein in Step7 in dem ich Telegrammeteile zusammengestellt habe. Dafür musste ich immer zwei Zeichen in ein Word kopieren.

    Code:
    VAL:  L     'IO'    // zwei Zeichen       
    T     #RM_new   // direkt ins Word.
    Ich würde gerne dasselbe in SCL machen. nur komme ich mit der Konvertierung nicht klar.
    also in etwa so.
    Code:
      #RM := 'IO';
    Nur diese Implizierte Konvertierung will er nicht akzeptieren. Irgendwie verständlich da 'IO' ja eigentlich ein String ist.
    Step7 in AWL hat das aber noch so akzeptiert und hat einfach die zwei aufeinanderfolgenden Zeichen ins Word geschoben und die überflüssigen Bytes ignoriert.

    Jemand einen Tip wie ich das möglichst übersichtlich rüberkriege?

    mfG René
    Zitieren Zitieren SCL CHARs to Word  

  2. #2
    Registriert seit
    03.09.2009
    Beiträge
    129
    Danke
    15
    Erhielt 19 Danke für 19 Beiträge

    Standard

    Servus,

    ich glaube ich hätte einfach die ASCII-Werte ins Word geschrieben. Dahinter dann den String als Kommentar.
    #RM:= 16#494F; // 'IO'

    Alternativ kannst du natürlich auch die Konvertierungsfunktionen nutzen. Dies bedeutet allerdings mehr Programmieraufwand und ob es damit wirklich klarer wird bezweifle ich auch.

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Hallo René,

    wenn du das häufiger brauchst dann olltest du dir dafür eine Funktion (selbst) erstellen, die dir den String (ggf. vielleicht sogar noch mit der Angabe ab welcher Position im String) in einen WORD-Wert konvertiert.
    Das müßte dann Zeichen für Zeichen passieren (also ASCII-Code des ersten Zeichens lesen, mal 256, ASCII-Code des 2. zeichens lesen, dazuaddieren).

    Gruß
    Larry

  4. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    vollmi (19.08.2013)

  5. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.792
    Danke
    144
    Erhielt 1.706 Danke für 1.238 Beiträge

    Standard

    Oder so:
    Code:
    #RM := SHL(IN := BYTE_TO_WORD(CHAR_TO_BYTE('I')), N := 8) OR CHAR_TO_BYTE('O');
    Der Step 7 Compiler ist doch so schlau, dass er daraus in AWL ein:
    Code:
          L     W#16#494F
          T     #RM
    erzeugt.

  6. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    vollmi (19.08.2013)

  7. #5
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.636
    Danke
    786
    Erhielt 654 Danke für 497 Beiträge

    Standard

    Danke euch.

    Ich hab das jetzt so verpackt.
    Code:
    FUNCTION "DCHAR_TO_WORD" : Word
    { S7_Optimized_Access := 'FALSE' }
    VERSION : 0.1
       VAR_INPUT 
          IN : String;
          input AT IN : Struct
             len0 : Byte;
             len1 : Byte;
             Zeichen1 : Char;
             Zeichen2 : Char;
          END_STRUCT;
       END_VAR
    
       VAR_TEMP 
          Zeichen1 : Char;
          Zeichen2 : Char;
       END_VAR
    
    
    BEGIN
    	#DCHAR_TO_WORD := SHL(IN := BYTE_TO_WORD(CHAR_TO_BYTE(#input.Zeichen1)), N := 8) OR CHAR_TO_BYTE(#input.Zeichen2);
    	                                                                                    
    END_FUNCTION
    und so aufgerufen
    Code:
      #RM := "DCHAR_TO_WORD"('AL');
    mfG René

  8. #6
    Registriert seit
    17.02.2010
    Beiträge
    53
    Danke
    3
    Erhielt 19 Danke für 16 Beiträge

    Standard

    @vollmi

    http://support.automation.siemens.co...ehbid=57374718

    Schau dir mal die Slicefunktion an, die kann deine Aufgabe denk ich deutlich vereinfachen bzw. es lesbarer machen.

    MfG Michi

  9. #7
    Registriert seit
    17.02.2010
    Beiträge
    53
    Danke
    3
    Erhielt 19 Danke für 16 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @vollmi

    http://support.automation.siemens.co...ehbid=57374718

    Schau dir mal die Slicefunktion an, die kann deine Aufgabe denk ich deutlich vereinfachen bzw. es lesbarer machen.

    Code:
    FUNCTION "DCHAR_TO_WORD" : Word
    { S7_Optimized_Access := 'FALSE' }
    VERSION : 0.1
       VAR_INPUT 
          IN : String;
          input AT IN : Struct
             len0 : Byte;
             len1 : Byte;
             Zeichen1 : Char;
             Zeichen2 : Char;
          END_STRUCT;
       END_VAR
    
       VAR_TEMP 
          Zeichen1 : Char;
          Zeichen2 : Char;
          tWord : Word;
       END_VAR
    
    
    BEGIN
        tWord.b1 := CHAR_TO_BYTE(#input.Zeichen1);
        tWord.b0 := CHAR_TO_BYTE(#input.Zeichen2);
        #DCHAR_TO_WORD := tWord;                                                                                   
    END_FUNCTION
    MfG Michi

  10. Folgender Benutzer sagt Danke zu Michitronik für den nützlichen Beitrag:

    vollmi (24.08.2013)

Ähnliche Themen

  1. SCL Code-Ausschnitt in Microsoft Word
    Von toto45 im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 02.04.2013, 22:49
  2. Berechnung SCL ; WORD oder INT
    Von toto45 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 16.11.2011, 11:41
  3. SCL, Byte to WORD
    Von paula23 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 29.01.2011, 12:14
  4. SCL: S5Time to Word
    Von Larry Laffer im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 03.09.2008, 18:09
  5. SCL Word in beliebeigen UDT kopieren
    Von dinner4one im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 01.06.2008, 17:00

Lesezeichen

Berechtigungen

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