LabVIEWForum.de - Wie kann man eine While Schleife von außen stoppen?

LabVIEWForum.de

Normale Version: Wie kann man eine While Schleife von außen stoppen?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hi,
mein Problem ist, dass man While-Schleifen nur von innen(bzw.die Schleifen sich selbst-) stoppen kann. Ist es möglich dies auch von außen zu tuhen?

MfG,
Chris
Ich hatte den Fall noch nie, aber spontan würde ich die Benutzung einer lokalen Variable vorschlagen....*g*

André
Die Variable muss sich dann aber im Inneren der Schleife befinden....das soll ja gerade nicht der Fall sein.

Ich möchte alle Vorgänge innerhalb der Schleife beenden, ohne dass diese zuende ausgeführt werden.
Danach soll die Schleife bzw. Statemachine neu gestartet werden. Dies geschieht ganz einfach mit einer weiteren Schleife außen herum die endlos läuft, bis das ganze Programm beendet wird.
' schrieb:Hi,
mein Problem ist, dass man While-Schleifen nur von innen(bzw.die Schleifen sich selbst-) stoppen kann. Ist es möglich dies auch von außen zu tuhen?

MfG,
Chris
Hallo Chris,

Kannst du "von außen stoppen" näher definieren, das erleichtert das helfen.

Joschi
Habe gerade oben noch korrigiert

Hier Beispiel
Hallo!

Du möchtest also die Innere Schleife beenden, egal in welchen Zustand sie sich befindet, wenn in der äusseren Schleife was passiert - richtig?

In diesem Fall würde ich die Programmstruktur überdenken - lass die innere Schleife weg und nimm diese Aufgabe mit in eine Statemachine, die halt iimerwieder den Selben Case ansprigt.

Oder Poste ein aussagekräftigeres VI. Big Grin

Gruß!
Prinzipiell läßt sich eine While Schleife nur über den Stopp Button beenden. Auf diesen kannst du natürlich nicht nur mittels dem klassischen Button zugreifen.
In jedem Fall wird aber natürlich die Schleife noch ein letztes mal fertig durchlaufen, d.h. alle Tasks in der Schleife die noch anstehen werden ausgeführt.

Beispiele um eine Schleife zu stoppen wären:
- Button
- Melder
- lokale Variable
und oft sehr nützlich: Errorcluster direkt an die Abbruchbedingung anschließen. Den kannst du z.B.: auch um all deine SubVis in der Schleife als Case anlegen, dann werden die auch nicht mehr ausgeführt, sollte ein Error auftreten.

Nur um es zu erwähnen: Es gibt tatsächlich 2 Funktionen die ein Vi respektive LV stoppen. Zu finden unter "Anwendungssteuerung".
Im Allgemeinen ist so ein Vorgehen jedoch nicht zu empfehlen, da sofort abgebrochen wird und dadurch etwaige Deinitialisierungen nicht ausgeführt werden.
Die Innere Schleife ist doch meine Statemachine, die bestimmte Subvis ausführt, wenn ich die entsprechenden Knöpfe (Boolesch) drücke.
Diese Subvis können also nurnoch gestoppt werden, wenn ich die ganze Schleife/Statem. stoppe.
Der Stopp der Inneren Schleife käme in meinem Fall aber einem Programmstop gleich. - Deshalb die äußere Schleife, die die Statemachine nach einem "Vollstopp" wieder anschmeißt.

Mit der ganzen Sache möchte ich einfach nur erriechen, dass alle laufenden Subvis sofort stoppen, ohne dass das ganze Programm gestoppt wird.

Falls man einen bereits laufenden Schleifendurchlauf nicht unterbrechen kann, ist mein Poblem ohnehin nicht zu lösen.
' schrieb:Die Variable muss sich dann aber im Inneren der Schleife befinden....das soll ja gerade nicht der Fall sein.


eben !

die lokale variable bezieht sich auf einen Button beipielsweise, der ausserhalb der Schleife ist.
Setzt du nun den button, so setzt sich auch die Variable und kann deine Schleife beenden. Das funktioniert 100%ig.



Darüber hinaus ist, je nachdem wie dein konkreter Anwendungsfall ist, eine StateMachine tatsächlich die bessere Lösung.

' schrieb:Falls man einen bereits laufenden Schleifendurchlauf nicht unterbrechen kann, ist mein Poblem ohnehin nicht zu lösen.



Der gerade aktuelle Schleifendurchlauf wird stets zu Ende geführt, weil zu Beginn die Abbruchbedingung nicht erfüllt war.
Wenn ich das richtig verstanden habe, ist eine Statemachine eine Endlosschleife, die eine Casestruktur abarbeitet.

Falls das richtig ist, kann man eine Statemachine also nicht Stoppen während sie einen Schleifendurchlauf durchführt, sonder erst im kommenden Durchlauf wenn die Schleifenbedingung auf False gesetzt werden kann.

Ich wollte einfach nur einen Abbruchbutton für mein Programm haben, der alle laufenden Prozesse stoppt, aber das Programm nicht beendet.

Falls es da keine Lösung gibt, muss sich der zukünftige Benutzer meines Progs. eben genau überlegen auf welche Knöpfe er drückt^^


MfG,
Chris
Seiten: 1 2
Referenz-URLs