Hallo IchSelbst und Lucki,
danke zunächst für Eure Antworten und Hinweise.
Da habe ich mich ja wieder schön in die Nesseln gesetzt. Ich dachte, das wäre einfacher :-) Weit gefehlt.
Vorabbitte: Ich kann es zuhause gerade nicht testen, erst wieder am Freitag.
' schrieb:Das kann ich nachvollziehen.
Die erste Operation, die in der While-Schleife gemacht wird, ist das Auslesen des Stopp-Buttons ("Stop Jiggle M1" im SubVI "Autofill_v6_LV_2009.vi"). Danach wird der Rest der While-Schleife bearbeitet. Am Ende der While-Schleife wird der Wert des Stopp-Buttons überprüft => ggf. Ende.
Wenn du den Button genau zu dem Zeitpunkt anklickst, nachdem der Button ausgelesen wurde - läuft die While-Schleife noch genau zweimal durch. Du kannst folgendes probieren: Genau zu dem Zeitpunkt, wenn der Button ausgewertet werden soll, wird er auch auslesen. Also: Erst wenn die While-Schleife (fast) komplett abgearbeitet ist, wird der Stopp-Button ausgelesen. Das kann man durch eine Sequenzierung (notfalls mittels einer Sequenzstruktur) erreichen.
Ich verstehe jetzt besser, wie die while-Schleife abläuft.
Besteht trotzdem nicht die Möglichkeit, die while-Schleife an jeder
beliebigen Stelle sofort zu unterbrechen? Edit: Das sehe ich dann wohl bei Lucki.
Wenn ich das richtig sehe, schlägst du vor, daß die while-Schleife mindestens einmal fast komplett abgearbeitet wird?
' schrieb:.
Aber den Aufruf dieses Stop-SubVIs kann man außerhalb der While-Schleife machen. Das spart den IF-Case in der Schleife.
Wäre das in etwa eine Bedingung wie "Die Schleife bricht ab, als fuehre die Stop.vi aus?"
Ich glaube sogar, daß diese Stop.vi vielleicht nicht mal in der Autofill_v6_LV_2009.vi sitzen muss. In der Experiment.vi gibt es ja schon einen Stop-Button, der dort die innere Schleife abbricht und somit die Pumpe anhält. (Ich wollte ja viele Stop-Buttons vermeiden). Nur muß ich noch herausfinden, wie ich das Signal von der SubVi in die Main.vi übertrage.
Edit: Ah, ich sehe es gerade in deinem Bild. Die Schleife bricht ab und wegen Datenfluß wird die Pump via Stop.vi angehalten. Ist das korrekt?
Außerdem könnte ich ja diese Referenz vielleicht mit dem anderen Stop-Button aus der Main.vi verknüpfen. Wie du sagst, von außen abbrechen ...
Grundsätzliche Frage: Ich dachte, ich kann Sub.Vis mehr oder weniger unabhängig von Main.vis bauen und diese dann in die Main.vi einfügen. Das erscheint mir jedoch nun eine schlechte Idee, weil man viel zu viel ändern muss. Richtig?
' schrieb:.
Warum setzt du das SubVI "Autofill_v6_LV_2009.vi" nicht auch in einen IF-Case wie "Withdraw Control" auch?
Das hatte ich zuvor auch gemacht, aber dann dachte ich mir, ich könnte ja mal die event structure benutzen
Zum Bild:
IchSelbst, ich habe mir das Bild gerade angeschaut und werde es dann nachbauen. Ich glaube, der grüne error-Draht ist für die Sequenzierung verantwortlich. Wäre das eigentlich auch mit diesen "Filmstreifen" aka Sequenz gegangen?
Warum hast du diese error-case struktur aus der Autofill.vi herausgenommen? Wann sollte man diese besser einsetzen?
Danke für deine Antwort! Bringt schon mal wieder mehr Licht in LabVIEW.
' schrieb:Wie man die Schleife sofort beendet und wie man sie vom Haupt-VI aus beendet sind 2 verschiedene Fragen. Ich gebe hier nur mal einen Tip zur ersten Frage:
Ereignisstruktur verwenden mit 2 Cases: Timeout und Stop.
Im Timout-Case befindet sich eine Zustandmaschine mit 2 Zuständen, entsprechend den beiden Zuständen der Pumpe.
Im Stop-Case findet wird die Pumpe gestoppt.
Ich habe mit dem VI nur das Gerüst skizziert.
Der Hauptgedanke ist, daß die Wartezeiten als Timeouts realsiert sind und nicht als Waits. Nur so wirkt der Stop sofort.
lv2009 [attachment=55010:Pumpe.vi]
Vielen Dank. Ich hoffe, ich kapiere das am Freitag. :-)
Ich kann leider deine vi an diesem Rechner nicht sehen, aber welche Wartezeiten meinst du bitte?
Zur zweiten Frage: Ich glaube, daß man mit Referenzen arbeiten muss.
Nochmals danke schön und ich werde am Freitag weiter knobeln.
Viele Grüße
Blue