Hallo, ich habe schon wieder eine kleine Frage:
Ich möchte meine Daten in eine .tdms-Datei schreiben. Zusätzlich zu den Daten brauche ich aber noch den Zeitverlauf. Das angehängte VI zeigt meine bisherige Vorgehensweise. Nun habe ich ein Problem festgestellt:
Angenommen ich möchte in diesem VI die Zeit in 0,001s Schritten hochzählen. Also habe ich Warten auf Vielfaches von ms auf 1 gesetzt. Prinzipiell funktioniert das auch, das Problem ist allerdings, dass in der 7./8. Nachkommastelle eine von Null verschiedene Ziffer auftaucht, die ebenfalls langsam nach oben zählt (ohne erkennbares Muster). Dieser Fehler wird über die Laufzeit immer größer und kommt irgendwann in den Bereich, der mich eigentlich interessiert.
Daher die Frage, was man dagegen tun kann?
Danke!
Aufschaukeln tut sich das aber nicht, da du immer den aktuellen Zeitstempel gegenüber einem festen Offset berechnest. Es wird höchstens schwanken.
Das die Double-Zahl aber nicht genau dargestellt wird, ist normal. Schon mal was von der beschränkten Genauigkeit einer
Gleitkommazahl gehört?
Du könntest aber auch den Zeitstempel direkt speichern...
Gruß, Jens
Ja, dass mit der Darstellung von Gleitkommazahlen war mir bekannt. Da es in den Daten allerdings so aussah, als ob sich das summiert/aufschaukelt, wollte ich mal nachfragen.
Wenn ich den Zeitstempel direkt abspeichere bekomme ich aber die blöde Darstellung mit Datum. Ich will ja nur die Messzeit in Sekunden.
OK, verstehe das mit der Messzeit. Da musst du mit den Ungenauigkeiten der Gleitkommazahl leben.
Schau dir die Ergebnisse nochmal genau an, IMHO darf sich da nichts aufsummieren, allerhöchstens unregelmäßig schwanken.
Gruß, Jens
Hallo zig,
Zitat:Also habe ich Warten auf Vielfaches von ms auf 1 gesetzt. Prinzipiell funktioniert das auch, das Problem ist allerdings, dass in der 7./8. Nachkommastelle eine von Null verschiedene Ziffer auftaucht, die ebenfalls langsam nach oben zählt
Wenn du eine Schleife programmierst mit einem Timing von 1ms und dein Code in dieser Schleife braucht länger (wie es bei Dateioperationen durchaus üblich ist), dann könnte es passieren, dass du mal die eine oder andere Millisekunde überspringst… Die Differenz deiner beiden Timestamps wird sich deshalb wohl nicht gleichmäßig in 1ms-Schritten erhöhen. Dazu kommt dann noch die schon angesprochene begrenzte Genauigkeit von Floatzahlen.
Mögliche Lösung (für das erste Problem): Producer-Consumer-Schema verwenden!
Danke!
Ich habe die Wartezeit erhöht. Zur Visualisierung habe ich von der, in die Datei geschrieben, Zeit die "Sollzeit" (z.B. 0,005; 0,01; 0,015; etc.) abgezogen. Die Abweichung zeichnet ein sich wiederholendes Sägezahlmuster. Es kann sein, dass bei den Zeitschritten von 0,001 zu wenige Daten vorlagen und ich daher nur eine aufsteigende Flanke gesehen habe. Allerdings ist es tatsächlich so, dass einzelne Werte zu fehlen scheinen... also werde ich mal mit der Producer-Consumer-Methodik beschäftigen....
Allerdings frage ich mich dann, wie das Express-VI "Werte schreiben", das mit den dynamischen Daten hinbekommt? Liegt das daran, dass es die Samplerate für die Zeitachse zu Grunde legt?
Hallo zig,
Zitat:Allerdings frage ich mich dann, wie das Express-VI "Werte schreiben", das mit den dynamischen Daten hinbekommt? Liegt das daran, dass es die Samplerate für die Zeitachse zu Grunde legt?
Gut erkannt. Dort wird (meist) mit Waveforms gearbeitet, die "nur" t0 und dt enthalten…
ok, danke!
Ich muss mir mal überlegen in welcher Form ich die Daten am sinnvollsten speichere... Entweder manuell ein Waveform basteln oder in einem Array?!?
Hallo zig,
solange du nichts über deine Messaufgabe verrätst, kann man da auch keine Empfehlung abgeben…
auch wieder wahr... dazu werde ich am besten einen separaten Thread erstellen, damit die Übersicht nicht leidet.