BYTE in WORD (High Byte, Low Byte)

TimeOUT

Level-1
Beiträge
125
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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:confused:

Viele Grüße
TimeOUT
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
Code:
wOut := (wIn AND 16#FF) OR (SHL(bNeuwert, 8) ;
// oder
wOut := (wIn AND 16#FF) OR (bNeuwert * 256) ;

Harald
 
Dir sollte in Codesys doch auch der Direktzugriff aufs Byte zur Verfügung stehen (wie Slice beim TIA):
Code:
myWord.B1:= B#16#04;

oder so ähnlich.
Bin nicht so Codesys fest.
 
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.
 
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.
 
Zurück
Oben