17.11.2011, 12:08
Beitrag #1
|
wernerIBN
Datenflussumgeher
Beiträge: 124
Registriert seit: Sep 2009
8.6 und 2011
2000
DE
52425
Deutschland
|
while Schleife mit warte Funktion sofort beenden
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
|
|
|
17.11.2011, 12:12
Beitrag #2
|
|
|
17.11.2011, 12:16
Beitrag #3
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
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!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
17.11.2011, 13:28
Beitrag #4
|
|
|
17.11.2011, 14:33
Beitrag #5
|
wernerIBN
Datenflussumgeher
Beiträge: 124
Registriert seit: Sep 2009
8.6 und 2011
2000
DE
52425
Deutschland
|
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
|
|
|
17.11.2011, 15:17
Beitrag #6
|
|
|
17.11.2011, 16:13
Beitrag #7
|
wernerIBN
Datenflussumgeher
Beiträge: 124
Registriert seit: Sep 2009
8.6 und 2011
2000
DE
52425
Deutschland
|
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
|
|
|
17.11.2011, 16:28
Beitrag #8
|
|
|
18.11.2011, 09:23
(Dieser Beitrag wurde zuletzt bearbeitet: 18.11.2011 09:26 von rasta.)
Beitrag #9
|
rasta
LVF-Gelegenheitsschreiber
Beiträge: 245
Registriert seit: Oct 2006
LabVIEW 2009-2017
2006
EN
53909
Deutschland
|
RE: while Schleife mit warte Funktion sofort beenden
Hallo Werner,
http://www.labviewforum.de/Thread-LEDs-m...2#pid68942
Schau Dir mal das Beispiel "Timed_Synch2.vi" an.
Gruß
Ralf
Edit:Link korrigiert
|
|
|
18.11.2011, 09:46
|
wernerIBN
Datenflussumgeher
Beiträge: 124
Registriert seit: Sep 2009
8.6 und 2011
2000
DE
52425
Deutschland
|
RE: while Schleife mit warte Funktion sofort beenden
(18.11.2011 09:23 )rasta schrieb: Hallo Werner,
http://www.labviewforum.de/Thread-LEDs-m...2#pid68942
Schau Dir mal das Beispiel "Timed_Synch2.vi" an.
Ralf,
vielen Dank . Wahnsinns guter Hinweis - echt elegantes Konzept.
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
|
|
|
| |