Step 7 STEP7 XOR mit mehr als 2 Eingängen

roman06

Level-2
Beiträge
151
Reaktionspunkte
17
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

bei STEP7 wird ein XOR mit mehr als 2 Eingängen anscheinend zu einem "2k + 1" (steht auch so in der Hilfe, die ich für das XOR noch nie gelesen hatte). Meine Frage ist nun: Ist das bei allen Steuerungen so, und wenn ja, WARUM?
Habe mich da heute mit meinem 3-Eingang XOR ziemlich blamiert :shock:. Will es nur verstehen. Oder ist das "BigS"?

Danke,
Roman
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

bei STEP7 wird ein XOR mit mehr als 2 Eingängen anscheinend zu einem "2k + 1" (steht auch so in der Hilfe, die ich für das XOR noch nie gelesen hatte). Meine Frage ist nun: Ist das bei allen Steuerungen so, und wenn ja, WARUM?
Habe mich da heute mit meinem 3-Eingang XOR ziemlich blamiert :shock:. Will es nur verstehen. Oder ist das "BigS"?
Welches Ergebnis hast Du eigentlich erwartet?

XOR ergibt immer WAHR, wenn eine ungerade Anzahl an Eingängen Wahr ist:
Wikipedia schrieb:
Die XOR-Verknüpfung lässt sich auch durch die Addition zweier Bitsmodulo 2 berechnen. Dazu berechnet man die einfache Summe der Eingangssignale, dividiert die Summe durch 2 und betrachtet danach den Rest der Division. Ist die Summe eine gerade Zahl, so ist der Rest gleich Null, ist sie ungerade, so ist der Rest gleich eins. Weiterhin kann man die einfache XOR-Verknüpfung zweier Eingangssignale auch als Anzeige der Ungleichheit der Eingangsbits ansehen. Dieses gilt auch für eine beliebige gerade Anzahl an Eingangssignalen.
2k+1 stellt die Gegenrechnung dazu dar.
 
Hallo hucki,
XOR ergibt immer WAHR, wenn eine ungerade Anzahl an Eingängen Wahr ist...
bitte entschuldige, aber da muss ich Dir widersprechen. Ein XOR wird mit =1 dargestellt und das heißt nicht eine ungerade Anzahl muss TRUE sein, sondern nur ein Eingang darf TRUE sein damit der Ausgang TRUE ist.
Gut 1 ist auch ungerade, aber ich nehme mal an das meintest Du nicht.
 
Hallo hucki,

bitte entschuldige, aber da muss ich Dir widersprechen. Ein XOR wird mit =1 dargestellt und das heißt nicht eine ungerade Anzahl muss TRUE sein, sondern nur ein Eingang darf TRUE sein damit der Ausgang TRUE ist.
Das stellt ein XOR mit 2 Eingängen dar.

Bei mehr als 2 Eingängen:
Wikipedia schrieb:
Die Funktion eines XOR-Gatters mit mehr als zwei Eingängen ergibt sich, indem man zunächst zwei der Eingänge XOR-verknüpft, dann deren Ergebnis mit dem nächsten Eingang XOR-verknüpft, solange bis alle Eingänge berücksichtigt sind.
Daraus ergibt sich dann das Ergebnis, welches ich oben zitiert habe.

Keine Ahnung, was TC daraus macht. Wenn bei 3 Eingängen das XOR nur Wahr ist, wenn nur einer der Eingänge WAHR ist, entspricht dies m.M.n. nicht der Definition.
 
Seh' ich das richtig, dass im zitierten Beispiel als Verknüpfungsergebnis (nur) ein Bit raus kommt und kein Byte?
Meinst Du das Beispiel von Beckhoff? Da werden zwei Byte (oder Word...) XOR-verknüpft und das Ergebnis ist natürlich auch ein Byte (oder Word ...):
Ergebnis ist 2#0001_1001
Code:
Var1 := 2#1001_0011 XOR 2#1000_1010 ; //Ergebnis ist 2#0001_1001
Im Ergebnis ist immer da das Bit = 1, wo die Bits in den beiden Operanden unterschiedlich sind - also nur genau eins von beiden Bits = 1 ist.

Harald
 
Meinst Du das Beispiel von Beckhoff? Da werden zwei Byte (oder Word...) XOR-verknüpft und das Ergebnis ist natürlich auch ein Byte (oder Word ...):
OK, also doch das Gleiche wie bei Siemens.

Code:
Var1 := 2#1001_0011 XOR 2#1000_1010 ; //Ergebnis ist 2#0001_1001
Sah' für mich so aus, als ob dann noch die Bits des Byteergebnisses auch noch untereinander XOR verknüpft werden.
Ergebnis in diesem Fall dann also 2#1. Hätt' ja sein können, das Leute auch sowas brauchen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

bei STEP7 wird ein XOR mit mehr als 2 Eingängen anscheinend zu einem "2k + 1" (steht auch so in der Hilfe, die ich für das XOR noch nie gelesen hatte). Meine Frage ist nun: Ist das bei allen Steuerungen so, und wenn ja, WARUM?
Habe mich da heute mit meinem 3-Eingang XOR ziemlich blamiert :shock:. Will es nur verstehen. Oder ist das "BigS"?

Danke,
Roman

Ich komme immer wieder auf neue Ideen und Erkenntnisse......:p
Nie bin ich auf die Idee gekommen ein extra Eingang am XOR zu hängen.
Vielleicht auch weil ich es im SCL gemacht hab und nich im FUP wo mann die Erweiterung der extra Eingang seht.
z.b. hab ich ein XOR mit 3 Eingangen gebraucht und mir das geschrieben

Code:
  // Alarmbildung 1v3
