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 

Vermeiden von Globalenvariablen aber wie?



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!

21.01.2009, 10:26
Beitrag #11

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Vermeiden von Globalenvariablen aber wie?
' schrieb: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?

eine queue ist eine Warteschlange, das kann man sich vorstellen wie eine Drucker-Warteschlange, man schickt viele Druck-Jobs ab und die werden nach und nach abgearbeitet, die Queue speichert alle Elemente die man einfügt und gibt bei jedem Auslesen das älteste Element zurück

ein Notifier ist eigentlich das gleiche wie eine Queue, allerdings ohne die Warteschlange, d.h. er kann immer nur EIN Element transportieren. Wenn man ein neues Element einfügt bevor das alte ausgelesen wurde, wird das ältere Element überschrieben

Und zum Thema:
ich hab auch kein Problem damit Globale Variablen und lokale Variablen zu verwenden. Der schlechte Ruf dieser Elemente kommt unter anderem daher, dass der massive Einsatz von lokalen und globalen Variablen dazu führt dass man Spaghetti-Code bekommt, denn kein Schwein mehr lesen kann ...

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
21.01.2009, 10:28
Beitrag #12

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

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Vermeiden von Globalenvariablen aber wie?
Schau' auch mal hier.
Noch was: Mit LabVIEW 6.1 wird die Luft immer dünner. Schon jetzt gibt es nur noch wenige User mit LabVIEW 7, die Dir auf Deine Version zurückspeichern können. Ich würde Dir raten, mal aufzurüsten. Im Sommer kommt ja (wohl) LabVIEW 9 raus.

Gruß Markus

' schrieb: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?

--------------------------------------------------------------------------
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
21.01.2009, 10:33 (Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2009 10:38 von Cardinal1664.)
Beitrag #13

Cardinal1664 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 147
Registriert seit: Aug 2006

2014 SP1
2006
EN


Schweiz
Vermeiden von Globalenvariablen aber wie?
Ich hätte mir schon längst LabVIEW 8.6 besorgt! Aber in meinem Betrieb ist es im moment wohl nicht gerade ideal für neuanschaffunfenAngry!
Danke für den Link!

PS: habe dies aus der LabVIEW Help zum Thema Globale variablen:
"Use local and global variables only when necessary. Overuse can cause slower execution, inefficient memory usage, or race conditions. "
Wie sieht dies eigentlich bei queues aus mit slower execution, inefficient memory usage?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.01.2009, 10:48 (Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2009 10:49 von Lucki.)
Beitrag #14

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Vermeiden von Globalenvariablen aber wie?
' schrieb:Gibt es alles in LabVIEW 6.1?
Weiß ich jetzt auch nicht, aber auf jeden Fall kann man (mit etwas umständlcierer Programmierung) einen Melder auch durch ein VI (funktionale gloabel Variable) ersetzen. In dem VI muß außer dem Wert noch eine boolsche Variable enthalten sein, damit lassen sich dann bei entprechender Abfrage Sender- und Empfänger-VI synchronisieren:
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.01.2009, 11:16 (Dieser Beitrag wurde zuletzt bearbeitet: 03.02.2010 15:00 von Cardinal1664.)
Beitrag #15

Cardinal1664 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 147
Registriert seit: Aug 2006

2014 SP1
2006
EN


Schweiz
Vermeiden von Globalenvariablen aber wie?
So ich versuch mal mein Programm zu beschreiebn!

Um was gehts
Ich habe eine Programmierbox wo ich 8 Mikrokontroller Systeme drauf stecken kann!
Das ziel meines Programmes ist es auf die 8 Mikrokontroller parallel die Software (Applikation) zu flashen!

Das LabVIEW programm
Haupt VI
Im HauptVI kann die Softwere die auf alle 8 MCUs Programmiert werden soll ausgewählt werden!
Es sollen diverse Sachen wie MSK Programmiert den Status (Wo ist mein Programm gerade z.B. MCU wird gelöscht) angezeigt werden!

SUBVI (Statmachine):
Das VI Statemachine wird dann später einmal 8mal Parallel ausgeführt um die 8 MCUs gleichzeitig zu programmieren!
Ich habe diverse States (Cases) z.B. Programmieren,CRC Check usw.! In diesen Cases will ich immer den Status (z.B. CRC Check OK!) im hauptVI anzeigen!

Am anfang habe ich dies mit Globalen Variablen gelöst!
Ich habe nun die Globale Variable "MSK Status" mit einem queue ersetzt!

Ist dies so richtig wie ich die queue verwende oder gibt es da noch eine andere möglich keit?

