INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

State Machine für verschiedene Events



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

07.12.2010, 09:44
Beitrag #1

Yantit Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 160
Registriert seit: Jun 2010

8.2.1
2010
de

63xxx
Deutschland
State Machine für verschiedene Events
Hallo!

Mir geht es um folgende Problemstellung:

Ich möchte eine State Machine entwerfen, bin mir aber noch nicht schlüssig, wie ich einen speziellen Punkt richtig angehe:

- Die Grundstruktur der State Machine ist für mich soweit klar: Init, "Haupt-State" (in meinem Fall wird von der COM-Schnittstelle gelesen), Fehlerbehandlung und ein Exit-State.
Jetzt habe ich aber auf meinem FP verschiedene Buttons, über die ich in verschiedene States wechseln möchte, damit dort andere Aktionen abgearbeitet werden können.

Meine konkrete Frage ist nun: Wie programmiert man diese "Abfrage", welcher Button gedrückt wurde und in welchen State dann gewechselt wird, am ordentlichsten? Benutzt man Ereignis-Cases für die Wertänderung jedes Buttons? Oder benutzt man Case-Strukturen, in die man die angepeilten States dann ablegt? Blink
Habe mir schon dieses Tutorial bei NI angeschaut, bin aber nicht so ganz durchgestiegen, weil dort relativ viele Möglichkeiten aufgezeigt werden.

Wäre toll, wenn mir jemand diesbezüglich ein paar Tipps geben kann.

Danke & Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
07.12.2010, 09:50
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
State Machine für verschiedene Events
Du kannst einen "Leerlauf"-Case erstellen, in dem Du eine Ereignisstruktur platzierst und entsprechend der Userauswahl in den gewünschten Case springst.

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.12.2010, 10:04
Beitrag #3

Yantit Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 160
Registriert seit: Jun 2010

8.2.1
2010
de

63xxx
Deutschland
State Machine für verschiedene Events
Meinst du das so, dass immer zwischen dem "Lesen"-State und dem "Idle"-State immer abwechselnd hin- und her gesprungen wird?
Das wäre ja schon okay, aber mein Problem liegt dann für mich immer noch bei der Behandlung der Buttons. Bspw. hätte ich jetzt 5 Buttons, die alle auf einem FP abgefragt werden sollen. Soll ich fünf Ereignisstrukturen erstellen oder dann doch fünf Case-Strukturen? Und mein (wahrscheinlich triviales) Problem ist dann noch: Wie gebe ich dann die verschiedenen Enums auf das Schieberegister? Wenn ich mehr wie ein Enum anschließe, erhalte ich ja eine Fehlermeldung...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.12.2010, 10:28 (Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2010 10:48 von Lucki.)
Beitrag #4

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
State Machine für verschiedene Events
Ich mache es z.B. so:
   
Die State-Cases befinden sich alle im Timeout der Ereignisstruktur. Wichtig ist, daß in den States kein Waits stattfinden, auch langes Warten auf Datenempfang etc. sollte vermieden werden (Z.B. bei Warten auf Datenempfang: Timeout im Ereignsicase so einstellen, daß beim Übergang zum Dantenempfangs-Case schon alle Bytes im Empfangspuffer sind. Oder den Datenempfangs-Case mehrere Male pollen, bis alle Daten im Buffer sind) . D.h. alles Warten, wenn erforderlich, sollte möglichst immmer über den Timeout-Anschluß der Ereignsistruktur realisiert werden, wobei die Timeout-Zeit nicht konstant sein muß, sondern sich über Schieberegister für jeden State individuell anpassen läßt.
Beim Datenempfang sollte auch auch über eine Erzeuger-Verbraucher-Struktur nachgedacht werden. Dann würde das Warten auf Datenempfang in eine unabhängige Schleife ausgelagert. Oder ein erfolgter Datenempfang läßt sich als Ereignis registrieren (Das ist die um Größenordnung bessere Variante gegenüber den oben von mir in Klammern genannten Möglichkeiten).
Edit: unausgereifte Überlegung: Könnte man es nicht auch so einrichten, daß jeder neue State ein benutzerdefiniertes Ereignis ist? Dann währen alle States Ereignise und hätten ihren eigenen Case innerhalb der Ereignsistruktur, anstatt innerhalb einer normalen Case-Struktur
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.12.2010, 10:56
Beitrag #5

Yantit Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 160
Registriert seit: Jun 2010

8.2.1
2010
de

63xxx
Deutschland
State Machine für verschiedene Events
Die Idee mit der Producer-Consumer-Struktur ist gut, die werde ich auf jeden Fall weiterverfolgen. Deine Antwort lässt zwar schwer meinen Kopf rauchen, aber mal schauen, wie sich das am besten für mich umsetzen lässtWink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.12.2010, 15:50
Beitrag #6

Yantit Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 160
Registriert seit: Jun 2010

8.2.1
2010
de

63xxx
Deutschland
State Machine für verschiedene Events
Hallo nochmal!

Ich habe mir jetzt so über den Tag Gedanken gemacht, wie ich das mit den verschiedenen Buttons -> verschiedene States realisieren kann und bin bisher zu folgender Lösung gekommen.
   

Wenn kein Button gedrückt ist, wird im Timeout-Case nur ein leerer String übergeben bzw. mit dem anderen String verknüpft. Der Standard-Case in der nachfolgenden Struktur verweist auf den aktuellen State (in diesem Fall "lesen"), d.h. es wird solange in diesem State geblieben, bis irgendein Button gedrückt ist.
Klickt man nun auf einen Button, dann wird der Text für den entsprechenden State übergeben und mit dem leeren String verknüpft. Dann wird in der Case-Struktur der entsprechende Fall ausgewählt und an das Schieberegister weitergereicht, was dann den nächsten State bestimmt.

Soweit meine Gedankengänge, jetzt wollte ich eigentlich nur einmal von den Experten hören, ob mein Konzept sinnvoll ist bzw. ob noch irgendwelche Fallstricke lauern könnten. Bei meinen Tests hat das einen recht brauchbaren Eindruck gemacht & auch schnell reagiert. Aber vielleicht gibts ja noch eine bessere Lösung...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.12.2010, 17:00
Beitrag #7

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
State Machine für verschiedene Events
Du bist ein intelligentes Kerlchen, und so macht es Spaß Dir zu helfen. Habe aber in den nächsten Tagen wenig Zeit. Wer springt freiwillig ein?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.12.2010, 18:00
Beitrag #8

Martin Heller Offline
LVF-Stammgast
***


Beiträge: 250
Registriert seit: Feb 2010

2011 SP1
2008
EN

5232
Schweiz
State Machine für verschiedene Events
Versuch mal dies


Lv86_img


Angehängte Datei(en)
Sonstige .vi  Verschiedene_Taster.vi (Größe: 15,24 KB / Downloads: 266)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.12.2010, 07:41
Beitrag #9

Yantit Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 160
Registriert seit: Jun 2010

8.2.1
2010
de

63xxx
Deutschland
State Machine für verschiedene Events
' schrieb:Versuch mal dies
Lv86_img

Danke Martin & Danke an alle bisher für das Feedback!
Leider kann ich das mit 8.6 nicht öffnen, wäre es möglich, dass du mir das nach 8.2 runterspeicherst?

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.12.2010, 07:56
Beitrag #10

Martin Heller Offline
LVF-Stammgast
***


Beiträge: 250
Registriert seit: Feb 2010

2011 SP1
2008
EN

5232
Schweiz
State Machine für verschiedene Events
ohh sorry Blush
bin mir nicht gewohnt, dass hier im Forum mit einer "tieferen" Version als ich gearbeiten wird


Lv80_img


Angehängte Datei(en)
Sonstige .vi  Verschiedene_Taster_8.0.vi (Größe: 23,93 KB / Downloads: 173)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Frage zur Architektur: Statemachine und Wait for Events tuhpon 6 2.856 18.03.2024 16:14
Letzter Beitrag: tuhpon
  Machine learning Hubert R. 3 1.481 29.08.2023 10:10
Letzter Beitrag: Hubert R.
  Programm beenden State Machine simcum 3 2.756 17.10.2020 20:57
Letzter Beitrag: BNT
  Bedienelemente bündeln zum Auslösen eines Events Marcusius 12 7.571 03.09.2019 17:24
Letzter Beitrag: Marcusius
  Queued State Machine: IDLE Optimierung ALuehmann 3 4.288 14.02.2017 14:00
Letzter Beitrag: HVo
  State machine und Typdefinition meta_ir 4 3.837 09.01.2017 12:47
Letzter Beitrag: meta_ir

Gehe zu: