25.08.2009, 06:57
Beitrag #1
|
cabua
LVF-Gelegenheitsschreiber
Beiträge: 57
Registriert seit: Aug 2009
8.6
2006
DE
44
Deutschland
|
FGV Funktionale Globale Variable
Hallo LabVIEW User,
Ich habe das Problem, dass ich bei einem vorhandenen Projekt Daten abgreifen muss. Diese Daten werden über das komplette Projekt hinweg erzeugt. Bei einer hierarchischen Tiefe von ~ 10 (SubVI 1 ruft SubVI 2 auf, SubVi 2 ruft SubVI 3 auf, ...) ist es quasi unmöglich ohne starke Eingriffe in den Vis diese Daten zu bekommen.
Im LVOOP Thread deutete der Member "IchSelbst" an, dass FGV soetwas wie Datenspeicher sind. Und genau soetwas wäre ja ideal für mein Vorhaben.
Meine ersten Gehversuche sind schiefgegangen. Inzwischen denke ich aber, dass ich das Konzept verstanden habe.
Als Beispiel habe 2 Controls für die Datenspeicherung und 2 Indicatoren für das Auslesen.
Dieses neue SubVI kann man nun als Datenspeicher verwenden.
Ist diese Vorgehensweise korrekt? Gibt es bessere Lösungen? Ich habe nur einfache Datentypen gewählt (String), wie schauts mit Cluster aus? Kann ich mittels FGV ein einzelnes Element im Cluster verrändern? Es wäre nett, wenn "IchSelbst" vielleicht noch etwas von seinem Wissen preisgeben würde. Alle anderen natürlich auch.
Auf eine rege Diskussion
|
|
|
25.08.2009, 07:16
Beitrag #2
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
FGV Funktionale Globale Variable
Hallo,
im Großen und Ganzen sieht das doch schon mal gut aus.
Ich habe i. d. R. aber noch einen Initialisierungscase.
Cluster kannst Du natürlich auch verwenden. Ist nur eine Frage des Aufbaus.
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
25.08.2009, 07:28
Beitrag #3
|
cabua
LVF-Gelegenheitsschreiber
Beiträge: 57
Registriert seit: Aug 2009
8.6
2006
DE
44
Deutschland
|
FGV Funktionale Globale Variable
Hallo Markus,
ein Init Case um Standardwerte festzulegen, falls der Datenspeicher nicht beschrieben wurde?
|
|
|
25.08.2009, 07:54
Beitrag #4
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
FGV Funktionale Globale Variable
Einen Init-Case, um die FGV (bzw. die enthaltenen Elemente) mit einem Standardwert vorzubelegen.
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
25.08.2009, 08:18
(Dieser Beitrag wurde zuletzt bearbeitet: 25.08.2009 08:20 von IchSelbst.)
Beitrag #5
|
IchSelbst
LVF-Guru
Beiträge: 3.692
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
FGV Funktionale Globale Variable
' schrieb:Ist diese Vorgehensweise korrekt?
Im Prinzip ja.
Zitat:Gibt es bessere Lösungen?
"Besser" ist immer vom Standpunkt anhängig. In manchen Fällen ist die von dir gefundene Lösung ideal, weil ausreichend.
Zitat:wie schauts mit Cluster aus?
Geht genau so. Auch ein Cluster ist nur ein Wire.
Bei (großen) Datenclustern verwende ich als Eingang in die FGV einen Variant und der Enumerator enthält ggf. sehr viele Werte. Ein Muster werde ich heute abend posten.
Zitat:Kann ich mittels FGV ein einzelnes Element im Cluster verrändern?
Klar: Über den Variant den Wert des Unterelementes hereingeben und im Enumerator sagen, welches Unterelement ersetzt werden soll. Im Übrigen kommt dieses Verfahren einem Property sehr nahe.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
25.08.2009, 15:18
Beitrag #6
|
MichaDu
Unregistered
|
FGV Funktionale Globale Variable
Gibt es auch eine Möglichkeit außer der Verwendung von Arrays oder Clustern, zwei identische FGVs (z.B. vom Typ Double) zu verwenden? Sobald ich einen Wert in das zweite VI (Kopie des ersten) schreibe, wird der Wert aus dem ersten VI ja überschrieben. Die Ausführung als reentrant funktioniert auch nicht, da ich die Werte aus den Kopien dann nicht mehr lesen kann.
|
|
|
25.08.2009, 15:25
Beitrag #7
|
IchSelbst
LVF-Guru
Beiträge: 3.692
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
FGV Funktionale Globale Variable
' schrieb:Die Ausführung als reentrant funktioniert auch nicht, da ich die Werte aus den Kopien dann nicht mehr lesen kann.
Geht doch.
Mach die reentranten VIs in ein SubVI rein. Diesem SubVI gibst du zusätzlich zu den Parametern, die in die FGV sollen (und dorthin weitergeleitet werden), einen Enumerator z.B. mit den Werten "FGVx". In diesem SubVI liegen die FGVs in unterschiedlichen Cases, die durch den zusätzlichen Enumerator ausgewählt werden. Alle Cases führen zum selben Ausgang. Das aufrufende VI weiß, welches der reentranten FVGs verwendet werden soll.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
25.08.2009, 15:49
Beitrag #8
|
MichaDu
Unregistered
|
FGV Funktionale Globale Variable
Hallo IchSelbst,
das werde ich mal ausprobieren. Ich hatte mir auch schon überlegt, ob man mit eindeutigen Labels arbeiten kann. Dein Vorschalg kommt dem ja nahe.
Vielen Dank!
|
|
|
25.08.2009, 16:53
Beitrag #9
|
|
|
25.08.2009, 17:32
|
MichaDu
Unregistered
|
FGV Funktionale Globale Variable
@IchSelbst:
Vielen Dank! Das hat mich aber jetzt spontan etwas überfordert ;-) Werde mir das mal in Ruhe anschauen.
Deinen Tipp habe ich schon umgesetzt. Es funktioniert.
Ich wollte für meine FGV möglichst wenig Zusatzeingänge haben, deswegen hatte ich mal überlegt, ob ich das VI-Label dafür verwenden kann. Klappt aber nicht, weil das Label im Blockdiagramm nicht editierbar ist. Schade...
|
|
|
| |