#Zwischenspeicher.%X0 := #Kanal_A;
#Zwischenspeicher.%X1 := #Kanal_B;
#Zwischenspeicher.%X2 := #Kanal_C;
#Timer_1v3_Alarm(IN := NOT (#Zwischenspeicher = 0 OR #Zwischenspeicher = 7),
           PT := #Überwachungszeit_Alarm_1v3);
#Geberstörung_HMI := #Timer_1v3_Alarm.Q;
#Geberstörung_ZLT := #Timer_1v3_Alarm.Q;


Und eigentlich kann ich es so schreiben
Code:
#y := #a XOR #b XOR #c;
Nie auf die Idee gekommen.
Vielen Dank für den Denkanstoß

Bram
 
ich kenne das von S7 so (wie bei #10):

in 1 : 1000 0001
in 2 : 0000 0101
out : 1000 0100

also
in1.0 xor in2.0 -> out.0
in1.1 xor in2.1 -> out.1
..
in1.7 xor in2.7 -> out.7
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ #3 Hucki: "2k + 1" ist die "Gegenrechnung" :confused: Das ist doch genau das, was ein XOR mit mehr als 2 Eingängen macht ...
@ #4 oliver.tonn: das ist das, was ich erwartet hätte, wenn man aber die Hilfe liest, hmmm (Norm, nicht Erwartung, deshalb der Dank an MSB)
 
In SPS gibt es überhaupt nur XOR mit 2 Eingängen (es werden immer genau 2 Operanden verknüpft) und alles was mehr Eingänge verarbeitet ist eine Kaskadierung von 2-Eingangs-XOR, die aber in FUP freundlicherweise zu einem XOR-Block zusammengefasst werden können. Da sollte die Gesamtfunktion eigentlich nicht schwer zu erfassen sein: 2 Operanden werden XOR-verknüpft, das Ergebnis wird mit dem dritten Operanden XOR-verknüpft, dieses Ergebnis mit dem vierten Operanden ... (UND-Blocks und OR-Blocks arbeiten ebenso kaskadiert, doch da wundert sich niemand).

XOR mit mehr als 2 Operanden werden z.B. zur Generierung von Paritätsbits verwendet, die angeben, ob in einer Variable eine gerade oder ungerade Anzahl Bits 1 sind - weil eben mehr-Eingangs-XOR sagen: das Ergebnis ist 1 bei einer ungeraden Anzahl von 1-Bits.

Harald
 
@ #3 Hucki: "2k + 1" ist die "Gegenrechnung" :confused: Das ist doch genau das, was ein XOR mit mehr als 2 Eingängen macht ...
Wie bestimmt man, ob ein XOR Wahr ist:
Entweder: Anzahl der gesetzen Eingänge modulo 2, also ist der Rest 0 oder 1? (= Division, wie beim zitierten Wikipedia-Ausschnitt benutzt)
Oder: Die Anzahl gesetzter Eingänge entspricht 2k+1, dann ist XOR WAHR. (= Multiplikation, Gegenrechnung zur Wikipedia-Division)

XOR macht logischerweise immer das Gleiche, egal in welcher Weise man das rechnerisch darstellt.
Und die Aussage trifft natürlich auch für 2 Eingänge zu. Dann ist k = 0.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,
das mit dem Parity ist jetzt tatsächlich eine Anwendung, die ich mir vorstellen kann. Danke!

Hintergrund zum Thread: Hatte meinem Azubi die Aufgebe gestellt: Lampe leuchtet, wenn genau eine von 3 Tasten gedrückt. Hat er absolut richtig mit den UNDs und dem ODER programmiert. Ich (Klugscheißer) sagte dann, dass geht "eleganter" (UND FALSCH!!!) mit einem XOR. 1 Taste, super, 2 Tasten, super, 3 Tasten, naja :ROFLMAO:

Was gelernt.
 
Code:
  // Alarmbildung 1v3
#Zwischenspeicher.%X0 := #Kanal_A;
#Zwischenspeicher.%X1 := #Kanal_B;
#Zwischenspeicher.%X2 := #Kanal_C;
#y := NOT (#Zwischenspeicher = 0 OR #Zwischenspeicher = 7);

Und eigentlich kann ich es so schreiben
Code:
#y := #a XOR #b XOR #c;
@Bram,
das ist übrigens nicht das gleiche Ergebnis! (Hab' zur besseren Ansicht den Timer aus Deinem 1. Code herausgenommen)

Der 1. Code ist WAHR, wenn ein Eingang (1, 2 oder 4) oder 2 Eingänge (3, 5 oder 6) WAHR sind. Bei kein (0) oder 3 Eingängen (7) ist er FALSCH.
Der 2. Code ist WAHR, wenn ein Eingang (ungerade) oder alle 3 Eingänge (ungerade) WAHR sind. Bei kein (gerade) oder 2 Eingängen (gerade) ist er FALSCH.
 
@Bram,
das ist übrigens nicht das gleiche Ergebnis! (Hab' zur besseren Ansicht den Timer aus Deinem 1. Code herausgenommen)

Der 1. Code ist WAHR, wenn ein Eingang (1, 2 oder 4) oder 2 Eingänge (3, 5 oder 6) WAHR sind. Bei kein (0) oder 3 Eingängen (7) ist er FALSCH.
Der 2. Code ist WAHR, wenn ein Eingang (ungerade) oder alle 3 Eingänge (ungerade) WAHR sind. Bei kein (gerade) oder 2 Eingängen (gerade) ist er FALSCH.

Ja stimmt.. da sollte auch noch ein NOT dazu und die XOR zwischen haken..
Ich probiers mal aus montag....
 
Zurück
Oben