' schrieb:Möglicherweise hängt alles an einem einzigen falsch plazierten Befehl.
Du hast folgendes gemacht: Im Hauptprogramm hast du "Benutzerereignis erstellen" gemacht - aber "Benutzerereignis löschen" hast du im Unterprogramm gemacht. Dieses Vorgehen - "Erstellen" und "Löschen" von was auch immer, besonders aber von Referenzen, in unterschiedlichen VIs (eigentlich sogar: unterschiedlichen Ebenen) - widerspricht jeder objektorientierten Kapselung! Dieses Vorgehen muss man (nach Möglichkeit) prinzipiell vermeiden!
Dieses Vorgehen bewirkt bei dir nun, dass alles nur ein einziges Mal funktioniert. Wird nämlich das SubVI beendet, löscht du das Benutzerereignis. Beim nächsten Durchlauf kann das SubVI nicht mehr abgebrochen werden. Auch kann in der StoppInner-WhileSchleife kein Benutzerereignis mehr gesendet werden - weil das Benutzerereignis nicht mehr existiert.
Nachdem ich "Destroy User Event" geloescht aus der SubVi geloescht hatte, funktionierte es besser, d.h. mehrmals.
Natuerlich habe ich es wohl wieder falsch verstanden. Ich dachte, es funktioniert wie folgt:
- Man erstellt ein Event mit Create-User-Event.vi.
- Dann wird dieses registriert mit Register for Event.vi.
- Nachdem es einmal durchgefuehrt wird, meldet man sich ab (unregister for event).
- Weil es abgeschlossen ist, loescht man es.
Ich dachte auch dummerweise tatsaechlich, dass bei erneutem Druecken des JiggleM1 Buttons diese eben gemachte Aufzaehlung wieder von vorne beginnt. Das ist natuerlich Quark, weil ich mich schon laengst in der aeusseren Schleife befinde und nicht mehr wieder nach ganz draussen komme. Also wird kein neues "Create Event.vi" durchgefuehrt und ein Befehl "Generate User Event" kann auch nicht mehr funktionieren.
Ist das korrekt?
' schrieb:Du musst also das Löschen des Benutzerereignisses aus dem SubVI entfernen
Erledigt und funktioniert.
' schrieb:.Hingehören tut es nach der While-Schleife im Haupt-VI. Nachher deswegen, weil das Erstellen vor der WhileSchleife gemacht wird. "Benutzerereignis registrieren" und "Registrierung löschen" kannst du vorerst im SubVI lassen (da sich beides im selben SubVI befindet.)
Ich habe "Destroy User Event.vi" jetzt ganz ausserhalb der aeusseren while-Schleife eingefuegt, gefolgt von einem "Single Error Handler.vi". Ist das so, wie du es vorschlaegst, bitte?
Was passiert eigentlich, wenn ich einen weiteren JiggleM2 Button mit einem entsprechenden SubVi einfuehre?
Kann ich dann ebenfalls eine Referenz von "Stop Inner" in diese Sub.vi einfuegen und wenn man dann "Stopp inner"-Button drueckt, sendet dann "Generate User Event.vi" einen Befehl an alle moeglichen Eventstrukturen, die mit dem Draht bze. einer Referenz von "Stopp Inner" verbunden sind?
-----------------------------------------------------------------------------------------------------------------------------
' schrieb:Hier ein weiterer Fehler:
Du musst den Button StoppInner auf False setzen, bevor deine beiden inneren WhileSchleifen im HauptVI beginnen.
Meinst du den Button "Stop inner" oder ausserhalb der Schleifen den Boolean "Stop Inner", bitte? Letzteren habe ich jetzt auf "false" gesetzt.
' schrieb:Bisher bleibt der, einmal gedrückt, immer auf True.
Entspricht das folgendem Verhalten: Ich druecke den Button "Stop inner" und er bleibt dunkelgrau und springt nicht zurueck zu hellgrau?
Ich muss ihn im Moment immer manuell druecken und die Eigenschaft "Latch when released" ist nicht erlaubt, wohl aufgrund der Eventstruktur.
' schrieb:Mach also vor den Schleifen eine Sequenzierung und lösch StoppInner per Lokaler Variable.
Ichselbst, es tut mir leid, aber ich verstehe das nicht. Ich vermute ein wenig, ich muss die Filmstreifen benutzen und irgendwie vor die beiden inneren Schleifen parken.
Allerdings verstehe ich nicht, wie man StoppInner (oder Stopinner ?) per lokaler Variable loescht.
Deinen Loesungsvorschlag habe ich leider nicht verstanden.
Im Moment funktioniert auch der "Stop outer"-Button nicht. Man kann ihn zwar druecken, aber die Main.vi wird nicht beendet. Eigentlich sollte er die aeussere while-Schleife und beide inneren beenden und LabVIEW kontrolliert stoppen.
Ich habe auch keine Erklaerung dafuer gefunden, warum in der Main.vi ganz links an der ausseren Schleife ein Boolean False mit einer lokalen Variable des "Stop outer" verbunden wurde. Setzt das mir generell den "Stop-Outer" Button auf false?
-----------------------------------------------------------------------------------------------------------------------------
Eine Frage nebenbei:
Ich habe meine Vi "Set_flow_rate_and_direction.vi" noch einmal vor die beiden inneren while-Schleifen eingebaut und in der Eventstruktur (sihe ober innere while-Schleife) eine lokale Variable der "flow properties" generiert.
Ich dachte mir folgendes dabei:
Ist die Haupt.vi noch nicht am Laufen und der User dennoch schon Zahlen fuer die Flow properties eingibt, werden die so sofort uebernommen, wenn die Haupt.vi startet.
Das war vorher nicht der Fall. Da musste man nach dem Starten der Haup.vi die Zahlen eintippen.
Ist ein solches Verfahren gefaehrlich, eventuell aus Datenflussgruenden?
Ich haenge noch einmal meine aktuellen Vis mit obigen Veraenderungen an.
Experiment_v2.vi ist die Haupt.vi und Autofill.vi ist die Sub.Vi.