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 

Paralelle Schleife mit mehreren Aufgaben



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.01.2008, 10:15 (Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2008 10:24 von eg.)
Beitrag #1

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Paralelle Schleife mit mehreren Aufgaben
Hallo Leute und freues neues Jahr,

ich programmiere meistens mit mehreren paralellen Loops, die zwischeneinander mittels Synchronisationstools (Queue, Notifier...) kommunizieren. Leider bleibe ich immer wieder an einem Problemchen stehen. Und zwar, wenn so eine paralelle Schleife mehrere Aufgaben hat, z.B.:

Daten von Schnittstelle immer lesen
nur einzelne Pakete lesen
im binären Modus
im ASCII Modus
Fehlerbericht senden
Schnittstellenstatus senden
Schleife beenden

und und und

Dann weiss ich nicht so genau wie ich aus dem Ständiglesenmodus rauskomme um andere Aufgaben zu erledigen. Zur Zeit frage ich in jedem Schleifendurchlauf den Status der Schleifenqueue ab (ob neue Elemente/Befehle in der Verbraucherqueue anstehen) und wenn ja komme aus dem Modus raus. Früher habe ich in jedem Schleifendurchlauf in die eigene Queue den Befehl "Lesen" geschoben.

Wie macht ihr das?
Gibt es Alternativen dazu?

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.01.2008, 11:20
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Paralelle Schleife mit mehreren Aufgaben
' schrieb:Zur Zeit frage ich in jedem Schleifendurchlauf den Status der Schleifenqueue ab (ob neue Elemente/Befehle in der Verbraucherqueue anstehen) und wenn ja komme aus dem Modus raus.
So mach ich das auch.

Nach jedem Lesen in dem Dauerlesecase wird die Queue gecheckt. Je nach Befehl in der Queue wird das Dauerlesen beendet oder nur ein spezieller Befehl ausgeführt und danach wieder das Dauerlesen (respektive der zuletzt gültige Case) ausgeführt.

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
07.01.2008, 11:21
Beitrag #3

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Paralelle Schleife mit mehreren Aufgaben
' schrieb:So mach ich das auch.

Nach jedem Lesen in dem Dauerlesecase wird die Queue gecheckt. Je nach Befehl in der Queue wird das Dauerlesen beendet oder nur ein spezieller Befehl ausgeführt und danach wieder das Dauerlesen (respektive der zuletzt gültige Case) ausgeführt.


Dann bin ich schon mal nicht alleine.
Sonst noch Vorschläge?

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.01.2008, 12:42 (Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2008 12:43 von cb.)
Beitrag #4

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Paralelle Schleife mit mehreren Aufgaben
' schrieb:Dann bin ich schon mal nicht alleine.
Sonst noch Vorschläge?

ich verwende die Information "Queue timed out" und schicke meine StateMachine dann in den "timeout" Case. Diesen Case kann man wunderbar verwenden die Statemachine in weitere States zu schicken. Beispiel:

3 Cases:
timeout, lesen und schreiben

Die StM soll alle 100 lesen ==> Queue Read timeout = 100 ms

im Read Case merke ich mir den Zeitstempel des letzten Lese-Vorganges
im Write Case überprüfe ich, ob seit dem letzten Lesen bereits mehr als 100 ms vergangen sind, wenn ja füge ich einen Read Case ein (damit bei voller Q das Lesen nicht zu kurz kommt ...)

wenn keine Elemente in der Queue sind springt die StM in den "timeout" case und schchickt sich darin selbst in den "Read" Case ==> die State-Machine springt alle 100 ms in den Read Case ...

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
07.01.2008, 13:27 (Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2008 13:43 von eg.)
Beitrag #5

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Paralelle Schleife mit mehreren Aufgaben
' schrieb:ich verwende die Information "Queue timed out" und schicke meine StateMachine dann in den "timeout" Case. Diesen Case kann man wunderbar verwenden die Statemachine in weitere States zu schicken. Beispiel:

3 Cases:
timeout, lesen und schreiben

Die StM soll alle 100 lesen ==> Queue Read timeout = 100 ms

