# 2 bytewerte in word



## Chris_the_new (15 Juli 2010)

Hallo,
ich wolte fragen ob jemand eine eleganteere lösung für mein kleines problem kennt:
ich habe 2 byte welche mit unterschiedlichsten werten beschrieben werden, diese sollen dann in ein word array übertragen werden! das ganze in ST.
ich habe bereits eine lösung gefunden welche jedoch nicht sehr schön anzuschauen ist und nen zwischenschritt verlangt:

wert1:= byte_to_word(byte1);
wert2:= byte_to_word(byte2);

word1:= SHL(wert1,8)+ wert2;

gibt es in ST vielleicht eine möglichkeit die byte direkt auf die position im Word zu schreiben?
mfg Chris


----------



## trinitaucher (15 Juli 2010)

word1:= SHL(BYTE_TO_WORD(byte1),8 ) + BYTE_TO_WORD(byte2);

Damit sparst du dir die Zwischenvariablen.


----------



## witkatz (15 Juli 2010)

Einfacher wäre vielleicht das Memory-Sharing über Speicherzuordnung in der Deklaration. Dann entfällt das Umwandeln, aber die Zuordnung der BYTE zu diesem WORD ist nicht mehr Variabel und kann zur Laufzeit nicht mehr verändert werden. 


```
byte1 AT%MB1: BYTE; (* word1 High Byte *)
byte2 AT%MB0: BYTE; (* word1 Low Byte *)
word1 AT%MB0: WORD;
```
Ansonsten, wenn diese Umwandlung öfter vorkommt, dann empfehlt sich aus deinem Code eine Funktion zu machen.

Gruß,
witkatz


----------



## Gelöschtes Mitglied 25820 (15 Juli 2010)

witkatz schrieb:


> ```
> byte1 AT%MB1: BYTE; (* word1 High Byte *)
> byte2 AT%MB0: BYTE; (* word1 Low Byte *)
> word1 AT%MB0: WORD;
> ```



Die definition der beiden Byte ist jedoch umgekehrt.
Im MW0 wird dann MB1 zum Low Byte und MB0 zum High Byte

lg
Gernot


----------



## Chris_the_new (15 Juli 2010)

danke für die schnellen antworten ich denk ich werd beim 1zeiligen bleiben, danke nochmal! 
schade hatte gehofft das es ne ähnliche funktion gibt wie in C aber man kann ja nicht alles haben 
wünsche noch nen schönen tag
mfg chris


----------



## Kapkan (24 Oktober 2013)

Geht das auch wieder umgekehrt ohne byte1 und byte2 zu wiesen?


----------



## PN/DP (24 Oktober 2013)

Was möchtest Du tun?

Harald


----------



## Irek (24 Oktober 2013)

mit Abkuerzung
	_byte0:BYTE;
	_byte1:BYTE;
	_word:WORD;

_word:=(_byte1*256)+_byte0;

Irek


----------



## Kapkan (25 Oktober 2013)

Ich wollte von der visu zur plc 2 byte Werte über geben die sich stendig ändern und in ein word packen und in der plc wieder entpacken aber auch so das ich die Werte unterscheiden kann.

Danke

Gruß


----------



## Irek (25 Oktober 2013)

Visu aber der Panel ist noch unbekannt.
Wenn Beckhoff, dann ist jede Variable zu erreichen und so geht es:

MAIN.FB_Instanz_Name.Variable.Bit_Nr   (Variable=byte)

Irek


----------



## PN/DP (25 Oktober 2013)

@ Kapkan
Man kann nicht erkennen, welches Byte im Wort von welcher Variable stammt - PLC und Visu können/müssen es einfach nur vereinbaren.

Harald


----------



## Kapkan (25 Oktober 2013)

OK danke ich dachte das es irgendwie geht das z.b bit0-7 1wert ist und 8-16 zweiter

Gruß


----------



## Larry Laffer (25 Oktober 2013)

@Kapkan:
das geht doch (und wurde ja auch schon beschrieben). Die SPS muss die beiden Variablen zusammenführen und die Visu muss sie dann auseinander-rechnen. Ob man das so machen sollte ist dann eine andere Frage ...

Gruß
Larry


----------

