LabVIEWForum.de - Programm stoppt nicht

LabVIEWForum.de

Normale Version: Programm stoppt nicht
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe das Problem das mein Programm nicht stoppt. Ich habe schon alles mögliche ausprobiert aber es möchte einfach nicht klappen!
Vielleicht kann mir ja jemand von Euch hier weiterhelfen.
mfg hmueller


[attachment=27048]

Lv09_img2
Hallo hmueller,

könnte dein Problem mit Dataflow-Problemen zusammenhängen?

3 ineinander geschachtelte Schleifen, deren Abbruchknopf in der innersten versteckt ist, wobei dieser noch über ein local von der äußersten Schleife beeinflußt wird...
Warum der Test auf 10 Iterationen, wenn die äußerste Schleife per Autoindexing läuft?
Edit: Danke, Lucki. Ich hatte die lokale Variable "Exit" mit dem ungelabelten Boolean in der innerste Schleife assoziiert. Das Exit-Terminal rechts unten hatte ich nicht auf dem Bildschirm... Trotzdem interessanter Vorschlag deinerseits Blink

Überhaupt scheinst du lokale Variablen zu lieben - würde in der Whileloop nicht das einfache Verdrahten ausreichen? Schwups, 4 lokale Variablen und RaceConditions (!) weniger... Befasse dich bitte mit dem Datenfluss-Prinzip, darauf basiert LabVIEW nun mal!
Ich vermute mal, in den anderen Cases befinden sich immer die gleichen lokalen Variablen und die zugehörigen Terminals. Wenn dem so ist, dann raus damit aus der Casestruktur und alle Terminals als Ausgangswerte der Casestruktur verdrahten...
Edit: Je länger ich drauf schaue, desto mehr fällt auf: Warum baust du aus den 2 Zeitwerten t1/t2 erst einen Cluster, um diesen Cluster in der Schleife (bei jeder Iteration aufs Neue!) in ein Array umzuwandeln, damit die innere FOR-Loop dieses dann per Autoindexing verarbeitet? Könntest du nicht gleich ein Array erstellen und beim äußeren Tunnel das Autoindexing abschalten?
Das Verhalten ist normal: Der Stop-Button wird ja erst dann gelesen, wenn das Programm aus den ineinander verschachtelten Schleifen heraus wieder einmal bis zur äußersten Schleife kommt - wenn überhaupt. Wenn Du nicht Lust hast das Progamm grundlegend anders aufzubauen dann mach es einfach so wie unten vorgeschlagen und achte nicht auf die Proteste in nachfolgenden Beiträgen.

[attachment=27049]
Zunächst einmal Danke für eure Antworten.

Das mit dem Cluster (t1/t2) hab ich nun abgeändert. Das funktioniert genau so mit einem Array ohne die Autoindizierung.
Das selbe hab ich nun auch mit dem Cluster für die Messwerte gemacht. Dies ist nun auch ein Array.


Die Stop Funktion funktioniert nun auch, Dank dir Lucky.

Was ich noch nicht hinbekommen hab, ist dass die Stoppfunktion auch dann greift, wenn das Array mit den Messwerte vollständig abgearbeitet wurde. Gibt es da eine Funktion? von der ich nichts weiß.
Hallo hmueller,

ich würde die äußere While-Loop entfernen und nur (!) den Startknopf in eine While-Loop packen. Dadurch wartet das VI, bist du Start drückst und endet automatisch nach Abarbeitung aller Messpunkte...
Edit: Statt den Knopf dann mit 10ms zu pollen, kannst du auch auf FP-Events warten oder eine richtige Event-Struktur verwenden!
wenn ich die Äußere While entferne dann startet es sofort. Wie meinst du das mit dem Start Button in eine extra While-Loop? Oder in die Innere?
Das funktioniert nicht so richtig.
Hallo hmueller,

den Startknopf in eine eigene, kleine Schleife packen. Die Schleife wird beendet, wenn der Startknopf gedrückt wird. Durch eine Verbindung zur nächsten Schleife (Messablauf) das Datenfluss-Prinzip sicherstellen - so startet die FOR-Loop erst nach Betätigen des Startknopfs...
Man kann im übrigen auch ein Abbruchterminal in For-Schleifen haben. Rechtsklick auf den Rand und da kann man es irgendwo finden.

Damit lässt sich die Forschleife vorzeitig beenden und du könntest es tatsächlich schaffen, deine äussere Whil-Schleife zu erreichen um diese dann auch zu beenden.... Smile

Grüße,
' schrieb:Man kann im übrigen auch ein Abbruchterminal in For-Schleifen haben. Rechtsklick auf den Rand und da kann man es irgendwo finden.
Ja und dann dort überall eine lokale Variable von "Stop" anschließen, die darf natürlich nicht auf Latch gesetzt sein. Spätestens bei erneutem Start muß dann Stop manuell rückgesetzt werden.
Funktioniert natürlich auch nur, wenn nicht im Inneren einer solchen Schleifen ein Sub-VI mit Timout unendlich auf irgendetwas wartet was nicht kommt.
Man hat dann auch die Möglichkeit, einen "geordneten Rückzug" zu planen: Dateien schließen, was soll passieren, wenn das Programm nicht vollständig ausgeführt werden konnte usw. Das alles geht mit der brutalo-Methode "Stop", die dem roten Knopf in der Menüleiste entspricht, nicht.
Referenz-URLs