LabVIEWForum.de
Werte aus Sub VI im Haupt VI anzeigen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Werte aus Sub VI im Haupt VI anzeigen (/Thread-Werte-aus-Sub-VI-im-Haupt-VI-anzeigen)

Seiten: 1 2 3 4


Werte aus Sub VI im Haupt VI anzeigen - Myjestic - 22.09.2006 10:46

Hallo,

Habe ein Sub VI gebaut, indem eine While Schleife abgearbeitet wird.
Diese Sub VI binde ich nun in mein Haupt VI ein.

Welche Möglichkeiten gibt es, dieses Sub VI zu beeinflussen. Mein Problem ist ja, dass die While Schleife im SubVI erst bis zur Abbruchbedingung durchgeführt wird, bevor etwas anderes geschehen kann.

Ich würde gerne aktuelle Werte aus diesem Sub VI ins Haupt VI übernehmen und auch z.B. von außen eine Stopanweisung schicken können.

Vielen Dank
Myjestic


Werte aus Sub VI im Haupt VI anzeigen - Achim - 22.09.2006 10:57

Globale Variablen, Queues, Notifier...

Such mal im Forum...

Gruss
Achim


Werte aus Sub VI im Haupt VI anzeigen - A.Berndsen - 22.09.2006 11:06

Hallo!

Der Antwort von Achim füge ich noch die Referenzen hinzu!
Ist noch nicht allzulange her, da haben wir einen ähnliche Frage hier gehabt!
Such mal danach!

Gruß
Andreas


Werte aus Sub VI im Haupt VI anzeigen - Myjestic - 26.09.2006 11:05

<div align="left">Hallo, danke für die Hinweise, ich habe es mit den von Euch genannten Möglichkeiten versucht, leider verstehe ich nur die Verwendung von globalen Variablen.

Ich habe mal ein SubVI und ein MainVI angefügt.

Könnt Ihr bitte mal so nett sein und diese VIs so umschreiben, dass ich im MainVI bei laufendem Programm die I32 Werte aus dem SubVI sehen kann. Des Weiteren soll der Stop Button aus dem MainVI die Schleife im SubVI stoppen. (mittels Notifier, Occurence und Reference)

Vielleicht verstehe ich es endlich anhand eines Beispiels.

Vielen Dank.

</div>


Werte aus Sub VI im Haupt VI anzeigen - Achim - 26.09.2006 11:24

Hi,

was hast du denn eigentlich vor? Wie du schon richtig gesagt hast, läuft das übergeordnete VI nicht, wenn erst mal ins SubVI gesprungen wurde. Da wird auch kein Abbruchbefehl mehr akzeptiert, es sei denn, dieser wird direkt im SubVI gegeben. Da geht allerdings nur wenn

1. ...das Frontpanel des SubVIs geöffnet ist und dort z.B. ein Stop-Button verfügbar ist

oder

2. ....das SubVI in einer parallel zur Hauptschleife liegenden While-Schleife abgearbeitet wird. Dann kann man aus der Hauptschleife heraus z.B. einen Befehl über ein globale Variable oder über eine Queue etc. verschicken!

Alternativ könntest du die Abarbeitung des SubVI auch in einem immer wiederkehrenden Schritt einer State Machine abarbeiten.

Gruss
Achim


Werte aus Sub VI im Haupt VI anzeigen - StefanHH - 26.09.2006 11:44

<div align="left">Hallo Myjestic,

ich habe Dir das Programm auf die Anwendung mit Referenzen abgeändert.
Ein weiterführendes Beispiel hatte ich zum Ende der letzten Woche gepostet.
--> http://www.LabVIEWforum.de/index.php?showtopic=3615

Vielleicht hilft es Dir ja weiter.

Schöne Grüße,
Stefan

[attachment=3401]
[attachment=3402]

</div>


Werte aus Sub VI im Haupt VI anzeigen - Myjestic - 26.09.2006 11:47

