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 

Abbruchbedingung wird nicht immer eingehalten



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!

18.03.2013, 10:46 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2013 10:49 von myth.)
Beitrag #1

myth Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Feb 2013

8.0
2012
DE


Deutschland
Abbruchbedingung wird nicht immer eingehalten
Hallo,

ich hab ein kleines Problem mit der Abbruchbedingung einer While-Schleife. In dem Programm wird eine Anfangsspannung, ein Inkrement und eine Endspannung eingegeben. Ziel ist es die Spannung langsam hochzuregeln und den Strom zu messen, bis die Endspannung erreicht ist.

Hier ein Beispiel:
Anfangsspannung: 0,00V
Inkrement: 0,20V
Endspannung: 2,00V

Hier zählt das Programm wie es soll bis 2,00V.

Anfangsspannung: 0,00V
Inkrement: 0,20V
Endspannung: 3,00V

Hier stopt das Programm seltsamerweise bereits bei 2,80V. Aber warum?

Wieso beachtet LV einmal die Abbruchbedingung und dann wiederum nicht?

Gruß myth


Angehängte Datei(en)
6.0 .vi  Spannung.vi (Größe: 53,52 KB / Downloads: 182)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.03.2013, 11:06
Beitrag #2

Clyde Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 71
Registriert seit: May 2012

2012
2009
EN


Sonstige
RE: Abbruchbedingung wird nicht immer eingehalten
Hi myth,

du vergleichst Gleitkommazahlen! 10 mal 0,2 inkrementiert ist für den Computer nicht unbedingt EXAKT 2,0, sondern vermutlich irgendeine Zahl in der Nähe (z.B. 1,99999999295127 oder auch 2,00000000001253 o.ä.).
Dementsprechend muss man bei solchen Vergleichen aufpassen, da genau diese wie von dir beobachteten Phänomene entstehen. Wenn du als Zielspannung 1,99 bzw. 2,99 eingibst, beendet dein Programm bei 2V bzw. 3V.


Gruß
Clyde
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.03.2013, 11:10
Beitrag #3

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Abbruchbedingung wird nicht immer eingehalten
Schon mal was von der "Ungenauigkeit" von Gleitkommazahlen gehört?

0,2 kann im Float oder Double Format nicht exakt dargestellt werden, weswegen es bei mehreren Additionen dann zu "Rundundsfehlern" kommt.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.03.2013, 13:24 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2013 14:15 von Lucki.)
Beitrag #4

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Abbruchbedingung wird nicht immer eingehalten
..und die Lösung wäre: Zur "Endspannung" vor dem Vergleich noch 0.001 addieren. Wenn Du dann als Anfansgspannung, Inkrement und Endspannung immer Werte mit nicht mehr als 2 Stellen nach dem Komma eingibst, können solche Zufälligkeiten überhaupt nicht mehr passieren.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.03.2013, 15:32
Beitrag #5

myth Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Feb 2013

8.0
2012
DE


Deutschland
RE: Abbruchbedingung wird nicht immer eingehalten
Alles klar, vielen Dank!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2013, 14:49
Beitrag #6

Kiesch Offline
LVF-Stammgast
***


Beiträge: 415
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Abbruchbedingung wird nicht immer eingehalten
Ich persönlich würds ja vermutlich einfach in mV darstellen und dann I32 benutzen ^^
Spart man sich den Stress mit den Gleitkommazahlen. Tongue

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
21.03.2013, 15:34 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2013 15:35 von Lucki.)
Beitrag #7

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Abbruchbedingung wird nicht immer eingehalten
Wichtig ist vor allem zu wissen, was man will.
Beispiel: Bereich 0..10, Schrittweite 3
Bereichsende ist 10, Schritte um diesen Wert herum sind 9 und 12.
Wenn, wie hier, das Bereichsende selbst kein Schrittwert ist, will man dann, dass der letzte Schritt innerhalb oder außerhalb des Bereiches liegt? Beides lässt sich machen (endweder vor oder nach dem Inkrementieren die Bedingung abfragen).
Und wie man am Beispiel sieht, wird man diese Entscheidung auch bei Verwendung von ganzen Zahlen nicht automatisch los. Der "Stress" des Entscheiden müssen bleibt also bestehen. Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2013, 16:50
Beitrag #8

Kiesch Offline
LVF-Stammgast
***


Beiträge: 415
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Abbruchbedingung wird nicht immer eingehalten
@Lucki

Oder will man stattdessen als letzten Wert immer 10V messen. ^^ (das entsprechende Bereichsende)

Entsprechend angepasst muss die Auswertung sein. Trotzdem dürfte das verwenden von Integers das etwas erleichtern (da man tatsächlich auf Gleichheit oder größer / kleiner prüfen kann).

Alternativ sollte man bei Real Zahlen entsprechend Gleichheit über Differenzbildung und Betragsbildung und dann Prüfung auf kleiner als ein Schwellwert, zum Beispiel wie weiter oben angemerkt 0,0001) durchführen. Das sollte in aller Regel die Rundungsfehler beim übertragen von "exakten" Zahlen von Dez nach Binär übersteigen.

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2013, 19:37 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2013 19:38 von Lucki.)
Beitrag #9

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Abbruchbedingung wird nicht immer eingehalten
(21.03.2013 16:50 )Kiesch schrieb:  Oder will man stattdessen als letzten Wert immer 10V messen. ^^ (das entsprechende Bereichsende)
Dann würde ich das so machen: Nicht Eingabe von:
Anfang, Ende, Schrittweite
sondern:
Anfang, Ende, Anzahl_Samples
Schrittweite wird berechnet, das können dann (bei ungeschickten Vorgaben) allerdings krumme Werte mit vielen Dezimalstellen nach dem Komma sein.
Die Rampenfunktion macht genau das, und die wäre meine erste Wahl. Erzeugt ein fertiges Array, statt While-Schliefe + Abbruchprüfung bei jedem Durchlauf braucht man nur noch eine For-Schleife mit Indexeingang - wenn überhaupt. Das ganze Gedöns wie die Schleife beenden wird hinfällig.
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
  Frontpanel wird beim beenden nicht immer geschlossen Winterkind 4 3.563 08.04.2020 08:30
Letzter Beitrag: Freddy
  Default Wert wird nicht gespeichert ares2013 8 6.771 27.02.2020 12:51
Letzter Beitrag: jg
  Messwertüberprüfung - mit Abbruchbedingung Marbec 10 7.326 26.11.2015 10:32
Letzter Beitrag: Marbec
  Abbruchbedingung while-Schleife führt zu Fehler toxicomanie 159 64.058 13.03.2015 11:20
Letzter Beitrag: toxicomanie
  Case wird wiederholt --> weiß nicht warum mexas450 9 6.643 12.12.2014 13:35
Letzter Beitrag: Lucki
  Histogramme werden nicht immer aktualisiert, obwohl Autoskalierung aktiv ist dali4u 3 3.792 27.11.2014 16:56
Letzter Beitrag: GerdW

Gehe zu: