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

LabVIEWForum.de

Normale Version: VI wird nicht beendet wenn Event case schleife benutzt wird
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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
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...
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.
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...
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 :/
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...
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.
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...
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!
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...
Seiten: 1 2
Referenz-URLs