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 

Lokale Variablen und Enums



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!

06.02.2010, 10:11
Beitrag #1

mstler81 Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Feb 2010

7.1
-
de

23456
Deutschland
Lokale Variablen und Enums
Hallo,

ich habe eine LabVIEW Programm, bei dem 2 While Schleifen parallel laufen.

In der 1. Schleife befinden sich nur die lokalen Variablen, Enums und boolschen Variablen. als Anzeige oder Bedienobjekt. Die While Schleife ist als Endlos-Schleife geschaltet.

In der 2. Schleife, ebenfalls eine Endlosschleife, rufe ich verschiedene VI auf und führe Sie aus.

Ich habe mir vorgestellt, dass die 1. Schleife ausschließlich zur Aktualisierung der lokalen Variablen dient. Doch leider musste ich feststellen, das nach einer Aktualisierung in eines Anzeigeelementes in der 1. Schleife, die 2. Schleife unmittelbar nach der Aktualisierung den alten Wert noch drin hat.

Kann mir jemand erklären, warum die lokale Variable nicht aktualisert wird bzw. was kann ich machen um die Aktualisierung zu erreichen.

Vielen Dank
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
06.02.2010, 10:15
Beitrag #2

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

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Lokale Variablen und Enums
Wenn Du eine lokale Variable in der ersten Schleife aktualisierst muss die zweite Schleife zuerst fertig laufen. Beim nächsten Durchgang der zweiten Schleife ist dann der Wert der ersten Schleife drin.
Was hast Du denn vor, dass es so genau sein muss?
Vielleicht helfen Dir Queues, Notifier, Semaphoren, Rendezvous,..... Unsure

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
06.02.2010, 10:43
Beitrag #3

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Lokale Variablen und Enums
' schrieb:In der 1. Schleife befinden sich nur die lokalen Variablen, Enums und boolschen Variablen. als Anzeige oder Bedienobjekt. Die While Schleife ist als Endlos-Schleife geschaltet.
Zitat:Ich habe mir vorgestellt, dass die 1. Schleife ausschließlich zur Aktualisierung der lokalen Variablen dient.
"Lokale Variablen" sind weder Anzeige- noch Bedienelemente. Lokale Variablen sind "mangelhafte Elemente, um den Datenfluß zu stören". Will sagen: aktualisiert wird nicht die lokale Variable, sondern das Anzeigeelement am Bildschirm (FP). Mit einer lokalen Variablen kann man Daten austauschen zwischen parallel laufenden While-Schleifen. Lokale Variablen sind also lediglich das Mittel zum Zweck des Datenaustausches. Allerdings hat dieses Verfahren einen Nachteil: RaceConditions (= "mangelhafte Elemente ...") !

Wenn man zwei parallele While-Schleifen verwendet mit der selben Variablen (Variable = Bedien/Anzeigeelement + Lokale Variable), dann sollte man in der einen Schleife tatsächlich nur lesend auf die Variable zugreifen. In der anderen Schleife kann man lesend und schreibend darauf zugreifen.

Je nach dem, wie der Code in jeder deiner While-Schleifen aussieht, kommt es eben zu dem von dir erwähnten Ungereimtheiten: RaceConditions.

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
06.02.2010, 10:54
Beitrag #4

mstler81 Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Feb 2010

7.1
-
de

23456
Deutschland
Lokale Variablen und Enums
Hallo,

ich wollte mit der 1. Schleife die Anzeige- und Bedienelemente steuern bzw. veränderbar machen. In der 2. Schleife sollten die Werte dann übernommen werden.

In der 2. Schleifen habe ich noch eine Eventsteuerung drin. Das heißt, ich drücke immer erst einen Button damit sich in der 2. Schleife ein aufgewähltes VI öffnet und angewendet wird. Die 2. Schleife hält an, und wartet auf eine Aktion von mir. Ich dachte mir, während der Wartezeit werden die Aktualisierungen übernommen und dann auch angewendet. Doch leider passiert, dass schon von mir beschriebene.

Kann ich dieses Problem irgendwie leichter handhaben.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.02.2010, 11:07
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Lokale Variablen und Enums
Hi mstler81,

klingt nach einer klassischen RaceCondition:
Du liest die localen Variablen, dann wird auf ein Event gewartet - und dann wunderst du dich, dass keine neuen Werte gelesen werden...

Also:
-(Beispiel-)VIs hier mal anhängen
-lernen, was RaceConditions sind und wie man sie vermeidet
-auf locale Variablen verzichten und verlässlichere Strukturen verwenden (zu den schon genannten würde ich noch die FGV aka AE aka LV2style-Global hinzufügen!)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.02.2010, 13:42
Beitrag #6

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Lokale Variablen und Enums
' schrieb:Ich dachte mir, während der Wartezeit werden die Aktualisierungen übernommen und dann auch angewendet. Doch leider passiert, dass schon von mir beschriebene.
Ich denke, du meinst folgendes:
Es öffnet sich z.B. in der 2. While-Schleife ein SubVI, in dem Werte angezeigt werden sollen, die in der 1. While-Schleife vom Programmbediener eingegeben werden. Nur alleine, weil ein FP (Frontpanel vom SubVI) angezeigt wird, heißt das noch nicht, dass die Werte auf diesem FP refresht werden, wenn der Anwender in While-Schleife Eins was ändert.

LabVIEW arbeitet nach den Prinzip des Datenflusses. Macht der Anwender eine Eingabe in While-Schleife Eins, so kommt der Wert nur dann in das SubVI, wenn da ein Datenfluss besteht! Ein Datenfluss ist, wenn du eine Leitung siehst (von Queues, Melder etc. sehe ich vorerst mal ab). Da die beiden While-Schleifen getrennt sind, gibt es da keinen Datenfluss => Kein Anzeigenrefresh. So einfach ist das.

Ich glaube, du musst dir das Prinzip des Datenflusses mal verinnerlichen.

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
06.02.2010, 14:46
Beitrag #7

mstler81 Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Feb 2010

7.1
-
de

23456
Deutschland
Lokale Variablen und Enums
Ich habe hier mal kurz versucht die Thematik per LabVIEW darzustellen. Wenn ich in der 2. Schleife den Wert im Bedienfeld ändere ändert er sich erst nach einem Durchlauf der 1. Schleife. Die gleiche Prozedur bei einer Veränderung des Enums.


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

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Lokale Variablen und Enums
' schrieb:Wenn ich in der 2. Schleife den Wert im Bedienfeld ändere ändert er sich erst nach einem Durchlauf der 1. Schleife. Die gleiche Prozedur bei einer Veränderung des Enums.
Genau so ist das.

In der unteren Schleife kannst du den DBL oder den ENUM ändern. Nur alleine das Ändern dieser Werte bewirkt noch nicht, dass in der oberen Schleife der geänderte Wert angezeigt wird. Die obere Schleife arbeitet nämlich erst dann, wenn du den OK-Button drückst. So ist es ja auch programmiert: Erst wenn dieser Button gedrückt wird, wird der Event-Case ausgeführt und ENUM und DBL werden bearbeitet.

Wenn du haben willst, dass alleine eine Änderung von ENUM und DBL oben eine Aktion auslösen sollen, dann musst du von ENUM und DBL das Property "Wert(signalisierend)" verwenden. Dieses Property löst nämlich in einer Event-Struktur (wenn so programmiert) einen Event aus - und dann kann ENUM und DBL ober verwendet werden, wenn es unten geändert wird.

Ich sag jetzt einfach mal so:
Dein Problem scheint im Verständnis zu liegen, wie Datenfluß respektive dein Programmablauf funktioniert. Dieses - grundlegende - Verständnis fehlt dir noch. Dumm ist nur, dass dieses Verständnis per Postings in einem Forum nicht vermittelbar ist. So grundlegende Fragen sind nur face-to-face vermittelbar (dafür gibt es Kurse bei NI). Oder per Selbststudium mit einem Tutorial.

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
06.02.2010, 17:35
Beitrag #9

mstler81 Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Feb 2010

7.1
-
de

23456
Deutschland
Lokale Variablen und Enums
Wenn ich unten die numerische Variable oder den Enum änder, und anschließend auf den Button drücke, wird im ersten Durchlauf der oberen Schleife die Wert anfangs nicht übernommen. Erst wenn ich ein zweites mal auf den Button drücke und die 1. Schleife durchlaufen wird, werden auch die Werte übernehmen.

Mich interessiert genau diese Verhalten. Warum übernimmt er die Werte erst im 2. Durchlauf der 1. Schleifen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.02.2010, 17:49
Beitrag #10

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Lokale Variablen und Enums
' schrieb:Wenn ich unten die numerische Variable oder den Enum änder, und anschließend auf den Button drücke, wird im ersten Durchlauf der oberen Schleife die Wert anfangs nicht übernommen. Erst wenn ich ein zweites mal auf den Button drücke und die 1. Schleife durchlaufen wird, werden auch die Werte übernehmen.
Mich interessiert genau diese Verhalten. Warum übernimmt er die Werte erst im 2. Durchlauf der 1. Schleifen?
Ich kann nicht nachvollziehen, dass die Werte erst beim zweiten Mal Drücken übernommen werden.

Kannst du mal ein funktionierendes VI posten, bei dem dieser Effekt auftritt?

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
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Lokale Variablen eliminieren / Signale Zusammenfassen Philipp841 8 5.197 30.09.2019 09:51
Letzter Beitrag: Philipp841
  Wie kann man Lokale Variablen sauber verpacken? Tobzn 10 7.747 04.03.2018 12:02
Letzter Beitrag: IchSelbst
  Lokale Variable galilio 5 4.812 09.02.2017 22:20
Letzter Beitrag: Trinitatis
  Schleifenkommunikation: Melder und Benutzer-Ereignisse oder lokale Variablen lumaxo 7 6.437 19.03.2015 17:49
Letzter Beitrag: lumaxo
Question Lokale Variablen wie in textbasierten Sprachen nutzen RobBoss 5 5.316 28.05.2014 11:59
Letzter Beitrag: Kiesch
  Lokale Variable in while-Schleife auslesen Io1610 6 7.275 26.05.2014 15:57
Letzter Beitrag: Io1610

Gehe zu: