INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

FGV Funktionale Globale Variable



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!

26.08.2009, 07:29
Beitrag #11

IchSelbst Offline
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).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
26.08.2009, 10:31 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2009 10:34 von MichaDu.)
Beitrag #12

MichaDu Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 115
Registriert seit: Jun 2008

8.5
2008
en

47
Deutschland
FGV Funktionale Globale Variable
Hallo,

habe mein Problem jetzt etwas anders gelöst:
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 ;-)

Das VI beinhaltet ein dynamisches Array, in dem ich noch nicht vorhandene Labels eintrage (Write/Reset-Modus) oder nach einem Label suche (Read-Modus). Dann lasse ich mir den Index ausgeben und schreibe/lese mein dazugehöriges dynamisches Datenarray.

Funktioniert prima und ich kann die FGV jetzt universell verwenden! Ich weiß nur noch nicht, ob die Bearbeitungszeit für die dynamischen Arrays bei sehr großer Anzahl an FGVn darunter leidet. Bisher habe ich 50 ausprobiert hatte keine Probleme (<<1ms)


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.08.2009, 10:52
Beitrag #13

IchSelbst Offline
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).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.08.2009, 12:59
Beitrag #14

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

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 Big Grin).


Sonstige .vi  Combo.vi (Größe: 8 KB / Downloads: 380)

Lv80_img

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.08.2009, 14:44
Beitrag #15

MichaDu Offline
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...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.08.2009, 06:59
Beitrag #16

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
FGV Funktionale Globale Variable
' schrieb:Geht doch. Tongue

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.

Das löse ich normal in dem ich im FGV ein Array halte und als extra Parameter einen Index mitgebe der angibt auf welches Element im Array die Methode ausgeführt werden soll. Die Methodenliste wird dann schnell etwas länger, etwa { init, add, delete, get, und was immer ich noch mit den Daten direkt im FGV tun können will}.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
16.09.2010, 15:20
Beitrag #17

schurzgasschweisser79 Offline
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?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.09.2010, 15:30 (Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2010 22:20 von jg.)
Beitrag #18

jg Offline
CLA & CLED
LVF-Team

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.09.2010, 15:40 (Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2010 15:41 von schurzgasschweisser79.)
Beitrag #19

schurzgasschweisser79 Offline
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 netSad- 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....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.09.2010, 15:53 (Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2010 16:14 von jg.)
Beitrag #20

jg Offline
CLA & CLED
LVF-Team

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 netSad- 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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Globale Variablen Edi70 7 3.154 08.10.2021 17:01
Letzter Beitrag: GerdW
  Boolean als globale Variable ares2013 12 9.724 06.09.2019 13:57
Letzter Beitrag: GerdW
  Übergabe Anzeigeelement zwischen VIs (Referenz/globale Variable?) lipster 1 3.803 03.02.2017 14:27
Letzter Beitrag: GerdW
  globale Konstanten? Nordvestlys 6 5.067 20.02.2015 09:35
Letzter Beitrag: Nordvestlys
  Globale Variable, maximale Größe, Daten anhängen. dieseldunst 10 9.147 18.04.2014 09:00
Letzter Beitrag: Lucki
  Globale Variable mit Excel Banick 5 5.762 29.01.2014 11:44
Letzter Beitrag: Banick

Gehe zu: