# LOGO! Soft v7 - Hilfe für Programm



## Tobias Dasch (23 Juli 2013)

Servus Forum, 
ich arbeite derzeit mit Kollegen an einem Projekt, dass sich "Doppelhaushälfte" nennt. 
Zur Erklärung: Es gibt zwei Haushälften, in jeder befinden sich 4 Motoren, aber es dürfen immer nur jeweils 2 von 4 gleichzeitig laufen.
Wenn z.B. die Motorenfolge 1-2-3-4 betätigt wurde, bedeutet das, dass Motor 1 und 2 eingeschaltet werden, 3 und 4 hingegen gespeichert und sobald Motor 1 oder 2 ausgeschaltet wird, wird als erstes Motor 3 und dann 4. Es laufen jedoch nie mehr als zwei Motoren gleichzeitig.

Wir haben jetzt schon ein Programm erstellt indem wir allerdings noch ein paar Fehler haben und diese bis jetzt nicht beheben können ohne andere Fehler auszulösen.

Bei den Zahlenfolgen:
312
132
243
423
134
314
421
241
laufen 3 Motoren gleichzeitig.

Außerdem wissen wir nicht, wie wir in LOGO! eine Speicherfunktion einbinden, sodass wenn man z.B. die Motorenfolge 1-2-4-3 benutzt und Motor 1 ausschaltet, zuerst Motor 4 anläuft und nachdem man Motor 2 auschaltet, Motor 3 anläuft. Denn LOGO! nimmt immer den, der zuletzt betätigt wurde. (3 dann 4)

Im Anhang habe ich noch unsere Schaltung.
Wir gehen davon aus, dass man die Speicherung überhaupt nicht umsetzen kann mit der LOGO!, jedenfalls wollen wir es nur theoretisch mit dem Programm versuchen.
Wäre cool wenn uns jemand bei dem anderen Problem helfen könnte.
Danke

Anhang anzeigen FinallyFast.zip


----------



## winnman (23 Juli 2013)

Hallo Tobis,

hab zuhause keine Logosoft, kann daher dein Prog nicht anschauen.

Ab so mal eine Denkanstoss:

Es gibt RS Relais (in logo Stromstoßschalter genannt; glaub ich) dann hast du das Problem mit der Reihenfolge, da könnte man ja einen Zähler pro Motor machen, der beim Zuschalten des nächsten Motors weiterzählt, damit kannst du dann eine Reihung auswerten.

Dein Logikproblem kannst du entweder über Logik lösen, es ginge aber auch über obig angesprochene Zähler.

Und der Lösungswege gäbe es noch mehr


----------



## hucki (23 Juli 2013)

winnman schrieb:


> hab zuhause keine Logosoft, kann daher dein Prog nicht anschauen.


Sei froh.
Sowas wird uns hier angeboten:



:shock:


Ich frag' mich, wie der TE da selber mit arbeiten kann?!


----------



## Tobias Dasch (24 Juli 2013)

Danke für die schnelle Antwort winnman, ich werd das mit den Zählern mal versuchen.

@ hucki, ich kenne keine einfachere Möglichkeit, wodurch es auch nicht sehr übersichtlich ist, aber im Grunde nicht schwer bis jetzt, falls du eine andere Lösung hast kannst du gerne bescheid geben. Es ist allerdings auch zusammengeschoben, damit man mehr Platz hat, welchen man am Ende wahrscheinlich brauchen wird.

mfg Tobi


----------



## winnman (24 Juli 2013)

Wenn du zwischen den Eingängen und den ersten Gattern mehr platz machst, dann kannst du die einzelnen Potentiale auseinanderziehen.

Dann hast du von I1 eine Liene nach unten, 5mm daneben machst du dann die Linie für I2, . . .

Du musst dazu jede einzelne Linie anklicken und kannst sie dann mit den Punkten verschieben.

Danach kann man dann ein bisschen besser sehen was wohin geht und damit ev. auch verstehen was deine Logik macht


----------



## hucki (24 Juli 2013)

Tobias Dasch schrieb:


> Es ist allerdings auch zusammengeschoben, damit man mehr Platz hat, welchen man am Ende wahrscheinlich brauchen wird.


Man kann sich natürlich auch über Datei->Eigenschaften->Seitenaufteilung mit zusätzlichen horizontalen und/oder vertikalen Seiten Platz schaffen.



Obwohl ich sowas Kniffliges eigentlich gerne mache, hab' ich bei solchem Wirrwarr so überhaupt keine Lust, mich damit zu beschäftigen.
Ihr dagegen müsst und ich weiß nicht, wie Ihr heute noch nachvollziehen könnt, was Ihr Euch gestern beim Erstellen des Programms so gedacht habt.


