LabVIEWForum.de
Schleife durch Ereignis unterbrechen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Schleife durch Ereignis unterbrechen (/Thread-Schleife-durch-Ereignis-unterbrechen)



Schleife durch Ereignis unterbrechen - HansWerner - 03.09.2009 07:49

Folgendes Problem:
Ein Signalgenerator soll in einer mehrfach geschachtelten Schleife angesteuert werden.
Dieser soll mittels ARB eine Datei "abspielen".
Es soll eine "Messreihe" mit mehreren Parametern durchgeführt werden.
Die einzelnen Parameter werden in der schon angesprochenen geschachtelten Schleife verändert.
Also: Parameter ändern ---> Signalgenerator ansteuern ---> Warten bis Signalgenerierung beendet ---> Neue Iteration
So gesehen ein sequentieller Ablaúf der durch eine mehrfach geschachtelte Schleife getriggert wird.
Ich möchte nun nicht in eine Schleife die Wartezeit einbauen, sondern die Wartezeit nur einmal definieren und die Warteschleife über ein Ereignis aufrufen. Lässt sich dies realisieren und wenn ja wie ? Kann ich eine mehrfach geschachtelte Schleife durch eine Wartezeit unterbrechen und danach fortsetzen ?
Die Wartezeit ergibt sich aus der Grösse der Datei bzw. Anzahl der Abtastwerte (Samples) geteilt durch Abtastrate (Sampling rate).


Schleife durch Ereignis unterbrechen - IchSelbst - 03.09.2009 19:59

' schrieb:So gesehen ein sequentieller Ablaúf der durch eine mehrfach geschachtelte Schleife getriggert wird.
Jawohl, wunderbar. Zum Abarbeiten solcher sequenzieller Abläufe sind Statemachines das richtige Mittel.

Zitat:Ich möchte nun nicht in eine Schleife die Wartezeit einbauen,
Warum nicht?
Wenn du deinen sequenziellen Ablauf mit einer Statemachine macht, machst du einfach einen State, der eine bestimmte Zeitlang wartet. Nanach springt die Statemachine in den Case, der dem folgt, der den Wartecase aufgerufen hat.

Zitat:sondern die Wartezeit nur einmal definieren und die Warteschleife über ein Ereignis aufrufen.
Ein Ereignis als solches aktiviert einen Programmabschnitt - der aber keinen zeitlichen Zusammenhang hat mit dem Programmabschnitt, der das Ereignis auslöst! Will sagen: Man kennst zwar den Zeitpunkt, zu dem das Ereignis ausgelöst wird. Wann das Ereignis aber tatsächlich z.B. den Code in einem Evenbt-Case abarbeitet, kann man nicht genau vorhersagen. Diese Tatsache widerspricht sich aber mit einem sequenziellen Ablauf.

Zitat:Lässt sich dies realisieren und wenn ja wie ?
Im Prinzip ja.
Einfach das Property "Value(signalisierend)" z.B. eines Bedienelemntes beschreiben. Damit wird ein Ereignis erzeugt. Der abzuarbeitende Code muss dann in einer Event-Struktur liegen.
Oder eine Queue nehmen. Auch das kann man als Ereignis betrachten. Ein "Ereignis" tritt ein, wenn in die Queue geschrieben wird. Dann gibt es z.B ein SubVi, das diese Queue ausliest und etwas tut. z.B. Warten. Nach dem Warten kann wieder per Queue der Schrittkette mit geteilt werden ....

Zitat:Kann ich eine mehrfach geschachtelte Schleife durch eine Wartezeit unterbrechen und danach fortsetzen ?
Ich will es lieber so sagen: Eine Schleife kann sich selbst aufgrund eines bestimmten Zustandes anhalten und eine bestimmte zeitlang warten. Wenn du sagst "Schleife unterbrechen" klingt das wie "den Thread der While-Schleife von außen" anhalten. Das nämlich geht nicht.
Klar, kann man eine wie immer geartete Schleife (dazu zählen auch Statemachines!) unterbrechen. Das ist aber keine Funktion von LV, sondern obliegt dem Können des Programmierers.