Ich hoffe ihr versteht was ich meine!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.01.2009, 11:28
Beitrag #16

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Vermeiden von Globalenvariablen aber wie?
Im Prinzip würde ich es mit Queues machen, also weiter so, du kriegst es shon hin.
Anderer Vorschlag zu deinen unübersichtlichen VIs. Du kannst alle deine Schieberegister im SubVI zu einem Schieberegister zusammenfügen. Mache dir einen Cluster aus allen nötigen Elementen und lass diesen Cluster im Schieberegister laufen. Mit Bundle/Unbundle by Name kannst du auf die Elemente innerhalb deiner Cases zugreifen.
Und zuletzt: versuche Mal all deine globale Variablen mit Queues ersetzen. Ich meine du brauchst ja im Prinzip nur eine Queue pro Schleife. Diese Queue machst du von einem unbestimmten Datentyp (String oder Variant) und kannst beliebige Daten (vorher in String oder Variant umwandeln) in die Queue schreiben und genauso beim Empfänger in den entsprechenden Datentyp zurückwandeln.

Gruß, eg

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
21.01.2009, 11:55
Beitrag #17

Cardinal1664 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 147
Registriert seit: Aug 2006

2014 SP1
2006
EN


Schweiz
Vermeiden von Globalenvariablen aber wie?
Vielen dank für deine schnelle antwort!!

Wie soll das gehen nur ein queue pro schleife? Du meinst in der Statemachine nur ein queue wo ich alle "Variablen" reinschreibe?
Wie weiss dann der Empfänger (sind ja mehrere empfänger) Welche Daten für ihn sind und welchenicht?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.01.2009, 12:00 (Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2009 12:34 von eg.)
Beitrag #18

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Vermeiden von Globalenvariablen aber wie?
Screibe noch vor den eigentlichen Daten einen Header rein. Zum Beispiel willst du einen Cluster mit Namen und Alter abschicken. Nennen wir es "User Data" und anderes Mal nur einen boolschen Wert, nennen wir es "Online". Dann machst du dir einen Cluster aus:

Datentypbezeichnung
Daten selbst

Im ersten Fall wäre es dann:

User Data
Eugen
29

Im zweiten:

Online
TRUE

Der Empfänger schaut zuerst auf die Datentypbezeichnung und abhängig davon kann er die Daten in den richtigen Datentyp wandeln.

Gruß, eg

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.01.2009, 12:04
Beitrag #19

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Vermeiden von Globalenvariablen aber wie?
' schrieb:Vielen dank für deine schnelle antwort!!

Wie soll das gehen nur ein queue pro schleife? Du meinst in der Statemachine nur ein queue wo ich alle "Variablen" reinschreibe?
Wie weiss dann der Empfänger (sind ja mehrere empfänger) Welche Daten für ihn sind und welchenicht?

Und ja, jeder Empfänger hat ja nur eine Queue. Der Absender wählt einfach die passende Queuereferenz (die zum richtigen Empfänger gehört) aus und schickt die Daten in diese Queue ab. Der Empfänger wartet ja nur auf die Daten nur von einer Queue, nähmlich seine Queue. Warum muss er noch wissen ob die Daten für ihn sind? Das sind sie ja, sonst würde er diese Daten nicht bekommen.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.01.2009, 12:15 (Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2009 12:56 von eg.)
Beitrag #20

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Vermeiden von Globalenvariablen aber wie?
1) Cluster mit allen Queue-Referenzen (so viele wie es parallele Schleifen gibt)
2) Daten in String umwandeln ("temp" ist die Datentypbezeichnung, "eur" ist der Empfänger)
3) Daten aus dem String umwandeln ("aq2 data" ist die Datentypbezeichnung)
4) alle parallelen Schleifen

Den Cluster mit allen Queuereferenzen (siehe Punkt 1) bekommen ALLE parallele Schleifen (Tasks) und können damit jeder-zu-jedem Daten austauschen.

Im zweiten Bild also eine parallele Task. Sie bekommt den Befehl (oder auch Datentypbezeichnung) "temp" setzt die Temperatur und sendet eine Antwort (OK oder nicht OK) an die Main-Task zurück. Das nennt man dann schon Handshake.

Und ja, damit ihr es glaubt, dass das ganze Funktioniert, noch ein Bild der OberflächeBig Grin


Angehängte Datei(en) Thumbnail(s)
           

Webseite des Benutzers besuchen 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
  EOF Fehler vermeiden chrissy 6 5.752 13.12.2016 08:26
Letzter Beitrag: chrissy
  Polling von Curser-Position in Waveform Graph vermeiden UFPhC 11 8.918 16.10.2014 12:00
Letzter Beitrag: Trinitatis
  Wie sehr großen Cluster vermeiden? Matze 10 9.411 31.10.2013 17:21
Letzter Beitrag: macmarvin
  val(sgnl) vermeiden Puma 7 7.063 05.08.2011 08:18
Letzter Beitrag: Kiesch
  Wert von numer. Bedienelement kontinuierlich erhöhen (Sprung vermeiden) lemmo 3 5.870 28.04.2011 18:14
Letzter Beitrag: Lucki
  Express-VIS - Warum sollte man sie vermeiden? Matze 8 8.237 28.04.2010 12:00
Letzter Beitrag: Matze

Gehe zu: