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 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.
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
Erfahrung ist die Summe der gemachten Fehler
KISS - Keep it simple and stupid
Walking on water and developing software from a specification are easy if both are frozen. – Edward V Berard
RE: while Schleife mit warte Funktion sofort beenden
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
Nur wer neugierig ist, lernt ständig dazu.
Mythos:
Mit LabView lassen sich gut Programme leichter entwickeln
Realität:
Mit LabView lassen sich gut und schlechte Programme leichter enwickeln!
RE: while Schleife mit warte Funktion sofort beenden
(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
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!
RE: while Schleife mit warte Funktion sofort beenden
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.
RE: while Schleife mit warte Funktion sofort beenden
(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 mal 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
Erfahrung ist die Summe der gemachten Fehler
KISS - Keep it simple and stupid
Walking on water and developing software from a specification are easy if both are frozen. – Edward V Berard
RE: while Schleife mit warte Funktion sofort beenden
(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:
, 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
Erfahrung ist die Summe der gemachten Fehler
KISS - Keep it simple and stupid
Walking on water and developing software from a specification are easy if both are frozen. – Edward V Berard
RE: while Schleife mit warte Funktion sofort beenden
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.
18.11.2011, 09:23 (Dieser Beitrag wurde zuletzt bearbeitet: 18.11.2011 09:26 von rasta.)
Erfahrung ist die Summe der gemachten Fehler
KISS - Keep it simple and stupid
Walking on water and developing software from a specification are easy if both are frozen. – Edward V Berard