LabVIEWForum.de
while Schleife mit warte Funktion sofort beenden - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: while Schleife mit warte Funktion sofort beenden (/Thread-while-Schleife-mit-warte-Funktion-sofort-beenden)



while Schleife mit warte Funktion sofort beenden - wernerIBN - 17.11.2011 12:08

Hallo,
ich habe eine while Schleife, in der eine "Bis zum nächsten Vielfachen von ms warten Funktion" verwendet wird. Es kann sein, dass ich hier lange, z.B.: 100 Sekunden, warte, weil ich nur alle 100 Sekunden einen Messwert benötige. [attachment=37228] lv11_img Wenn ich mein Programm beende, dann kann es sein, das diese while Schleife dann noch mehr als eine Minute läuft, und solange geht es nicht zu. Gibt es einen Weg, die while sofort zu beenden ? Wie unten zu sehen ist, benutze ich den Queue-Status, der eben einen Fehler auswirft, wenn die Queue zerstört wurde, was ich absichtlich beim Programmende mache. Mit dem Fehler stoppe ich dann die while... aber die stoppt erst, wenn der Timer abgelaufen ist. Ich habe keine Idee, wie ich den laufenden Timer ändern/stoppen kann...

Werner


RE: while Schleife mit warte Funktion sofort beenden - M@rRy - 17.11.2011 12:12

Mahlzeit,

mach doch einfach um den Timer eine switch die auf den Status deiner Queue reagiert. Wenn da alles ok is soll gewartet werden und wenn nicht wird kein Timer ausgeführt und die Schleife beendet.

Gruß
Daniel


RE: while Schleife mit warte Funktion sofort beenden - jg - 17.11.2011 12:16

(17.11.2011 12:12 )M@rRy schrieb:  Mahlzeit,

mach doch einfach um den Timer eine switch die auf den Status deiner Queue reagiert. Wenn da alles ok is soll gewartet werden und wenn nicht wird kein Timer ausgeführt und die Schleife beendet.

Gruß
Daniel
@Daniel: Das haut nicht hin. Wenn alles ok, dann wird wieder 100 Sekunden gewartet, in denen keine Abbruch möglich ist.

@Werner:
Mglw. Ideen:
- Du unterteilst in kleinere Warteintervalle, und führst dann die Messwerterfassung nur z.B. jeden 100. Schleifendurchlauf durch.
- Verwende die Timeout-Funktionalität des "Warte-Queue" als Timer. Wenn Timeout nach 100 Sekunden, dann MW erfassen, wenn Fehler, dann Programm-Abbruch.

Gruß, Jens


RE: while Schleife mit warte Funktion sofort beenden - Lucki - 17.11.2011 13:28

So würde es funktionieren. (Siehe Jens letzter Punkt) Allerdings würden dann neue Werte nicht mehr im Rhythmus des Timers gebildet, sondern immer dann wenn das Haupt-VI über den Melder einen neuen Wert sendet. Das Timing der Werte müßte also vom Haupt-VI aus erfolgen.
[attachment=37230]


RE: while Schleife mit warte Funktion sofort beenden - wernerIBN - 17.11.2011 14:33

(17.11.2011 13:28 )Lucki schrieb:  So würde es funktionieren. (Siehe Jens letzter Punkt) Allerdings würden dann neue Werte nicht mehr im Rhythmus des Timers gebildet, sondern immer dann wenn das Haupt-VI über den Melder einen neuen Wert sendet. Das Timing der Werte müßte also vom Haupt-VI aus erfolgen.
Vielen Dank an alle. Ich habe mir die von mir bisher übersehenen Melder einmal angesehen... interessant. Es ist leider so, dass ich im Programm die Wartezeit einstellbar machen möchte, und bei Änderung der Wartezeit sich die ( ich nenne es malSmile Schleifenwartezeit SOFORT ändern soll.

Der Ansatz mit Meldern und Timeout ist interessant, aber verlagert das Problem in die Meldererzeugung. Da wäre dann praktisch wieder ein Ansatz gemäß Jens: "Du unterteilst in kleinere Warteintervalle, und führst dann die Messwerterfassung nur z.B. jeden 100. Schleifendurchlauf durch." nötig.

Diesen Ansatz kann ich dann genausogut direkt in meiner While-Schleife einsetzen. Genau das mache ich jetzt.

Zwischenzeitlich habe ich noch mit einer zeitgesteuerten While-Schleife probiert, weil laut Doku: "Zeitgesteuerte Schleifen sind für die Entwicklung von VIs geeignet, bei denen ... dynamisch änderbare Zeitvorgaben ... erforderlich sind." Also dachte ich, ich könnte zur Laufzeit das dt verändern und die zeitgesteuerten While-Schleife machts direkt. Das ist mir nicht gelungen, weil ich nämlich gar nichts gefunden habe, womit ich bei einer bereits laufenden zeitgesteuerten While-Schleife das Timing verändern kann. Ich halte den Spruch in der Doku für unwahr... würde mich aber sehr gerne von euch eines besseren belehren lassen....

Werner


RE: while Schleife mit warte Funktion sofort beenden - unicorn - 17.11.2011 15:17

einfach dt in der Schleife anknüpfen


RE: while Schleife mit warte Funktion sofort beenden - wernerIBN - 17.11.2011 16:13

(17.11.2011 15:17 )unicorn schrieb:  einfach dt in der Schleife anknüpfen

Hallo unicorn,
auch das funktioniert nicht so, wie ich möchte. Nehmen wir mal an, du hast an dt deine 100000ms, und die Schleife läuft bereits, und änderst dann dein dt per Bedienelement auf 1000, so wie hier: [attachment=37242] lv11_img , dann muss man trotzdem noch 99 Sekunden warten, nämlich bis die alte 100 Sekunden Schleife komplett abgelaufen ist, bis die neue 1 Sekunde übernommen werden.

Ich möchte aber SOFORT erzwingen, dass die Schleife mit 1 Sekunde weiterläuft.

Trotzdem Danke, das rechte dt hatte ich nicht gekannt.

Werner


RE: while Schleife mit warte Funktion sofort beenden - unicorn - 17.11.2011 16:28

Ok, alles klar. Entschuldigung, ich hatte Deinen Post nicht aufmerksam genug gelesen und dachte, dass Du nur darauf abzielst, dass es Dir nicht gelungen ist das dt zu ändern.

Dass man das Ende des alten Intervall abwarten muss hatte ich jetzt hier als gegeben hingenommen. Das halte ich kompatibel mit der Doku.


RE: while Schleife mit warte Funktion sofort beenden - rasta - 18.11.2011 09:23

Hallo Werner,
http://www.labviewforum.de/Thread-LEDs-mit-verschiedenen-Blinkfrequenzen?pid=68942#pid68942

Schau Dir mal das Beispiel "Timed_Synch2.vi" an.

Gruß
Ralf

Edit:Link korrigiert


RE: while Schleife mit warte Funktion sofort beenden - wernerIBN - 18.11.2011 09:46

(18.11.2011 09:23 )rasta schrieb:  Hallo Werner,
http://www.labviewforum.de/Thread-LEDs-mit-verschiedenen-Blinkfrequenzen?pid=68942#pid68942
Schau Dir mal das Beispiel "Timed_Synch2.vi" an.

Ralf,
vielen Dank 2hands . Wahnsinns guter Hinweis - echt elegantes Konzept.

Werner