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 

Queued State Machine



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!

05.09.2007, 15:51 (Dieser Beitrag wurde zuletzt bearbeitet: 05.09.2007 15:56 von eg.)
Beitrag #1

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Queued State Machine
Hallo,

habe ein kleines Problem mit QSM.

Meine Parser Schleife bekommt befehle über eine Queue und führt diese aus:

Read&Parse
Idle
Exit

und noch paar andere.

Sobald die Schleife den Befehl Read&Parse bekommt, fängt diese an die Schnittstelle auszulesen und die Daten zu parsen UND nachdem es gemacht ist, befiehlt die sich selbst Read&Parse und macht es solange bis etwas anderes kommandiert wird.

Stellt euch vor, die Schleife ist gerade in diesem Dauerzustand Read&Parse. Jetzt wird von außen Idle kommandiert, nun wird der Zustand ausgeführt und nach dem Ausführen wird der Befehl Read&Parse wie oben beschrieben kommandiert. Somit befinden sich jetzt zwei Befehle in der Statequeue. Als nächstes sind wir im State Idle, da aber noch ein Befehl "Read&Parse" in der Queue ist kommen wir wieder in den Dauerzustand "Read&Parse".

D.h. ich komme da nicht mehr raus!?!? Ok, das habe ich jetzt gelöst in dem ich im Zustand Idle die Queue flushe (alle Elemente löschen). Und damit bekomme ich mein nächstes Problem:

wenn ich gleich nach dem "Idle" den "Exit" machen will wird es nicht mehr aqusgeführt, da alle Elemente inclusive "Exit" aus der Statequeue entfernt wurden.

Was kann man dagegen tun? Befehlsunterscheidung? Andere Vorgehensweise?

Ich warte auf euere VorschlägeBig Grin

eg


Angehängte Datei(en) Thumbnail(s)
           

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
05.09.2007, 17:43
Beitrag #2

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Queued State Machine
' schrieb:wenn ich gleich nach dem "Idle" den "Exit" machen will wird es nicht mehr aqusgeführt, da alle Elemente inclusive "Exit" aus der Statequeue entfernt wurden.

ich mach das tatsächlich so, dass ich vor dem exit die Queue flushe und dann die "Exit Sequenz" einleite, in dem ich genau die States reinschreibe, die für eine saubere Beendigung des Programms notwendig sind. Dabei darf natürlich nichts anderes mehr in die Queue geschrieben werden, die diese Sequenz beeinflussen könnte

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.09.2007, 20:13 (Dieser Beitrag wurde zuletzt bearbeitet: 05.09.2007 20:13 von eg.)
Beitrag #3

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Queued State Machine
Danke, aber diese Vorgehensweise wird, wenn ich alles richtig verstanden habe, nicht reichen oder das Problem lösen. Könntest du bitte einen kleinen Beispiel posten?

eg

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 07:53
Beitrag #4

RoLe Offline
LVF-Guru
*****


Beiträge: 1.236
Registriert seit: Jul 2007

-
1997
en

0
Schweiz
Queued State Machine
Du könntest für das von dir beschriebene Problem das Exit-Element an den Anfang der Queue schreiben.
(Enqueue Element At Opposite End)

Du must dabei aber sicher sein, das du die anstehenden Elemente in der Queue nicht ausführen musst, oder im Exit dann schauen ob nicht noch was wichtiges in der Queue ist/war. (File-Close, DAQ-Stopp.......)

Gruss
Roland

.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 10:21
Beitrag #5

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Queued State Machine
Ich würde die Statemachine um einen expliziten State "End Read&Parse" erweitern. Es müsste dann aber zwei "Read&Parse"-Typen geben: einen von außen angestoßenen und einen innerhalb der SM erzeugten. "End Read&Parse" setzt ein Flag, das von "Read&Parse-TypAußen" gelöscht wird. Kommt ein "Read&Parse-TypInnen" an, wird "Read&Parse" nur ausgeführt, wenn das Flag aus ist. Dadurch wird also kein "Read&Parse-TypInnen" mehr erzeugt. Kommt ein jeodch "Read&Parse-TypAußen" geht wieder alles von vorne los.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 12:52 (Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2007 21:43 von jg.)
Beitrag #6

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Queued State Machine
' schrieb:Du könntest für das von dir beschriebene Problem das Exit-Element an den Anfang der Queue schreiben.
(Enqueue Element At Opposite End)

