Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
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 ?
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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
' 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.
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 editieren
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 !! ;-)
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.
22.03.2013, 10:00 (Dieser Beitrag wurde zuletzt bearbeitet: 22.03.2013 10:04 von GerdW.)
- 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 )...
- 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.