Addition / Vergleich mehrerer Werte?

Buschmann

Level-2
Beiträge
111
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Ich möchte ein Ausgangssignal setzen, wenn alle 15 DBWs <> 0 sind.

Da mir am Vergleicher nur 2 Eingänge bietet, habe ich überlegt, alle DBWs zu addieren:

Code:
L DB1.DBW1
L DB1.DBW2
L DB1.DBW3
...
+ I
T MW10

... und dann auf "0" zu vergleichen
Code:
L MW10
L 0
<> I
= A0.0

Irgendwie klappt das aber nicht. Gibt es da eine "schmale" Lösung, ohne mehrere Addierer / Vergleicher hinter einander zu verschachteln?

Gruß
Buschmann
 
Du kannst doch nur Wert 1 mit Wert 2 addieren, wenn du Wert 3 lädst ist doch der 1. Wert wieder weg.
Was soll dein Programm machen?
Was muss verglichen werden und was bei gleich bzw ungleich geschehen?

bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
L DB1.DBW1
L DB1.DBW2
+D
L DB1.DBW3
+D
...
T MD10

+D deshalb weil, abhängig davon wie gross der wert in den dbw's ist, sonst ein überlauf entstehen könnte.
 
Hallo,
und als Alternative zu Volkers Vorschlag : alle Werte miteinander verodern und das Ergebnis auf 0 vergleichen - man bekommt dann auch keinen Überlauf ... :rolleyes:
Code:
L DB1.DBW0
L DB1.DBW2
OW
L DB1.DBW4
OW
...
L 0
==I
= M 10.0
Gruß
LL
 
Nja folgfendes würde auch gehen aber das wird dann sehr lang!

U(
L db1.dbw0
L 0
<>I
)
U(
L db1.dbw2
L 0
<>I
)
U(
L db1.dbw4
L 0
<>I
)
= A x.y

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst doch nur Wert 1 mit Wert 2 addieren, wenn du Wert 3 lädst ist doch der 1. Wert wieder weg.
bike
Ja, der Gedanke kam mir grad beim Frühstück auch, ist ja eigentlich logisch, wenn es nur 2 Akkus gibt...

volker schrieb:
+D deshalb weil, abhängig davon wie gross der wert in den dbw's ist, sonst ein überlauf entstehen könnte.
Das dürfte kein Problem darstellen, da es sich nur um kleine Werte (gesamt <2000) handelt.

Buschmann
 
Eine SPS aus dem S7-400 Serie hat mehr als zwei Akkus.
Ich nehme an Sie haben einen aus dem S7-300 Serie.
Trotzdem sind die Loesungen die schon gegeben sind OK
 
Eine SPS aus dem S7-400 Serie hat mehr als zwei Akkus.
Ich nehme an Sie haben einen aus dem S7-300 Serie.
Trotzdem sind die Loesungen die schon gegeben sind OK

Bei einer PLC der 400er Serie ist es auch nicht möglich ohne die Akkus hin und her zu schieben, diese miteinander zu vergleichen.

Ich kann nicht sagen, welche Lösung richtig oder gut ist, da ich nicht weiß was mit den Ergebnissen geschehen soll.

bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei einer PLC der 400er Serie ist es auch nicht möglich ohne die Akkus hin und her zu schieben, diese miteinander zu vergleichen.

Ich kann nicht sagen, welche Lösung richtig oder gut ist, da ich nicht weiß was mit den Ergebnissen geschehen soll.

bike

Das ist doch relativ eindeutig dem Eröffnungsposting zu entnehmen:
Wenn alle DBW von Null verschieden sind, soll der Ausgang gesetzt werden.

Das bedeutet im Umkehrschluss: ein einziger Eintrag Null, dann eben NICHT.

LL, da wäre doch eher UW angebracht, oder nicht?
 
Und was soll dann das Addieren aller DWs? Oder hab ich jetzt einen Gedankenknick?

Du hast keinen Knick: Das Addieren ist hier definitiv falsch, da die Null das neutrale Element der Addition darstellt. Es genügt ein einziger Summand ungleich Null und das Ergebnis ist von Null verschieden. Aber das lernt man in der 7.ten Klasse.

Die Crux ist, dass man durch Aufaddieren zwar feststellen kann, dass alle Summanden Null waren, aber nicht (wenn das Ergebnis ungleich Null ist) ob einer nicht Null war.

(Immer vorausgesetzt es handelt sich um positive Zahlen >=0.)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich so darüber nachdenke, so nimmt man den Code von Larry,
ersetzt OW durch UW, und dann ist man schon fertig:

Kommt Null raus, dann war ein Eintrag Null...

Na ... Na ... AU ist das dein letztes Wort dazu ?
Alle Worte verodern bringt auf jeden Fall im Ergebnis einen Wert <> 0 wenn irgendwo ein Bit gesetzt war (ein Wert <> 0 war).
Alle Worte verunden bringt im Ergebnis auch dann eine 0, wenn alles unterschiedliche Bits gesetzt sind bzw. wenn das bisher nicht gesetzte Bit beim letzten Vergleich nicht 1 ist.

Nicht Bit- mit Wortverarbeitung verwechseln ...

Gruß
LL
 
Na ... Na ... AU ist das dein letztes Wort dazu ?
Alle Worte verodern bringt auf jeden Fall im Ergebnis einen Wert <> 0 wenn irgendwo ein Bit gesetzt war (ein Wert <> 0 war).
Alle Worte verunden bringt im Ergebnis auch dann eine 0, wenn alles unterschiedliche Bits gesetzt sind bzw. wenn das bisher nicht gesetzte Bit beim letzten Vergleich nicht 1 ist.

Nicht Bit- mit Wortverarbeitung verwechseln ...

Gruß
LL

Ich schäme mich für den Schnellschuss. Man sollte eigentlich die Werte multiplizieren.

Aber das mit Deiner OW-Aktion führt führt doch auch nicht zum Ziel.
Korrekt wäre dann doch eher eine Schleife, von mir aus sogar in SCL, die
alle DBW prüft und beim ersten Null endet.
 
Zuletzt bearbeitet:
OK ... ich schäme mich dann auch ... :oops:
Ich hatte nämlich "alle Worte = 0" gelesen ... Darauf basierte dann auch der Vorschlag.
Für "alle Worte <> 0" müßte man multiplizieren, wie du schon geschrieben hast. Hier kann es dann allerdings schnell zu einem Überlauf kommen, den man auf jeden Fall mit auswerten müßte.
Eine Schleife wäre also vielleicht auch nicht so schlecht ...

@Buschmann:
Da hast du uns mit dieser doch ansich simplen Aufgabenstellungen eine Menge Freude bereitet ...

Gruß
LL
 
Zurück
Oben