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 

Kommunikation 2er Schleifen



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!

29.06.2010, 13:09 (Dieser Beitrag wurde zuletzt bearbeitet: 29.06.2010 13:13 von Matze.)
Beitrag #1

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
Kommunikation 2er Schleifen
Hallo,

vielleicht habe ich falsch gesucht, aber leider konnte ich hier nichts finden.

Ich habe 2 Schleifen:

- eine zur Abfrage einer Ereignisstruktur
- parallel dazu eine für das Hauptprogramm

Nun möchte ich im Hauptprogramm Code ausführen, wenn sich über die Ereignisstruktur ein Wert geändert hat.

Ich kann mir nicht vorstellen, dass diese Kommunikation nur über lokale bzw. globale Variablen funktioniert bzw. einen DUmmy-Control:
In der Ereignisstruktur einen boolschen Wert auf "true" setzen und im Hauptprogramm auf diesen Wert prüfen. Ist dieser "true", wird eine Case-Struktur abgearbeitet und der boolsche Wert auf "false" gesetzt.

Wobei das Datenflussprinzip hier soweiso nicht funktionieren kann, da die Scheifen parallel laufen. Dennoch kommen mir lokale/globale Variablen in LabVIEW generell unauber vor.

Wie macht man es richtig?

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.06.2010, 13:17
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Kommunikation 2er Schleifen
Such mal (auch im NI-Examplefinder) nach Schlagworten wie "Queues", "Notifiers" (Melder), und/oder Producer-Consumer-Struktur (als Template unter File->New...).

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.06.2010, 13:19
Beitrag #3

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
Kommunikation 2er Schleifen
Danke für die Suchbegriffe. Die helfen mir weiter.Smile

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.06.2010, 13:20 (Dieser Beitrag wurde zuletzt bearbeitet: 29.06.2010 13:22 von dimitri84.)
Beitrag #4

dimitri84 Offline
Astronaut
*****


Beiträge: 1.496
Registriert seit: Aug 2009

2020 Developer Suite
2009
DE_EN

53562
Deutschland
Kommunikation 2er Schleifen
' schrieb:Ich habe 2 Schleifen:
- eine zur Abfrage einer Ereignisstruktur
- parallel dazu eine für das Hauptprogramm
Stichwort: "Producer-Consumer"

Zitat:Wie macht man es richtig?
Über eine Queue oder einen Melder.


Edit
Mensch, da war ich aber langsam.

„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.06.2010, 13:34 (Dieser Beitrag wurde zuletzt bearbeitet: 29.06.2010 13:51 von Matze.)
Beitrag #5

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
Kommunikation 2er Schleifen
Dennoch danke. Das bestätigt mir die Aussage von Jens (auch wenn ich daran nicht gezweifelt habe).

Mit diesen ganzen Konstrukten (Melder, separate Ereignis-Schleife etc) ist es schier unmöglich, das Blockdiagramm auf eine Bildschirmauflösung zu bekommen. Das wird zwar überall empfohlen und schafft Übersicht, keine Frage. Aber in dem Fall bekomme ich das nicht hin.
Naja, was soll's.

Nachtrag: Mit der Producer-Consumer-Struktur funktioniert es einwandfrei.

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.06.2010, 15:02
Beitrag #6

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
Kommunikation 2er Schleifen
Kommando zurück: Es funktioniert nicht korrekt.

Die Hauptschleife wird 1 x durchlaufen und dann wartet das VI "Element aus Queue entfernen" vermutlich auf das nächste Ereignis (das es nicht gibt):

   

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
29.06.2010, 15:10 (Dieser Beitrag wurde zuletzt bearbeitet: 29.06.2010 15:14 von dimitri84.)
Beitrag #7

dimitri84 Offline
Astronaut
*****


Beiträge: 1.496
Registriert seit: Aug 2009

2020 Developer Suite
2009
DE_EN

53562
Deutschland
Kommunikation 2er Schleifen
' schrieb:Die Hauptschleife wird 1 x durchlaufen und dann wartet das VI "Element aus Queue entfernen" vermutlich auf das nächste Ereignis (das es nicht gibt):
Ja, "Element aus Queue entfernen" wartet bis wieder was in die Queue geschrieben wurde. So funktioniert das. Wie hättest du es denn gerne? Ist der Timeout vielleicht etwas für dich?

Und bitte das komplette BD auf's Bild packen ...

Edit: Du wirst auf diese Weise deine Consumer Loop kaum beenden können, denn das VI wartet, wie gesagt, bis wieder was los ist. Am einfachsten ist, du verbindest den Error-Cluster von "Queue lesen" mit dem Stop-Terminal der Schleife. So wird sie beendet sobald die Queue zerstört wird.

„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.06.2010, 15:35
Beitrag #8

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
Kommunikation 2er Schleifen
Ich habe das BD nur schnell vereinfacht zusammengeklickt, um es auf das Relevante zu reduzieren.
Das links ist wie in den LV-Beispielen.

Ich hätte es gerne so, dass die Hauptschleife immer läuft und wenn ein nummerischer Wert vom Benutzer geändert wird, soll in der Hauptschleife ein zusätzlicher Code ausgeführt werden, der diese Werte verarbeitet (die oben angehänge Case-Struktur "kein Fehler").

Aber du hast Recht: Wenn ich das Timeout auf 1 ms setze, scheint es zu funktionieren, wie ich mir das vorstelle. 1 ms könnte riskant sein, vermute ich, doch ich möchte meine Hauptschleife nicht zu sehr ausbremsen.

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

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.696
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Kommunikation 2er Schleifen
' schrieb:Aber du hast Recht: Wenn ich das Timeout auf 1 ms setze, scheint es zu funktionieren, wie ich mir das vorstelle.
Für die Queue als solche reicht ein Timeout von z.B. 250ms. Entweder beendet sich das Queue-Element nach dieser Zeit von selbst oder dann, und dann sofort, wenn in der Queue was drinnen steht.

Zitat:1 ms könnte riskant sein, vermute ich, doch ich möchte meine Hauptschleife nicht zu sehr ausbremsen.
Eine Schleife, die mit 1ms Schleifendauer läuft, ist immer kritisch.
Ich mach eine Schleife nie kleiner als 50ms. Ggf. muss ich halt den Algorithmus anpassen.

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
  Kommunikation zwischen den While-Schleifen Honeygirl24 7 8.394 14.07.2010 22:18
Letzter Beitrag: eg

Gehe zu: