(28.08.2016 15:38 )psypher schrieb: Ich glaube jetzt funktioniert`s
Ja, das kann man so sagen ...
Der Anschluss des Bedienelementes "Stopp" gehört in den Event "Stopp", nicht in die While-Schleife um die Eventsequenz: Das automatische Rücksetzen des Buttons (Schaltverhalten Latch) geschieht dann, wenn der Anschluss ausgelesen wird - und das soll sinnvollerweise im Event passieren.
Die Boolsche Leitung zwischen "Alter Wert" und Tunnel im Event "Reset" ist sinnlos (und daher überflüssig, einfach weg machen): Der "Alte Wert" ist nämlich (fast) immer false - weswegen das Programm ja auch funktioniert. Es gibt aber die ganz seltenen Fälle, in denen auch "Alter Wert" true wäre - dann würde dein Programm richtig funktionieren.
Jetzt solltest du die weiteren Programmierfehler, die zu Ablauffehlern führen können (aber nicht müssen), beseitigen: sog. Race Conditions.
Innerhalb einer Struktur mit mehreren parallelen Abläufen dürfen die selben Daten nur ein einziges Wire-Netz bilden: In der Struktur "trace Auswertung"-"KlebeAchse" verwendest du die Daten von "Max. Index 3" zweimal. Einmal schreiben auf den Anschluss, einmal lesend von der Variablen. Problem: Wird die Variable gelesen, bevor der Anschluss (also auch die Variable) geschrieben wird, oder danach. Wird der Wert vor dem Schreiben gelesen, steht möglicherweise ein anderer drinnen als nach dem Schreiben. Das hat aber Auswirkungen auf "M 3". Einfach die Variable löschen und den Wire zum Anschluss hin verzweigen auf den Index-Eingang von Array Indizieren.
Das Schlechte an den RaceConditions ist nicht, dass sie einen programmtechnisch gesehen falschen Code darstellen, sondern dass sie offensichtlich fehlerfrei laufen können und in der Lage sind, erkennbare Fehlereignisse nur ganz selten auftreten zu lassen.