GSI Forum
GSI Helmholtzzentrum für Schwerionenforschung

Home » LVUG » LVUG - Technische Fragen » Schleife in Event Case zu Ende laufen lassen
Schleife in Event Case zu Ende laufen lassen [message #1901] Fri, 01 July 2005 20:48 Go to next message
Vincent Peikert is currently offline  Vincent Peikert
Messages: 5
Registered: June 2005
occasional visitor
From: *physik.uni-konstanz.de
Ich möchte gerne ein Event für den Abbruch einer Schleife benutzen. Jedoch möchte ich den derzeitigen Schleifendurchlauf noch beenden lassen und nicht sofort in den neuen Case springen. Nebeinbei: Gibt es einen Event-Handler, der den Abbruch über die LabView Navigation überwacht ?
Vielen Dank !
Re: Schleife in Event Case zu Ende laufen lassen [message #1902 is a reply to message #1901] Sat, 02 July 2005 07:16 Go to previous messageGo to next message
Franz Josef Ahlers is currently offline  Franz Josef Ahlers
Messages: 22
Registered: January 2004
occasional visitor
From: *dip0.t-ipconnect.de
Vincent Peikert wrote on Fri, 01 July 2005 20:48

Ich möchte gerne ein Event für den Abbruch einer Schleife benutzen. Jedoch möchte ich den derzeitigen Schleifendurchlauf noch beenden lassen und nicht sofort in den neuen Case springen. Nebeinbei: Gibt es einen Event-Handler, der den Abbruch über die LabView Navigation überwacht ?
Vielen Dank !

Mir ist nicht ganz klar, was Du vorhast: Normalerweise steht die Event-Handler Struktur in einer Schleife und außerhalb des Event Rahmens steht innerhalb der Schleife kein weiterer code. Wenn Du nicht diese Programmstruktur hast: Wie sieht sie dann bei Dir aus?

Der LV Event Handler kann den LV Abbruch überwachen und abfangen: Du musst das Filter-Event 'Application Exit?' im Event Handler einbauen.

Vielleicht kannst Du ein Beispiel hochladen, selbst wenn es sich nicht wie gewünscht verhält. (ich hab noch LV 7.0)

-Franz
Re: Schleife in Event Case zu Ende laufen lassen [message #1903 is a reply to message #1901] Sat, 02 July 2005 15:31 Go to previous messageGo to next message
Vincent Peikert is currently offline  Vincent Peikert
Messages: 5
Registered: June 2005
occasional visitor
From: *physik.uni-konstanz.de
Die Abbruchbedingung soll so aussehen, wie das Beispiel "Event Contitional Stop.vi" skizziert. Ich hätte also erst suchen sollen Smile Mein Problem lag bei der Formulierung darin, dass ich den Kern der Events in Labview nicht richtig verstehe. Nehmen wir das oben genannte Beispiel: Ich verstehe Events so, dass sobald das Event eintrifft der zugehörige Case ausführt werden sollte. Anscheinend läuft aber der derzeitige Case immer noch bis zum Ende. Erst danach wird ein eventueller neuer Case ausgeführt, wenn das entspr. Event eingetreten ist. Dabei habe ich aber noch folgende Verständnisprobleme:
- Ist es richtig, dass das gewollte Timeout im "Timeout" Case dafür sorgt, dass der Case überhaupt gewechselt wird ? Wieso ist denn das Timeout hier notwendig ?
- Liegt der Witz der Events also lediglich darin, andere Überwacher zur Verfügung zu stellen, die nicht schon in Form von Kontollen (Beispielsweise Buttons) vorliegen ?
Re: Schleife in Event Case zu Ende laufen lassen [message #1904 is a reply to message #1903] Sat, 02 July 2005 17:52 Go to previous message
Franz Josef Ahlers is currently offline  Franz Josef Ahlers
Messages: 22
Registered: January 2004
occasional visitor
From: *dip0.t-ipconnect.de
Vincent Peikert wrote on Sat, 02 July 2005 15:31

Die Abbruchbedingung soll so aussehen, wie das Beispiel "Event Contitional Stop.vi" skizziert. Ich hätte also erst suchen sollen Smile Mein Problem lag bei der Formulierung darin, dass ich den Kern der Events in Labview nicht richtig verstehe. Nehmen wir das oben genannte Beispiel: Ich verstehe Events so, dass sobald das Event eintrifft der zugehörige Case ausführt werden sollte. Anscheinend läuft aber der derzeitige Case immer noch bis zum Ende. Erst danach wird ein eventueller neuer Case ausgeführt, wenn das entspr. Event eingetreten ist. Dabei habe ich aber noch folgende Verständnisprobleme:
- Ist es richtig, dass das gewollte Timeout im "Timeout" Case dafür sorgt, dass der Case überhaupt gewechselt wird ? Wieso ist denn das Timeout hier notwendig ?
- Liegt der Witz der Events also lediglich darin, andere Überwacher zur Verfügung zu stellen, die nicht schon in Form von Kontollen (Beispielsweise Buttons) vorliegen ?

Der Witz der Events liegt darin, dass kein 'polling' von Controls mehr nötig ist, um auf user Eingaben zu reagieren. Es wird also, wenn keine User Eingabe erfolgt, auch keine Prozessorzeit verbraucht (außer natürlich, wenn das VI noch andere Dinge tut, als auf Nutzereingaben zu warten). Das Beispiel 'Event Conditional Stop.vi' ist insofern kein gutes Beispiel, als dort doch regelmäßig im timeout event buttons abgefragt werden. Das passiert aber nur, weil in dem simplen Beispiel ein Messvorgang simuliert wird. Das Beispeil dient wohl vor allem dazu, die 'Filter'Events (abfangen des Close-Befehls) zu erläutern.

Um die Events besser zu verstehen, war es für mich sehr hilfreich, die beiden Beispiel VIs 'Old Event Handler.vi' und 'New Event Handler.vi' zu vergleichen. Der timeout case in New Event Handler ist praktisch überflüssig, denn das timeout terminal ist gar nicht angeschlossen, der timeout Wert steht also auf 'unendlich'.

Die einzelnen cases des timeouts werden in der Tat vollständig abgearbeitet, sobald sie angesprungen werden. Das bedeutet insbesondere, dass die Ausführungszeit jedes timeout cases so kurz sein sollte, dass für den Nutzer keine merkbare Verzögerung eintritt. Die eigentliche Reaktion des Programms auf Nutzereingaben sollte am besten in einer asynchronen Schleife erfolgen, die Event-Loop darf sich nur um die Nutzereingaben selbst kümmern. Diese Eingaben werden per Queue an die asynchron laufende Arbeitsschleife übergeben.

Wenn Du per 'File-->New...' aus dem design-pattern-template 'Producer/Consumer Design Pattern (Events)' ein neues VI erzeugt, siehst Du wie so was im Prinzip aussieht.

-Franz
Previous Topic: LabVIEW Source Code Control mit Visual SourceSafe
Next Topic: VT52 Emulation
Goto Forum:
  


Current Time: Mon Dec 30 16:55:34 CET 2024

Total time taken to generate the page: 0.00735 seconds