LabVIEWForum.de - Variablenverwendung nur im Blockdiagramm

LabVIEWForum.de

Normale Version: Variablenverwendung nur im Blockdiagramm
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo LVG
Ich habe mich mit dem Thema beschäftigt wie man Variablen erzeugen und nutzen kann die nicht im Frontpanal auftauchen sollen.
D.h. wenn man z.B. eine while-schleife durch eine Variable steuert, welche aber im Forntpanal nicht auftauchen soll.
Es geht dabei weniger um eine einzelne Variable sondern wenn man halt einige Variablen in seinem Blockdiagramm verwenden möchte, diese sich aber störend auf das Frontpanalbild auswirken würden.
Die Möglichkeiten die mir dazu eingefallen sind, sind folgende:

- Frontpanalvariablen (-Elemente) erzeugen und durch den Eigenschaftsknoten "unsichtbar" diese verstecken. --> nicht schön, umständlich

- Variablen in einem Globale-Variablen-Vi speichern. --> erhöhter Speicherverbrauch, verlangsamung des Programms, Erhöhung der
Fehleranfälligkeit, da beim Aufruf der Globalen-Variablen hin und wieder Fehler auftretten sollen (hab ich gehört)

- Verwendung von Shift-Registern ---> bei mehreren Variablen wird das Blockdiagramm sehr schnell unübersichtilich, Fehleranfälliger da halt unübersichtlich

- Variablen in einer Textdatei deklarieren und diese dann am anfang aufrufen, dann z.b. in ein String, bzw. in ein Array of Strings reinschreiben und dann jeweils beim gebrauch aus dem sting auslesen --> recht aufwändig, da beim jeweiligen aufruf der Variable das Array bzw. der String erstmal durchsucht werden muss, usw.

- Erstellung eines SubVi mit dem man Variablen deklarieren kann, Variablen lesen und schreiben kann. --> ich glaub das das Verfahren noch am besten von allen wär.

Hat jemand ne andere Idee wie man sowas lösen könnte?
Was haltet ihr von den Lösungsansätzen?
' schrieb:Hat jemand ne andere Idee wie man sowas lösen könnte?
Gegenfrage: Was hälst Du von der Standardmethode
Blockbild--> rechte Maustaste auf Element -->Element verbergen?
' schrieb:Gegenfrage: Was hälst Du von der Standardmethode
Blockbild--> rechte Maustaste auf Element -->Element verbergen?
Dem kann ich nur zustimmen.

Und natürlich die Shift-Register-Variante, auch immer sehr beliebt. Und bei entsprechender Anwendung überhaupt nicht unübersichtlich.

Und deine letzte Variante ist auch sehr beliebt, läuft unter dem Schlagwort "FGV" für Funktionale Globale Variable. Auch hier verwendest du dann ein Shift-Register als Speicher.

MfG, Jens
' schrieb:- Variablen in einem Globale-Variablen-Vi speichern. --> erhöhter Speicherverbrauch, verlangsamung des Programms, Erhöhung der
Fehleranfälligkeit, da beim Aufruf der Globalen-Variablen hin und wieder Fehler auftretten sollen (hab ich gehört)

Hi,

alternativ zu Globalen Variablen kannst du "Functional Globals" einsetzen, dass ist ne prima Möglichkeit und außerdem sehr elegant! Das ist die letzte von dir vorgeschlagene Variante!

Zu den globalen Variablen an sich:
Ja, das Programm wird dadurch schon langsamer...aber alles ist relativ! Welche Fehler beim Aufruf auftreten sollen, die speziell Globale Variablen betreffen, kann ich nicht nachvollziehen. Ich hab die früher auch verwendet, als mir das Konzept "Functional Global" noch nicht bekannt war. Es ist aber bei lokalen und globalen Variablen so, dass du aufpassen musst, wann du wo schreibst und liest, und ob das alles in der richtigen Reihenfolge passiert (Stichwort: "race condition"). Das "Problem" bei diesen beiden Varianten ist nämlich, dass du das in LV vorherrschende Konzept der Datenfluss-orientierten Programmierung und Code-Abarbeitung gnadenlos aushebelst! Das kann unter Umständen zu SEHR unerwarteten Ergebnissen führen!

Gruß
Achim
' schrieb:Hallo LVG
Ich habe mich mit dem Thema beschäftigt wie man Variablen erzeugen und nutzen kann die nicht im Frontpanal auftauchen sollen.
D.h. wenn man z.B. eine while-schleife durch eine Variable steuert, welche aber im Forntpanal nicht auftauchen soll.
Es geht dabei weniger um eine einzelne Variable sondern wenn man halt einige Variablen in seinem Blockdiagramm verwenden möchte, diese sich aber störend auf das Frontpanalbild auswirken würden.
Die Möglichkeiten die mir dazu eingefallen sind, sind folgende:

