LabVIEWForum.de
Vermeiden von Globalenvariablen aber wie? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Vermeiden von Globalenvariablen aber wie? (/Thread-Vermeiden-von-Globalenvariablen-aber-wie)

Seiten: 1 2 3 4 5


Vermeiden von Globalenvariablen aber wie? - Cardinal1664 - 12.01.2009 11:47

Hallo zusammen

Ich habe schon einige Therads zu dem Thema durchgelesen aber ich begreife nicht ganz wie man das machen kann!

Ich habe hier ein klienes Beispielprogramm:
Im Sub VI wird 5 Sekunden lang eine Random zahl generiert! Nun möchte ich während der Laufzeit des SUB'vis im haupt wie die Random Zahl anzeigen!
Wie ist dies möglich ohne verwendung von globalen Variablen?

[attachment=16090] LV6.1
[attachment=16091] LV6.1

[attachment=16092]
[attachment=16093]


Vermeiden von Globalenvariablen aber wie? - eg - 12.01.2009 12:06

Bist du sicher, dass du genau dieses Verhalten brauchst? Du kannst aus dem SubVI die While-Schleife entfernen und diese dafür im HauptVI verwenden. Aus dem SubVI kannst du z.B. ausser der Random Zahl noch einen Flag rausführen - Time Ellapsed oder nicht.
Wenn du also wirklich parallele Ausführung des SubVIs brauchst, dann kannst du die Daten z.B. über eine Queue austauschen.


Vermeiden von Globalenvariablen aber wie? - Cardinal1664 - 12.01.2009 12:16

Danke für deine schnelle Antwort!
Ist vieleicht ein etwas blödes Beispiel! Da sehe ich auch das ich die While schleife besser im Hauptvi platziere!

Aber wenn ich nun eine State machine im Sub VI habe und während der laufzeit der Statemachine Daten vom Sub VI im Haupt VI anzeigen möchte?
Wie ist dies ohne Globale Variablen möglcih?


Vermeiden von Globalenvariablen aber wie? - eg - 12.01.2009 12:20

Ok, dann schau dir mal meine Tasking Library an:
http://www.LabVIEWforum.de/Tasking-Library-t11433.html

Diese ist dazu gedacht um zwischen parallelen Schleifen zu kommunizieren. Ich habe da auch ein schönes einfaches Beispiel gemachtBig Grin
Ansonsten wie gesagt kannst du es mit Queues, Notifiers oder ggf. User Events machen.

Ups. sorry, habe gerade gemerkt, dass du LV 6.1 verwendest. Na dann, schau dir Beispiele im Example Finder zum Thema Queue an.

Gruß, eg

P.S. im einfachsten Fall kannst du es so machen (die untere Schleife kannst du komplett im SubVI verstecken)


Vermeiden von Globalenvariablen aber wie? - Cardinal1664 - 21.01.2009 08:46

Hey eq

Vielen dank für deine Antwort!
habe das mit den queues mal angeschaut und scheint für mein Programm zu Funktionieren! So kann ich wahrscheinlich meine Globalen Variablen alle ersetzen! Aber habe queues auch nachteile? Ist etwas speziell zu beachten bei der Verwendung von queques!

Wie ist es eigentlich wenn ich mehrere "Variablen" (Daten) mit queques z.B. vom einem Whileloop zum anderen Whileloop übertragen will? Kann man die irgendwie zu einem Cluster oder so zusammen fassen?

Habe garnicht gewusst das es sowas in LabVIEW gibt!!


Ist ein super Forum hier! Super Leute die sehr Hilfsbereit sind!


Vermeiden von Globalenvariablen aber wie? - abrissbirne - 21.01.2009 09:20

' schrieb:Hey eq

Vielen dank für deine Antwort!
habe das mit den queues mal angeschaut und scheint für mein Programm zu Funktionieren! So kann ich wahrscheinlich meine Globalen Variablen alle ersetzen! Aber habe queues auch nachteile? Ist etwas speziell zu beachten bei der Verwendung von queques!

Wie ist es eigentlich wenn ich mehrere "Variablen" (Daten) mit queques z.B. vom einem Whileloop zum anderen Whileloop übertragen will? Kann man die irgendwie zu einem Cluster oder so zusammen fassen?

Habe garnicht gewusst das es sowas in LabVIEW gibt!!
Ist ein super Forum hier! Super Leute die sehr Hilfsbereit sind!

Eine weitere Möglichkeit wären Funktionsglobale-Variablen.


Vermeiden von Globalenvariablen aber wie? - Lucki - 21.01.2009 09:30

Ich habe keine generellen Bedenken gegen die Verwendung lokaler Veriablen, aber allgemein gilt eben: Das Bessere ist der Feind des Guten. Und hier heißt das: Bei Datenaustausch zwischen 2 parallel laufenden VIs sind Melder oder Queues die bessere Alternative gegenüber globalen Variablen.
Der Hauptgrund ist: Der Meldempfänger (Datenverbraucher) wartet, bis im anderen VI neue Daten erzeugt werden. Damit synchronisieren sich die Erzeuger- und Verbraucherschleife ganz von allein. (Was allerdings einen LV-Anfänger nicht unbedingt daran hindert, in die Verbraucher-Schleife ein überflüssiges Wait einzubauen).
Bei Verwendung globaler Variablen hat man hingegen Synchronisationsprobleme. Man weiß beim wiederholten Lesen nicht, ob es schon ein neuer Wert ist oder noch der alte.
Schau Dir mal dieses VI an


Vermeiden von Globalenvariablen aber wie? - Cardinal1664 - 21.01.2009 09:45

Vielen dank für deine Antwort!
Kann leider das VI nicht öffnen! Arbeite noch mit LV6.1!!


Vermeiden von Globalenvariablen aber wie? - Lucki - 21.01.2009 10:07

' schrieb:Vielen dank für deine Antwort!
Kann leider das VI nicht öffnen! Arbeite noch mit LV6.1!!
Die VIs sind simpel und schnell nachgezeichnet. Die Frage ist nur, ob es in LV6.1 Melder und Queues schon gibt..
Haupt-VI (Daten-Erzeuger):[attachment=16224]
Sub-VI (Daten-Verbraucher):[attachment=16225]


Vermeiden von Globalenvariablen aber wie? - Cardinal1664 - 21.01.2009 10:17

Vielen dank! Werde mir das mal anschauen! Gibt es alles in LabVIEW 6.1?
Was ist eigentlich der unteschied von notifier zu queues? Und wann braucht man welches?