LabVIEWForum.de - Vermeiden von Globalenvariablen aber wie?

LabVIEWForum.de

Normale Version: Vermeiden von Globalenvariablen aber wie?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4 5
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]
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.
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?
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)
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!
' 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.
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
Vielen dank für deine Antwort!
Kann leider das VI nicht öffnen! Arbeite noch mit LV6.1!!
' 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]
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?
Seiten: 1 2 3 4 5
Referenz-URLs