LabVIEWForum.de
Queued SM - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Queued SM (/Thread-Queued-SM)



Queued SM - Schwand - 12.10.2011 15:44

Hallo zusammen,

für mein anstehendes Projekt freunde ich mich gerade mit Queues im Allgemeinen und der Queued StateMachine im Besonderen an. Anbei ein Beispiel, das ich auf NI.com gefunden habe und ein angepasstes. Das Original hatte nur einen "Process"-State und hat diesen nach "Halt" mit "Resume" immer wieder aufgerufen. Wenn man jetzt allerdings mehrere States hat, die auch pausierbar sein sollen, würde das Programm dann ja immer wieder in dem "Process"-State anfangen.

Ist es sinnvoll, dies mit einer FGV zu umgehen, wie in dem zweiten Beispiel? Oder gibt es auch eine bessere Methode?

Grüßle
S.


RE: Queued SM - schrotti - 12.10.2011 20:09

Du möchtest nach dem Zustand "Halt" wieder dort weitermachen, wo du vor dem Übergang in "Halt" warst? Sehe ich das richtig? Wenn dem so ist, dann greif dir im Zustand "Halt" bei "Queue leeren (Flush Queue)" den Ausgang "Verbleibende Elemente", schreib das in ein Register. Im Zustand "Resume" kannst schreibst du die Elemente wieder in die Queue, wobei dir eine For-Loop hilft.

BTW: Das VI Process_FGV.vi ist keine FGV sondern eine simple globale Variable.


RE: Queued SM - Schwand - 13.10.2011 07:41

Moin Schrotti,

meinst du in etwa so? Ich hatte in meinem Beispiel ja erst keinen Resume-State drin, das funktioniert aber augenscheinlich sehr gut. Dann brauche ich zumindest meine "FGV" (das muss ich mir wohl noch mal anschauen) nicht...

Grüßle
S.


RE: Queued SM - schrotti - 19.10.2011 22:52

Genau so meine ich das:

Noch ein Tipp: Du kannst Primitiv "Fehler zusammenfassen" aufziehen auf so viele Eingänge, wie benötigt.


RE: Queued SM - Schwand - 20.10.2011 07:42

(19.10.2011 22:52 )schrotti schrieb:  Genau so meine ich das:

Noch ein Tipp: Du kannst Primitiv "Fehler zusammenfassen" aufziehen auf so viele Eingänge, wie benötigt.

Ich könnte schwören, dass ich das schon so gemacht hab...die Funktion kenne ich eigentlich. Vielleicht hat da was beim Zurückspeichern auf LV2009 nicht recht geklappt, reproduzieren kann ich das aber grade nicht. Fragezeichen


RE: Queued SM - Schwand - 20.10.2011 12:13

Hätte da noch eine Frage zur Q_SM:

Wenn die SM durchgelaufen ist, das Programm also fertig ist und in den Stop-State springt, wird die Consumer-Schleife beendet. Die Producer-Schleife läuft aber weiter. Kann ich dann ein Benutzerereignis in dem Stop-State erzeugen, das den Stop-Event in der Producer-Schleife auslöst und somit auch diese beendet oder gibt es da eine bessere Alternative?

Grüßle
S.


RE: Queued SM - jg - 20.10.2011 20:42

(20.10.2011 07:42 )Schwand schrieb:  Ich könnte schwören, dass ich das schon so gemacht hab...die Funktion kenne ich eigentlich. Vielleicht hat da was beim Zurückspeichern auf LV2009 nicht recht geklappt, reproduzieren kann ich das aber grade nicht. Fragezeichen
Gut möglich, da es die "Merge-Errors"-Funktion erst seit Lv10 gibt. Vorher gab es "nur" das hier:
Merge Errors LV-2009
Gruß, Jens


RE: Queued SM - schrotti - 21.10.2011 16:25

Ich hab gar nicht darauf geachtet, dass das VI LV9 ist.

Jedenfalls kannst du ein Benutzereignis auch programmatisch auslösen, wobei es hierfür zwei Möglichkeiten gibt.
  1. Mittels eines Eigenschaftsknotens den Wert eines Bedienelements signalisierend ändern.
  2. Ein Benutzerereigniss erstellen, regestrieren und in der Eventstruktur einen entsprechenden Case erzeugen


Ich bevorzuge Zweites, da ich es für übersichtlicher und schöner halte.


RE: Queued SM - Schwand - 24.10.2011 08:31

Ok, so hab ich es ja auch gemacht.