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!

15.05.2010, 17:30
Beitrag #21

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:Naja, so wird das ja auch gar nix. Du musst dich schon an die Vorschrift halten, wie Benutzerevents zu handhaben sind.

Ich hab die wichtigen Änderungen nur mal schnell rein gemacht. Anständig musst du das selbst machen.


Hallo Jens,

vielen Dank. Ich baue das gerade Schritt fuer Schritt bei mir selbst ein.
Ich habe allerdings ein Problem. Ich bekomme es einfach nicht hin, in der Sub.vi dieses Ereignisregistrierung (Refrenz) zu basteln. Wie geht das bitte?
Ich weiss aus der Hilfe, dass man auf die Reg Event Function rechts klicken muss, damit man ein Control davon bekommt. Gestern hatte ich gelernt, dass man Referenzen erzeugen kann, in dem man im Front-Panel ein Control-Refnum erzeugt und dann etwas in dieses ablegt. Mit der Control, die ich von der Reg Event Function erzeugt habe, geht das aber nicht. Ich bekomme immer nur "123" im Icon des Refnums und die Satellitenschuessel bleibt mir verwehrt.

Koenntet ihr mir das bitte sagen, wie das geht?

Danke schoen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
15.05.2010, 18:55
Beitrag #22

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
So, ich glaube, ich weiss jetzt wie man diese Event Registration Refnums macht. Man muss an der richtigen Stelle (oberer Teil) auf Register for Events rechts klicken und dann bekommt man seine Referenz, die man einfach kopieren kann.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.05.2010, 22:16
Beitrag #23

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Sofortiger Stop einer While-Schleife in einer SubVi durch MainVi
' schrieb:Man muss an der richtigen Stelle (oberer Teil) auf Register for Events rechts klicken und dann bekommt man seine Referenz, die man einfach kopieren kann.
Genau. So macht man das.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.05.2010, 11:36
Beitrag #24

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
Hallo IchSelbst.
Ich habe es dann endlich geschafft, deine Version fertigzubauen.
Leider funktioniert sie noch nicht ganz richtig.
Probleme
1. Ich starte die SubVi mit dem Jiggle M1 Knopf in der Main. SubVi laueft einmal ohne Probleme durch. Pumpe stoppt.
2. Erneutes Druecken des Knopfes Jiggle M1. SubVi laeuft durch, aber Pumpe stoppt dann nicht mehr.
3. Druecke ich Stop inner in der Main, gibt es einen Error 1 at Generate User Event in Experiment.vi

Ich habe Jens' Version nur dahin gehend modifiziert, als dass ich das ich nach dem UNregister for Event ein Destroy for Event hinzugefuegt habe.

Warum habe ich das getan?

In der urspruenglichen Version lief die Sub.vi Autofill.vi einmal durch. Beim zweiten Durchlauf gab es einen Fehler im Unregister for Event in der Sub, egal ob ich den Stop inner-Button gedrueckt habe oder nicht.

Ich haenge meine Versionen an, falls ihr heute Zeit haettet sie anzuschauen. In der Zwischenzeit lese ich mich mal weiter durchs Netz zu diesem Problem und schaue mir Luckis Version genauer an.

Viele Gruesse
blue


Angehängte Datei(en)
Sonstige .vi  Autofill_v6_LV2009_v7.vi (Größe: 31,67 KB / Downloads: 170)

Sonstige .vi  Experiment_v1.vi (Größe: 38,22 KB / Downloads: 173)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.05.2010, 16:14
Beitrag #25

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
Edit:
Ich habe jetzt verschiedene Seiten gelesen und Sachen ausprobiert.
Leider konnte ich das Problem, dass mein Programm nur einen Durchlauf macht, nicht abaendern. Der Stop inner-Button ist nach einem Durchlauf immer blockiert, auch kann ich den Jiggle-M1 Button nicht mehr druecken.
Das gilt auch fuer die Kombination 1.Infuse-Button 2. Stop-Button. Drueckt man Infuse und dann Stop, bleibt der Stop-Button dunkelgrau. Infuse kann man auch nicht mehr erneut druecken.

