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!
ich habe ein kleines Problem wo ich nicht weiter komme!
Ich lade ein VI (Reentrant) Dynamisch in meinen Speicher und lasse dor laufen!
Jetzt will ich das Dynamisch geladenen VI von einem anderen VI wieder beenden! Jedoch finde ich momentan keine Möglichkeit mir die Referenz des Dynamischen VIs zu holen!
Hat jemand eine Idee wie ich mir die Referenz des Dynamischen VIs holen kann um es wieder zu schließen?
' schrieb:Hat jemand eine Idee wie ich mir die Referenz des Dynamischen VIs holen kann um es wieder zu schließen?
Zwei applikationsabhängige Möglichkeiten fallen mir ein:
Entweder du merkst dir an der Stelle, an der du das VI dynamisch gestartet hat, die Referenz und veröffentlichst diese Referenz per Queue oder Melder (bei globaler Variablen drücken wir mal alle Augen zu). Oder du schickst an das VI per Queue eine Meldung, dass es sich beenden soll. Ich ziehe letzteres vor.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Ja per Queue, FGV ect. ist das alles kein Problem! aber was ist wenn meine Main Applikation abschmiert und das VI im Speicher weiter läuft?
Da will ich mir ein extra VI bauen welches mir dieses dann Beendet ohne das ich einen Zwischenspeicher für die Referenz benutze!
Ich finde das VI auch im Speicher, nur schaffe ich es nicht mir eine VI Referenz darauf zu öffnen!
Dennoch danke für deine Antwort, hätte es besser beschreiben müssen!
' schrieb:Ja per Queue, FGV ect. ist das alles kein Problem! aber was ist wenn meine Main Applikation abschmiert und das VI im Speicher weiter läuft?
Ja, dann wird es weiterlaufen, aber das kann doch immer passieren, das Problem hat doch nichts damit zu tun, wie der Stop-Befehl übermittelt wird. Bei einem ausgereiften Programm dürfte das aber gar nicht passieren. Wenn doch, dann fällt mir nur ein Watchdog als Abhilfe ein: Das Haupt-VI übermittelt dem SubVI periodisch Lebenzeichen. Wenn die nicht mehr kommen, beendet sich das SubVI von selbst.
Bei frei laufenden SubVIs erfolgt der Datenaustausch mit den Haupt-VI ohnehin in der Regel über Melder/Queues. Man braucht dann, um das SubVI zu stoppen, keine beondere Botschaft zu senden.
Siehe das Beipiel, wobei man sich die beiden Schleifen als Haupt-und Subvi vorstellen muß. Das Zerstören der Queue im Haupt-VI ergib eine Fehlermeldung im SubVI, mit der man das SubVI beendet. Das könnte vielleicht sogar beim Absturz des Haup-VI nocht funktionieren.
[attachment=50469:queue.png]
So geht es tatsächlich. Keine Referenz? Einfach den Namen, dessen VI du ja bereits im Speicher gefunden hast, an "VI-Referenz öffnen".
Hinweis:
Dieses Muster geht bisher lediglich dann, wenn die VIs bereits im Speicher sind. Das wird durch das Positionieren in den Deaktivierungsrahmen realisiert. Ziel ist es auch nur, das VI zu beenden. Aus dem Speicher entfernt werden muss es ja nicht - wenn ich alles richtig verstanden habe.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Man kann ja über die VI-Referenz sogar jedes auf dem Frontpanal befindliche Bedienelement zugreifen. Dazu ist es nicht einmal notwendig, daß das auf dem Frontpanel einen Anschluß besitzt. Man kann also vom Haupt-VI aus über die SUB-VI Referenz einfach die Stoptaste drücken.
Ebenso kann man natürlich beim Aufruf des Sub-VIs ebenfalls Werte an die FP-Bedienelemente übergeben.
Beispiel Aufruf und Beenden eines VI "VisaDAQ6.vi" (Beim Aufruf werden die Werte "Schnittstelle" und "Takt" übergeben. Der eigentliche Datenaustausch während der Laufzeit erfolgt dann über Queues)
[attachment=50474:aufrufen.png]
[attachment=50475:Beenden.png]
06.11.2009, 22:48 (Dieser Beitrag wurde zuletzt bearbeitet: 06.11.2009 22:49 von IchSelbst.)
' schrieb:So geht es tatsächlich. Keine Referenz? Einfach den Namen, dessen VI du ja bereits im Speicher gefunden hast, an "VI-Referenz öffnen".
Hinweis:
Dieses Muster geht bisher lediglich dann, wenn die VIs bereits im Speicher sind. Das wird durch das Positionieren in den Deaktivierungsrahmen realisiert. Ziel ist es auch nur, das VI zu beenden. Aus dem Speicher entfernt werden muss es ja nicht - wenn ich alles richtig verstanden habe.
Welches Muster? Wo issen des Bild?
Nachtrag:
Ach, hier.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).