LabVIEWForum.de - Beenden einer while-Schleife

LabVIEWForum.de

Normale Version: Beenden einer while-Schleife
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
ich habe eine Frage zur while-Schleife:
In der while-Schleife befindet sich eine Flache Sequenz mit z.B. 5 Rahmen.
Am Bedingungsanschluß der while-Schleife ist ein Stopp-Taster angebracht, so daß die while-Schleife beim Druck auf diesen Taster beendet wird.

Nun meine Frage:
Wenn das Programm sich z.B. gerade im 3.Rahmen befindet und der Stopp-Taster wird gedrückt, wann wird die while-Schleife verlassen ?
Sofort unmittelbar, oder wird erst die gesamte Flache Sequenz abgearbeitet und dann erst wird der Tastdendruck erkannt und die Schleife verlassen ?

Vielen Dank,
Herby
Erst wenn alles abgearbeitet ist.

Wenn die "Programm-Sequenz" früher abbrechen möchtest, musst du auf eine (zb.) State Machine wechseln.
Wenn du das Terminal des Buttons parallel zur Sequenz hast, kann es sogar sein, dass noch ein weiterer Durchlauf gestartet wird, da der Terminal-Wert schon beim Start der While-Schleife ausgelesen wurde...

Gruß, Jens
' schrieb:Sofort unmittelbar, oder wird erst die gesamte Flache Sequenz abgearbeitet und dann erst wird der Tastdendruck erkannt und die Schleife verlassen ?
Die Frage hat Martin Heller schon beantwortet, aber das gilt auch nur, wenn das VI wie im rechten Bild ausieht.
Im linken Bild geschieht folgendes: Der Stop-Knopf wird in der Regel, d.h. mit 99.9 %iger Wahscheinlichkeit, zuerst gelesen, und dann erst wird die Sequenzstruktur abgearbeitet.
Wird nun, während der dritte Sequenz abgearbeitet wird, der Stop Knopf gedrückt wird, so führt das am Ende der Sequenz noch nicht zum Abbruch der Schleife: Der Kopf wurde bereits gelesen und als false erkannt. Erst nach einem weiteren vollständigen Schleifendurchlauf wird das Programm beendet.
[attachment=31665]
Edit: Ich war langsamer als Jens, weil ich noch das VI gemacht habe. Also, Lucki, kapier das doch mal endlich: Erst den Beitrag mit einem kurzen Satz beantworten und die Priorität sichern, dann in Ruhe alles ausarbeiten und den eigenen Beitrag editierenMellow
Hallo Lucki,
vielen Dank, jetzt habe ich es verstanden.

Ich habe aber noch ein anderes Problem, das ich unter Datenkommunikation beschreiben werde
Vielleicht kannst Du mir auch dabei weiter helfen.

Gruß
Herby
Hallo, ich hab das gleiche Problem wie Herby07 im ersten Post beschrieben (in einer Whileschleife 4 cases). auch wenn schon etwas länger her....
Ich möchte - egal in welcher case sich das programm befindet - die while schleife abbrechen !
hier wurde auch mal auf eine "State-machine" verwießen, was mich aber irgendwie nicht weiterbringt.
Hat jmd einen konkreten lösungsvorschlag für mich ? wäre super !
schon mal danke im voraus an die forum-members und labview-strategen !! ;-)

Gruß Sportfreund
Hallo sportfreund,

Herby sprach von einer Sequenz mit mehreren Rahmen, du dagegen von "Cases". Was genau meinst du also: eine Case-Struktur oder eine Sequenz?
Merke: Es ist immer hilfreich, ein VI (oder zumindest ein Bild des BD) anzuhängen...

Wenn deine While-Schleife "sofort" abbrechen soll, musst du das auch entsprechend programmieren. Es gilt nämlich immer "THINK DATAFLOW", d.h. erst wenn alle Knoten innerhalb einer Struktur (Sequenz, Case, Schleife) abgearbeitet sind, kann die Struktur selbst weiter"arbeiten"...
hallo GerdW,
erstmal danke für die schnelle antwort - und sorry für meine falsche beschreibung.
ich meinte natürlich mehrer sequenzen in einer while schleife ! (siehe screenshot)
die while-scheife soll sofort beendet werden bei drücken des "Beenden"-Tasters - egal in welcher sequenz sich das programm befindet.
Hallo sportfreund,

dann lese dich ins Thema Statemachine ein Big Grin

- THINK DATAFLOW: Die Sequenz wird erst beendet, wenn alle Frames abgearbeitet sind! Du müsstest also in jedem Frame den Stopp-Button abfragen und ggf. den Frame (unter Einsatz einer Case-Struktur in jedem Frame!) "überspringen". Da das unnötiger Aufwand ist, macht das keiner (zumindest kein "guter" Programmierer Smile)...

- Rechtsklick auf den Sequenzrahmen -> Ersetzen durch Case-Struktur: Jetzt den Schleifen-Iterator benutzen, um die einzelnen Cases aufzurufen (Frame 0 wird zu Case 0, Frame 3 zu Case 3 usw.). Das ist jetzt schon eine (sehr einfache) Statemachine. Jetzt wird nach jedem Case die Stopp-Bedingung geprüft...

Zitat:sorry für meine falsche beschreibung. ich meinte natürlich mehrer sequenzen in einer while schleife
<pingelig-Modus an>
- Du meinst nicht "mehrere Sequenzen in einer Schleife", sondern "eine Sequenz mit mehreren Rahmen" in einer Schleife...
- Deine Tastatur ist kaputt (zumindest die Hochstelltasten), schaff dir eine neue an!
<pingelig-Modus aus>
Noch kleine Anmerkung zur "Statemachine":
Dein abgebildetes VI ist mal eines der eher seltenen Beispiele, wo die Realisierung in Labview umständlicher ist als in einer textbasierten Sprache.
Es handelt sich um eine einfache Ablauffolge, und in einer Textsprache würde man die Kommandos einfach hintereinander schreiben - fertig.
In Labview muß man dafür, wenn man keine Datenabhängigkeiten hat, entweder eine Sequenz verwenden, oder aber eine "Statemachine", die allerdings, wie Gerd schon sagte von einfachster Struktur ist. Kein Mensch außer einem "Labview-Programmierer" würde so etwas schon als "Statemaschine" bezeichnen - es ist ja nach wie vor eine reine Ablauffolge. (Wenn man mal von der Stop-Abfrage nach jedem Kommando absieht).

Dein Beispiel hat sowieso einen Hinkefuss: Zwar gibt es keine Datenabhängikeiten zwischen den Codeteilen, aber gerade deshalb ist die Reihenfolge der Abarbeitung egal. Das ganze Gedöns mit Sequenzstruktur oder Statemachne ist überflüssig.
Referenz-URLs