So etwas wie eine FGV, nur an eine "Instanz" des SubVIs gebunden
Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
23.07.2010, 12:50 (Dieser Beitrag wurde zuletzt bearbeitet: 23.07.2010 12:51 von Matze.)
So etwas wie eine FGV, nur an eine "Instanz" des SubVIs gebunden
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.
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.
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?
So etwas wie eine FGV, nur an eine "Instanz" des SubVIs gebunden
Hui, das ist genial! Danke.
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.
So etwas wie eine FGV, nur an eine "Instanz" des SubVIs gebunden
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?
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Anzeige
23.07.2010, 13:47 (Dieser Beitrag wurde zuletzt bearbeitet: 23.07.2010 13:49 von dimitri84.)
So etwas wie eine FGV, nur an eine "Instanz" des SubVIs gebunden
' 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 ...
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
So etwas wie eine FGV, nur an eine "Instanz" des SubVIs gebunden
' 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.
So etwas wie eine FGV, nur an eine "Instanz" des SubVIs gebunden
' 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.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).