- Frontpanalvariablen (-Elemente) erzeugen und durch den Eigenschaftsknoten "unsichtbar" diese verstecken. --> nicht schön, umständlich
Geht vom Blockdiagrammterminal recht flott und selber habe ich meist in der Initialisierung des VIs eine Property Node die das explizit tut. Ausserhalb des sichtbaren Bereichs auf ein Frontpanel plazieren will manchmal auch noch helfen.
Zitat:- Variablen in einem Globale-Variablen-Vi speichern. --> erhöhter Speicherverbrauch, verlangsamung des Programms, Erhöhung der
Fehleranfälligkeit, da beim Aufruf der Globalen-Variablen hin und wieder Fehler auftretten sollen (hab ich gehört)
Sicher die hässlichste Variante. Langsam ja gut, aber das ist in einem UI VI meist nicht das Problem. Das Langsamste darin ist eh der Benützer der im Besten Fall vielleicht zwei Mausklicks pro Sekunde hinkriegt Big Grin.
Was die Fehler betrifft sprichst Du wohl Raceconditions an. Fehler im Umgang mit Globalen in LabVIEW selber sind mir eigentlich unbekannt. Aber auch hier Raceconditions innerhalb eines UIs sind zwar möglich aber nicht unbedingt das meist vorkommende Problem.
Zitat:- Verwendung von Shift-Registern ---> bei mehreren Variablen wird das Blockdiagramm sehr schnell unübersichtilich, Fehleranfälliger da halt unübersichtlich
Zusammen mit Deiner letzten Variante meine Lieblingsmethode. Statt für jede Variable ein Shiftregister anzulegen kannst Du die auch einfach in einen Cluster zusammenführen, sofern das logisch zumindest Sinn macht. 200 Variablen in einen Cluster scheint mir aber auch wieder nicht sinnvoll, da das niemand mehr übersehen kann.
Zitat:- Variablen in einer Textdatei deklarieren und diese dann am anfang aufrufen, dann z.b. in ein String, bzw. in ein Array of Strings reinschreiben und dann jeweils beim gebrauch aus dem sting auslesen --> recht aufwändig, da beim jeweiligen aufruf der Variable das Array bzw. der String erstmal durchsucht werden muss, usw.
LAAAAAAAAAAAAAANGSAAAAAAAAAAM. Und wo bitteschön hältst Du diesen String dann? Kommt doch wieder eine der anderen Varianten zum Zug.
Zitat:- Erstellung eines SubVi mit dem man Variablen deklarieren kann, Variablen lesen und schreiben kann. --> ich glaub das das Verfahren noch am besten von allen wär.
Meine erste Wahl in fast allen Fällen. Ich nenne das Intelligente Globale Variable, da ich meist nicht nur ein Datenspeicher damit mache, sondern auch extra Funktionalität hineinpacke, etwa Initialisiering von einem INI File, zurückschreiben der Daten ins INI File, usw. Die init-Methode wird einmal am Beginn des Programms aufgerufen, und die save-Methode, wenn der Benützer in einer Konfiguration irgendwelche Einstellungen verändert hat.

Rolf Kalbermatter
Also ich denk solang es nicht all zu viele Variablen sind werd ich das Standart Verfahren (Blockdiagramm-->rechte Maustaste-->verstecken) verwenden, wenn es mehrere sind dann halt die Methode "Funktionale Globale Variable".

Gruß Gabi
' schrieb:Also ich denk solang es nicht all zu viele Variablen sind werd ich das Standart Verfahren
Oh bitte tu mir das doch nicht an, da ich Dir den "Standard" schon vorgeschrieben habe. "Standart" ist Gemüsestand, Käsestand, Wurststand.., Oder auch Handstand, Kopfstand. Aber davon reden wir doch hier eher nicht...
' schrieb:Oh bitte tu mir das doch nicht an, da ich Dir den "Standard" schon vorgeschrieben habe. "Standart" ist Gemüsestand, Käsestand, Wurststand.., Oder auch Handstand, Kopfstand. Aber davon reden wir doch hier eher nicht...

Und dann gab es da noch die Standarte, die scheinbar in gewissen Deutschen Gegenden als Standart abgekürzt wird Big Grin:-)
Rolf Kalbermatter
Referenz-URLs