INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Sofortiger Stop einer While-Schleife in einer SubVi durch MainVi



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!

19.05.2010, 13:54 (Dieser Beitrag wurde zuletzt bearbeitet: 19.05.2010 13:59 von bluesaturn.)
Beitrag #27

bluesaturn Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 145
Registriert seit: Jan 2010

2009
2010
en

-
United Kingdom
Sofortiger Stop einer While-Schleife in einer SubVi durch MainVi
' 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.
Lv09_img2


Angehängte Datei(en)
Sonstige .zip  Aktuelle_Version.zip (Größe: 92,68 KB / Downloads: 158)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
Sofortiger Stop einer While-Schleife in einer SubVi durch MainVi - bluesaturn - 19.05.2010 13:54

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Eigenversuch einer ComboBox - Optimierung und Kritik gesucht TpunktN 2 2.456 30.05.2023 07:56
Letzter Beitrag: TpunktN
  HTML-Datei - Name einer PNG bzw. JPG ändern Dsans 1 2.144 09.02.2023 04:42
Letzter Beitrag: Martin.Henz
Music FGEN Erzeugung eines Signalverlaufs anhand einer Mathematischen Funktion DavidStefan 11 7.452 29.05.2021 07:03
Letzter Beitrag: GerdW
  MainVI sucht nach gelöschter .lvlib Bibliothek kwz 5 4.102 04.05.2021 16:11
Letzter Beitrag: kwz
  Mehrere Spitzenwerte aus einer Messreihe erkennen niklas2016 8 5.366 15.02.2021 14:27
Letzter Beitrag: BNT
  benutzerdefinierte Error Codes in einer zentralen Datei im Projekt verwalten t.hipp 6 6.720 26.10.2020 16:08
Letzter Beitrag: Jessel_de

Gehe zu: