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!
1. In einem Event-Case wird auf Knopfdruck eine Umgebungsvariable gesetzt (auf den Wert des Buttons). Nach dem Setzen wird eine Meldung gesendet.
2. Es wird auf eine Meldung gewartet. Sobald sie eintrifft, wird der Wert der Umgebungsvariable angezeigt.
Starte ich die VIs so zeigt mir das zweite VI grundsätzlich den falschen Wert an (also den Wert vor dem Buttonklick). Starte ich dagegen mit eingeschalteter Highlightfunktion, so funktioniert alles so wie es soll. Ich habe auch schon eine Wartezeit von einer Sekunde nach der "Auf Meldung warten"-Funktion eingebaut, dann läuft es korrekt.
Ist es also tatsächlich so, dass eine Umgebungsvariable soo langsam geschrieben wird, dass in der Zeit eine Meldung vertschickt und empfangen werden kann und was ich noch erstaunlicher finde, dass der Wert der Umgebungsvariable ausgelesen werden kann, obwohl ein andere Prozess grade den neuen Wert schreiben sollte???
LG
Torsten
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
"Race-Conditions"?! vermeiden/beheben
Hast Du 2 Netzwerkkarten in Deinem Rechner? Wenn ja, dann deaktiviere mal eine davon.
Wenn nein, dann schraub' die Wartezeit mal auf z.B. 50 ms zurück. Geht's dann auch noch?
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Aber mir wäre es lieber wenn man da keine pause machen müsste. also wer garantiert mir denn, dass 50 ms ausreichen und nciht irgendwie mal noch andere prozesse die cpu brauchen und sich die wartezeit erhöhen müsste?
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
"Race-Conditions"?! vermeiden/beheben
Kannst Du Dein Projekt (oder ein kleines Bsp.-Projekt, wo man sieht, was Du genau machst) hochladen?
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
' schrieb:1. In einem Event-Case wird auf Knopfdruck eine Umgebungsvariable gesetzt (auf den Wert des Buttons). Nach dem Setzen wird eine Meldung gesendet.
2. Es wird auf eine Meldung gewartet. Sobald sie eintrifft, wird der Wert der Umgebungsvariable angezeigt.
In diesem Falle würde ich in der Meldung den Wert des Buttons mit schicken.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
So, ich hab mal auf das wesentliche reduziert so dass der effekt erkennbar ist. Zuerst das Consumer.VI starten, dann das Main.vi.
Problem bei der vorhin vorgeschlagenen Lösung ist: ich möchte melden, wenn eine von vielen Variablen den wert ändert. in der anzeige sollen dann einfach alle variablen neu ausgelesen werden. mit dem vorschlag einfach den wert des buttons in die meldung zu integrieren komme ich daher nicht weiter, ich müsste dann ja noch zuordnen, welcher button aktualisiert wurde.
' schrieb:Problem bei der vorhin vorgeschlagenen Lösung ist: ich möchte melden, wenn eine von vielen Variablen den wert ändert. in der anzeige sollen dann einfach alle variablen neu ausgelesen werden. mit dem vorschlag einfach den wert des buttons in die meldung zu integrieren komme ich daher nicht weiter, ich müsste dann ja noch zuordnen, welcher button aktualisiert wurde.
Ich habe kein Problem damit, alle Buttons per Melder zu verschicken.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:also wer garantiert mir denn, dass 50 ms ausreichen und nciht irgendwie mal noch andere prozesse die cpu brauchen und sich die wartezeit erhöhen müsste?
Du verwendet hier für Status und Daten zwei verschiedene Wege. Beide Wege sind zu einander asynchron. Aber beide Wege haben eine Beziehung. Asynchron und Beziehung beißt sich: eine Beziehung muss immer synschon sein (asynchron => RaceCondition).
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).