LabVIEWForum.de - Eventstruktur Frage

LabVIEWForum.de

Normale Version: Eventstruktur Frage
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Angenommen ich habe eine Eventstruktur mit diversen Events bezogen auf Buttons usw...
Nun belege ich einen Eventcase zum Beispiel Messung starten mit einem Button dafür und es wird eine
Whileloop initialisiert wie kann ich jetzt trotzdem in diesem Falle im Event die Whileloop durch Benutzerinteraktion abbrechen. Problem ist das die Benutzerschnittstellen erst nach Ende des Eventcases abgefragt werden.

So wie im Bild mit der Property Node gehts ja schon mal nicht weil keine Abfrage des Buttons möglich ist
' schrieb:Angenommen ich habe eine Eventstruktur mit diversen Events bezogen auf Buttons usw...
Nun belege ich einen Eventcase zum Beispiel Messung starten mit einem Button dafür und es wird eine
Whileloop initialisiert wie kann ich jetzt trotzdem in diesem Falle im Event die Whileloop durch Benutzerinteraktion abbrechen. Problem ist das die Benutzerschnittstellen erst nach Ende des Eventcases abgefragt werden.

So wie im Bild mit der Property Node gehts ja schon mal nicht weil keine Abfrage des Buttons möglich ist


das macht man am besten mit einer State-Machine, die durch eine Q gesteuert wird und 2 parallelen While-Schleifen. In der einen while-Schleife werden die Buttons über die Event-Struktur abgefragt, in der 2. While-Schleife werden die States aus der Queue abgearbeitet:
Danke schon mal für die Antwort, kannst Du mir ein ganz simples Beispiel geben hab noch nie in der Art was programmiert mit Warteschlangen falls Du Zeit hast. Keine Ahnung so in der Art die eine Whileloop addiert immer eins dazu und der Wert wird angezeigt die Andere fragt den Button Stop ab oder so in Art.
Um den Rest gehts die Sache zu synchronisieren. Wenn nicht auch kein Ding muss ich mich dann mal reinfuchsen.

' schrieb:das macht man am besten mit einer State-Machine, die durch eine Q gesteuert wird und 2 parallelen While-Schleifen. In der einen while-Schleife werden die Buttons über die Event-Struktur abgefragt, in der 2. While-Schleife werden die States aus der Queue abgearbeitet:
' schrieb:Problem ist das die Benutzerschnittstellen erst nach Ende des Eventcases abgefragt werden.
Falsch: Das ist nur dann der Fall, wenn Du im Bearbeitunsmenue für das betreffende Ereignis das Häkchen "Frontpanel bis zum Ausführen des Ereignis Case sperren" gesetzt hast. Standardmäßig ist das der Fall. Also einfach das Häckchen wegnehmen und alles läuft so wie Du es Dir wünschst.
' schrieb:Danke schon mal für die Antwort, kannst Du mir ein ganz simples Beispiel geben hab noch nie in der Art was programmiert mit Warteschlangen falls Du Zeit hast. Keine Ahnung so in der Art die eine Whileloop addiert immer eins dazu und der Wert wird angezeigt die Andere fragt den Button Stop ab oder so in Art.
Um den Rest gehts die Sache zu synchronisieren. Wenn nicht auch kein Ding muss ich mich dann mal reinfuchsen.

ich hab dir mal eine ganz einfache State-Machine erstellt, die auf Queues (String) basiert. In der oberen While-Schleife läuft die Event-Struktur, die jedesmal etwas in die Q schiebt, wenn ein Event eintritt. In der unteren While-Schleife wird die Q ausgelesen und wenn die Case-Struktur mit dem String was anfangen kann, die entsprechende Aktion ausgeführt.

In dem Beispiel läuft das so: du drückst auf den STOP-Button, die Eventstruktur merkt das und schiebt den String "Stop" in die Q. In der unteren While-Schleife wird der String aus der Q rausgeholt und "verarbeitet", sprich im Case "Stop" wird die untere While-Schleife ebenfalls angehalten.

[attachment=2486]
Thanks an alle , werd das mal testen

Gruß
T.

' schrieb:ich hab dir mal eine ganz einfache State-Machine erstellt, die auf Queues (String) basiert. In der oberen While-Schleife läuft die Event-Struktur, die jedesmal etwas in die Q schiebt, wenn ein Event eintritt. In der unteren While-Schleife wird die Q ausgelesen und wenn die Case-Struktur mit dem String was anfangen kann, die entsprechende Aktion ausgeführt.

In dem Beispiel läuft das so: du drückst auf den STOP-Button, die Eventstruktur merkt das und schiebt den String "Stop" in die Q. In der unteren While-Schleife wird der String aus der Q rausgeholt und "verarbeitet", sprich im Case "Stop" wird die untere While-Schleife ebenfalls angehalten.

[attachment=28414:attachment]
Hi,

das mit der State Machine ist gut! Allerdings sollte man hier keine Strings verwenden, da besteht immer die Gefahr, dass man Schreibfehler macht. Besser wäre es, hier ein Enum als strikte Typdefinition zu erstellen, in dem die unterschiedlichen States ("Cases") definiert werden. Dieses Enum kann man dann direkt an eine Casestruktur anschließen, und es werden dann automatisch die erforderlichen Cases benannt. Mit einem Rechtsklick kann man dann auf der Struktur "Add Case for every value" alle definierten Fälle erzeugen. Ändert man dann den Namen eines Cases im TypDef, wird automatisch auch der entsprechende Case aktualisiert!

Die Enums kann man wie von i2dx gezeigt über ne Queue schicken, aber auch ein Schieberegister in ner Schleife funktioniert. Dann muss man das alles ein klein wenig anders aufbauen, aber man spart sich eine zweite Schleife. Aber das ist alles Geschmackssache...;-)

Gruss
Achim
' schrieb:das mit der State Machine ist gut
Ja, die Maschine ist fantastisch, super, nur: in diesem Fall wird nun wirklich mit Kanonen auf Spatzen geschossen. Teutates wollte ganz simpel eine While-Schleife innerhalb eines Ereignis-Cases durch Benutzeraktion abbrechen, und das funktionierte einfach deshalb nicht, weil dazu eine kleines Häkchen im Bearbeitungsmodus diese Ereigniscases, welches das Frontpanel sperrt, hätte entfernt werden müssen:
[attachment=2509]
Im Anhang ein Beispiel, wie es funktioniert.
Referenz-URLs