SCL, Byte to WORD

paula23

Level-2
Beiträge
235
Reaktionspunkte
15
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.
 
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
 
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
 
Zuletzt bearbeitet:
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.
 
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 ... :rolleyes:

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
 
Zurück
Oben