Ich habe gelesen, dass nicht abgearbeitete Prozesse den Datenfluss behindern. Das wuerde ja auch dafuer sprechen, dass nach generell dem ersten Durchlauf, ich eine Error 1 - Meldung erhalte im Generate User Event und das FP total blockiert.

Ich dachte auch, es liegt an der Eigenschaft "Lock front panel", aber alle Haeckchen wegmachen, brachte auch leider nix.

Meine aktuelle Version (Lv09_img2) schaut so aus:


Angehängte Datei(en)
Sonstige .vi  Autofill_v6_LV2009_v8.vi (Größe: 31,85 KB / Downloads: 156)

Sonstige .vi  Experiment_v2.vi (Größe: 37,57 KB / Downloads: 170)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.05.2010, 19:59 (Dieser Beitrag wurde zuletzt bearbeitet: 18.05.2010 06:47 von IchSelbst.)
Beitrag #26

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Sofortiger Stop einer While-Schleife in einer SubVi durch MainVi
' schrieb:3. Druecke ich Stop inner in der Main, gibt es einen Error 1 at Generate User Event in Experiment.vi
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.

Du musst also das Löschen des Benutzerereignisses aus dem SubVI entfernen. 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.)

Du hast halt Pech gehabt, dass das Benutzereignis kein Datum im Sinne eines Datenflusses ist, sondern eine Referenz. Wären es Daten, würden sie ja im Tunnel der While-Schleife stehen. Da es aber eine Referenz ist, gehen praktisch auch die "Daten" im Tunnel verloren.


Hier ein weiterer Fehler:
Du musst den Button StoppInner auf False setzen, bevor deine beiden inneren WhileSchleifen im HauptVI beginnen. Bisher bleibt der, einmal gedrückt, immer auf True. Mach also vor den Schleifen eine Sequenzierung und lösch StoppInner per Lokaler Variable.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
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
19.05.2010, 14:47
Beitrag #28

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
Ich habe jetzt die Mechanical Action des "Stopp inner" Buttons zu "Switched until released" geaendert. Dann springt er zumindest wieder in den hellgrauen Zustand zurueck und verbleibt nicht im dunkelgrauen, gedrueckten Zustand.
Dann funktioniert auch der "Stopp outer" Button in folgender Art und Weise: Man drueckt entweder "Stop inner" zuerst und dann "Stop outer", LabVIEW bricht ab, oder erst "Stop outer", dann "Stop inner", LabVIEW bricht ab.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.05.2010, 18:51
Beitrag #29

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:Hier ein weiterer Fehler:
Du musst den Button StoppInner auf False setzen, bevor deine beiden inneren WhileSchleifen im HauptVI beginnen. Bisher bleibt der, einmal gedrückt, immer auf True. Mach also vor den Schleifen eine Sequenzierung und lösch StoppInner per Lokaler Variable.

Ich habe mich weiter durchs Forum gelesen und hier waere mein naechster Versuch.
Ich habe an der aeusseren while-Schleife eine Boolean False mit einer lokalen Variable von "Stop inner"-Button verknuepft. Damit wird ja zunaechst sichergestellt, dass der Button nicht zufaelligerweise auf True steht.
Der "Stop inner" Button hat nun die mechanical action "Switch when released".
Am Ende der unteren, inneren while-Schleife habe ich wieder ein Boolean-False gesetzt und ausserhalb dieser while-Schleife mit einer lokalen Variable von "Stop inner" verknuepft.

