Abbruch eines Sub Vi - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Abbruch eines Sub Vi (/Thread-Abbruch-eines-Sub-Vi) Seiten: 1 2 |
Abbruch eines Sub Vi - Saltlaker - 23.05.2006 07:09 [attachment=2099][attachment=2100]Guten Morgen Ich denke ich habe da mal ein ganz einfache Frage. Ich komme aber nicht auf die Lösung. Folgendes Problem. Mein Haupt Vi beinhaltet zwei schleifen. Die Äußere ist eine Case abfrage. Die Innere besteht aus eine zeitgesteuerten While Schleife. In dieser wird die Regelung eines Motors vorgenommen. Sie wird also mehrfach ausgeführt. In der Äußeren Case Struktur befindet sich noch ein Sub Vi. In diesem Sub Vi wird die Messung durchgeführt. Sie besteht aus einer While Schleife. Die Abbruch Bedingung ist bisher eine Abgelaufene Zeit die ich grob geschätzt habe. Nun hätte ich aber lieber das bei beendigung der inneren Zeitgesteuerten While Schleife ein Signal ausgegeben wird ,dass das Sub Vi beendet. Ein FlipFlop wäre eine gute Lösung. So das das Sub Vi aufgerufen wird sobald die Case Struktur bearbeitet wird und eine Flanke die bei Beendigung der While Schleife kommt das Sub Vi beendet. Habe mal versucht das Prinzip nachzustellen. Das Original Programm ist zu gross Hoffe mir kann da jemand helfen. Danke Abbruch eines Sub Vi - Kvasir - 23.05.2006 09:14 Hab mir dein Vi nicht angesehen, aber wie wäre es mit einem Methodenknoten. Damit kannst du ein Vi abbrechen. Achtung: Dein Vi wird damit nicht beendet, sondern abgebrochen. Also so als ob du den Abbruchknopf in der Symbolleiste drückst. Abbruch eines Sub Vi - Saltlaker - 23.05.2006 09:44 Hallo. Danke für deine schnelle Antwort. Ich muss sagen das ich mich mit den Knoten noch nicht wirklich gut auskenne. Da könnte vielleicht eine Lösung liegen.Wird ein Knoten denn nicht erst nach beenden der Schleife übergeben? Aber ein Programmabbruch darf es nicht geben. Nach der Case Schleife kommt noch die Speicherung der Werte. Diese muss auf jeden Fall stattfinden. Ein Möglichkeit wie ich sie mir noch gedacht hätte wäre wie bei einem Bedienelement. Das ist so loange True bis aus der Zeitgesteuerten While schleife ein True kommt und wechselt dann zu Fals somit wäre das Sub Vi auch beendet. Leider geht diese mit einem Bedienelement nur wenn man den Knopf drückt oder gibt es da noch eine andere Möglichkeit? Abbruch eines Sub Vi - Kvasir - 23.05.2006 11:16 Wenn ich dich richtig verstanden habe, willst du, dass dein SubVi beendet wird, sobald im HauptVi deine getimte While Schleife beendet wird. Das kannst du z.B. über einen Methodenknoten oder über eine globale Variable erreichen. Den Methodenknoten musst du so platzieren, dass der Vi Abbruch am Ende deiner While Schleife durchgeführt wird. z.B.: Kannst du den Pfad in die Schleife setzen, den Knoten außerhalb. Beendet wird hierbei nur das SubVi. Nicht dein HauptVi. Du kannst also noch in Ruhe deine Messung speichern. Der Nachteil ist aber, dass das Vi sofort abgebrochen wird. Das ist im allgemeinen nicht wünschenswert, da dadurch oft deiintialisierungen nicht mehr durchgeführt werden. (z.B.: Datei schließen, VISA close, ...) Um das Problem zu umgehen kannst du auch eine globale Variable benutzen. Diese schließt du an die Stop Bedingung deiner While Loop im SubVi. Im HauptVi setzt du den Wert auf True, sobald deine timedloop beendet wird. Beim HauptVi hab ich dir beide Methoden eingebaut. Du brauchst natürlich nur eine. Abbruch eines Sub Vi - Saltlaker - 23.05.2006 12:25 Das mit der globalen Variablen könnte funktionieren. Leider verstehe ich das noch nicht so genau. Ich habe mir eine globale Variabel erstell mit einer Leuchte im Frontpanel. Dort kann ich dann im Haupt Vi auch die True Konstante anschließen. Im Sub Vi wird mir die Leuchte ebenfalls als Eingang angezeigt. Somit kann ich diese nicht mit dem Stop verbinden. Wie löse ich das? Abbruch eines Sub Vi - Kvasir - 23.05.2006 12:31 rechte Maustaste auf die Variable -> in Control ändern. Abbruch eines Sub Vi - Saltlaker - 23.05.2006 12:44 Besten Dank wollte gerade schreiben das ich es doch hinbekommen habe. Aber du warst schneller. Es funktioniert auf jeden Fall. Nochnal Danke für deine Hilfe. Vielleicht kannst du mir noch eine Frage beantworten aber nur wenn du Zeit hast. Und zwar dachte ich das globale Variablen eigentlich nur eingesetzt werden wenn die Wege zu lang sind und man zb durch mehere Sub Vi den Wert übergeben muss. Das wäre bei meinem Programm ja eigentlich nicht sehr aufwendig. Wenn ich aber anstatt der globalen Variable den stopp mit der True Konstante verbinde, startet das Sub Vi nicht. Ich verstehe nicht wieso Gruß Saltlaker Abbruch eines Sub Vi - Kvasir - 23.05.2006 12:55 Helfe doch gerne. Hab im Moment leider viel zu viel Zeit, weil ich hier bei meinem Projekt nicht so recht weiterkomme und gerade etwas unmotiviert mir mehr oder weniger die Zeit totschlage. Mit dem Einsatz lokaler/globaler Variable sollte man im allgemeinen vorsichtig sein. Siehe hierzu z.B.: diesen Thread http://www.LabVIEWforum.de/index.php?showtopic=2533 Wenn du deinen Stop mit einer True Konstante verbindest kann das SubVi nicht laufen, da die Schleife ja nach dem ersten Durchlauf schon abbricht. Deine globale Variable hingegen wird erst dann auf True gesetzt, sobald deine Schleife im Hauptprogramm zu Ende ist. Abbruch eines Sub Vi - Saltlaker - 23.05.2006 13:07 Ich meinte das schon so wie du es gemacht hast. Also die True Konstante steht im Haupt Vi. Genau an der stelle wo du deine hingesetzt hast. Nur gehe ich dann über einen Eingang in das Sub Vi und dort an das Stop. So das auch erst ein True kommt sobald die Zeitgesteuerte Schleife abgelaufen ist. So wie es mit der Lampe aussieht scheint das Sub Vi nicht zu starten. Abbruch eines Sub Vi - Kvasir - 23.05.2006 13:21 Ach ok, nun weiß ich was du meinst LabVIEW arbeitet nach dem Flußprinzip. D.h. dein SubVi kann nur starten, wenn es von allen Eingängen Daten erhält. Da dein "True" aber erst am Ende der getimten While Schleife gesetzt wird, kann dein SubVi auch erst dann starten. (Und bricht gleich wieder ab, da der Wert ja True ist) Mit der Variable umgehst du dieses Prinzip. Dein SubVi kann starten, da es einen Wert erhält (False), weil die globale Variable schon einen Wert hat. Am Ende deiner getimten While änderst du diesen Wert nur. Dass du mit den Variablen das Flußprinzip umgehst ist auch einer der Gründe, warum man vorsichtig mit den Variablen umgehen sollte. Dadurch entstehen leicht Fehler, weil man in die Reihenfolge der Abarbeitung der Funktionen eingreift. War das verständlich? |