LabVIEWForum.de - Problem mit Funktion "Werte prüfen und erzwingen"

LabVIEWForum.de

Normale Version: Problem mit Funktion "Werte prüfen und erzwingen"
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe ein Verständnisproblem mit der Funktion "Werte prüfen und erzwingen".

Ich berechne den Min- und Max-Wert von einem Sollwert (+0,2 und -0,2 vom Sollwert). Ich habe einschließlich Ober- und Untergrenze eingestellt.

Ich erwarte, dass wenn der Istwert + 0,2 oder - 0,2 vom Sollwert ist, dass die Funktion True ausgibt. Mit Ganzzahlen funktioniert das auch. Ich habe aber Kommazahlen und da gibt es folgendes Problem:

Test1:
Angenommen, der Sollwert ist 5,0. Wenn ich in das Istwertfeld 6 eingebe und Enter drücke und dann mit der Schaltfläche um 0,1 dekrementiere, erwarte ich das im Wertebereich 5,2 bis 4,8 die Funktion True ausgibt. Macht sie aber nicht. True wird von 5,1 bis 4,8 ausgegeben. 5,2 ist false und das verstehe ich nicht!

Test2:
Angenommen, der Sollwert ist 5,0. Wenn ich in das Istwertfeld 4 eingebe und Enter drücke und dann mit der Schaltfläche um 0,1 inkrementiere, erwarte ich das im Wertebereich 4,8 bis 5,2 die Funktion True ausgibt. Macht sie aber nicht. True wird von 4,9 bis 5,2 ausgegeben. Hier wird bei 4,8 false ausgegeben!

Wie gesagt, ich habe einschließlich Ober- und Untergrenze eingestellt.

Kann mir damit jemand helfen?

Danke vorab

Gruß

Volker
(25.01.2012 09:07 )Roter Milan schrieb: [ -> ]Hallo zusammen,

ich habe ein Verständnisproblem mit der Funktion "Werte prüfen und erzwingen".

Ich berechne den Min- und Max-Wert von einem Sollwert (+0,2 und -0,2 vom Sollwert). Ich habe einschließlich Ober- und Untergrenze eingestellt.

Ich erwarte, dass wenn der Istwert + 0,2 oder - 0,2 vom Sollwert ist, dass die Funktion True ausgibt. Mit Ganzzahlen funktioniert das auch. Ich habe aber Kommazahlen und da gibt es folgendes Problem:

Test1:
Angenommen, der Sollwert ist 5,0. Wenn ich in das Istwertfeld 6 eingebe und Enter drücke und dann mit der Schaltfläche um 0,1 dekrementiere, erwarte ich das im Wertebereich 5,2 bis 4,8 die Funktion True ausgibt. Macht sie aber nicht. True wird von 5,1 bis 4,8 ausgegeben. 5,2 ist false und das verstehe ich nicht!

Test2:
Angenommen, der Sollwert ist 5,0. Wenn ich in das Istwertfeld 4 eingebe und Enter drücke und dann mit der Schaltfläche um 0,1 inkrementiere, erwarte ich das im Wertebereich 4,8 bis 5,2 die Funktion True ausgibt. Macht sie aber nicht. True wird von 4,9 bis 5,2 ausgegeben. Hier wird bei 4,8 false ausgegeben!

Wie gesagt, ich habe einschließlich Ober- und Untergrenze eingestellt.

Kann mir damit jemand helfen?

Danke vorab

Gruß

Volker

Hallo Volker

Kann deine VI's leider nicht öffnen, da ich noch LabVIEW 2009 verwende, wage aber trotzdem ein Schuss ins blaueTongue

Wenn ich mich nicht täusche verwendest du einen DBL-Wert um die Kommazahl darzustellen. Das Problem mit DBL (oder allgemein Kommazahlen) ist, dass der Computer diese Werte nicht auf Gleichheit prüfen kann.
Dies weil es sich bei deinem 5.8 in Wirklichkeit als 5.80000000000000071 oder ähnliches abgelegt ist.

Deshalb wird es auch nicht empfohlen Float-Datentypen auf Gleichheit zu prüfen. In deinem Fall kannst du das Problem lösen. Indem du deine Zahl mal 10 hoch *gewünschte Nachkommastellengenauigkeit* rechnest und in einen Integer umwandelst. Dadurch sollte die Funktion wie gewünscht funktionieren(Tongue) Natürlich musst die die Grenzwerte auch demensprechend anpassenWink

Hoffe das hilft dir weiter!

Gruss Marc


Edit: Du kannst auch den erlaubten Wertebereich auf das nächstgrössere bzw. kleinere setzten und ohne Ober und Untergrenze auswählen. Dadurch sollte es auch funktionieren.
(25.01.2012 09:07 )Roter Milan schrieb: [ -> ]Test1:
Angenommen, der Sollwert ist 5,0. Wenn ich in das Istwertfeld 6 eingebe und Enter drücke und dann mit der Schaltfläche um 0,1 dekrementiere, erwarte ich das im Wertebereich 5,2 bis 4,8 die Funktion True ausgibt. Macht sie aber nicht. True wird von 5,1 bis 4,8 ausgegeben. 5,2 ist false und das verstehe ich nicht!
Bekanntes Problem, aber hier in der Praxis ohne Bedeutung. Die Gleitzahlen haben nur eine endliche Auflösung, und die Darstellung der Anzeige ist entsprechend dem gewählten Anzeigeformat gerundet.
Wenn ich bei dir 15 Kommastellen einstelle, dann sieht man es:

[attachment=38339]

Edit: Marc hat die Frage eher richtig beantwortet. Ich würde nur darin widersprechen, dass da irgendein Handlungbedarf besteht. Gut, die wirklichen Toleranzgrenzen liegen also nicht bei +- 0.2, sondern sind, sagen wir mal, um ein hundert Millionstel fehlerhaft. Sollte man wirklich dagegen etwas unternehmen, nur um der Anzeigenoptik Genüge zu tun?
Hallo zusammen,

das Problem ist, dass sich mein Istwert in Schritten von 0,1 ändert. Dann hat die ganze Sache schon eine Auswirkung, wie beschrieben. Ich werde die Lösungsvorschläge von Marc prüfen. Danke.

Gruß Volker
(25.01.2012 10:19 )Roter Milan schrieb: [ -> ]Hallo zusammen,

das Problem ist, dass sich mein Istwert in Schritten von 0,1 ändert. Dann hat die ganze Sache schon eine Auswirkung, wie beschrieben. Ich werde die Lösungsvorschläge von Marc prüfen. Danke.

Gruß Volker

Hier noch der Ausschnitt meines VIs...
Hallo Milan,

Dann stell bei den Vergleichswerten halt +/-0,25 statt +/-0,2 ein. Damit sollte es klappen.

MfG Carsten
Referenz-URLs