LabVIEWForum.de - Eventstruktur + Programmende

LabVIEWForum.de

Normale Version: Eventstruktur + Programmende
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe zwei Ereignisse, die ich nicht verstehe. Das zugrundeligene (auf wesentliche) Vi inkl. Projekt und Variablen ist im Anhang.
Ich hoffe, mich kann jemand aufklären bzw. schlauer machen Smile

Gewünschte Funktionsweise:

1. Über die Pfadeingabe wird ein Pfad per Explorer ausgewählt und mittels "Save"-Button in eine Umgebungs-Variable gespeichert. Die Anzeige darüber zeigt den aktuellen gespeicherten Pfad.
2. Der Stop Button soll das VI beenden.

Beim 1. Fall passiert nach etwas "gebastel" folgendes: beim ersten Drücken von "Save" wird die Variable mit dem Pfad überschrieben (RICHTIG), der aktuell gespeicherte Pfad wird aber erst beim zweiten Mal Drücken von "Save" aktualisiert (FALSCH)

Beim 2. Fall passiert nichts bzw. bleibt der "Stop"-Button hängen, wenn er gedrückt wird. Ich kriege das VI nur mit der Rambo-Methode aus Sad

Hat jemand Erklärungen dafür? (ich vermute, es liegt an meinem unzureichenden Verständnis der Eventstruktur-Optionen Blink )
(01.02.2012 08:50 )W-C schrieb: [ -> ]Hallo,

ich habe zwei Ereignisse, die ich nicht verstehe. Das zugrundeligene (auf wesentliche) Vi inkl. Projekt und Variablen ist im Anhang.
Ich hoffe, mich kann jemand aufklären bzw. schlauer machen Smile

Gewünschte Funktionsweise:

1. Über die Pfadeingabe wird ein Pfad per Explorer ausgewählt und mittels "Save"-Button in eine Umgebungs-Variable gespeichert. Die Anzeige darüber zeigt den aktuellen gespeicherten Pfad.
2. Der Stop Button soll das VI beenden.

Beim 1. Fall passiert nach etwas "gebastel" folgendes: beim ersten Drücken von "Save" wird die Variable mit dem Pfad überschrieben (RICHTIG), der aktuell gespeicherte Pfad wird aber erst beim zweiten Mal Drücken von "Save" aktualisiert (FALSCH)

Beim 2. Fall passiert nichts bzw. bleibt der "Stop"-Button hängen, wenn er gedrückt wird. Ich kriege das VI nur mit der Rambo-Methode aus Sad

Hat jemand Erklärungen dafür? (ich vermute, es liegt an meinem unzureichenden Verständnis der Eventstruktur-Optionen Blink )

Guten Morgen

Kann das VI leider nicht ansehen, da wir noch nicht so modern sind (verwenden LV2009 Wink ) falls du es aber runterspeicherst sehe ich es mir gerne an. Anhand deiner Beschreibung würde ich auf einen Fehler im Datenfluss tippen (was auch mit der Eventstruktur zusammenhängen kann)

Hoffe das hilft dir etwas weiter.

Gruss Marc
Hallo,

ja das habe ich mir schon gedacht, finde den Fehler aber (wahrscheinlich mangels Verständnis 2hands ) nicht.

Im Anhang jetzt ddie 2009er Version Smile
(01.02.2012 09:08 )W-C schrieb: [ -> ]Hallo,

ja das habe ich mir schon gedacht, finde den Fehler aber (wahrscheinlich mangels Verständnis 2hands ) nicht.

Im Anhang jetzt ddie 2009er Version Smile

Du hast einen Denkfehler bei der EventstrukturWink Ohne Timeout wird die (samt dazugehöriger Schleife!) nur ausgeführt, wenn ein Event (wie etwa dein Save) ausgelöst wurde. Ich denke mal der Vergleich mit dem Schleifenzähler dient dazu den Pfad zu initialisieren? Hier kann man sich den Datenfluss zu Hilfe nehmen und das ganze ohne irgendwelche Berechnungen zu machenWink

Zudem würde ich für den Stop-Button ein eigenes Event definierten (was ich im Code auch gemacht habeSmile )

Hoffe das hilft dir weiter:

[attachment=38473]