Weil ich dich nicht verstanden habe, weiss ich nicht, ob du sowas meinst.
Wenn ich das mit dem Datenfluss kapiert habe, dann wird doch erst alles ausgefuehrt, wenn alle Ports belegt sind oder when die untere, innere while-Schleife beendet ist. Haette ich nicht damit schon eine Sequenzierung, sowohl bevor die beiden inneren Schleifen starten als beim Zuruecksetzen des Buttons "Stop inner" rechts an der unteren, inneren while-Schleife?

HIer noch zwei Photos, was ich geaendert habe. Links auf dem Bild ist die Verknuepfung an der aeusseren Schleife links zu sehen, rechts zeigt die rechte auessere Seite der unteren, inneren while-Schleife.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.05.2010, 20:06 (Dieser Beitrag wurde zuletzt bearbeitet: 19.05.2010 20:09 von bluesaturn.)
Beitrag #30

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
Re: StopLabVIEW funktioniert nicht.

Das lag daran, dass die obere, innere while-Schleife wohl nicht gestoppt worden ist. Ich habe einen dritten Eventcase eingefuegt, der value change of "Stop outer" weitergibt und diese ebenfalls stoppt. Ich habe dafuer eine lokale Variable von "Stop outer" in die Eventstruktur der oberen, inneren Schleife gelegt. Darf man das machen?
Ist es egal, ob "Stop outer" in dieser Evenstruktur sitzt, die entsprechende lokale Variable in der unteren, inneren while-Schleife oder umgekehrt?
Ich habe beides ausprobiert und es scheint keinen Unterschied zu machen.

Ich denke, es werden dann mit einem Button sowohl die beiden innern als auch die auessere Schleife gestoppt. LabVIew bricht jedenfalls sofort ab.


Dann habe ich mir noch folgenden Beitraege zu Herzen genommen:

Luckis Beitrag fuer Markus Beispiel.

Ich finde es gut, wenn an der aeusseren Schleife bereits am Anfang alle Buttons mit Mechanical Action "Switched when released" auf false zur Sicherheit gesetzt werden. Ansonsten wuerde die Pumpe sofort loslegen, wenn vorher dem Start von LabVIEW einer der Button auf True stehen wuerde.
Ich habe versucht, Markus' Beispiel auf meine Buttons Infuse, Withdraw, Jiggle Method 1, Stop inner und Stop outer anzuwenden.

Ich bin mir bei folgenden Punkten nicht 100% sicher:

1. Muss ich auf der rechten Seite der inneren, unteren while Schleifen die beiden Buttons Stop inner und Stop outer auf false per lokale Variable zuruecksetzen?
Ich habe das einmal sicherheitshalber gemacht.

2. Muesste ich die Buttons Infuse, Withdraw, Jiggle M1 per lokaler Variable und Boolean false an der linken Seite der unteren, inneren Schleife ggf. auf false zuruecksetzen oder reicht das nicht wie ich das gerade gemacht habe? Ich bin bei der jetzigen Version geblieben, da ich aufgrund des "error out" und des "VIsa Resource" Drahtes ein vorgegebene Reihenfolge habe.

3. Wenn ich im Highlight-Execution Mode bin, funktioniert die Methode von Markus nicht so richtig mit dem Jiggle Method 1 Button, aber das kommt nur im Highlightning Modus vor
Ich druecke zu einem beliebigen Zeit dort den Jiggle M1-Button. Er muesste dann auf True sein. Im Block-Diagramm steht noch ein Wert F am Schalter. Dann wird die Schleife durchlaufen untere, innere while-Schleife durchlaufen und LabVIEW denkt, Jiggle M1 ist falsch, also wird der falsch-case ausgefuehrt, der wiederum den Button auf falsche zuruecksetzt.
Das passiert aber nur im Highlightning Modus. Im normalen Modus passiert es nicht. Da wird die Bewegung Jiggle M1 ausgefuehrt.

Meine aktuelle Version der Haupt.vi inLv09_img2


Angehängte Datei(en)
Sonstige .vi  Experiment_v2.vi (Größe: 42,81 KB / Downloads: 166)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


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: