LabVIEWForum.de
Nachrichten-Queues, Exit wird nicht an andere Schleifen weitergereicht - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Nachrichten-Queues, Exit wird nicht an andere Schleifen weitergereicht (/Thread-Nachrichten-Queues-Exit-wird-nicht-an-andere-Schleifen-weitergereicht)



Nachrichten-Queues, Exit wird nicht an andere Schleifen weitergereicht - dali4u - 28.10.2014 10:12

Hi Leute,
ich bin gerade dabei für ein sehr umfangreiches Projekt ein komplett neues
Grundgerüst aufzustellen. Es sind 6 Schleifen die über Nachrichten-Queue
miteinander kommunizieren sollen und schon taucht das erste Problem auf.
In meiner Event-Schleife wird zwar "Exit" ausgeführt, aber die anderen Schleifen
erreicht es nicht und ich stehe auf dem Schlauch.

Kann mir jemand sagen was da falsch läuft? Komme nicht weiter.
VIs sind in LabVIEW 2012.

Stefan


RE: Nachrichten-Queues, Exit wird nicht an andere Schleifen weitergereicht - Morpheus - 28.10.2014 10:21

Das Problem ist, dass du beim Drücken des "Exit" Buttons den Loop mit dem Event-Handler nicht beendest.
Und der User-Event (Stop Event), den du auslöst, wird ebenfalls nicht abgehandelt!

Gruss
Chris


RE: Nachrichten-Queues, Exit wird nicht an andere Schleifen weitergereicht - jg - 28.10.2014 10:30

Unschönheit:
Da dein Dequeue-Message-VI einerseits nicht reentrant ist, andererseits aber unendlich auf ein Dequeue wartet, kannst du nicht parallel an alle Consumer-Loops Nachrichten verschicken.
Bsp: Das Dequeue VI gerade in der Loop Fehlerbehandlung aktiv, und du schickst jetzt was an Kalibrierung. FAIL.

Gruß, Jens


RE: Nachrichten-Queues, Exit wird nicht an andere Schleifen weitergereicht - dali4u - 28.10.2014 11:10

(28.10.2014 10:30 )jg schrieb:  Unschönheit:
Da dein Dequeue-Message-VI einerseits nicht reentrant ist, andererseits aber unendlich auf ein Dequeue wartet, kannst du nicht parallel an alle Consumer-Loops Nachrichten verschicken.
Bsp: Das Dequeue VI gerade in der Loop Fehlerbehandlung aktiv, und du schickst jetzt was an Kalibrierung. FAIL.

Hi Jens,

arbeite das erste Mail mit einem solchen Aufbau, daher noch Versuchsstadium und
offen für alle Vorschläge. Schande über mein Haupt, aber "reentrant" sagt mir nicht
wirklich was. Habe zwar gelesen was es bedeutet aber wie mich das betrifft weiß ich
nicht.

In der Schleife Kalibrierung wird eine Statemaschine auflaufen die immer wieder
mit anderen Vorgaben und Abäufen gestartet werden sollte. Es wird rund 40-50 verschiedene
States geben aus denen rund 10-15 genutzt werden, wenn ein bestimmte Kalibrierrezept
gestartet wird. Bei einem anderen Kalibrier-Rezept können dass ganz andere sein.

Aus Kalibrierung heraus, wenn die über die Nachrichten-Queue "Start" erhält.
-> State: Druckänderung ein bestimmten Druckwert, z.B. 100mbar und warten bis Druckwert erreicht wird
-> State: Kalibrierung durchführen
-> State: Kalibrierwerte protokollieren und speichern
-> State: und mit anderem Druck weiter...
.. alle States durchlaufen und IDLE Mode. Ein Durchlauf der gewünschen States kann mehrere Stunden dauern
und rund 5 bis 10 mal werden Daten an die Protokollierung gesendet, nicht öfter. Zeitgleicher Aufruf ist ausgeschlossen.

Druckregelung:
-> hier läuft eine Statemaschine mit PID Regelung.
-> "Init" Voreinstellungen laden
-> "Start" PID Druckregelung läuft in einer Schleife, die Schleife kann NICHT über die
Nachrichten-Queue gestoppt werden. Ob das alles so geht muss ich noch testen.
Das wird vermutlich nicht funktionieren, oder? Die Nachrichten-Queue der Druckregelung
muss ich dann löschen und durch eine reine Statemaschine ersetzen, vermutlich besser.

Fehlerbehandlung:
-> hier sollten alle Fehler auflaufen und in einer Tabelle angezeigt werden, mehr nicht, soll
nur das Debug erleichtern. Das Dequeue kann hier unendlich warten bis ein neuer Fehler mit den
Nachrichtendaten übertragen wird und in der Tabelle angezeigt werden soll.

Danke
Stefan
(28.10.2014 10:21 )Morpheus schrieb:  Das Problem ist, dass du beim Drücken des "Exit" Buttons den Loop mit dem Event-Handler nicht beendest.
Und der User-Event (Stop Event), den du auslöst, wird ebenfalls nicht abgehandelt!

Ups, den hatte ich vergessen. Danke


RE: Nachrichten-Queues, Exit wird nicht an andere Schleifen weitergereicht - jg - 28.10.2014 11:48

Reentrant oder ablaufinvariant ist eine VI-Eigenschaft (Rechtsklick -> VI-Eigenschaften).

Im Normalfall kann ein VI ja nur 1x im Speicher sein und nur an 1 Stelle aufgerufen werden. Wenn es mehrfach parallel verwendet wird, dann wartet eine zweite Instanz solange, bis die erste Instanz mit der Abarbeitung fertig ist (sehr sinnvoll einsetzbar bei FGVs).

Anders bei Reentrant, dann kann das VI auch mehrfach parallel aufgerufen werden, jedes (Sub)VI ist dann eine eigene VI-Instanz.

Nach über 6 Jahren LabVIEW solltest du davon eigentlich schon mal gehört haben... Wink

Gruß, Jens