Stoppen von parallel laufenden Schleifen:
Du brauchst für die 2. Schleife eine lokale Variable, deshalb kann der Knopf kein Latch-Verhalten haben und muß nach Beenden der beiden Schleifen mit einer weiteren lokalen Variablen (oder einem Methodenknoten) rückgesetzt werden. Notfall kann man auch darauf verzichten, der Schalter bleibt dann nach Beendigung gedrückt. Dann sollte er aber vor dem nächsten Start rückgesetzt werden.
Im Bild oben siehst Du 5 Möglichlkeiten, wie man den Schalter wieder rücksetzt. Zwei davon sind falsch. Warum?
Beispiel: Rücksetzen an der unteren Schleife. Die Schleifen werden in der Regel nicht synchron beendet. Es ist deshalb möglich und ganz normal, daß die untere Schleife vor der oberen beendet wird. Im Anschluß daran wird der Schalter sofort auf false gesetzt, und zwar bevor der eigentliche Schalter in der oberen Schleife überhaupt gelesen wurde. Wenn er dann gelesen wid, ist er schon wieder auf false, und die obere Schleife wird nie beendet. (Das Ganze ist zufallsbedingt, und die Chancen dass es oft funktioniert, steigen, wenn die obere Schleife schneller ist als die untere. Aber sauber ist es nicht)
Wenn Du aber ein Lob über deine Programmiertechnik ernten möchtest, dann mache es nlcht mit lokalen Variablen, sondern mit Occurrences oder Meldern. Occurrences sind sehr viel einfacher als Melder und für diese Aufgabe genau angemessen, der Haken ist nur, das NI aus irgendwelchen Gründen empfiehlt, sie möglichst nicht mehr zu verwenden. (Das kann man aber ignorieren, man muss das ja nicht gelesen haben.) Der große Vorteil von beiden ist außerden, dass man damit jede Scheife augenblicklich beenden kann, auch wenn sie intern einen Timer von mehreren Sekunden hat.
Hier Beispiel, wie alle drei Schleifen mit hohen Wartezeiten von mehreren Sekunden augenblicklich beendet werden (Den Ereigniscase habe ich nur noch hinzugenommen, damit es etwas schwerer wird
)