LabVIEWForum.de
Statemachine mit Event-Struktur - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Statemachine mit Event-Struktur (/Thread-Statemachine-mit-Event-Struktur)



Statemachine mit Event-Struktur - BeFu - 02.11.2011 18:47

Hallo Allerseits,

heute versuchte ich meinem Kollegen zu zeigen, wie man in LabVIEW eine ereignisgesteuerte (EVENT) Zustandsmaschine (Statemachine) programmiert, siehe beigefuegtes Beispiel (LV2011).

1. Die Zustandsmaschine startet mit CASE "Montag".
2. Jetzt druecken wir NEXT, loesen also ein EVENT aus. Das EVENT wird im CASE "Montag" ausgewertet und in den CASE "Dienstag" gesprungen.
3. Die dortige EVENT-Structure muesste jetzt auf ein neues EVENT (unendlich lange) warten. Das ist jedoch nicht der Fall; es wird sofort in den CASE "Mittwoch" weiter geleitet.
4. Dort verweilt das Programm bis zum Abbruch mit entsprechndem LabVIEW-Button, da wir dort noch keine weitere Auswertungen programmiert haben.

Kann es sein, dass das EVENT NEXT-Button noch aktiv ist, also irgendwie geloescht werden muss. Wir haben die BOOLEAN-Werte der Buttons nach erfolgtem EVENT zurueck gesetzt.

Wir hoffen auf Eure Loesungsvorschlaege.

Schoene Gruesse,

BeFu & Kollege :-)


RE: Statemachine mit Event-Struktur - GerdW - 02.11.2011 18:53

Hallo BeFu,

"never, never ever, in no way" mehr als eine Eventstruktur pro VI nutzen - vor allem, wenn diese auch noch auf das gleiche Event lauschen sollen... Einfach mal die Hilfe öffnen und den Eintrag "Warnungen" durchlesen! Rtmfx

Wo wir das schon mal geklärt haben:
- Warum Event "Maus losgelassen" statt des viel klareren "ValueChange"?
- Wozu in jedem Case eine Eventstruktur, die alle auf die gleichen Eingaben lauschen? Einmal auf Eingaben lauschen und die entsprechenden Aktionen durchführen. Dies ist doch der Sinn einer StateMachine: Aktionen auswerten/bearbeiten und damit Zustandswechsel auslösen... Du musst die Aktionen nicht innerhalb eines States abfragen, dies kann/(sollte) außerhalb geschehen. Innerhalb musst du nur auswerten!


RE: Statemachine mit Event-Struktur - BeFu - 03.11.2011 08:14

Danke GerdW,

fuer Deine schnelle Antwort.
Du hast Recht; nur im CASE 'Leerlauf' muss auf die Ausloesung von EVENT gewartet werden.
Nun stehe ich jedoch vor dem Problem, dass ich nicht weiss, wie ich auf die einzelnen ENUM-Elemente in den EVENT 'Next' und 'Back' zugreife, so dass ich auf den entsprechenden Wochentag richtig wechsle. Lediglich das ENUM-Element fuer das EVENT 'Stop' kann ich haendisch auf 'Ende' setzen, siehe beigefuegtes VI (LV2011).
Ich bin fuer jeden Loesungsvorschlag dankbar.
Schoende Gruesse,

BeFu
P.S.: In den von Dir genannten Links mit NI Hilfe habe ich nix hilfreiches gefunden.


RE: Statemachine mit Event-Struktur - GerdW - 03.11.2011 08:42

Hallo BeFu,

du wertest die User-Aktionen außerhalb der Case-Struktur aus!!! AUSSERHALB!!!

In der Case-Struktur hast du dann 2 Eingänge: einmal der aktuelle Zustand ("Wochentag") und einmal die User-Aktion ("Next", "Back", "Quit"). Und diese zwei Eingänge in dem jeweiligen Case auszuwerten, sollte wirklich nicht das Problem sein (WENN AktuellerZustand=Dienstag UND Aktion=Next DANN NeuerZustand=Mittwoch)...


RE: Statemachine mit Event-Struktur - BeFu - 03.11.2011 13:28

(03.11.2011 08:42 )GerdW schrieb:  Hallo BeFu,

du wertest die User-Aktionen außerhalb der Case-Struktur aus!!! AUSSERHALB!!!

In der Case-Struktur hast du dann 2 Eingänge: einmal der aktuelle Zustand ("Wochentag") und einmal die User-Aktion ("Next", "Back", "Quit"). Und diese zwei Eingänge in dem jeweiligen Case auszuwerten, sollte wirklich nicht das Problem sein (WENN AktuellerZustand=Dienstag UND Aktion=Next DANN NeuerZustand=Mittwoch)...

Danke GerdW,

fuer Deine Hinweise, im Besonderen, dass die Auwertung der USER-Aktionen ausserhalb der CASE-Struktur erfolgen muss.

Beigefuegt findest Du / findet Ihr die von mir - dank den Hinweisen von GerdW - gefundene Loesung. Gerne koennt Ihr eventuelle Verbesserungen posten.

Schoende Gruesse,

BeFu


RE: Statemachine mit Event-Struktur - Lucki - 05.11.2011 13:02

Nachbemerkung
Die "Event Driven State Machine" verwendet Queues und ist eine der besten Programmstrukturen überhaupt:
[attachment=36935]
Der Titel des Threads verspricht etwas, was dann nicht gehalten wird. Denn mit dieser Struktur haben die hier im Thread gezeigten VIs wenig zu tun.