LabVIEWForum.de - Wert wird nicht übernommen

LabVIEWForum.de

Normale Version: Wert wird nicht übernommen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Servus zusammen,

ich habe in meinem VI ein "numeric control", gebe ich hier eine Zahl ein und betätige ein "Button" "Werte übernehmen" wird dieser Wert nicht übernommen erst wenn ich aus dem Zahlenfeld klicke wird der Wert bei betätigen des "Button" richtig übernommen.

Kann ich z.B. in einer Event Struktur "Timeout" den "numeric control" dazu zwingen dennoch den richtigen Wert zu liefen ohne, dass ich extra aus dem Feld klicken muss?

besten Dank schon mal

gruß ruben
Hallo rabber,

das hört sich nach einer Race Condition an.

Zeig doch mal deinen Code (vorzugsweise LV2011) und überprüfe den DATAFLOW!

Zitat:betätige ein "Button" "Werte übernehmen" wird dieser Wert nicht übernommen erst wenn ich aus dem Zahlenfeld klicke wird der Wert bei betätigen des "Button" richtig übernommen.
Wie kannst du einen Button betätigen, ohne dabei nicht "aus dem Zahlenfeld zu klicken"? (Oder benutzt du Tastatursteuerung?)
hi,
hab nur mal ganz schnell ein einfaches Beispiel nachgebaut....

Problematik:
- VI starten
- Wert in Numeric eingeben (mit Tastatur ohne anschließend aus dem Feld zu klicken=
- Button "wert übernehmen" betätigen

- Wert bei Numeric 2 ändert sich nicht!

besten dank für die Hilfen Wink

Gruß Ruben
Hallo rabber,

bei mir funktioniert es. Ich tippe einen Wert bei Numeric ein und mit einem Mausklick auf den Button wird der Wert nach Numeric2 übernommen…

Tipps:
- Es gibt da diese "ValueChange"-Events…
- Lokale Variablen führen zu RaceConditions…
Bei mir zickt dein VI zwar auch rum, aber bei Verwendung von:
(09.07.2014 15:35 )GerdW schrieb: [ -> ]- Es gibt da diese "ValueChange"-Events…
(sowieso das besser Event!!!) geht es wie gewünscht.

Gruß, Jens
..und außerdem läßt sich das VI nicht stoppen. So ists richtig:
[attachment=50232]
ich verstehe das nicht das kann doch nicht sein, dass das Problem nur bei mir (und meinen Kollegen besteht) verändert sich das VI wenn ich es hochlade Wink ?

ok spaß bei Seite....

nochmals:
Wert über Tastatur eingeben (ohne raus zu klicken und auch keine "Entertaste" betätigen), dann wie gesagt Button "wert übernehmen" drücken (nach 2 mal Betätigen des Buttons wird der Wert übernommen da mit dem ersten klicken zusätzlich aus dem Feld geklickt wird!) siehe auch Anhang....


Zum besseren Verstehen meiner Problematik warum ich hier so ein "Theater" veranstalte: Ich habe bei mir ein Numeric Feld indem ich die Schrittweite von 3 Motoren definieren kann nun folgendes Szenario:
-ein Wert von 20 ist im Numeric Feld aktiv
-Motor bzw Verfahrobjekt ist kurz vor der Kollision
-daher gibt der "user" einen Wert von 1 ein
-betätigt anschließen die Verfahrtaste (nach oben beschriebenen Szenario)
-Kollion da der Motor noch den Wert von 20 bekommt


"ValueChange"-Events kenne ich das bringt aber hier nichts! da wenn ich den Wert eingebe und nicht aus dem Feld klicke hat sich ja der Wert für LabView noch gar nicht geändert!

Da sollte es doch irgendein PopertyNode geben mit dem Befehl "Wert auslesen" der den Wert den ich im Feld eingegeben habe dann aktiviert auch wenn ich wie gesagt kein "Enter" betätigt oder aus dem Feld geklickt habe....


Ps.: Das mit dem VI lässt sich nicht stoppen hab ich auf die Schnell nicht richtig beachtet ist aber klar dennoch danke für den Hinweiß
Hallo rabber,

Zitat:nochmals:
Wert über Tastatur eingeben (ohne raus zu klicken und auch keine "Entertaste" betätigen), dann wie gesagt Button "wert übernehmen" drücken (nach 2 mal Betätigen des Buttons wird der Wert übernommen da mit dem ersten klicken zusätzlich aus dem Feld geklickt wird!) siehe auch Anhang....
Auf einem zweiten Rechner kann ich das Verhalten bestätigen. Muss was mit dem OS/Anzahl der CPU-Cores/Wetterlage zu tun haben…

Erläuterung:
Du hast hier eine klassische RACE-CONDITION!
- Du tippst einen Wert ein, der aber noch nicht als neuer Wert übernommen wird.
- Du klickst auf einen Button, um ein Event auszulösen.
- Im Event wird eine lokale Variable gelesen (das sind die Konstrukte, die sehr "Race-Condition"-anfällig sind!).
Was geht nun schneller: das Auslesen der lokalen Variable (mit dem noch nicht aktualisierten Wert) oder das Aktualisieren des Wertes aufgrund deines Mausklicks?

In den meisten Fällen scheint das Auslesen der Variable zu gewinnen - aber halt nicht immer.

Lösung:
Du musst dir eine Race-Condition-sichere Lösung einfallen lassen. Das einfachste wäre ein ValueChange-Event und der User muss die Enter-Taste drücken. Geht eh schneller als die Hand wieder von der Tastatur zur Maus zu bewegen…
Hab das "Test VI" gerade mal schnell umgebaut und anstatt der lokalen Variable den Indikator selbst angeschlossen da besteht das gleiche Problem

Das mit dem dass der User die Entertaste drücken muss ist natürlich eine Option wobei die nicht gerne gesehen wird, was ist wenn der User vergisst die Enter Taste zu betätigen ich kann das ja nicht abfangen oder gibt es da eine Möglichkeit?


So etwas über einen Property Node zu losen, dass der Wert immer ausgelesen wird (in der Event Struktur "Timeout") ist nicht möglich?


besten dank für deine/eure Bemühungen Wink
Hallo rabber,

auch bei der "Lösung" mit dem Lesen aus dem Terminal bleibt die Race Condition bestehen!

Es wird immer noch der zuletzt eingestellte Wert gelesen, da der neu eingegebene Wert noch nicht übernommen wurde!

Weitere Option:
Bei einem String-Control kann man einstellen, dass die Werte direkt beim Eintippen übernommen werden. Dies könntest du hier für deine Zwecke nutzen - mit dem dann nötigen Overhead, selbst für korrekte Zahleneingabe (per Zeichenfilterung) zu sorgen.

Zitat:So etwas über einen Property Node zu losen, dass der Wert immer ausgelesen wird (in der Event Struktur "Timeout") ist nicht möglich?
Du kannst natürlich immer im TimeOut auslesen. Warum dann eine PropertyNode? Warum nicht direkt das Terminal?
Seiten: 1 2
Referenz-URLs