LabVIEWForum.de
mehrere while-Schleifen stoppen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: mehrere while-Schleifen stoppen (/Thread-mehrere-while-Schleifen-stoppen)

Seiten: 1 2


mehrere while-Schleifen stoppen - Jibiel - 15.02.2011 15:39

Ich benutze in meinem Programm mehrere while-Schleifen, die parallel laufen.
Sie werden alle bei Programmstart gestartet und sollen bei Programmende auch alle beendet werden indem man auf einen einzigen stop button klickt.
Das habe ich nach dieser Anleitung hier auch soweit hingekriegt.

http://digital.ni.com/public.nsf/allkb/267704CDE91156D186256F6D00711AAE

Es werden aber nur dann alle while schleifen beendet, wenn ich mindestens etwa 0,5 sek auf den stop button klicke. Wenn die Klickdauer kürzer ist, dann passiert einfach gar nichts.
Hat das damit zu tun, dass meine while schleifen erst nach 0,5 sek einen neuen Schleifendurchlauf beginnen und sie deshalb den boolschen Wert true nicht rechtzeitig zum neuen Durchlauf erhalten?

Wie könnte ich das Problem lösen?

Liebe Grüße
Jasmin


RE: mehrere while-Schleifen stoppen - GerdW - 15.02.2011 16:00

Hallo Jasmin,

Zitat:wenn ich mindestens etwa 0,5 sek auf den stop button klicke
Das dürfte an einem falschen Switch-Mode deines Buttons liegen. Stelle den mal von "Switch, solange gedrückt" auf "Switch on click"...


RE: mehrere while-Schleifen stoppen - Jibiel - 15.02.2011 16:05

Wenn ich ihn auf "Beim Drücken schalten" stelle, dann bleibt der stop button aber auf true.
Ich will ihn ja am Ende auf false haben, sonst wird beim Neustart des Programms alles sofort wieder beendet da der Button noch auf true ist.
Den Button manuell vor Neustart auf false zu stellen ist nervig.
Wenn es dafür eine Möglichkeit gäbe, den automatisch am Ende auf false zu stellen, wäre das natürlich auch eine Lösung. Aber ich weiß nicht wie.


RE: mehrere while-Schleifen stoppen - GerdW - 15.02.2011 16:08

Hallo,

Zitat:Ich will ihn ja am Ende auf false haben, sonst wird beim Neustart des Programms alles sofort wieder beendet da der Button noch auf true ist.
Dann setze ihn doch beim Programm-Start explizit auf FALSE...
Oder verwende einen Melder/eine FGV, um den Status des Buttons für alle Schleifen zwischenzuspeichern. So benötigt man keine lokalen Variablen mehr und kann die einzelnen Schleifen leicht in subVIs verfrachten...


RE: mehrere while-Schleifen stoppen - Lucki - 16.02.2011 08:50

In dem zitierten Beispiel wurde vergessen zu sagen, daß das so nur mit den dort verwendeten kurzen Wartezeiten von 10ms zuverlässig funktioniert, da es dann nicht möglich ist, innerhalb dieser Zeit den Schaltknopf wieder loszulassen.
Die lehrbuchmäßig wasserdichte Lösung für das Stoppen von mehreren Schleifen sieht hingegen so aus:
[attachment=32316]
wobei das nur eine von vielen Möglichkeiten ist. Der Grundgedanke ist: Das Control wird erst dann wieder zurückgesetzt - und zwar mit einer lokalen Variablen - wenn alle Schleifen beendet sind. (Man könnte z.B. auch ein Sequenzstruktur verwenden)
Ob man den Modus "Bei Drücken..." oder "Bei Loslassen.."verwendet, ist lediglich eine Frage der Bedien-Optik. Ein VI, dass mit einem Modus nicht funktioniert, kann man nicht mit Umstellen auf den anderen Modus reparieren. Ebenso gilt umgekehrt: Wenn ein VI funktioniert, dann mit beiden Modi gleichermaßen.
Die einfachere Lösung ist natürlich, den Schalter bei Stop einfach gedrückt zu lassen und erst beim nächsten Start rückzusetzen. Das empfinde ich als unschöne Lösung, aber die Geschmäcker mögen halt verschieden sein.


