# BYTE in WORD (High Byte, Low Byte)



## TimeOUT (17 März 2016)

Hallo Forum,

ich stehe gerade richtig auf dem Schlauch...

Ich habe eine WORD-Variable, z.B. 16#1901

Jetzt möchte ich diese Variable so abändern, dass nur das High Byte im WORD geändert wird und das Low Byte unberührt bleibt.

Sprich: Ich möchte, z.B. ein Byte 16#04, so dort einfügen, dass das WORD am Ende so aussieht --> 16#0401.
Allerdings will mir das Ganze nicht gelingen. Mit Bitweise Schieben/Rotieren habe ich es schon probiert. Es scheitert dann  aber an der Verknüpfung, da das Low Byte 16#01 immer mit beeinflusst wird

Viele Grüße
TimeOUT


----------



## oliver.tonn (17 März 2016)

In zwei Schritten ginge es.
Erst das Byte mit AND 16#00FF auf 0 setzen und dann mit OR 16#0400 setzen.

Von irgendwas mit Internetzugang gesendet.


----------



## PN/DP (17 März 2016)

Zuerst das H-Byte mit AND 16#FF auf 0 bringen (herauslöschen) und danach den Neuwert in das H-Byte hinein-ODERn oder -addieren.
Den Neuwert zur Position des H-Byte bringen gibt es mehrere Möglichkeiten: SHL 8, * 256, vermutlich gibt es auch ein SWAP.
etwa so

```
wOut := (wIn AND 16#FF) OR (SHL(bNeuwert, 8) ;
// oder
wOut := (wIn AND 16#FF) OR (bNeuwert * 256) ;
```

Harald


----------



## TimeOUT (17 März 2016)

Danke Ihr Zwei,

genau so hat es funktioniert, vielen Dank!


----------



## hucki (17 März 2016)

Dir sollte in Codesys doch auch der Direktzugriff aufs Byte zur Verfügung stehen (wie Slice beim TIA):

```
myWord.B1:= B#16#04;
```

oder so ähnlich.
Bin nicht so Codesys fest.


----------



## RobiHerb (17 März 2016)

In der Codesys Hilfe ist ein schönes Beispiel, wie man das unter Verwendung des Datentyps UNION löst.


----------



## manseluk (18 März 2016)

Falls du eine Beckhof Steuerung hast, müsste es auch mit MEMCPY funktionieren

Als destAdr nimmst du dein Word, und je nach dem welches Byte du möchtest, addierst du zuerst noch +1 dazu, kopierst deinen gewünschten Wert und gibst als Länge 1 Byte an.

Also z.B. memcpy(adr("DeinWord")+1, 04, 1)

Aber natürlich ist der Slice Zugriff schöner.


----------



## oliver.tonn (18 März 2016)

Hallo manseluk,
die Funktion gibt es bei vielen CoDeSys basierten Steuerungen, heißt eventuell nur etwas anders. Allerdings sollte der TE maximal 1 zur Adresse des Words hinzuaddieren, sonst schießt er über das Ziel hinaus und schreibt sonstwo hin.

Von irgendwas mit Internetzugang gesendet.


----------

