# Int in Hi - und Lowbyte aufteilen



## Pepper (24 März 2010)

Hallo
Ich bastel gerade an einer Modbuskommunikation für eine Wärmepumpe rum und komm an einer Stelle nicht weiter. 

Zum Programmieren benutze ich Codesys. Der Controller ist ein Wago 750-841. 

Ich muss einen Integer wert als 2 Byte über Modbus zur Wärmepumpe  schicken. Leider gelingt mir das nicht.

Ich hab mir überlegt den INT-Wert in Binär umzurechnen und dann die ersten 8 bits wieder in Dezimal umzurechnen um das Lowbyte zu bekommen. Mit den zweiten 8 bit würde ich das selbe machen.

Beispiel:

INT:= 563    (Binär: 0000001000110011)


                 Hibyte          Lowbyte
Aufteilen:    00000010  /  00110011


Lowbyte:= 51    (Binär:= 00110011)
Hibyte:= 2         (Binär:= 00000010)

Ich habs bis jetzt programmiertechnisch leider nicht hinbekommen. Wenn jemand einen Tipp hat wäre ich sehr dankbar. Oscat & Co haben  für diesen fall leider auch keine passenden Bausteine (Oder ich hab sie nicht gefunden). 
Vielleicht habt ihr aber auch einen ganz anderen Lösungsansatz. Ich freu mich auch eure Antworten.

Gruß Pepper


----------



## Rainer Hönle (24 März 2010)

Wo ist das Problem? 2 * 256 + 51 = 563. Das passt doch oder was soll da herauskommen?


----------



## Cerberus (24 März 2010)

Rainer Hönle schrieb:


> Wo ist das Problem? 2 * 256 + 51 = 563. Das passt doch oder was soll da herauskommen?


 
@Pepper

Suchst du den umgekehrten Weg? Dann einfach deinen Int-Wert durch 256 teilen. Die Ganzzahl die rauskommt ist dein HighByte und der Rest der Division dein LowByte.


----------



## Pepper (24 März 2010)

Vielen Dank euch beiden. Ihr habt mir den sehr weitergeholfen. Manchmal denkt man einfach zu komliziert, dabei kann es so einfach sein.

Ich hab jetzt einfach meine INT:= 563 durch 256 dividiert und dann mit dem Oscat-Funktion "swap_byte" Hi- und Lowbyte getauscht (von 563) und nochmal durch 256 dividiert

Nach der ersten Division kommt das raus (Hibyte:= 2)

563---> Swap_byte ----> wert2:= 13058

Zweite Division wert2( 13058 ) durch 256 kommt das raus (Lowbyte:= 51)

Also wie gesagt.... Vielen Dank


----------



## Larry Laffer (24 März 2010)

... geht auch ohne Swap ...


```
Lo := Integer and 255 ;
Hi := Integer / 256 ;
```
Gruß
LL


----------



## Pepper (24 März 2010)

> ... geht auch ohne Swap ...
> 
> Code:
> Lo := Integer and 255 ;
> ...



Habs gerade ausprobiert und bin verblüfft.... Hab das selbe Ergebnis raus. Das fällt das dann wohl unter Optimierung


----------



## Oberchefe (24 März 2010)

Geht natürlich noch auf zig andere Arten:


```
Lo:=INT_TO_BYTE(Integer);
Hi:=INT_TO_BYTE(SHR(Integer,8));
```


----------



## RobiHerb (25 März 2010)

*Performance ...*



Oberchefe schrieb:


> Geht natürlich noch auf zig andere Arten:
> 
> 
> ```
> ...



Bestimmt effektiver als durch 256 zu teilen, man sollte schon aus Prinzip auf beste Performance achten.


----------

