Bytes und Bits in DWORD kopieren

Supervisor

Level-1
Beiträge
93
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe folgendes Problem:

Ich habe drei Bytes EB1, EB2 und EB3. Außerdem sind noch die Bits 0...4 vom Byte EB4 interessant.
Aus diesen Eingangsdaten möchte ich gerne ein Merker-DoppelWort (32bit Breite) MD1 generieren.
D.h. EB1 soll in den ersten 8 Bits (0...7) von MD1 stehen, EB2 in den nächsten 8 Bits (8...15) und EB3 in den Bits 16...23. Die Bits 0...4 von EB4 sollen dann die nachfolgenden Bits (24...28) von MD1 auffüllen. Die letzten 3 Bits (29...31) von MD1 sollen NULL sein.

Ich habe schon sämtliche Sachen in FUP und AWL ausprobiert, aber das klappt einfach nicht!!!!! Ich benutze eine S7-313 mit STEP7 V5.4.

Ich brauche dringend HILFE!!!!! :confused: Weiß jemand Rat?
DANKE!!!
 
Code:
l EB 1 
T MB 4
L EB 2
T MB 3
L EB 3
T MB 2
L 31
L EB 4
UW
T MB 1
War jetzt nur so ohne STEP7 codiert, könnte aber den Anforderungen entsprechen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich dich richtig verstehe, soll EB 1 das kleinste BYte im MS werden.
Das "kleinste" Byte steht im MD links.

In diesem Falle:

Code:
L EB1
T MB3
 
L EB2
T MB2
 
L EB3
T MB1
 
L EB4
T MB0
 
L MD0
L DW#16#1FFFFFFF //Ausmaskieren der 3 Bits ganz rechts im MD
UD
T MD0

Der Rainer war wieder fix :rolleyes: .

MD1 ist nicht so schön, nimm ein gerades MD !
 
Danke für die Antwort, aber ich glaube das triffts net ganz.
Ich will doch zum Schluss ein 32-Bit breites Merker-DOPPELWORT haben, dass sich aus den einzelnen Bytes zusammenbaut.

ODER VERSTEH ICH DEN CODE TOTAL FALSCH???
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Code von Ralle entspricht meinem. Ralle geht von MD 0, ich von MD 1. Die Ausmaskierung macht Ralle nach der Zuweisung und ich vorher. Das Ergebnis sollte aber in beiden Fällen dasselbe sein.
 
Hallo,
Soll das EB1 dann ganz rechts im MD stehen?

dann versuch mal...

Code:
L ED1  // EB1  - EB4
T MD10 
L DW#16#FFFFFF0F  // Maske
UD
TAD  // tausche Doppelwort
T MD10


mfg.

Rolf
 
RolfB schrieb:
Hallo,
Soll das EB1 dann ganz rechts im MD stehen?

dann versuch mal...

Code:
L ED1  // EB1  - EB4
T MD10 
L DW#16#FFFFFF0F  // Maske
UD
TAD  // tausche Doppelwort
T MD10

mfg.

Rolf
BSWAP auf der S7, Klasse. Das hab ich schon öfters gesucht.
 
Hurra!

Hallo an alle,

ich hab den AWL-Code von Ralle grad eben mal schnell eingetippt und was muß ich sagen:
es FUNKTIONIERT !!!! :D

Jetzt komm ich auch weiter in meinem Programm (hoffentlich!?).

Fettes DANKE für eure Hilfe! ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Rainer Hönle schrieb:
Stimmt bei Intel-Prozessoren. Bei Siemens stehen (wenn auf MD 0 zugegriffen wird) die Bits 31-24 in MB0, 23-16 in MB1, etc.

Noch einmal zur Verdeutlichung: :rolleyes:

Code:
                   MD0
 
   MB0        MB1        MB2        MB3
 
M0.7-M0.0  M1.7-M1.0  M2.7-M2.0  M3.7-M3.0
 
Bit 31-24  Bit 23-16  Bit 15-08  Bit 07-00
 
   EB4        EB3        EB2        EB1

Gruß Kai
 
Zurück
Oben