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 

Frage zur Queued State Machine / Producer-Consumer-Struktur



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!

19.08.2008, 10:35
Beitrag #1

Achim Offline
*****
*****


Beiträge: 4.223
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
Frage zur Queued State Machine / Producer-Consumer-Struktur
Mal ne Frage ans LVF:

Der Vorteil einer Producer-Consumer-Architektur mit "integrierter" State Machine ist ja, dass man die eigentliche Programm-Abarbeitung in der State Machine von den Benutzereingaben (z.B. "Stop-Kommando" über Button) entkoppelt. Somit können z.B. Ressourcen gespart werden, das Programm wird insgesamt "performanter" und beim User ensteht nicht der Eindruck, ein Programm würde irgendwie "hängen", weil es noch irgend ne Aktion durchführt (Button reagiert sofort, weil in separater Schleife!).

Aber...ich hab z.B. das Problem das ich über einen Counter ein TTL-Signal erfasse. Dieses TTL-Signal wird durch ein sich drehendes Rad über einen speziellen Sensor erzeugt. Nun ist es so, dass das Rad sehr schnell drehen kann (3000 U/min, das entspricht dann einer Signalfrequenz von ca. 52 kHz)...aber auch sehr langsam (nahezu Stillstand)...die Frequenz ist dann auch SEHR niedrig. Von einem TTL-Rechteckimpuls zum nächsten kann es dann schon mal 1-2 Sekunden dauern. Die Rechteckpulse sind abhängig von verschiedenen Bedingungen unterschiedlich breit, darum wird hier über den Counter eine Pulsbreitenmessung durchgeführt. Damit ich beim DAQmx-Read des Counters keine Fehlermeldung produziere, muss eine Timeout-Zeit spezifiziert werden (entsprechend der niedrigsten möglichen Drehzahl bzw. Signalfrequenz). Wenn das DAQmx-Read dann in der Consumer-State Machine (State "Read counter") untergebracht ist, wird in diesem State dann halt entsprechend der Timeout-Zeit gewartet, bis ein neuer Puls kommt. Drückt der User in dieser Zeit (über die Producer-Event-Struktur) auf den Abbrechen-Button, wird das Programm aber nicht sofort beendet...eben weil das Read-VI noch nicht fertig ist. Der Abbrechen-Button reagiert zwar sofort und schreibt den neuen State "EXIT" in die Queue, diese wird aber erst nach der Timeout-Zeit des Read-VI im nächsten Schleifendurchlauf abgefragt...

Problem erkannt? Wie könnte man das geschickter lösen? Hmm

Gruß
Achim

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2008, 10:44
Beitrag #2

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Frage zur Queued State Machine / Producer-Consumer-Struktur
Du kannst dein Timeout auch bei niedrigen Abtastfrequenzen klein einstellen und in einer While-Schleife warten bis kein Timeout-Fehler kommt oder eben ein Befehl zum Abbrechen kommt.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2008, 10:51
Beitrag #3

Achim Offline
*****
*****


Beiträge: 4.223
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
Frage zur Queued State Machine / Producer-Consumer-Struktur
' schrieb:Du kannst dein Timeout auch bei niedrigen Abtastfrequenzen klein einstellen und in einer While-Schleife warten bis kein Timeout-Fehler kommt oder eben ein Befehl zum Abbrechen kommt.

Fränkisches Fragewort mit drei Buchstaben:

HÄH?

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2008, 10:53
Beitrag #4

RoLe Offline
LVF-Guru
*****


Beiträge: 1.236
Registriert seit: Jul 2007

-
1997
en

0
Schweiz
Frage zur Queued State Machine / Producer-Consumer-Struktur
... man könnte auch den DAQmx Task beenden, dann bricht DAQRead mit Fehler ab.

Ab EG's Vorschlag ist denke ich besser.

