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!
bestimmt wieder eine ganz einfache Lösung, aber ich komm einfach nicht drauf:
Das Problem:
Ich hab ein Sub-VI, das eine Schleife beinhaltet, mit der ein Positioniertisch schrittweise verfahren wird, bis eine bestimmte Abbruchbedingung erreicht ist. Bis dahin funktioniert alles.
Es gibt außerdem eine zweite Abbruchbedingung, eine Stopp-Taste. Wenn ich bei laufendem Sub-VI im Sub-VI-Frontpanel diese Taste drücke, bricht die Schleife ordnungsgemäß ab und das Sub-VI wird beendet wie gewünscht.
Auf dem Frontpanel des Haupt-Vis gibt es eine entsprechende Stopp-Taste. Bei laufendem Sub_VI passiert alerdings überhaupt nichts, wenn man sie drückt. Ist auch irgendwie nachvollziehbar, weil die Taste ja außerhalb des Prozesses liegt, der gerade abläuft.
es gibt aber doch bestimmt eine Möglichkeit das zu ändern, oder? Wäre super, wenn mir da jemand helfen kann...
Es kommt darauf an, wie dein SubVI ausgeführt wird. Wenn es im Hauptprozess des HauptVIs gestartet ist, dann ist dein HauptVI solange blokiert bis das SubVI in der Ausführung ist.
Die einfachste unschöne Lösung wäre aus dem SubVI die While-Schleife enfernen und statt dessen im HauptVI die While-Schleife um das SubVI machen.
Andere Möglichkeit das SubVI parallel zum HauptVI laufen lasseen, da gibt es viele Lösungen das SubVI aus dem HauptVI zu beenden. Die einfachste in diesem Fall wäre eine Globale Variable oder die Referenzübergabe an SubVI.
Probier mal das angehängte Vi (main.vi) aus. Ich habe ein SubVi (Sub.vi) mit in die while-Schleife gelegt und die Abbruchbedingung über eine Refenerenz realisiert. Das SubVi habe ich in eine Case-Struktur gelegt weil ich nicht weiss wann du es starten möchtest.
MfG
Frank Pieper
Dipl.-Ing (FH)
Measuring and Test Equipment
LTi Drives GmbH
Unna/Germany
29.01.2008, 19:27 (Dieser Beitrag wurde zuletzt bearbeitet: 29.01.2008 19:34 von Lucki.)
Du hast zwar einen komischen Namen, aber immerhin gehörst Du zu der Minderheit von Fragern, die sich im Textteil klar ausdrücken..
Man kann es mit globalen Variablen machen, ich würde aber Melder bevorzugen. Nimm mal das hier Denkanstoss.
(In die untere Schleife von main sollte man auch noch eine Uhr mit 50ms einbauen)
29.01.2008, 21:43 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2008 13:10 von jg.)
In Abwandlung des Bsp von Frank: Man kann auch im SubVI per Event-Structure auf das Betätigen des Stopp-Button im Main-VI reagieren. Im SubVI sieht das so aus:
' schrieb:In Abwandlung des Bsp von Frank: Man kann auch im SubVI per Event-Structure auf das Betätigen des Stopp-Button im Main-VI reagieren. Im SubVI sieht das so aus:
Melde Kritik an:
Es ging doch darum, mit einem Knopf auf dem Hauptvi das gerade aktive Subvi zu stoppen, und zwar nur das, also nicht das Programm insgesamt. Für dieses Stoppen des Subvi hast Du überhaupt keinen Knopf auf dem Haupvi. Und ein Subvi vom Haupt-Vi aus zu starten, oder vom Sub-vi selbst das Subvi zu beenden, oder vom Haupvi aus das ganze Programm zu beenden, was hier alles demonstriert wird - das sind ja alles ganz elementare Sachen und das war doch wirklich nicht die Frage.
Zitat:Es gibt außerdem eine zweite Abbruchbedingung, eine Stopp-Taste. Wenn ich bei laufendem Sub-VI im Sub-VI-Frontpanel diese Taste drücke, bricht die Schleife ordnungsgemäß ab und das Sub-VI wird beendet wie gewünscht. Auf dem Frontpanel des Haupt-Vis gibt es eine entsprechende Stopp-Taste. Bei laufendem Sub_VI passiert alerdings überhaupt nichts, wenn man sie drückt. Ist auch irgendwie nachvollziehbar, weil die Taste ja außerhalb des Prozesses liegt, der gerade abläuft.
Also ich verstehe das so, daß ein Vorschlag gesucht ist, wie man das ändert...
' schrieb:Melde Kritik an:
Es ging doch darum, mit einem Knopf auf dem Hauptvi das gerade aktive Subvi zu stoppen, und zwar nur das, also nicht das Programm insgesamt. Für dieses Stoppen des Subvi hast Du überhaupt keine Kopf auf dem Haupvi. Und ein Subvi von Hauptvi aus zu starten, oder vom Sub-vi selbst das Subvi zu beenden, oder vom Haupvi aus das ganze Programm zu beenden, was hier alles demonstriert wird - das sind ja alles ganz elementare Sachen und das war doch wirklich nicht die Frage.
Also ich verstehe das so, daß ein Vorschlag gesucht ist, wie man das ändert...
@Lucki: Jetzt bist du aber sehr kleinlich mit deiner Kritik (auch wenn du im Detail recht hast), aber das zu ändern, ist ja keine große Sache.
Schwamm drüber.
Jetzt aber noch was Wichtiges: Ich habe in meinem Beispiel beim Sub-VI vergessen, am Ende das registrierte Event wieder abzumelden:
Hier eine korregierte Version mit 2 Stop-Buttons im Main-VI (Recht so, Lucki?)
Ich finde das Beispiel deshalb schön, da es komplett Event-gesteuert ist. Der Stop-Sub-VI Button kann auch als Latch-Button definiert bleiben, da man über die Referenz direkt das Value-Change Event im SubVI mitbekommt.
MfG, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
' schrieb:@Lucki: Jetzt bist du aber sehr kleinlich mit deiner Kritik (auch wenn du im Detail recht hast), aber das zu ändern, ist ja keine große Sache.
Schwamm drüber.
Entschuldigung und danke, mir war selbst beim Nachlesen aufgefallen, daß die Detailverliebtheit in meiner Kritik einen peinlichen Beigeschmack hat...
Zitat:Hier eine korregierte Version mit 2 Stop-Buttons im Main-VI (Recht so, Lucki?)
Nicht nur recht, ich bin echt begeistert und ziehe meine umständlichere Version zurück. Ich hätte nicht gedacht, daß sich das so elegant machen läßt.
Ich hatte übrigens mit der Schwierigkeit zu kämpfen, daß das aufgerufene Sub-VI die Schleife im Main blockierte, obwohl das gar keine Ausgänge hat, auf deren Daten hätte gewartet werden müssen. Keine Ahnung woran das liegt. Ich mußte notgedrungen eine zweite unabängige Schleife für das SubVI machen, um die Blockade zu umgehen. Bei Dir funktioniert es aber. Weißt Du darüber etwas? Ich poste auch gern mal das nicht funktionierende Programm.
03.02.2008, 14:13 (Dieser Beitrag wurde zuletzt bearbeitet: 03.02.2008 14:13 von mctommson.)
Ich hab jetzt die Lösung von Jens auf meine Test-VIs angewendet und habe ein Problem:
Das Abbrechen des SubVIs über einen Abbrechen-Button im MainVI funktioniert.
Allerdings werden im SubVI Daten generiert, die ich gerne im MainVI angezeigt bekommen möchte. In den angehängten SubVI werden einfach Zufallsvariablen im 100ms Takt in ein Anzeigefenster geschrieben. Im MainVI tut sich da leider überhaupt nix. Dort sollten aber auch im 100ms Takt die Zufallszahlen angezeigt werden.
Ich hatte das schonmal irgendwann mit Eigenschaftsknoten realisiert, allerdings steh ich jetzt vor dem Problem, dass im SubVI eine Schleife läuft und die Daten nur nach dem Abbrechen der Schleife ins MainVI übertragen werden.