RE: mehrere while-Schleifen stoppen - Jibiel - 16.02.2011 10:38

Danke schonmal für die Lösungsvorschläge.
@GerdW Wie setze ich einen Button bei Programmstart automatisch zurück? Hab da leider auch nichts zu gefunden.
FGVs hören sich ziemlich kompliziert an für mein eigentlich einfaches Problem.

@Lucki Wie heißt das Element aus deinem Beispiel, das nach den Schleifen den Stopp-Wert buffert? Ich hab dieses Element nirgendswo finden können.
Warum hat die Variable Stopp überall ein Häuschen links neben dem Namen?


Kleine Frage am Rande:
Warum erstellt Labview eigentlich automatisch einen Stopp-Button? Kann man das ganze Programm inklusive aller Schleifen nicht einfach mit dem roten Knopf beenden? Hab das bisher immer nur so gemacht, wenn das Programm sich anders nicht mehr beenden ließ. Oder birgt das Risiken mit irgendwelchen nicht gelöschten Variablen, etc.?


RE: mehrere while-Schleifen stoppen - GerdW - 16.02.2011 10:42

Hallo,

Zitat:bei Programmstart automatisch zurück
Mit einer lokalen Variable...

Zitat:Wie heißt das Element aus deinem Beispiel, das nach den Schleifen den Stopp-Wert buffert?
Lokale Variable. Die sehen bei LV2010 so aus...

Zitat:Warum erstellt LabVIEW eigentlich automatisch einen Stopp-Button?
Bei mir nicht...

Zitat:nicht einfach mit dem roten Knopf beenden
To stop a program with "Abort" is like using a tree to stop a car. Alles klar?


RE: mehrere while-Schleifen stoppen - Jibiel - 16.02.2011 10:46

Ich meinte das Element, wo links drei Kästen sind und rechts ein ^.


RE: mehrere while-Schleifen stoppen - GerdW - 16.02.2011 10:48

Mehrfacharithmetik (numerische oder boolsche Palette), konfiguriert als Mehrfach-NAND...
(dient hier nur dazu, auf alle 3 Schleifen zu warten und gleich noch das benötigte FALSE auszuspucken...)


RE: mehrere while-Schleifen stoppen - NWOmason - 16.02.2011 10:48

(16.02.2011 10:38 )Jibiel schrieb:  Wie setze ich einen Button bei Programmstart automatisch zurück? Hab da leider auch nichts zu gefunden.
z.B. mittels Lokaler Variable, welche so programmatisch eingepflegt wird, dass sie gemäß Datenfluss als erstes vor allen anderen Oprationen (Also zum Programmstart) ausgeführt.


(16.02.2011 10:38 )Jibiel schrieb:  Wie heißt das Element aus deinem Beispiel, das nach den Schleifen den Stopp-Wert buffert? Ich hab dieses Element nirgendswo finden können.
Mehrfacharithmetik


(16.02.2011 10:38 )Jibiel schrieb:  Warum hat die Variable Stopp überall ein Häuschen links neben dem Namen?
Das ist eine lokale Variable.


(16.02.2011 10:38 )Jibiel schrieb:  Kleine Frage am Rande:
Warum erstellt Labview eigentlich automatisch einen Stopp-Button? Kann man das ganze Programm inklusive aller Schleifen nicht einfach mit dem roten Knopf beenden? Hab das bisher immer nur so gemacht, wenn das Programm sich anders nicht mehr beenden ließ. Oder birgt das Risiken mit irgendwelchen nicht gelöschten Variablen, etc.?

Siehe meine Signatur Big Grin

Beste Grüe,
NWO

@Edit: Ich sehe schon, ich bin für das Forum hier viel zu langsam Sad