Über so eine Stru©ktur habe ich lange nachgedacht, bis ich schließlich die Lösung fand.
Problem also: Ein Sub-VI soll vom Haupt-VI nach Belieben gestartet und gestoppt werden, und unabhängig davon, ob das Sub-VI gestartet oder gestoppt ist, soll das Haupt-VI normal weiterlaufen.
Das Lösung ist:
a) Da das SubVI blockiert, so lange es läuft, muß es sich in einer eigenen, nur für das Sub-VI bestimmten unabhängigen Schleife befinden, in der die Blockade dieser Schleife keinen Schaden anrichten kann.
b) Das Beenden des Sub-VIs kann nur über globale Variable, Melder, Queues oder Occurrence erfolgen.
Habe mal ein kleines Beispiel gemacht, hier der Einfachheit halber mit einer Occurence, die eigentlich schon fast verboten ist. Du wirst das aber richtig verstehen, hast ja selbst schon ein VI über die Fehlermeldung in einer Queue beendet.
Ich verwende hier zwei Ereignisstrukturen in einem VI, und sogar behandele ich das gleiche Ereignis in beiden Strukturen. Das muß man nicht so machen, habs nur gemacht, um Jens damit zu ärgern, der da sagt, das darf man nicht
. NI ist hier eigentlich weniger streng: NI rät nur dringendst davon ab, zwei Ereignisstrukturen in ein und derselben While-Schleife zu verwenden.
Nicht vergessen: Häkchen "Frontpanel sperren..." im Ereigniscase entfernen
HauptVI.vi (Größe: 12,81 KB / Downloads: 222)
SubVI.vi (Größe: 6,49 KB / Downloads: 208)
Edit: Entschuldigt diesen Beitrag. Wie ich glaube zu sehen, kann man die Blockade eines SUb-VIs auch dadurch verhindern, indem man es über einen Methodenknoten mit geigneten Parametern aufruft. Und das ist wohl eher die professionelle Vorgehensweise im Vergleich zu meiner simplen Holzhackermethode.