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!
Mein Problem ist: ein Sub-VI ist für den Datenaustausch zwischen einem µController und dem Haupt-VI über eine serielle Schnittstelle zuständig.
Für Testzwecke soll es aber auch bei direktem Aufruf funktionieren.
Der Unterschied ist: Bei direktem Aufruf sollen die auf dem Frontpanel einstellbaren Schnittstellenparameter gelten.
Bei SUB-VI-Aufruf sollen die Paramter gelten, die in der Datei LV.ini stehen.
Kein Problem, so etwas zu programmieren, aber: wie kann man erkennen, ob das VI direkt oder als SubVI gestartet wurde?
vielleicht kannst Du Deinem SubVi bei Aufruf einen Text mitgeben der auf dem FP angezeigt wird.
Wird das VI nicht aus einem anden VI aufgerufen erscheint auf dem VI der Default-Text.
Grüße
kpa
12.05.2009, 13:26 (Dieser Beitrag wurde zuletzt bearbeitet: 12.05.2009 13:31 von RoLe.)
Du kannst es über Property-Nodes herausfinden:
1. Execution-State:
Wenn dein VI als Sub VI gestartet wird ist der Execution-State Running, wenn nicht als Sub VI ist der Execution-State Run top level.
2. Callers Name:
Es wird dir der Name des VI's ausgegeben, welches dein Sub VI ausführt.
' schrieb:vielleicht kannst Du Deinem SubVi bei Aufruf einen Text mitgeben der auf dem FP angezeigt wird.
Wird das VI nicht aus einem anden VI aufgerufen erscheint auf dem VI der Default-Text.
Danke, aber das ist gerade das Problem, daß ich beim Sub.VI-Aufruf über die Eingänge nichts mitgeben kann. Wenn ich das könnte, würde ich die Parameter ganz normal über die SUB-VI-Eingänge übergeben.
Ich rufe das SUB-VI so auf:
und erreiche damit, daß der Aufruf nicht das Haupt-VI blockiert, wärend das Sub-VI läuft (Das Sub-VI soll parallel zum Haupt-VI laufen)
12.05.2009, 13:53 (Dieser Beitrag wurde zuletzt bearbeitet: 12.05.2009 13:58 von Lucki.)
' schrieb:call chain, Aufrufkette.
Wenn nur der eigene VI-Name dann direktaufruf.
' schrieb:Du kannst es über Property-Nodes herausfinden:
1. Execution-State:
Wenn dein VI als Sub VI gestartet wird ist der Execution-State Running, wenn nicht als Sub VI ist der Execution-State Run top level.
2. Callers Name:
Es wird dir der Name des VI's ausgegeben, welches dein Sub VI ausführt.
Danke, das funktioniert bestimmt alles Dreies, so daß ich jetzt nur noch die Qual der Wahl habe.
Habe auch einen dilletantischen Veruch gemacht, das VI mit Eingangsparameteren aufzurufen, ohne daß es während der Ausführungszeit alles andere blockiert. Dann brauchte ich die LV.ini für diesen Zweck nicht und das Sub-VI würde einfacher.
Mein Versuch sah so aus:
Die Funktion "Aufruf über Referenz" (ganz rechts) wartet aber hier, bis das VI beendet ist, d.h alles wird blockiert. Es ist also alles genau so, als wenn ich das VI direkt als Sub-VI aufgerufen hätte.
Falls jemand weiß, ob und wie man das Blockieren verhindern kann, bitte sagt es mir.
' schrieb:Durch den dynamischen Aufruf wird dein VI ja nicht mehr als Sub VI ausgeführt.
Offensichtlich triffst Du damit ins Schwarze. Denn große Enttäuschung: Alle drei Vorschläge funktionieren nicht, das VI verhält sich beim dynamischen Aufruf genau so, als wäre es TOP-Level. Es sind alo mit keiner der drei Vorschläge Unterschiede gegenüber dem direkten Aufruf auszumachen..
' schrieb:Du kannst einen Wert auch über die Referenz setzen, das habe ich früher mal so verwendet. hier mal aufs minimum reduziert:
später habe ich das ganze durch queues und melder ersetzt. evtl kannst du ja etwas davoin gebrauchen.
Erster Test: sehr vielversprechend, das ist wahrscheinlich die Lösung. Melde mich wieder. (Queues verwende ich schon für den Datenaustausch, für die einmalige Übergabe von Konfigurationsparameteren erscheint mir das unpassend)