LabVIEWForum.de
VI wird nicht beendet wenn Event case schleife benutzt wird - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: VI wird nicht beendet wenn Event case schleife benutzt wird (/Thread-VI-wird-nicht-beendet-wenn-Event-case-schleife-benutzt-wird)

Seiten: 1 2


VI wird nicht beendet wenn Event case schleife benutzt wird - frischling - 02.05.2012 13:15

Hallo,

Ich lese über die serielle Schnittstelle Daten ein und möchte diese gezielt schließen wenn das VI beendet wird.
Wenn ich das nicht tue bleibt die Schnittstelle solange blockiert bis Labview komplett geschlossen wird, und das möchte ich verhindern.

Um das schließen der Applikation abzufangen benutze ich die Event cases "Application close?" und "Panel close?" und schliesse dort die Schnittstell mit VISA close.

Das gleiche tue ich wenn meine "main"-Schleife verlassen wird. Sind aber nun die Event Cases in dem VI drin, dann wird das vi nach Abbruch der Schleife nicht beendet.

Ich habe sehr wenig Erfahrung mit Labview und kann mir dieses Verhalte nicht erklären, geschweige denn etwas dagegen unternehmen.

Ich bin also für jede Hilfe dankbar!!

Viele Grüße,
Bob


RE: VI wird nicht beendet wenn Event case schleife benutzt wird - GerdW - 02.05.2012 13:20

Hallo bob,

Zitat:Das gleiche tue ich wenn meine "main"-Schleife verlassen wird. Sind aber nun die Event Cases in dem VI drin, dann wird das vi nach Abbruch der Schleife nicht beendet.
Wieso sollten diese Events (App.Close, Panel.Close) nicht abgearbeitet werden?
Schon mal Debugging mit Sonden und HighlightExecution betrieben?

Alles weitere ist nur Glas1, solange du kein VI anhängst...


RE: VI wird nicht beendet wenn Event case schleife benutzt wird - frischling - 02.05.2012 13:29

Hallo GerdW,

Ähm soweit ich dieFunktionalität kenne habe ich debugging versucht, d.h. eine conditional probe an den Stop-Knopf der die Schleife abbricht.
Die Schleife wird noch einmal fertig durchlaufen und dann das Visa Close ausserhalb und danach passiert nichts mehr... aber das Vi rennt weiter.

Ich hab das betreffende VI mal angehängt, abgespeichert als 8.2er VI.


RE: VI wird nicht beendet wenn Event case schleife benutzt wird - GerdW - 02.05.2012 13:33

Hallo Frischling,

THINK DATAFLOW!

- Deine Eventstruktur wird evtl. abgearbeitet - aber die andere Schleife bekommt davon ja nichts mit! Wie soll also die (innere) Schleife beendet werden, wenn der User auf "Panel.Close" klickt?
- Dein "Spektrum Beginn" kann ohne lokale Variablen auskommen, nimm ein Schieberegister und Drähte!
- Es gibt noch keine lv12_img-Version (offiziell), also bitte Profil anpassen...


RE: VI wird nicht beendet wenn Event case schleife benutzt wird - frischling - 02.05.2012 13:38

Das hatte ich befürchtet dass ich hier grundlegendes nicht kapiert hab...

Mit Panel.Close hab ich noch nicht ausprobiert.
Bisher hab ich nur den eigenen STOP-Button genutzt und dann passiert das was ich beschrieben habe.
Der Button beendet ja beide Schleifen, oder sehe ich das falsch?
Lösche ich die Event-Struktur wieder raus, dann wird das VI beendet.

Danke schonmal für die schnelle Hilfe.

P.S. das mit den Schieberegister statt lokale Variable muss ich auch erstmal durch-grübeln, im Moment kapier ich's nicht :/


RE: VI wird nicht beendet wenn Event case schleife benutzt wird - GerdW - 02.05.2012 13:40

Hallo frischling,

dann halt anders herum: wie soll deine Eventstruktur mitbekommen, dass du den STOP-Button gedrückt hast?
Lösung: ein entsprechendes Event definieren (STOP.ValueChange)...

- Eine Eventstruktur reagiert nur auf die konfigurierten Events, nicht mehr und nicht weniger!
- Da die Programmstruktur sowieso noch verbesserungswürdig ist, wäre jetzt ein guter Zeitpunkt, mal alles zu überdenken...
- Grundlagen zu Schieberegistern findest du im Link meiner Signatur...


RE: VI wird nicht beendet wenn Event case schleife benutzt wird - frischling - 02.05.2012 13:55

Bedeutet das, dass die eventstruktur immer noch wartet dass eins der definierten events eintrifft und das VI deshalb nicht beendet wird?

Ich hab jetzt ein Schieberegister eingebaut und den case Stop.ValueChange auch eingebaut.
An dem Verhalten beim Beenden hat sich nichts geändert :/
Ich sehe nur wie jetzt der Stop-event abgearbeitet wird und danach hängt's wieder.

Danke für den Hinweis mit der Programmstruktur, aber wäre es dir möglich mir etwas genauer zu sagen was da falsch ist? Ich denke das könnte mir helfen.


RE: VI wird nicht beendet wenn Event case schleife benutzt wird - GerdW - 02.05.2012 14:09

Hallo frischling,

du hast immer noch grobe Datenfluss-Verstöße in deinem Aufbau. Versuche dir eine ordentliche Struktur zu überlegen!

- Verzichte auf die Eventstruktur und regele das PortSchließen über simplen Dataflow, einfach die VISA-Referenz durch die Whileschleife führen und nach der Schleife dann den Port schließen...
- Verwende die Eventstruktur in der Schleife, evtl. mit TimeOut, und dann aber auch für alle Events, die auftreten können...


RE: VI wird nicht beendet wenn Event case schleife benutzt wird - frischling - 02.05.2012 14:33

Wenn ich auf die Event-Struktur verzichte, wie kann ich die Schnittstelle schließen wenn das VI-Fenster geschlossen wird?
Funktioniert im Moment auch nicht, wenn ich das Fenster schließe passiert genau nichts :/

Event-Struktur in der äußeren while-Schleife bewirkt daß zumindest der Stop-Button richtig funktioniert!
Schonmal Vielen Dank dafür!


RE: VI wird nicht beendet wenn Event case schleife benutzt wird - GerdW - 02.05.2012 14:44

Hallo Frischling,

siehe Anhang. Ich behaupte nicht, dass die Programmstruktur als solches schon "schön" ist...

Du hast deine LV-Version im Profil noch nciht korrigiert...