.·´¯)--> 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
19.08.2008, 10:56
Beitrag #5

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Frage zur Queued State Machine / Producer-Consumer-Struktur
' schrieb:... man könnte auch den DAQmx Task beenden, dann bricht DAQRead mit Fehler ab.

Ab EG's Vorschlag ist denke ich besser.

Ich bin gegen GewaltBig Grin

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2008, 10:59
Beitrag #6

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Frage zur Queued State Machine / Producer-Consumer-Struktur
Kann man das nicht genau so lösen, wie wenn man ein großes Timeout in einer Wait-Schleife hat, und man will erreichen, daß auf Stop sofort reagiert wird?

Also: Das Timeuet sei 10sec. Es wird auf 200ms verkürzt, und es werden bis zu 50 Versuche gemacht, eine Flanke zu lesen. Wenn alls 50 Versuche vergeblich waren, dann hat man ein echtes Timout.
Der Witz des Ganzen ist, daß die Reaktionszeit auf Stop von max 10sec auf max 200ms herabgesetzt wird.

Wenn das nicht verständlich ist, dann müßte ich noch ein Beipiel machen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
19.08.2008, 11:05
Beitrag #7

Achim Offline
*****
*****


Beiträge: 4.223
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
Frage zur Queued State Machine / Producer-Consumer-Struktur
' schrieb:Wenn das nicht verständlich ist, dann müßte ich noch ein Beipiel machen.

Das wär nett...ich blicks nämlich nicht!

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2008, 11:14 (Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2008 11:15 von eg.)
Beitrag #8

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Frage zur Queued State Machine / Producer-Consumer-Struktur
Wir meinen mit Lucki das gleiche.


Angehängte Datei(en) Thumbnail(s)
   

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2008, 11:22
Beitrag #9

Achim Offline
*****
*****


Beiträge: 4.223
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
Frage zur Queued State Machine / Producer-Consumer-Struktur
Ah...also im Read-Case die Queue pollen und (wie bei dir) nur gucken ob überhaupt ein neues Kommando da ist oder evtl. sogar gucken ob das nächste Kommando ein EXIT (=> Beenden...) oder irgend ein anderes Kommando ist. Klingt nicht schlecht...

Gibts noch Alternativ-Vorschläge?

Gruß
Achim

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2008, 11:29 (Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2008 11:31 von eg.)
Beitrag #10

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Frage zur Queued State Machine / Producer-Consumer-Struktur
' schrieb:Ah...also im Read-Case die Queue pollen und (wie bei dir) nur gucken ob überhaupt ein neues Kommando da ist oder evtl. sogar gucken ob das nächste Kommando ein EXIT (=> Beenden...) oder irgend ein anderes Kommando ist. Klingt nicht schlecht...

Gibts noch Alternativ-Vorschläge?

Gruß
Achim

Ja, du kannst fast genauso vorgehen wie wir vorgeschlagen haben. Aber statt den Status der Queue zu pollen, kannst du in der inneren Schleife den aktuellen Befehl auslesen und wenn das ein Read ist, dann lesen und wieder Read reinschreiben. Also eine verschachtelte State Machine.

Das kann man verständlicher mit einer UML Diagramm beschreiben, als die erste Lösung.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Machine learning Hubert R. 3 2.505 29.08.2023 10:10
Letzter Beitrag: Hubert R.
  Programm beenden State Machine simcum 3 3.411 17.10.2020 20:57
Letzter Beitrag: BNT
  Queue verwendung in komplexer Producer/Consumer Abhängigkeit Ksanto 8 5.719 03.04.2017 20:14
Letzter Beitrag: Ksanto
  Queued State Machine: IDLE Optimierung ALuehmann 3 4.907 14.02.2017 14:00
Letzter Beitrag: HVo
  State machine und Typdefinition meta_ir 4 4.425 09.01.2017 12:47
Letzter Beitrag: meta_ir
Question Frage zu "queued state machine" Architektur joptimus 4 5.940 05.08.2016 14:34
Letzter Beitrag: joptimus

Gehe zu: