Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
(28.08.2016 10:06 )psypher schrieb: ich bin meinem Ziel näher gekommen und enttäuscht das ich mit damit solange rumschlagen muss
Das liegt daran, weil dir die Programmiererfahrung fehlt. Und wenn einer behauptet, mit LabVIEW ist alles ganz einfach - der lügt dir ins Gesicht.
Zitat:Wenn ich nach Prorammstart die Werte zurücksetze hängt sich das VI auf, ich kann es nicht stoppen.
Das sehe ich auch so.
Gleich nach Programmstart "hängt" dein Programm in der Schleife, in der auf einen Datennamen gewartet wird. Gleichzeitig(!) hängt das Programm in der Ereignissequenz. Hier wartet es entweder auf den Button Stopp oder auf den Button Reset. Wenn du jetzt Reset drückst, wird die Ereingissequenz ausgeführt - und beendet! Allerdings hängt das Programm noch beim Warten auf Dateiname. Da jetzt aber die Eventsequenz nicht mehr läuft, kannst du das Programm nicht stoppen.
Fürs erste reicht es, wenn du es machst wie man es macht: um die Ereignissequenz eine eigene While-Schleife legen, die du mit Stopp abbrechen muss.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Anzeige
28.08.2016, 14:00 (Dieser Beitrag wurde zuletzt bearbeitet: 28.08.2016 14:03 von psypher.)
ja mir fehlt wirlich die Erfahrung. Gerade was die Steuerfunktionen angeht bin ich ziemlich unbedarft.
Ich habe die While-Schleife um die Ereignisstruktur gelegt und beende diese mit dem Stopp-Button. Jetzt ist es aber so, dass ich zwar die Werte zurücksetzen kann, aber wenn ich eine neue Datei einlesen will passiert nix
Gruß
psy
Der Screenshot zeigt ni alles. hänge nochmal das VI an.
28.08.2016, 14:33 (Dieser Beitrag wurde zuletzt bearbeitet: 28.08.2016 14:36 von IchSelbst.)
(28.08.2016 14:00 )psypher schrieb: und beende diese mit dem Stopp-Button.
Ja, aber nicht so.
Der Ausgang aus "Neuer Wert" im Case Stopp beendet die While-Schleife um die Eventsequenz. Dieser Wert wird dann auch aus dieser While-Schleife heraus geführt und beendet die äußere While-Schleife. Außerdem musst du immer bedenken, dass neben der Event-Whileschleife die Haupt-Whileschleife läuft, in der auch noch die Dateinamen-Whileschleife läuft, die beide zu bestimmten Zeitpunkten beendet sein müssen.
Zitat: Jetzt ist es aber so, dass ich zwar die Werte zurücksetzen kann, aber wenn ich eine neue Datei einlesen will passiert nix
Kann ich nachvollziehen.
Du übergibt der Event-Whileschleife aus dem Button Stopp den Wert false, sodass diese Whileschleife nie beendet wird. Damit aber die (andere) Haupt-Whileschleife nach Reset erneut gestartet werden kann, muss die Event-Whileschleife beendet worden sein.
Das "Problem" hier (und bei einigen anderen Programmteilen) ist der sogenannte Datenfluß. Wenn die Event-Whileschleife einmal läuft, kannst du den Stopp-Button drücken soviel du willst - der True-Wert des Stopp-Buttons wird niemals in die Whileschleife gelangen.
Du solltest dich mit dem Verfahren "Datenfluss unter LabVIEW" vertaut machen und es verinnerlichen. Siehe Links in der Fußzeile der Postings von GerdW.
(28.08.2016 14:33 )IchSelbst schrieb:
(28.08.2016 14:00 )psypher schrieb: und beende diese mit dem Stopp-Button.
Ja, aber nicht so.
Der Ausgang aus "Neuer Wert" im Case Stopp beendet die While-Schleife um die Eventsequenz. Dieser Wert wird dann auch aus dieser While-Schleife heraus geführt und beendet die äußere While-Schleife. Außerdem musst du immer bedenken, dass neben der Event-Whileschleife die Haupt-Whileschleife läuft, in der auch noch die Dateinamen-Whileschleife läuft, die beide zu bestimmten Zeitpunkten beendet sein müssen.
Nachtrag:
Der Reset-Button gehört mit einer Stopp-Variablen verodert. Das Ergebnis beendet die Haupt-Whileschleife.
Zitat: Jetzt ist es aber so, dass ich zwar die Werte zurücksetzen kann, aber wenn ich eine neue Datei einlesen will passiert nix
Kann ich nachvollziehen.
Du übergibt der Event-Whileschleife aus dem Button Stopp den Wert false, sodass diese Whileschleife nie beendet wird. Damit aber die (andere) Haupt-Whileschleife nach Reset erneut gestartet werden kann, muss die Event-Whileschleife beendet worden sein.
Das "Problem" hier (und bei einigen anderen Programmteilen) ist der sogenannte Datenfluß. Wenn die Event-Whileschleife einmal läuft, kannst du den Stopp-Button drücken soviel du willst - der True-Wert des Stopp-Buttons wird niemals in die Whileschleife gelangen.
Du solltest dich mit dem Verfahren "Datenfluss unter LabVIEW" vertaut machen und es verinnerlichen. Siehe Links in der Fußzeile der Postings von GerdW.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
(28.08.2016 15:38 )psypher schrieb: Ich glaube jetzt funktioniert`s
Ja, das kann man so sagen ...
Der Anschluss des Bedienelementes "Stopp" gehört in den Event "Stopp", nicht in die While-Schleife um die Eventsequenz: Das automatische Rücksetzen des Buttons (Schaltverhalten Latch) geschieht dann, wenn der Anschluss ausgelesen wird - und das soll sinnvollerweise im Event passieren.
Die Boolsche Leitung zwischen "Alter Wert" und Tunnel im Event "Reset" ist sinnlos (und daher überflüssig, einfach weg machen): Der "Alte Wert" ist nämlich (fast) immer false - weswegen das Programm ja auch funktioniert. Es gibt aber die ganz seltenen Fälle, in denen auch "Alter Wert" true wäre - dann würde dein Programm richtig funktionieren.
Jetzt solltest du die weiteren Programmierfehler, die zu Ablauffehlern führen können (aber nicht müssen), beseitigen: sog. Race Conditions.
Innerhalb einer Struktur mit mehreren parallelen Abläufen dürfen die selben Daten nur ein einziges Wire-Netz bilden: In der Struktur "trace Auswertung"-"KlebeAchse" verwendest du die Daten von "Max. Index 3" zweimal. Einmal schreiben auf den Anschluss, einmal lesend von der Variablen. Problem: Wird die Variable gelesen, bevor der Anschluss (also auch die Variable) geschrieben wird, oder danach. Wird der Wert vor dem Schreiben gelesen, steht möglicherweise ein anderer drinnen als nach dem Schreiben. Das hat aber Auswirkungen auf "M 3". Einfach die Variable löschen und den Wire zum Anschluss hin verzweigen auf den Index-Eingang von Array Indizieren.
Das Schlechte an den RaceConditions ist nicht, dass sie einen programmtechnisch gesehen falschen Code darstellen, sondern dass sie offensichtlich fehlerfrei laufen können und in der Lage sind, erkennbare Fehlereignisse nur ganz selten auftreten zu lassen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).