<div align="left">Mein Vorhaben ist folgendes. Ich habe einige Regelalgorithmen entwickelt, die ich jeweils in ein SubVI verpackt habe. Diese würden auch autonom laufen. (Diese Algorithmen direkt ins Hauptprogramm zu packen würde eine übles Durcheinander verursachen) Jetzt möchte ich ein Hauptprogramm erstellen, in dem einer der von mir erstellten Regelalgortihmen angewählt werden kann.

Die Werte des jeweiligen Reglers, sprich ISTwerte etc. möchte ich gerne in meinem MainVI angezeigt bekommen. Und durch ein Stopbutton soll der jeweilige Regelalgorithmus gestoppt werden. Das ist eingentlich schon alles.</div>


Werte aus Sub VI im Haupt VI anzeigen - Achim - 26.09.2006 12:13

@ Stefan:

Irgendwie hab ich's nicht geblickt! Was bringt die Verdrahtung ins SubVÌ? Wenn im SubVI die Schleife läuft, wird das HauptVI, welches das SubVI enthält, auf jeden Fall so lange angehalten, bis das SubVI beendet ist. D.h. es werden vom HauptVI keine Eingaben ins SubVI übernommen!

Kleiner Tip: Wenn du die Referenz des "stop from mainVI" mit gedrückter Strg-Taste vom Blockdiagramm des HauptVI aufs Frontpanel des SubIV ziehst, erhälst du eine "strict refnum" (sichtbar am Sternchen auf dem FP) und du kannst dir die "Variant to Data"-Wandlung sparen!

Gruss
Achim


EDIT: Schau mal das Beispiel an:

http://www.LabVIEWforum.de/index.p...ost&p=11922

So ne ähnliche State Machine könntest du auch aufbauen, und in nem State "regeln" könntest du die VIs immer wieder ablaufen lassen...dazu könntest du z.B. die While-Schleife im jeweiligen Regler-VI nur genau 1x pro "Durchgang" laufen lassen (ne F-Konstante an den "Continue if true"-Anschluss der Schleife), und Parameter, die du von Regelzyklus zu Regelzyklus in deinem VI benötigst über nicht initialisierte Schieberegister durchschleifen. Wenn von außen "Regelung aus" betätigt wird, springst du den Fall "regeln" einfach nicht mehr an.


Werte aus Sub VI im Haupt VI anzeigen - Myjestic - 26.09.2006 13:28

<div align="left">Also die Variante von StefanHH funktioniert soweit erstmal, danke dafür.

@Achim
natürlich interessiert mich, wie Du das genau realisieren willst, mit dem Beispiel im Link komme ich nicht ganz klar.

Angenommen in meiner While Schleife im SubVI habe ich eine Variable XX. Diese wird in jedem Schleifendurchgang um 1 Inkremetiert. Durch ein Shiftregister wird der Wert in den nächsten Schleifendurchgang überführt. Wie meinst Du das, dass die Schleife nur einmal durchlaufen werden soll (im SubVI). Demnach müsste ich (wenn ich das richtig verstanden habe) dieses SubVI dann im MainVI wieder in eine While Schleife packen. Wie aber übergebe ich dann die "alten" Werte des SubVI Schleifedurchlaufs an den nächsten ohne das diese verloren gehen?

Kannst Du mir bitte ein simples Beispiel dafür geben?</div>


Werte aus Sub VI im Haupt VI anzeigen - Myjestic - 26.09.2006 14:26

<div align="left">@ Achim

Okay hat sich erledigt.

Ich habe wie Du gesagt hast, im SubVI nur einen Schleifendurchlauf. Alle Parameter die in den folgenden Schleifendurchlauf müssen habe ich gebundled und als Ausgang definiert. Diese Bundle kommt auch wieder als Eingang ins SubVI rein.

Im MainVI habe ich jetzt eine while-Schleife um mein SubVI gelegt mit Shiftregistern durch das, das Bundle durchgeführt wird. So kann ich jederzeit via unbundle by name die gewünschten Werte rausziehen, die ich angezeigt bekommen möchte.
Manchmal braucht man halt für ein einfaches Problem ein paar einfache Denkanstöße.

Vielen Dank nochmal an alle.</div>