im Read Case merke ich mir den Zeitstempel des letzten Lese-Vorganges
im Write Case überprüfe ich, ob seit dem letzten Lesen bereits mehr als 100 ms vergangen sind, wenn ja füge ich einen Read Case ein (damit bei voller Q das Lesen nicht zu kurz kommt ...)

wenn keine Elemente in der Queue sind springt die StM in den "timeout" case und schchickt sich darin selbst in den "Read" Case ==> die State-Machine springt alle 100 ms in den Read Case ...


Als Vorschlag angenommen, aber effizient finde ich das nicht. Kannst du die Vorteile dieser Vorgehensweise aufzählen? Ich weiss, dass du nichts umsonst machst, also was sind denn die Vorteile davon?

Ich persönlich versuche keine Timeouts im Programm zu verwenden, die mag ich nicht so. Bei mir ist fast alles eventgesteuert.

OFFTOP: Trennst du das Schreiben und Lesen in zwei Loops oder machst du es immer in einer "Schnittstellenloop"?

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.01.2008, 13:16
Beitrag #6

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Paralelle Schleife mit mehreren Aufgaben
' schrieb:Als Vorschlag angenommen, aber effizient finde ich das nicht. Kannst du die Vorteile dieser Vorgehensweise aufzählen? Ich weiss, dass du nichts umsonst machst, also was sind denn die Vorteile davon?

Ich persönlich versuche keine Timeouts im Programm zu verwenden, die mag ich nicht so. Bei mir ist fast alles eventgesteuert.

den Timeout-Case brauchst du sowieso, da du die "Dequeue Element" Primitive ja mit einem Timeout versehen musst. -1 ginge auch, aber dann wartet die Primitive ggf. ewig, oder man muss die Queue zerstören um die Schleife beenden zu können. (Error 1122 occurred at Dequeue Element in Untitled 1 | Possible reason(s): LabVIEW: Refnum became invalid while node waited for it.) Das mach ich aber nicht so gerne, weil für mich auch ein "geregeltes Herunterfahren" zu einem "sauberen" Programm gehört ...

' schrieb:OFFTOP: Trennst du das Schreiben und Lesen in zwei Loops oder machst du es immer in einer "Schnittstellenloop"?

Radio Eriwan: im Prinzip ja, aber: kommt drauf an, welche Funktionalität ich benötige ...

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
Anzeige
08.01.2008, 13:25 (Dieser Beitrag wurde zuletzt bearbeitet: 08.01.2008 13:36 von eg.)
Beitrag #7

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Paralelle Schleife mit mehreren Aufgaben
' schrieb:den Timeout-Case brauchst du sowieso, da du die "Dequeue Element" Primitive ja mit einem Timeout versehen musst. -1 ginge auch, aber dann wartet die Primitive ggf. ewig, oder man muss die Queue zerstören um die Schleife beenden zu können. (Error 1122 occurred at Dequeue Element in Untitled 1 | Possible reason(s): LabVIEW: Refnum became invalid while node waited for it.) Das mach ich aber nicht so gerne, weil für mich auch ein "geregeltes Herunterfahren" zu einem "sauberen" Programm gehört ...
Radio Eriwan: im Prinzip ja, aber: kommt drauf an, welche Funktionalität ich benötige ...

:Dwoher kennst du das Radio???


Ja, aber du kannst doch ein Exit kommandieren, dann brauchst du die Queue nicht zu zerstören um aus der Schleife rauszugehen.

Ungefähr so:


Angehängte Datei(en) Thumbnail(s)
   

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
  Labview Beispiele bzw Aufgaben zum Üben mez15 5 14.231 15.01.2013 12:50
Letzter Beitrag: dali4u
  Erzeuger/Verbraucher Schleife mit mehreren Verbrauchern LV-Fred 4 5.928 08.06.2012 15:58
Letzter Beitrag: Kiesch
  "Fehler-Struktur" für mehrere paralelle While-Schleifen Sternhagel 3 5.869 18.02.2012 07:42
Letzter Beitrag: Y-P
  1x While Schleife, 1x Zeitges. While Schleife, die zeitgs. START/STOP dali4u 1 6.603 23.05.2011 09:22
Letzter Beitrag: Y-P

Gehe zu: