Problem mit Bitoperationen

G

Gast

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
CPU: CPU-314C-2DP
Softwareversion: STEP 7 S7 V.5.2

Wir möchten aus einem MW vier Bits auf je ein Ausgangsbit schreiben z.B. MW1.0 auf A124.0 usw.


Der Folgende Code funktioniert nicht, weil Step 7 unbedingt ein ein Byte oder ein MW etc .. bei dem MOVE Befehl haben möchte
ich möchte allerdings nur je ein BIT kopieren.

bei #Ausgang1 handelt es sich um einen Ausgang vom Datentyp Bool einer Funktion.


L MW 1.1
T #Ausgang1
NOP 0


Gruß
Kofi
 
Ja aber M1.1 ist Bestandteil des MW1, das ist halt einfach so!
Wenn du es genau wissen willst ist es das Bit 9 (von 0 zu Zählen angefangt) im MW1

Also repräsentiert dieses Bit die Wertigkeit 2 hoch 9 = 512 (Dezimal)
 
Zuletzt bearbeitet:
Hmm, der will quasi mit 4 Autos (4 Bit) in eine Einzelgarage (A124.0) gleichzeitig :ROFLMAO:

Oder er hats falsch erklärt und meint:
L MW1
T AW 124

:confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
MW1.0 ist in der "Siemenssprache" ein gramatischer Fehler:

M200.0 - ist ein Beispiel für eine Bitadressierung
MW200 - ist eine Wordadressierung
MW200.0 - exestiert nur als Teil eines ANY-Pointers und ist für Dich uninteressant.

Da Siemens-Speicher Wordorientiert ist (also 2 Byte) werden MW1, MW3, MW5 usw. (also ungerade Adrssen ) nicht benutzt.

Just4Info:
Die Bytes sind innerhalb eines Word vertauscht!!
Beispiel:
MW200 besteht bekanntlich aus M200.0, M200.1, ... bis M201.7.

L MW200 // MW200 in den AKKU laden

Die Reihenfolge im Speicher(z.B. im AKKU) sieht dann so aus:
M201.0 // niederwertigste Bit im Akku 2^0
M201.1
M201.2
M201.3
M201.4
M201.5
M201.6
M201.7
M200.0
M200.1
M200.2
M200.3
M200.4
M200.5
M200.6
M200.7 // Bit 2^15

Das sind die Grundlagen.

Wenn Du also ein Paar Bits aus dem MB1 an die Ausgänge "verdrahten" willst, muss Du das wie folgt machen:

U M1.0
T A2.0 // oder symbolisch "T aMotorEin"

U M1.1
T A2.1

U M1.2
T A2.2

usw.

Alternativ kannst Du ein ganzes Byte, Word oder DoppelWord zuweisen:

L MB1
T AB1

oder

L MW0
T AW0

Tja, das muss für's Erste rechen.
Gruss
Alex
 
Natürlich meite ich:
U M1.0
= A2.0 // oder symbolisch "T aMotorEin"

U M1.1
= A2.1

U M1.2
= A2.2
 
Hab nochmal die Eingangsfrage gelesen :

bei #Ausgang1 handelt es sich um einen Ausgang vom Datentyp Bool einer Funktion.

Scheinbar geht es um den Ausgang eines Bausteines:

Jetzt könnte man aus dem #Ausgang1 statt Bool ein Wort machen.
Oder in der Deklaration aus #Ausgang1 ein Array of Bool (mit 16 Bools) und am Bausteinende das Wort auf das Array schieben. (Blockmove)

Gruss Zefix
 
Zurück
Oben