Gruss Marc
Ok, jetzt kommt die Frage, wo man erkennt, dass ich ein völliger Newbie bin Smile

Was ist der Timeout (welche Funktion hat er), wo finde ich ihn und ... den Rest wird hoffentlich eine Kontexthilfe beantworten Smile

Der rest ist als Hilfe super ... DANKE.
(01.02.2012 10:08 )W-C schrieb: [ -> ]Ok, jetzt kommt die Frage, wo man erkennt, dass ich ein völliger Newbie bin Smile

Was ist der Timeout (welche Funktion hat er), wo finde ich ihn und ... den Rest wird hoffentlich eine Kontexthilfe beantworten Smile

Der rest ist als Hilfe super ... DANKE.

Zum Verständnis:

Eine Schleife mit einer Eventstruktur wird grundsätzlich nur ausgeführt, wenn ein Event ausgelöst wurde.

Falls die Schleife jedoch sonst noch laufen soll (aus welchen Gründen auch immer) definiert man eine Zeit nachdem in der Eventstruktur ein Event mit dem Namen "Timeout" ausgeführt wird. Dies ist ein ganz normaler Event-Case bis auf die Tatsache, dass er alle x-Millisekunden ausgeführt wird (sofern kein Event ausgelöst wurde, dann startet nämlich der Timer neu).

Das Timeout kannst du links oben an der Sanduhr deiner Eventstruktur anschliessen, anschliessend kannst du in deiner Eventstruktur einen Case "Timeout" erstellen.

Hoffe das hilft dir weiter und ansonsten schön weiterfragenWink

Gruss Marc
Hallo Marc,

deine Erklärung ist verständlich, denke ich.

Zur Rekapitulation (auch für andere Mitleser):
________________________________________________________________________________​________________________________________________________________________________​______________

Bei mir ist es so, dass ich eine Benutzeroberfläche habe, die sowohl auf Eingaben reagieren soll (z.B. schreibe Messwerte in eine Datei, ändere den Standart-Speicherpfad) als auch einen Stream der Daten anzeigen soll.
Bezogen auf meine Fall habe ich also deine Beschreibung umgesetzt und einen Timeout mit 1000 ms implementiert (Ereignisstruktur ist in der Schleife eingebettet, die die Daten "streamt"/aktualisiert).

Nach deiner Erklärung verstehe ich das so, dass der Stream (also die Schleife) dann 1000 ms versetzt nach Programmstart und nach Drücken eines Buttons ausgeführt wird. RICHTIG?

Weiter gedacht gibt es jetzt keinen Versatz mehr, wenn ich timeout auf 0 setze.
________________________________________________________________________________​________________________________________________________________________________​______________

DANKE für die gute Erklärung Hopper
(01.02.2012 11:21 )W-C schrieb: [ -> ]Hallo Marc,

deine Erklärung ist verständlich, denke ich.

Zur Rekapitulation (auch für andere Mitleser):
________________________________________________________________________________​________________________________________________________________________________​______________

Bei mir ist es so, dass ich eine Benutzeroberfläche habe, die sowohl auf Eingaben reagieren soll (z.B. schreibe Messwerte in eine Datei, ändere den Standart-Speicherpfad) als auch einen Stream der Daten anzeigen soll.
Bezogen auf meine Fall habe ich also deine Beschreibung umgesetzt und einen Timeout mit 1000 ms implementiert (Ereignisstruktur ist in der Schleife eingebettet, die die Daten "streamt"/aktualisiert).

Nach deiner Erklärung verstehe ich das so, dass der Stream (also die Schleife) dann 1000 ms versetzt nach Programmstart und nach Drücken eines Buttons ausgeführt wird. RICHTIG?

Weiter gedacht gibt es jetzt keinen Versatz mehr, wenn ich timeout auf 0 setze.
________________________________________________________________________________​________________________________________________________________________________​______________

DANKE für die gute Erklärung Hopper

GenauWink Bei -1 ist dein Timeout ausgeschaltet (default-Wert).
Wobei du beachten solltest, dass es keinen Sinn macht ein Timeout in einer Schleife zu machen in der ALLES in den Events abgehandelt wird. Einfach weil die Eventstruktur dafür optiomiert wurde und es sinnlos ist die Schlaufe unnötig durchlaufen zu lassenSmile

Gruss Marc
Referenz-URLs