26.08.2009, 07:29
|
IchSelbst
LVF-Guru
Beiträge: 3.687
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
FGV Funktionale Globale Variable
' schrieb: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.
Aus diesem Satz geht hervor, dass du das "Label als Eingang für Daten verwenden" willst. Verstehe ich das richtig?
Als Eingang für Daten kannst du den Label nicht verwenden. Label und Eingang sind zwei völlig verschiedene Sachen. Ein Eingang ist eine Funktionalität, die zur Laufzeit durch kontrete Daten ersetzt wird. Ein Label, wenn er denn der Name des VIs ist, ist zur Laufzeit das Programm, das die Daten verarbeitet. Ist der Label gar nur die Beschriftung (Untertitel), so ist der lediglich für die IDE inderessant. Den zur Laufzeit beizubehalten, wäre unsinnig.
Möglicherweise kann man auf Label und Untertitel zugreifen. Dann aber bestimmt nur per Methode, die selbst wieder die Referenz des VIs benötigt. Wolltest du z.B. den Untertitel als Dateneingang verwenden, müsstest du die Referenz des VIs holen. Dann kucken, ob es eine Methode (oder Property) gibt, das den Untertitel referenziert. Dann schreibend und(!) lesend darauf zugreifen.
[*grübel*] Als konstanten Eingang [*grübel*]
Du willst die Daten zur Laufzeit selbst ja nicht ändern. Nur einmal vorbelegen. Dann willst du zur Laufzeit auf die vorbelegten Daten zugreifen.
Du könntest irgendein Property eines VIs (Probleme guckst du oben) verwenden, um das VI sich selbst identifizieren zu lassen. z.B. den Text in der Versionshistorie (so er denn zugreifbar ist zur Laufzeit). Allerdings ist der Aufwand hierfür nicht nur mit Kanonen, sondern mit der ganzen Imperialen Flotte auf Spatzen geschossen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
26.08.2009, 10:31
(Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2009 10:34 von MichaDu.)
|
|
|
26.08.2009, 10:52
|
IchSelbst
LVF-Guru
Beiträge: 3.687
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
FGV Funktionale Globale Variable
' schrieb:Neben Dateneingang und -ausgang setze ich in meinem FGV-VI nur einen einzigen String als Parameter, der sowohl Modus (Read, Write, Reset) als auch Label beinhaltet (z.B. "Umess1"). Das spart Verdrahtung und sieht auch noch elegant aus ;-)
Ja, eine sehr elegante Lösung, die auch noch gut aussieht.
Hat aber einen Nachteil, der bei mir als k.o.-Kriterium gilt: Beim Schreiben des Strings manuell per Tastatur können Schreibfehler entstehen, die man nur ganz schlecht findet. Daher verwendet man eben Enumeratoren (mit redundanten Bezeichnungen). Die haben den weiteren Vorteil, dass man alles sehen kann, was möglich ist. Das geht eben bei der String-Methode nicht.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
26.08.2009, 12:59
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
FGV Funktionale Globale Variable
Alternativ könnte es auch mit einer Combobox gehen. Da verschreibt man sich nicht (oder höchstens nur einmal ).
Combo.vi (Größe: 8 KB / Downloads: 380)
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
26.08.2009, 14:44
|
MichaDu
LVF-Gelegenheitsschreiber
Beiträge: 115
Registriert seit: Jun 2008
8.5
2008
en
47
Deutschland
|
FGV Funktionale Globale Variable
Dann hätte ich allerdings wieder einen zusätzlichen Eingang bzw. der Vorteil der Label-Vergabe wäre futsch...
|
|
|
27.08.2009, 06:59
|
|
|
16.09.2010, 15:20
|
schurzgasschweisser79
LVF-Gelegenheitsschreiber
Beiträge: 86
Registriert seit: Apr 2010
8.6
2010
de
Deutschland
|
FGV Funktionale Globale Variable
blöde Frage:
Warum nimmt man überhaupt solche FGVs und keine globalen Variablen? Racecondtions können doch bei Beiden auftreten - oder nicht?
|
|
|
16.09.2010, 15:30
(Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2010 22:20 von jg.)
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
FGV Funktionale Globale Variable
Bei FGVs ist die Gefahr von Race-Condition ganz extrem minimiert. LabVIEW sorgt nämlich dafür, dass ein VI (solange es nicht auf reentrant steht) immer nur einmal ausgeführt werden kann, nie 2x parallel.
Bei globalen Variablen hast du folgendes Problem: Beim Lesen erzeugst du eine lokale Kopie der Werte im Speicher. Du hast also keinen direkten Bezug mehr zum Wert. Falls du 1ms nach dem Auslesen an einer anderen Stelle im Programm gerade auf die globale Variable schreibst und danach wieder die lokale Kopie zurückschreibst, dann ist dein Update verloren.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
16.09.2010, 15:40
(Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2010 15:41 von schurzgasschweisser79.)
|
schurzgasschweisser79
LVF-Gelegenheitsschreiber
Beiträge: 86
Registriert seit: Apr 2010
8.6
2010
de
Deutschland
|
FGV Funktionale Globale Variable
Zitat:LabVIEW sorgt nämlich dafür, dass ein VI (solange es nicht auf reentrant steht) immer nur einmal ausgeführt werden kann, nie 2x parallel.
Achso - hm.. und was passiert, wenn in zwei parallelen Schleifen auf dieselbe FGV zugegriffen wird? Wartet Labview dann automatisch immer, bis die FGV "wieder frei ist" - also bis sie keiner mehr benutzt? Oder gibt das einen Fehler?
Zitat:Bei globalen Variablen hast du folgendes Problem: Beim Lesen erzeugst du eine lokale Kopie der Werte im Speicher. Du hast also keinen direkten Bezug mehr zum Wert. Falls du 1ms nach dem Auslesen an einer anderen Stelle im Programm gerade auf die globale Variable schreibst und danach wieder die lokale Kopie zurückschreibst
Sorry Jens, ich raffs net - Ist das bei FGVs nicht das Gleiche? Also, wenn ich den Wert aus ner FGV auslese, ist er dann nicht auch lokal irgendwo erstmal abgelegt ? Und wenn ich dann von wo anders in die FGV reinschreibe und dann den lokalen Wert von zuvor wieder zurückschreibe....
|
|
|
16.09.2010, 15:53
(Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2010 16:14 von jg.)
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
FGV Funktionale Globale Variable
' schrieb:Achso - hm.. und was passiert, wenn in zwei parallelen Schleifen auf dieselbe FGV zugegriffen wird? Wartet Labview dann automatisch immer, bis die FGV "wieder frei ist" - also bis sie keiner mehr benutzt? Oder gibt das einen Fehler?
Genau, LAbVIEW wartet, bis die Resource - in diesem Fall das VI - wieder frei ist.
' schrieb:Sorry Jens, ich raffs net- Ist das bei FGVs nicht das Gleiche? Also, wenn ich den Wert aus ner FGV auslese, ist er dann nicht auch lokal irgendwo erstmal abgelegt ? Und wenn ich dann von wo anders in die FGV reinschreibe und dann den lokalen Wert von zuvor wieder zurückschreibe....
Natürlich kannst du auch Race Conditions mit FGVs erzeugen, gerade bei parallelen Schleifen. Vielleicht mache ich später mal ein Bsp, eine Variante mit FGV, eine mit globalen Variablen.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
| |