LabVIEWForum.de - So etwas wie eine FGV, nur an eine "Instanz" des SubVIs gebunden

LabVIEWForum.de

Normale Version: So etwas wie eine FGV, nur an eine "Instanz" des SubVIs gebunden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

ich habe mir zu Debug-Zwecken ein VI geschrieben, das ich einfach in eine Schleife ziehe und mir die durchschnittliche Dauer eines Schleifendurchlaufs ausgibt. Ich hatte keine Lust, mir jedesmal mit den Timern und Schieberegistern etwas zu basteln.

An sich funktioniert das VI erstaunlich gut.Smile

Nur ist es so, dass ich FGVs verwenden muss, wenn ich ein Schieberegister vermeiden möchte und der Aufruf des VIs somit mehr als einfach ist: Nur in der Schleife platzieren - fertig.

[attachment=28139]

Schön wäre es, wenn ich dieses VI z.B. in eine weitere Schleife setzen kann, um die Zeit dort ausgeben zu lassen. Nur funktioniert das natürlich nicht, da die funktionale, globale Variable - wie der Name sagt - global ist und damit für alle VIs dieser Art gilt.

Gibt es so etwas wie FGVs, die nur innerhalb einer "Instanz" gültig sind, aber dennoch so global sind, dass beim nächsten Aufruf der Wert wieder zur Verfügung steht?

Hier noch das Debug-VI:

[attachment=28140]
Unter den VI-Properties unter Execution das VI auf Reentrant setzen.

Gruß, Jens
Hui, das ist genial! Danke.Smile

Nachtrag: Ist es normal, dass ich das FrontPanel dieses VI dann nicht mehr bearbeiten kann? Ich muss dazu erst wieder diese Einstellung rückgängig machen.
' schrieb:Nachtrag: Ist es normal, dass ich das FrontPanel dieses VI dann nicht mehr bearbeiten kann?
Ja.
' schrieb:Ich muss dazu erst wieder diese Einstellung rückgängig machen.
Nein, musst du nicht. Short-Cut Strg-M hilft Abhilfe (im Menü unter Operate->Change to Run/Edit Mode).

Gruß, Jens
Hm ok, danke.
Gibt es denn einen Grund für dieses Verhalten?
Ich bin mir nicht sicher, ob das mit dem "FirstCall.vi" immer funktioniert...Dessen Reset erfolgt doch erst dann, wenn das umgebende VI aus dem RAM verschwindet, oder?
' schrieb:Ich bin mir nicht sicher, ob das mit dem "FirstCall.vi" immer funktioniert...Dessen Reset erfolgt doch erst dann, wenn das umgebende VI aus dem RAM verschwindet, oder?
Jo, ich wollt's erst selbst schreiben aber hab's mir dann doch verkniffen, weil ich jedes mal dieses VI verunglimpfe. First-Call gibt nur einmal ein True pro Applikationsstart mit dem Pfeil in der Menüleiste aus, nicht mehr. Aber, wenn er keinen "Idle-Mode" hat ist's so ok.

Einen First-Run-Flag baue ich mir deshalb immer selbst, wo ich jederzeit selbst resetten kann. Ist halt ein Eingang mehr im subVI ...
' schrieb:Ist halt ein Eingang mehr im subVI ...
Und ein Schieberegister, damit der Wert im nächsten Durchlauf "false" ist.

Für Debugzwecke wollte ich jedoch ein VI, dass ich mal eben aufs Blockdiagramm ziehen kann ohne groß etwas zu verdrahten. Und dafür ist das ausreichend.
... jaja ist das ok. Wenn überhaupt, ist eh nur der erste Wert dann falsch. Deswegen hab ich's mir ja auch verkniffenSmile
' schrieb:Gibt es denn einen Grund für dieses Verhalten?
Klar.

Reentrante SubVIs liegen so oft im Speicher, wie sie auf dem BD positioniert wurden. Hast du also 7 gleiche SubVIs platziert, gibt es das SubVI also 7 mal.

Du kannst jetzt alle diese 7 SubVIs während der Ausführung öffnen (FP anzeigen lassen) z.B. um Sonden zu setzen und Anzeigeelemente anzusehen. Jedes der 7 FP zeigt dann spezifische Daten an. Das gleichzeitige Anzeigen der 7 SubVIs geht aber logischerweise nur im sog. Ausführungsmodus. Nachdem das Programm beendet wurde, verbleiben die reentranten SubVIs im Ausführungsmode, weil man ja die Daten noch ansehen könnten möchte. Willst du das SubVI nun ändern, musst du in den Bearbeitungsmodus umschalten. Im Bearbeitungsmodus gibt es aber nur ein einziges SubVI - keine 7 mehr, da die 7 ja "die selben" sind.

Man kann jetzt natürlich Tricks machen: ein 8. SubVI in einen Deaktivierungsrahmen legen. Dieses SubVI läuft nämlich nicht und wird beim Anklicken also im Bearbeitungsmodus geöffnet. Jetzt könnte man da Änderungen machen, die dann zur Folge haben, dass die 7 anderen sich von selbst in den Bearbeitungsmodus schalten - dumm nur, dass LabVIEW (LV 85 SE) dabei abstürzt.
Seiten: 1 2
Referenz-URLs