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

Ergebnis 1 bis 6 von 6

Thema: SCL, Byte to WORD

  1. #1
    Registriert seit
    14.06.2005
    Beiträge
    223
    Danke
    9
    Erhielt 15 Danke für 15 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich denke das das nicht ganz so kompliziert ist, aber ich komme nicht drauf.

    Ich habe 2 Bytes und möchte diese in ein WORD legen, wie sieht die Anweisung in SCL aus ?

    Danke, Servus.
    Zitieren Zitieren SCL, Byte to WORD  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Ich hab dir mal einen kleinen SCL Baustein gemacht, der 2 Möglichkeiten enthält:


    Code:
    FUNCTION FC400 : INT
    
    VAR_INPUT
        inByte1: BYTE;
        inByte2: BYTE;    
        
    END_VAR   
    
    VAR_OUTPUT
        outWord_Versuch1: WORD;
        outWord_Versuch2: WORD;
          
    END_VAR
        
    VAR_TEMP
        // temporäre Variablen
        wWord_Versuch1: WORD ;
             
        wWord_Struct : STRUCT
                            Byte1 : BYTE ;
                            Byte2 : BYTE ;
                          END_STRUCT ;
                        
        wWord_Versuch2 AT wWord_Struct: Word ; 
    
          
    END_VAR
        //Version 1
        outWord_Versuch1 := SHL (IN:=BYTE_TO_WORD(inByte1),N:=8) OR BYTE_TO_WORD(inByte2);
        
        //Version 2
        wWord_Struct.Byte1 := inByte1;
        wWord_Struct.Byte2 := inByte2;
        outWord_Versuch2 := wWord_Versuch2;
        
    
           ;
        FC400 := 400;
    END_FUNCTION
    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

  3. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    paula23 (13.01.2011)

  4. #3
    paula23 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.06.2005
    Beiträge
    223
    Danke
    9
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Ich danke dir, Versuch 1 hat funktioniert! Jetzt muss ich noch versehen was du da gemacht hast.

  5. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Der 2. funktioniert auch, hab ich schon getestet, das ist so eine Art Typecast in SCL.

    Hier noch eine 3. Möglichkeit:


    Code:
    //Version 3
        outWord_Versuch3 := INT_TO_WORD(BYTE_TO_INT(inByte1)*256 + BYTE_TO_INT(inByte2));
    Zur Version 1.

    Byte1 wird in ein Word gewandelt und 8 Bit (=1 Byte) nach links geschoben (dabei werden von rechts automatisch 8 Bit mit False eingeschoben), Byte2 wird in ein Word gewandelt (dabei stehen links 8 Bit mit False). Die beiden Word werden nun verodert und somit zu einem Word vereinigt.

    Ein Bsp.:

    Byte 1 01 Hex --> 00000001 zu Word --> 00000000 00000001 --> 8 Bit nach links schieben --> 00000001 00000000
    Byte 2 02 Hex --> 00000010 zu Word --> 00000000 00000010 -----------------------------------> 00000000 00000010
    verodern -------------------------------------------------------------------------------------------- --> 00000001 00000010 fertig

    Die 3. Version ist im Prinzip wie die 1. Version, nur numerisch. *256 macht das Gleiche, wie SHL 8
    Geändert von Ralle (13.01.2011 um 21:47 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

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

    Azrael666 (17.11.2017)

  7. #5
    paula23 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.06.2005
    Beiträge
    223
    Danke
    9
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Hallo nochmal jetzt muss ich das ganze auch wieder zurück wandeln,

    ich habe einen REAL Wert, den zerlege ich nach DINT und dann INT und dann WORD, und nun, wie mache ich aus dem WORD = 2 Byte am Ausgang ??

    Danke.

  8. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Paula,
    deine Sequenz REAL -> DINT -> INT -> WORD ist natürlich so eine Sache da du dabei ja nicht die Eigenschaften der ursprünglichen REAL-Zahl behältst. Aber du wirst dir da sicher etwas dabei gedacht haben ...

    Das WORD allerdings in Byte zerlegen sollte mit dem AT-Befehl funktionieren.
    AT erschafft eine neue Sichtweise auf eine schon vorhandene Variable. Im Grund so wie im AWL-Programm. Dort kannst du ja ein (z.B.) MW100 als INT betrachten oder als WORD oder die beiden Bytes, aus denen es besteht, einzeln. Hier ist der von Ralle schon gemachte Vorschlag #2 m.E. der eleganteste Weg (der funktioniert nämlich in beide Richtungen). Vielleicht siehst du dir das noch einmal an ...

    Gruß
    Larry

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 08.07.2008, 08:52
  2. byte in word / dword umwandeln
    Von Gerri im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 03.07.2008, 14:31
  3. BYTE/WORD/DWORD vergleichen
    Von slma im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 06.07.2007, 15:11
  4. Codesys Bits, Byte, Word und DWord
    Von Znarf im Forum Sonstige Steuerungen
    Antworten: 16
    Letzter Beitrag: 03.05.2007, 13:36
  5. Umwandlung Word in Byte
    Von christoph im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 17.10.2003, 09:59

Lesezeichen

Berechtigungen

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