' schrieb:Da die SubVI in vielen Untersequenzen aufgerufen wird, dachte ich man könnte sie außerhalb der Sequenz ablegen und über eine lokale Variable ansteuern.
Diese Überlegung ist vorerst unsinnig.
Das Herauslegen aus der Sequenz hat eine hauptsächliche Auswirkungen:
Liegt das SubVI außerhalb der Sequenz wird es nur ein einziges Mal aufgerufen und abgearbeitet! Das liegt an der Struktur von LabVIEW: Stichwort Datenfluß. D.h. du kannst den Ablauf, nämlich drei Sachen nacheinander zu machen, nicht so realisieren, indem du das SubVI auslagerst.
Zitat:Oder ist ein anderes Vorgehen generell besser?
Wenn du das SubVI auslagern willst, musst du zwei Sachen anpassen.
Erstens muss das VI so umbebaut werden, dass es kontinuierlich läuft. Das wird durch eine While-Schleife im SubVI realisiert. Dieses SubVI kannst du dann außerhalb der Sequenz positionieren und es wird währen der gesamten Programmlaufzeit laufen.
Zweitens musst du eine Steuerqueue erstellen und einen Ausgangsmelder. Dort, wo jetzt das SubVI in der Sequenz sitzt, wird eine Queue mit Steuerbefehlen beschrieben. Diese Befehle liest das neue SubVI aus und arbeitet sie ab. Als Ergebnis sendet das neue SubVI den Zustand der Ventile in einem Melder zuzrück.
Jetzt kannst du in einer Dauerschleife ständig den Ausgangsmelder (also den Zustand der Ventile) anzeigen lassen. Der Ablauf beschränkt sich jetzt darauf, die Queue zu beschreiben und zu warten.
Hinweis:
Der Vorteil des neuen Verfahrens zeigt sich dann, wenn auch noch diverse andere Sachen integriert werden. Man kann das neue SubVI so gestalten, dass man (per Queue) z.B. nur bestimmte Ventile schalten kann. Dazu würde man einen Enumerator machen, der alle einzelnen Ventile aber auch Vetilgruppen enthält. Damit wäre es dann z.B. nicht mehr nötig, ein Array zu übergeben - was voraussetzt, dass man den Schaltzustand aller Ventile angeben muss.
Der nächste Vorteil ist: Das Programm wird modular.