Du must dabei aber sicher sein, das du die anstehenden Elemente in der Queue nicht ausführen musst, oder im Exit dann schauen ob nicht noch was wichtiges in der Queue ist/war. (File-Close, DAQ-Stopp.......)

Gruss
Roland

Es geht nicht nur um den State "Exit", sondern um ein paar andere auch.


' schrieb:Ich würde die Statemachine um einen expliziten State "End Read&Parse" erweitern. Es müsste dann aber zwei "Read&Parse"-Typen geben: einen von außen angestoßenen und einen innerhalb der SM erzeugten. "End Read&Parse" setzt ein Flag, das von "Read&Parse-TypAußen" gelöscht wird. Kommt ein "Read&Parse-TypInnen" an, wird "Read&Parse" nur ausgeführt, wenn das Flag aus ist. Dadurch wird also kein "Read&Parse-TypInnen" mehr erzeugt. Kommt ein jeodch "Read&Parse-TypAußen" geht wieder alles von vorne los.

Beispiel ins Studio (wenn es geht).

Danke, eg


P.S. im Anhang was zum Basteln.

(VI LV 8.0)


Angehängte Datei(en)
Sonstige .vi  StateProblem1.vi (Größe: 23,92 KB / Downloads: 172)

Sonstige .vi  StateProblem2.vi (Größe: 24,22 KB / Downloads: 168)

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 16:44
Beitrag #7

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Queued State Machine
Keine weiteren Vorschläge? Noe

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 18:05
Beitrag #8

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Queued State Machine
' schrieb:Beispiel ins Studio (wenn es geht).
Geht nicht. Wink

Ich hätte ja gerne dein Muster erweitert. Das geht aber mit meiner LV8.2 nicht. Wenn dann würde ich sowieso anstelle eines Strings einen Enumerator nehmen. Beim Erstellen eines Enumerators aber stürzt die komplette IDE wortlos ab.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 18:08
Beitrag #9

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Queued State Machine
' schrieb:Geht nicht. Wink

Ich hätte ja gerne dein Muster erweitert. Das geht aber mit meiner LV8.2 nicht. Wenn dann würde ich sowieso anstelle eines Strings einen Enumerator nehmen. Beim Erstellen eines Enumerators aber stürzt die komplette IDE wortlos ab.


Hey, was hast du denn? Spinnt dein LV?

eg

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 20:12
Beitrag #10

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Queued State Machine
' schrieb:Hey, was hast du denn? Spinnt dein LV?
Meins? Meins wenns wäre, gings. LV8.2 (nicht LV8.2.1) hat diverse schwere Fehler, so z.B. den, über den es hier auch einen langen Thread gibt: LV stürzt bei "Eigenschaft" eines Zahl-Bedienelementes ab.

Hier auf diesem Rechner mit LV8.2.1 sieht die Sache schon anders aus: siehe Anhang. Der Enumerator sollte wegen der Erweiterbarkeit natürlich ein strikter Typ sein.


Angehängte Datei(en)
Sonstige .vi  StateProblem2.vi (Größe: 29,52 KB / Downloads: 156)

Sonstige .vi  StateProblem2_LV80.vi (Größe: 29,5 KB / Downloads: 137)

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
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
  Machine learning Hubert R. 3 1.493 29.08.2023 10:10
Letzter Beitrag: Hubert R.
  Programm beenden State Machine simcum 3 2.772 17.10.2020 20:57
Letzter Beitrag: BNT
  Queued State Machine: IDLE Optimierung ALuehmann 3 4.304 14.02.2017 14:00
Letzter Beitrag: HVo
  State machine und Typdefinition meta_ir 4 3.849 09.01.2017 12:47
Letzter Beitrag: meta_ir
Question Frage zu "queued state machine" Architektur joptimus 4 5.340 05.08.2016 14:34
Letzter Beitrag: joptimus
  Queued Message Handler Design galilio 3 5.441 14.07.2016 15:34
Letzter Beitrag: Freddy

Gehe zu: