LabVIEWForum.de
Button reagiert nur beim ersten Aufrufen der SubVI - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Button reagiert nur beim ersten Aufrufen der SubVI (/Thread-Button-reagiert-nur-beim-ersten-Aufrufen-der-SubVI)



Button reagiert nur beim ersten Aufrufen der SubVI - c_Kay - 11.10.2012 16:09

Ich habe die Steuerung eines unserer Messplatzes von GPIB-Kommunikation auf serielle Kommunikation über VISA umgebaut, da die GBIB-Schnittstelle in einem der Messgeräte nicht mehr funktioniert. Dabei wollte ich einen Fehler bezüglich der Stopp-Funktion im Programm beheben und bin gescheitert. Hoffentlich könnt ihr mir da helfen.

Die Messung läuft in 2 While-Schleifen ab: Erste Schleife: Gehe zum nächsten Messwert; 2 Schleife: Fahre die Geräte und nimm die Messwerte auf.
Als Abbruchbedingung ist jeweils die Beendigung der Aufgabe drin und zusätzlich über ein "OR" eine angeschlossene Stopp-Funktion.

Die Stopp-Funktion ist eine Event-Strukture in einer While-Schleife. Die Event-Strukture wird ausgelöst beim Drücken des Stopp-Knopfes oder wenn die Messung komplett fertig ist (die anderen Schleifen durchgelaufen sind) und verhindert dann jeweils weitere Schleifen-Durchgänge der beiden Messschleifen und der Stopp-Funktionsschleife.

An sich wohl eine der eleganteren Wege das Programm zu beenden, wie ich finde, doch funktioniert der Stopp-Knopf leider nur ein mal. Hat man die Messung (und damit die VI) mit Hilfe des Stopp-Knopfs beendet, so kann man den Knopf bei einem erneuten Aufruf der SubVI nicht mehr drücken. Da die zweite Messung an sich aber regulär durchläuft, kann es wohl nicht an nicht zurück gesetzten Variablen liegen (da sonst die Schleifen ja direkt nach dem ersten Durchlauf beendet werden würden).

Der Schalter ist auf "Latch beim Loslassen" (Latch when released) eingestellt, falls das wichtig ist.

Das ganze läuft noch unter Lv85_img Blush

An bei noch einmal ein Bild der Stopp-Button-Programmierung. "Stopp" ist der eigentliche Button, "Stop_Acquisition" wird zu Beginn der VI auf False gesetzt.


RE: Button reagiert nur beim ersten Aufrufen der SubVI - A.Berndsen - 11.10.2012 17:15

Hallo c_Kay,

(11.10.2012 16:09 )c_Kay schrieb:  An bei noch einmal ein Bild der Stopp-Button-Programmierung. "Stopp" ist der eigentliche Button, "Stop_Acquisition" wird zu Beginn der VI auf False gesetzt.

Das was Du als Bild geposted hast funktioniert nicht?
Hast Du mal im Highlight Modus nachvollzogen was da passiert? Oder mal die ein oder andere Sonde plaziert um die Zustände während der Ausführung zu überprüfen?

Mein Beispiel tut im Prinzip das was Du sagst, nur bei Dir ist laut Screenshot noch mindestens ein Ereignes mehr definiert.
[attachment=41835]

Grüße
Andreas


RE: Button reagiert nur beim ersten Aufrufen der SubVI - jg - 11.10.2012 18:07

Leider zu wenig Infos, um dir zu helfen.
Wie Andreas schon sagt, dein Screenshot sollte für sich alleine funktionieren.

Hast du vielleicht 2 Event-Strukturen verbaut (zwecks deiner 2 Schleifen), die auf dieselben Events reagieren sollen ?

Welchen Button hast du da noch in der Event-Struktur ?

Am besten lädst du mal dein ganzes VI hoch.

Gruß, Jens


RE: Button reagiert nur beim ersten Aufrufen der SubVI - Lucki - 12.10.2012 07:59

Meine Diagnose unter der "Nebenbedingung unvollständiger Information": Die abgebildete Schleife mit Ereignisstruktur läuft parallel zum restlichen Programm - so ist es OK. Aber: Bei Ausführung des abgebildeten Ereigniscases wird die Schleife verlassen - und zwar unwiderruflich. Das Hauptprogramm mit einer oder mehreren anderen Schleifen läuft unbeeindruckt weiter. Die Ereignisstruktur wird aber nie mehr bedient.
Zum Testen, ob eine bestimmte Stelle im Programm angefahren wird oder nicht, verwende ich gern den Signalton. Platziere ihn einfach mal in das Ereignis. Du wirst sehen: es macht nur einmal Pieps und dann nie wieder.
Es ist leider recht häufig, dass die Ereignsstruktur mit einem Interrupt gleichgesetzt wird. Bei einem Interrupt beibt alles Stehen und Liegen, was gerade in Arbeit ist, der Interrupt hat Vorrang.
Bei einem Ereignis wird zwar auch ein solcher Interrupt ausgeführt, aber der registriert zunächst nur das Ereignis und stellt es in eine Queue. Die Behandlung erfolg erst dann, wenn die Ereignsistruktur im Programm ganz normal turnusmäßig dran ist. Wenn das nie da Fall ist, gibt es auch keine Ereignisbehandlung.


RE: Button reagiert nur beim ersten Aufrufen der SubVI - A.Berndsen - 12.10.2012 08:56

Offtopic2

(12.10.2012 07:59 )Lucki schrieb:  Zum Testen, ob eine bestimmte Stelle im Programm angefahren wird oder nicht, verwende ich gern den Signalton. Platziere ihn einfach mal in das Ereignis. Du wirst sehen: es macht nur einmal Pieps und dann nie wieder.
Das ist eine prima Idee. Da bin ich bislang noch nicht drauf gekommen. Werde ich bei Gelegenheit mal einsetzen.

Grüße
Andreas


RE: Button reagiert nur beim ersten Aufrufen der SubVI - c_Kay - 12.10.2012 11:23

Danke für die vielen Antworten. Die VI ist leider relativ groß und unübersichtlich, deswegen wollte ich sie euch ersparen. Werde gleich mal eine Art Beispiel programmieren, das zeigt wie es aufgebaut ist.

Das was im Bild gepostet ist funktioniert, nur leider nur einmal.

Das mit dem Ton ist echt ein guter Punkt, werde ich ausprobieren. Ich denke nur das die SubVI beendet wird und das, wenn ich sie wieder neu Aufrufe auch alle Schleifen & Eventstruktures Zwangsweise neu geladen werden. Ich teste das gleich mal mit dem Ton. Wenn die Schleife an dem Punkt gar nicht mehr läuft, ist der Punkt geklärt.


RE: Button reagiert nur beim ersten Aufrufen der SubVI - A.Berndsen - 12.10.2012 12:35

(12.10.2012 11:23 )c_Kay schrieb:  ... auch alle Schleifen & Eventstruktures Zwangsweise neu geladen werden.

Verwendest Du mehrer Eventstrukturen in Deinem Programm?
Da könnte der Hund begraben sein.

Grüße
Andreas


PS: Hatte eben in das Beispiel oben die Funktion mit dem Signalton eingebaut. Das sorgte dann in ein paar Iterationen für Heiterkeit kurz vor dem Wochenende. Das wollte ich Euch nicht vorenthalten. Big Grin
[attachment=41844]


RE: Button reagiert nur beim ersten Aufrufen der SubVI - c_Kay - 12.10.2012 14:16

So.. es ist Definitv nur eine Eventstrukture im Programm. Die andere Bedingung der Event-Strukture wird beim Ende der Messung geändert und funktioniert beendet die Schleife auch. Nur beim nächsten starten der VI, läuft die Schleife wohl nicht mehr. Werden beim erneuten Starten einer VI nicht automatisch alle Schleifen wieder aufgerufen? Soweit ich es verstanden haben müsste beim erneuten Starten der VI auch die Schleife und damit auch die Eventstrukture wieder geladen werden...


RE: Button reagiert nur beim ersten Aufrufen der SubVI - c_Kay - 12.10.2012 15:40

Okay, ich hab das Problem gelöst, in dem ich die Eventstrukture ausgebaut und den Stopp-button direkt verkabelt habe. Da der aktuelle Schleifendurchlauf sowieso zum Ende laufen soll, ist das ganze also egal und die Übersichtlichkeit wird eher besser.

Mein Lernerfolg daraus: Kontrolliert ob Ihr wirklich die Eventstrukture braucht.