LabVIEWForum.de - Locale Variable von SubVI?

LabVIEWForum.de

Normale Version: Locale Variable von SubVI?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich arbeite erst seit dieser Woche mit LV, darum sind mir noch ein paar vorgehensweisen unbekannt.
Ich möchte einen Ablauf programmieren, in dem unteranderem Ventile über die NI USB 6009 Karte angesteuert werden. In dem Bild macht das die eine SubVi 3.
Darin sollen die Ventile gestellt werden und über den Ausgang gibt es eine Rückmeldung, welche Ventile gestellt sind. Soweit, wie es momentan programmiert ist, müsste es auch funktionieren (die karte habe ich noch nicht eingebunden).
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. Leider können locals nur mit Controls verknüft werden. Kann ich meine SubVI umstellen, so dass sie auch mit einer localen Variable verbunden werden kann?

Oder ist ein anderes Vorgehen generell besser? ich bin offen für andere VorschlägeSmile

[attachment=22277]

Viele Grüße
Frank
Mach' mal einen Rechtsklick auf Deine lokale Variable und wähle dann "Change to read" aus.
Dann kannst Du auch einen Indicator (und nicht nur ein Control) verbinden.

Gruß Markus
aber dennoch lässt sich das subvi nicht mit der Variable verknüpfen (über Select Item / Objekt wählen)
' 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.
ah ok das klingt sehr gut und schlüssigSmile

vielen dank an dich!!!
Referenz-URLs