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: 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. 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... Gruß, Jens |