Also bitte mal winnmans Tips befolgen, und wenn Ihr's mit dem Upload noch vor meinem Urlaub schafft, dann schau' ich auch noch mal rein.


----------



## hucki (24 Juli 2013)

Tobias Dasch schrieb:


> @ hucki, ... falls du eine andere Lösung hast kannst du gerne bescheid geben.



Da





hucki schrieb:


> ... ich sowas Kniffliges eigentlich gerne mache, ...


hab' ich mich (trotz dieses hingeworfenen Knochens) mal hin gesetzt und was Eigenes entworfen.



Und weil in der 
	

		
			
		

		
	

Anhang anzeigen 21268

	

		
			
		

		
	
 die 0BA7 als Typ ausgewählt wurde und etwas Strafe sein muss, kam dies dabei heraus:





Das funktioniert m.M.n. wie von Euch gewünscht und hat auch noch auf eine Seite gepaßt.


Also -> Bescheid!


PS: Schrittweise Erklärung folgt, aber nicht mehr heute. Einige Sachen kann man ja schon erkennen, auch wenn die Einschaltprüfung noch fehlt.
Viel Spaß beim Knobeln!


----------



## Tobias Dasch (25 Juli 2013)

Danke für eure Antworten.  Das mit dem vergrößern hat schonmal sehr weiter geholfen, jedoch wenn ich jetzt deine selbst entworfene Schaltung sehe und das diese auf eine Seite passt ist es ja sowieso egal.
Wir müssen jetzt erstmal die Schaltung "analysieren"...auf dem ersten Blick nur Bahnhof. 

TOP Bescheid!


----------



## hucki (25 Juli 2013)

Tobias Dasch schrieb:


> Wir müssen jetzt erstmal die Schaltung "analysieren"


Bin gespannt auf das Zwischenergebnis. 

:sm4:



Ich wünsch' Euch :sm5:
Bis heut' Abend.


----------



## Tobias Dasch (25 Juli 2013)

Okay...wir hätten vielleicht erwähnen sollen, dass wir Anfänger sind, was das Thema LOGO! angeht 
Bis heute früh wussten wir noch garnicht was ein UDF ist, geschweige denn die ganzen anderen Analogen Bausteine.
Mit deiner jetzigen Lösung kommen wir nicht wirklich klar hucki, da uns die Logik an so manchen Stellen fehlt. 

Gibt es denn auch eine Lösung ohne analoge Bausteine oder ist dies die einzige Möglichkeit? 
Und die Speicherfunktion die ich oben erwähnt habe, wurde diese schon umgesetzt in deiner Schaltung?
Danke schonmal bis hierher, wir werden es weiter versuchen!


----------



## hucki (25 Juli 2013)

Es werden nur drei Typen von analogen Bausteinen eingesetzt. Vlt. Versucht Ihr mal zu ergründen, was diese machen. Fangt einfach bei B001 an.

PS: Die UDFs sind ja auch deshalb, um Euch noch etwas zappeln zu lassen. Und ja, die Schaltung merkt sich, wer als 3. oder 4. eingeschaltet wurde. Aber das steckt in den UDFs.


----------



## Tobias Dasch (25 Juli 2013)

Also die einzelnen Bausteine haben wir eigentlich ganz gut über die Hilfe verstehen können, allerdings können wir mit ihnen noch nicht arbeiten. :sad:
Jeder Versuch mit den UDF eine Schaltung zu bauen ist irgendwie gescheitert, da beim verbinden jeglicher Leitung von den Aus- bzw. Eingängen der UDF ein Tool-Tip kommt der uns sagt, dass die Verbindung nicht kompatibel ist. 
Wir haben es mit verschiedenen Gattern versucht, aber irgendwas machen wir falsch. Ich hoffe wir kommen morgen weiter 

mfg Tobi


----------



## hucki (25 Juli 2013)

Dann will ich Euch mal etwas Starthilfe geben und erklären, was mein Programm im Einzelnen macht:


1. Ihr habt schon ergründet, das man irgendwie Zustände speichern muss. Dazu werden oft Selbsthalterelais bzw. RS-Flipflops verwendet. R steht für Rücksetzen bzw. Reset und S für Setzen bzw. Set. Das R steht bei dieser Bezeichnung vorne, also ist das Rücksetzen dominant, wenn beide Eingangssignale gleichzeitig anliegen. (Viele andere Möglichkeiten zum Speichern hat die Logo! leider nicht und diese scheint hier die Beste für das Gewünschte zu sein.)
Ihr habt selbst schon 'raus gefunden, dass der Speicher immer zurückgesetzt werden soll, wenn der Ausgang aus ist und nur unter bestimmten Bedingungen eingeschaltet werden darf.
Daraus entsteht folgende grundlegende Speicherzelle (I1 ist der jeweilige Eingang, I2 simuliert die Bedingung für's Setzen):







2. Es müssen für jeden Eingang immer 2 Sachen gespeichert werden:
-> 1. Ist der Eingang unter den ersten 3, damit der Ausgang als Nächstes zum Einschalten dran ist
-> 2. Ist der Eingang unter den ersten 2, die eingeschaltet wurden, damit der Ausgang eingeschaltet wird
Sind schon 3 Eingänge aktiv, kommt das Eingangssignal nicht zum ersten Speicher. Hat es diesen Speicher passiert, kann es den nächsten nur erreichen, wenn keine 2 Ausgänge aktiv sind.
Der Eingang muss also beide Speicher nacheinander passieren, damit der Ausgang eingeschaltet wird.


3. Es hat sich also ergeben, das Ihr 2 Bedingungen feststellen müsst: "Wieviele Eingänge und wieviele Ausgänge sind aktiv?"
Das kann man natürlich auch über digitale Verknüpfungen machen, allerdings wird das aber mit jedem Ein-/Ausgang immer aufwendiger. Deshalb zähle ich sowas gern analog.
Hier bietet sich dafür der Analog-Multiplexer an. In Abhängigkeit der aktiven Eingänge S1 und S2 gibt dieser einen von 4 parametrierbaren analogen Werten aus. Diese Werte stellt man entsprechend auf 0, 1 oder 2 (aktive Eingänge). Damit der Analog-Mux arbeitet, muss der EN-Eingang auf 1 sein.
Außerdem wird der Analogausgang nicht direkt verarbeitet. Deshalb muss er auf einen analogen Merker geführt werden, da unbenutzte Bausteinausgänge bei der realen Logo! nicht zulässig sind (der Simulation ist das egal). Das Ganze kann man dann mal so ausprobieren:






4. Ihr wisst jetzt also als analogen Wert, wieviele der 2 Eingänge eingeschaltet sind. Allerdings habt Ihr nicht nur 2 sondern 4 Eingänge. Die nächsten 2 Eingänge kann man wieder auf einen Analog-Mux (wie unter 3.) führen. Nun braucht man noch die Summe der beiden Multiplexer - also eine arithmetische Anweisung, bei der man durch Verweise den Wert des Analog-Mux 1 zu dem des Analog-Mux 2 addiert. Die anderen Rechnungen der arithmetischen Anweisung werden nicht benötigt, deshalb werden sie bei jeweils +0 belassen und haben somit keine Auswirkung. Und auch die arithmetische Anweisung arbeitet nur, wenn der EN-Eingang auf 1 ist:






5. Nachdem Ihr nun wißt, wieviele von den Eingängen aktiviert sind, wollt Ihr das auch noch von den Ausgängen wissen. :idea:


6. Unter 1. haben wir festgestellt, das die Anzahl der aktiven Ein- bzw. Ausgänge die Bedingung für die Freigabe der nächsten Speicherzellen darstellen. Dafür wird der analoge Schwellwertschalter benutzt. In Abhängigkeit des Analogwertes an seinem Eingang wird der Ausgang ein- oder ausgeschaltet:





Ihr solltet mit dieser Schaltung etwas herum experimentieren. Was passiert, wenn der Wert für's Ein- unter dem für's Ausschalten liegt, was, wenn beide gleich sind und was, wenn er größer ist? Manchmal führen auch verschiedene Methoden zum Ziel (wie hier), manchmal ist man auf ein bestimmtes Verhalten angewiesen.


7. Jetzt solltet Ihr je Eingang 2 Speicherzellen und für diese 2 ausgewertete Bedingungen haben. An dieser Stelle mußte ich feststellen, daß wenn ein Signal vor der ersten Speicherzelle wartet (also als 4. eingeschaltet) und die 2. Bedingung wieder freigegeben wird, dies natürlich auch die 1. Bedingung wieder freigibt und so das wartende Signal gleich über beide Speicherzellen "durchrast". Das war so natürlich nicht gewollt, sondern es sollte ja von Stelle 4 erstmal nur auf Stelle 3 vorrücken. Man muss deshalb also entweder den Signalfluss von der 1. zur 2. Speicherzelle ganz geringzügig (etwas länger als die Zykluszeit, 10ms sollten reichen) verzögern oder die Freigabe der Bedingung 1. Ich persönlich hab' mich für Ersteres entschieden. Wie die Verzögerung programmiert wird, überlasse ich mal Euren Überlegungen.


8. Außerdem hängt das Zählen der Ein- und Ausgänge auch etwas von der Lage im Schaltplan ab. Wenn Ihr auf mein obiges Programm schaut, werden die Eingänge direkt nach diesen und vor Erreichen der Speicherzellen gezählt, während das bei den Ausgängen erst nach dem Einschalten also im nächsten Zyklus passiert. Deshalb ist da die Bedingung "Sind denn schon 3 Eingänge aktiv" beim 3. eingeschalteten Eingang schon wahr, wenn die erste Speicherzelle des gerade eingeschalteten Eingangs erst noch aktiviert werden muss. Es gilt also den Schwellwertschalter entsprechend anzupassen.


9. Was oben noch fehlt: "Was ist, wenn beim Einschalten schon mehr als 2 Eingänge an sind? Welche davon sollen eingeschaltet werden?"
Ich hab' mich dafür entschieden, solange die Speicherzellen komplett zu sperren und die Schaltung erst freizugeben, wenn nur noch max. 2 Eingänge aktiv sind.
Zum Erkennen des 1. Zyklusses hat die Logo den Anlaufmerker M8. Den nutze ich zum Rücksetzen eines Selbsthalterelais. Dieses Relais darf erst dann gesetzt werden, wenn nur max. 2 Eingänge noch an sind. Wie Ihr das feststellt, sollte ja jetzt klar sein, oder?
Dies wäre dann eine 2. Bedingung für die 1. Speicherzellen.
(Am UND-Gatter müssten noch Eingänge frei sein. )


10. Und noch etwas wird bisher noch nicht beachtet (was gar nicht auffällt, wenn man nur simuliert): "Was passiert, wenn mehrere Eingänge gleichzeitig eingeschaltet werden?"
Wie soll die Logo! entscheiden, wer an welche Stelle gehört. Bei 'ner größeren SPS ist sowas relativ einfach, aber die Logo! gerät da an Ihre Grenzen. Eine Möglichkeit wäre das Ein- und Ausschalten der Eingänge über Taster mit Stromstoßschalter plus Flankenerkennung. Die Flanke kann man dann nur generieren, wenn nicht mehrere Taster gleichzeitig betätigt werden.
(Eventuell kann dadurch auch Punkt 9 entfallen. Ist ja im Prinzip das gleiche Problem nur beim Einschalten.)
Ihr seht, das ist aufwendig aber nicht unmöglich.
Ihr könnt' Euch ja ganz zum Abschluß auch da noch einen Kopf drüber machen.



Bis hierher funktioniert noch alles mit dem Logo!-Typ 0BA6.


Möglichkeit ab Logo!-Typ 0BA7:
11. Da sich die Speicherzellenlogik von Eingang 1 bis 4 immer wiederholt, hab' ich sie für den Eingang 1 einmal in ein UDF (eigene Logikbausteine) ausgelagert, kann sie so 4 mal wieder benutzen und hab' sichergestellt, das zum Einen alle 4 Eingänge sich der gleichen Logik unterziehen und zum Anderen, das ich jede Änderung an dieser Logik nur einmal durchführen muss und dies immer automatisch auf alle 4 Stränge übertragen wird.

Außerdem kann ich Euch so (hoffentlich) animieren, Eure Köpfe noch etwas anzustrengen, da Ihr auf dem Screenshot ja die Logik innerhalb der UDFs nicht sehen könnt. Ihr wollt schließlich auch was lernen.




Morgen fahre ich nach Dänemark, werde also nichts posten können. Ich denke aber eh', dass Ihr mindestens über's WE Zeit braucht, um über alles in Ruhe nach zu denken und auch mit den einzelnen Steps zu experimentieren.
Und wie Ihr seht, führen meist auch mehrere Wege nach Rom. Also gilt auch hier -> experimentieren, um zu lernen.



Bleibt mir vorerst nur noch: Viel Spaß dabei!


----------



## hucki (25 Juli 2013)

Tobias Dasch schrieb:


> Jeder Versuch mit den UDF eine Schaltung zu bauen ist irgendwie gescheitert


Ja, das kann ich mir vorstellen, da Ihr bis dato ja nicht wusstet, welche Logik ich in *meinem* UDF "versteckt" habe.



Aber jetzt habt Ihr zumindest schon mal meine Überlegungen.
Und Ihr solltet das (wie in meinem vorigen Post geschildert) erst mal ohne UDFs umsetzen.


----------



## Tobias Dasch (26 Juli 2013)

Dann studieren wir mal deinen Beitrag.
Danke!


----------



## hucki (27 Juli 2013)

So sieht bei mir die (etwas "mißglückte" 

) Druckvorschau der mittlerweile noch (auch für den Ausdruck) optimierten, bis Punkt 9 umgesetzten Schaltung (ohne UDFs) aus:






Hab' sogar den Druckzoom von den standardmäßigen 50% auf 75% hoch genommen und das Ganze passt immer noch locker auf eine Seite.


----------



## Tobias Dasch (28 Juli 2013)

Danke hucki für deine zahlreichen Hilfen, aber die Druckvorschau hat mich jetzt noch mehr verwirrt


----------



## hucki (28 Juli 2013)

Ach - nich' ärgern lassen.



Stellt mal zusammen, bis wohin Ihr folgen könnt.
Wenn's irgendwo hakt, zeigt einfach, was Ihr schon habt. Dann versuchen wir, den nächsten Schritt zu erarbeiten.

Ich denke mal, so lernt Ihr mehr, als wenn Ihr das nur einfach von mir "abmalt".


PS: In der Druckvorschau hab ich einige Verbindungen über deren Kontextmenü "aufgetrennt". So kann man einige Sachen etwas abrücken, ohne das die Linien danach kreuz und quer durch andere Bausteine bzw. das ganze Bild verlaufen.


----------



## Tobias Dasch (29 Juli 2013)

Also bis jetzt wissen wir nicht wirklich welche Bausteine wir auf die Setz-Eingänge der Selbsthalterelais legen sollen.
Vorallem 2. deiner Schaltungserklärung ist uns noch nicht klar.
Ich mach noch mal einen Anhang ran, wäre cool wenn du uns das mit dem Setzen nochmal erklären kannst. Danke. 
Anhang anzeigen Schaltplan1.zip


mfg Tobi


----------



## hucki (29 Juli 2013)

Tobias Dasch schrieb:


> Vorallem 2. deiner Schaltungserklärung ist uns noch nicht klar.


Wenn man 2 verschiedene Sachen speichern muss, wieviele Speicherzellen (je Eingang) werden dann benötigt?


----------



## Tobias Dasch (29 Juli 2013)

Zwei Speicherzellen pro Eingang, aber was definiert man unter "Speicherzelle"?


----------



## hucki (29 Juli 2013)

Tobias Dasch schrieb:


> Zwei Speicherzellen pro Eingang, aber was definiert man unter "Speicherzelle"?





hucki schrieb:


> Ihr habt selbst schon 'raus gefunden, dass der Speicher immer zurückgesetzt werden soll, wenn der Ausgang aus ist und nur unter bestimmten Bedingungen eingeschaltet werden darf.
> Daraus entsteht folgende grundlegende Speicherzelle (I1 ist der jeweilige Eingang, I2 simuliert die Bedingung für's Setzen):





Nächster Step:


hucki schrieb:


> 2. Es müssen für jeden Eingang immer 2 Sachen gespeichert werden:
> -> 1. Ist der Eingang unter den ersten 3, damit der Ausgang als Nächstes zum Einschalten dran ist
> -> 2. Ist der Eingang unter den ersten 2, die eingeschaltet wurden, damit der Ausgang eingeschaltet wird
> Sind schon 3 Eingänge aktiv, kommt das Eingangssignal nicht zum ersten Speicher. Hat es diesen Speicher passiert, kann es den nächsten nur erreichen, wenn keine 2 Ausgänge aktiv sind.
> Der Eingang muss also beide Speicher nacheinander passieren, damit der Ausgang eingeschaltet wird.






Man kann das Rücksetzen von B004 auch direkt mit dem Eingang verbinden. Kommt aber auf's gleiche Ergebnis raus.


----------



## hucki (29 Juli 2013)

Schau mir gerade mal Euren Schaltplan an.

Jetzt habt Ihr's mit dem getrennt verlegen übertrieben. Wenn Verbindungen auf den gleichen Ausgang gehen, dann dürfen und sollen sie sich sogar überlagern. Die "Weiche" ist ja an dem Verbindungspunkt zu erkennen.


----------



## Tobias Dasch (29 Juli 2013)

Wir haben es schon so ausprobiert, jedoch verändert sich die Funktion nicht zum vorherigen, soweit wir das überblicken. 
Anhang anzeigen Schaltplan1.zip


----------



## hucki (29 Juli 2013)

So seit ihr wirklich sehr nah' dran. Da fehlt Euch jetzt einfach die Erfahrung, wo man etwas drehen muss.
Deshalb werd' ich jetzt meine Version komplett posten (bin dann unterwegs):






PS: Irgendwie reagiert Euer Eingangszähler anders wie meiner. Komm' ich aber erst heut' abend zu, zu ergründen warum.


----------



## hucki (29 Juli 2013)

hucki schrieb:


> PS: Irgendwie reagiert Euer Eingangszähler anders wie meiner.


Ihr habt die arithmetische Anweisung vor den Analog-Mux erstellt, die diese zusammenrechnen soll. Deshalb habt' ihr da eine Zyklusverschiebung zwischen Erfassung und Ergebnisausgabe drin, was hier bei der Funktion von Nachteil ist.


Anschließend fehlt bei Euch auf jeden Fall noch Punkt 7.
In der Druckvorschau hab' ich dabei auf die 2. Variante umgestellt (B024). Das spart ein paar Bausteine.


----------



## Tobias Dasch (29 Juli 2013)

Okay, wir mussten es nochmal komplett neu aufbauen, also die MUX vor den Anweisungen aufgebaut, dann hat es funktioniert.:s12:
Wir werden jetzt eine Doku darüber schreiben, damit wir für die nächsten Schaltungen alles gleich besser nachvollziehen können.

Du warst uns eine große Hilfe, schön wenn jemand sein Wissen weiter gibt!


----------



## hucki (29 Juli 2013)

Die Schaltung hat aber immer noch Probleme, wenn mehrere Schalter auf einmal betätigt werden.
Wenn man normal simuliert, bemerkt man das nicht. Bei der Simulation einzelner Zyklen hat man aber genug Zeit, mehrere Schalter dazwischen zu betätigen. Man kann natürlich auch da noch etwas vorbeugen, trotzdem kommt man da ziemlich an die Grenzen der Logo!, weil man eben keine echten Bytespeicher und die Rechenmöglichkeiten damit wie bei den großen SPS hat.

Ihr habt Euch also da eine wirklich knifflige Aufgabe ausgesucht.


----------



## Tobias Dasch (30 Juli 2013)

Ich hätte dann doch noch einmal eine Frage. 
Bei deiner Schaltung in der Druckoptimierten Version unter der Überschrift: "Zählung und Auswertung aktiver Eingänge" geht ein zweiter Strang von der arithmetischen Anweisung aus, welche auf einen weiteren Schwellwertschalter und ein Selbsthalterelais geht. Diese Verbindung hat eigentlich immer High-Signal, deswegen verstehen wir den nutzen davon nicht. Wenn man diese zwei Bausteine löscht, sowie das UND-Gatter B027, verändert sich auch nichts an der Funktion soweit wir das überblicken.

mfg Tobi


----------



## hucki (30 Juli 2013)

Tobias Dasch schrieb:


> Wenn man diese zwei Bausteine löscht, sowie das UND-Gatter B027, verändert sich auch nichts an der Funktion soweit wir das überblicken.


Doch -> schaltet mal 3 oder 4 Eingänge ein, *bevor* Ihr die Simulation startet!

Sehet und analysiert (und lest nochmal den Punkt 9).
 



PS: Das UND-Gatter B027 hab' ich nur eingefügt, damit ich den Freigabe-Strang besser zeichnen kann. Eigentlich wären auf den UND-Gattern B001, B005 ... noch Eingänge frei gewesen, um von B025 da direkt d'rauf zu gehen.


----------



## hucki (3 Dezember 2013)

@LT Smash,
ich beginne mal hier im zugehörigen Thread Deine Fragen aus der PN zu beantworten, denn der weitere Gedankenaustausch zu diesem Thema könnte auch andere Suchende interessieren.



			
				LT Smash schrieb:
			
		

> Hab das Programm. ...
> Jetzt noch die Frage: Was kann man aus Deiner Sicht daran noch optimieren?


Du solltest den Thread auch lesen und nicht nur das Programm downloaden!





hucki schrieb:


> Die Schaltung hat aber immer noch Probleme, wenn mehrere Schalter auf einmal betätigt werden.
> Wenn man normal simuliert, bemerkt man das nicht. Bei der Simulation einzelner Zyklen hat man aber genug Zeit, mehrere Schalter dazwischen zu betätigen. Man kann natürlich auch da noch etwas vorbeugen, ...


Ich hab' dafür zwar schon was programmiert, trotzdem würde mich vorerst interessieren, wie Du das "Problem" lösen würdest.






Außerdem wolltest Du ja 5 Ein- & Ausgänge:


LT Smash schrieb:


> Hi, folgendes Problem:
> Habe 5 digitale Eingänge (Anforderungssignale), und 5 entsprechende Ausgänge.
> Egal welcher Eingang wann und wie oft kommt, es sollen immer nur 2 Anforderungen bedient werden, also der entsprechende dazugehörige Ausgang geschalten werden.
> ... die geplante Hardware ist allerdings ne LOGO


Da wäre es natürlich optimaler, wenn die jetzige Schaltung noch einen Ein- und einen Ausgang mehr hätte (incl. einer weiteren Speicherstufe!).








			
				LT Smash schrieb:
			
		

> Habe bei mir noch den Anlaufmerker M8 auf die EN-Eingänge der analogen Blöcke gelegt.



Und was bringt das bzw. was soll es bringen?
Ich kann da momentan keinen Nutzen von erkennen.


----------



## LT Smash (4 Dezember 2013)

hucki schrieb:


> 10. Und noch etwas wird bisher noch nicht beachtet (was gar nicht auffällt, wenn man nur simuliert): "Was passiert, wenn mehrere Eingänge gleichzeitig eingeschaltet werden?"
> Wie soll die Logo! entscheiden, wer an welche Stelle gehört. Bei 'ner größeren SPS ist sowas relativ einfach, aber die Logo! gerät da an Ihre Grenzen. Eine Möglichkeit wäre das Ein- und Ausschalten der Eingänge über Taster mit Stromstoßschalter plus Flankenerkennung. Die Flanke kann man dann nur generieren, wenn nicht mehrere Taster gleichzeitig betätigt werden.
> (Eventuell kann dadurch auch Punkt 9 entfallen. Ist ja im Prinzip das gleiche Problem nur beim Einschalten.)
> Ihr seht, das ist aufwendig aber nicht unmöglich.
> Ihr könnt' Euch ja ganz zum Abschluß auch da noch einen Kopf drüber machen.



Hab das Projekt auf "2 (Ausgänge) aus 5 (Eingängen)" erweitert und mich dem anfangs aufgeführten Problem mal angenommen. 
Siehe Anhang. 
OK oder wäre die Flankenauswertung der Eingänge evtl. auch einfacher umzusetzen?
Anhang anzeigen 2013-12-04 5E 2A.pdf

Anhang anzeigen 2013-12-04 5E 2A.zip


Grüße, LT


----------



## hucki (4 Dezember 2013)

Hab' da einfach mal die Schalter wahllos nacheinander betätigt, so dass auch mehr als 2 an sind, und da kam u.a. auch sowas bei raus (reproduzierbar):





Ist noch nicht unbedingt das, wo Du hin wolltest, oder?



Und ich behaupte mal, Dir fehlt da auf jeden Fall noch was:


hucki schrieb:


> ... noch einen Ein- und einen Ausgang mehr hätte *(incl. einer weiteren Speicherstufe!)*.







hucki schrieb:


> LT Smash schrieb:
> 
> 
> 
> ...


Seh' ich das richtig, dass Du das zur Unterdrückung Deiner Flankenabfrage (die wohl die Ursache für das fehlerhafte Verhalten auf obigen Bild ist) beim Start brauchst?




LT Smash schrieb:


> OK oder wäre die Flankenauswertung der Eingänge evtl. auch einfacher umzusetzen?


Ich frage gar keine Flanken ab und das sieht für mich einfacher (vor allem einfacher nachvollziehbar!) aus.  
Ich zähle einfach nur die Anzahl der eingeschalteten Eingänge und vergleiche sie mit dem vorigen Zustand. In SCL würde man z.B. schreiben:

```
IF Eingaenge = Eingaenge_Old + 1 THEN
    ... // Mach wat
END_IF;
Eingaenge_Old := Eingaenge;
```
Bei meiner momentanen Variante muss man aber auch (wie bei Dir) diese Mehrfacheingabe noch rückgäng machen.
Da ist also auch noch etwas Potential vorhanden.






Noch ein Tipp: Für die einzelnen Speicherstufen ist es m.M.n. am besten, hinter der jeweiligen Stufe zu zählen und diese dementsprechend freizugeben. Bei der 2aus4-Variante oben zähle ich ja bei den Eingängen vor der Speicherstufe, aber das ist etwas problematisch.
Und die Zeitverzögerung beim Freigeben der Stufen von den Ausgängen zu den Eingängen immer etwas vergrößern, damit kein Signal "durchrauschen" kann.


----------



## LT Smash (5 Dezember 2013)

Habs nochmals angepasst.
Jetzt sind es 3 Speicherstufen, wobei die erste Stufe jetzt mittels Flankenauswertung und -Aufsummierung sicherstellen soll, daß pro Zyklus nur 1 Eingang aktiv werden kann (eingangs aufgeführte Problematik unter 10.)
Die Zeitverzögerung in der ersten Stufe wird benötigt, da die Durchlaufzeit der Auswertung im unteren Bereich wohl etwas länger dauert und verhindert das angesprochenen "Durchrauschen eines Signals".
@Hucki: Danke für den "SCL-Tip", der hat den Knoten bei mir im Hirn wohl aufgedröselt. 
Siehe Downloads:
Anhang anzeigen 2013-12-05 5E 2A.pdf
Anhang anzeigen 2013-12-05 5E 2A.zip

Kommentare erwünscht!


----------



## hucki (6 Dezember 2013)

Hm, was soll ich da jetzt sagen?


Simu gestartet -> I1 eingeschaltet -> I2 eingeschaltet -> I4 eingeschaltet -> I5 eingeschaltet -> I3 eingeschaltet -> I2 ausgeschaltet (alles schön langsam nacheinander):







hucki schrieb:


> Ist noch nicht unbedingt das, wo Du hin wolltest, oder?


Sorry.





hucki schrieb:


> Bei meiner momentanen Variante muss man aber auch (wie bei Dir) diese Mehrfacheingabe noch rückgäng machen.


Das Problem hast Du auch noch. Ich hab' den Benutzer zumindest mal mit einer Lampe an Q6 auf diese Fehleingabe aufmerksam gemacht, damit er weiß, das er da was rückgängig machen muss.
Hab' da momentan 2 Lösungsvarianten am Test. Mal sehen.


Wenn Du soviele Analog-Blöcke mit einem High am EN versorgen musst, find' ich es übersichtlicher den EN-Eingang einfach unbeschaltet zu lassen und nur zu negieren. Kommt das gleiche Ergebnis raus.

Du hast die unbenutzten Analog-Ausgänge zwar auf einen Dummy-Schwellwertschalter geführt, aber deren Digital-Ausgang wiederum unbeschaltet gelassen. Der braucht aber auch einen Abschluss, z.B. eine offene Klemme, damit die reale LOGO! nicht in Störung geht.
Bei dieser Dummy-Geschichte lassen sich 2 unbenutzte Analogausgänge mit einem Analogkomperator zusammen fassen und bis zu 4 Digital-Ausgänge z.B. mit einem UND. So kann man Bausteine und offene Klemmen bzw. Merker sparen.


----------



## LT Smash (6 Dezember 2013)

Hi und anbei die aktuelle Version zum austesten.
Im dem Fall, wenn sich die Logo nicht mehr zwischen mehreren gleichzeitig kommenden Eingängen entscheiden kann, entscheiden nun die Einschaltverzögerungen wer zuerst darf. 
Anhang anzeigen 2013-12-06 5E 2A.zip
Anhang anzeigen 2013-12-06 5E 2A.pdf

Sollte nun wieder etwas näher an der Lösung liegen.
Grüße, LT Smash


----------



## hucki (6 Dezember 2013)

Mit den Zeiten hatte ich auch versucht. Allerdings kann es da theoretisch passieren, das zwar die Eingänge nacheinander betätigt werden, aber die Zeiten dann gleichzeitig auslaufen und dementsprechend die Eingänge gleichzeitig durchgeschaltet werden.
Muss man sich zwar Mühe geben, aber klappt auch bei Dir:





Wirklich verhindern kann man das nur, wenn die Freigaben für die erste Speicherstufe nicht gleichzeitig sondern immer getaktet nacheinander kommen. Ich hab' da zwei Varianten getestet, einmal mit Zählern und einmal mit Schieberegister.
Letzteres gefiel mir am Besten. Hab' dann noch etwas Aufwand betrieben, damit die Taktung nicht ständig läuft, da das Geblinker in der Simu mir auf den Keks ging. Ansonsten könnte man bei mir noch auf die ganze Erfassung der Eingänge verzichten:



 

 (auf dem 3. Bild wären die Dummies)

Hab' Dir die Version mit der ständigen Taktung auch mal mit ins zip gepackt.
Sowohl bei der Zeit als auch bei der Taktung kann sich bei ganz dicht aufeinander folgenden Einschalten zweier Eingänge u.U. der letztere noch vordrängeln. Das ist dann halt so, als ob sie gleichzeitig eingeschaltet worden wären.


----------



## LT Smash (9 Dezember 2013)

Danke Dir für die tolle Arbeit. 
Die Lösung mit dem Schieberegister erscheint mir optimal für das Problem. 
Sobald man Zeitverzögerungen ins Spiel bringt geht man Kompromisse ein, das ist irgendwo klar.
In meinem Fall war das die Prioritätenverteilung der Eingänge aufgrund der unterschiedlich eingestellten Zeiten und die Gefahr, daß die Einschaltverzögerungen zeitgleich auslaufen. 
Was man doch aus einer LOGO alles herauskitzeln kann... 
Grüße, LT Smash


----------



## hucki (9 Januar 2014)

Wieviel einfacher doch das Ganze in SCL zu programmieren ist: X_aus_N.
Aber auch mit der LOGO! hat's Spaß gemacht.


----------

