07.03.2011, 17:39
Hallo liebe LV Gemeinde,
ich habe zwei kleine, von Experten vermutlich leicht zu lösende Probleme. Ich habe eine Anwendung, bei der ich möglichst viele Messwerte pro Sekunde nehmen möchte. Mein Ansatz war der, dass ich mir einfach eine While-Schleife baue, die Messwerte zusammen mit der Zeit, die ich z.B. aus dem "Verstrichene Zeit"-VI bekomme, in ein Array schreibe und irgendwann in eine Datei speichere. Dabei ist mir aufgefallen, dass im fertigen Array die Zeit von Messwert zu Messwert nicht weiterläuft. Erst wenn etwa 2 Hundertstel vergangen sind, springt die Zeit im Array weiter. Das gleiche Ergebnis bekomme ich, wenn ich anstelle des "Verstrichene Zeit"-VIs das "Timer Wert (ms)"-VI benutze. Ich hätte eigentlich erwartet, dass ich zumindest hier immer dann, wenn eine Millisekunde vergangen ist, die neue Zeit im Array sehe. Stattdessen sehe ich bei z.B. 1000 Werten pro Sekunde 20 mal die gleiche Zeit, dann 20 mal die Zeit, die 2 Hunderstel später ist usw.
Um das Ganze zu verstehen, habe ich mir ein ganz einfaches Programm gebaut, in dem nur die Zeit in ein Array geschrieben wird. Als ich ein bischen damit herumspielte, fiel mir eine weitere Sache auf. Ich wollte z.B. mal genau 1000 Werte pro Sekunde haben, also benutzte ich das "Warten (ms)"-VI und stellte es auf 1 ms. Ich bekomme hier aber nur etwa 500 Werte. Wenn ich die Schleife nicht warten lasse sind es hingegen mehrere 1000 Werte pro Sekunde. Dies ist mein 2. Problem: Warum bekomme ich nur etwa 500 Werte pro Sekunde, wo ich 1000 erwarte? Am sonstigen Inhalt der Schleife sollte es nicht liegen, da die Schleife wie gesagt ohne Warten von 1 ms mehrere 1000 mal pro Sekunde läuft.
So, meine 2 Fragen nochmal kurz:
1.: Gibt es eine Möglichkeit, die Zeit millisekundengenau und nicht nur auf 2 Hundertstel genau in ein Array zu schreiben?
Viele Grüße,
Moe
2.: Warum läuft eine While Schleife, die 1000 mal pro Sekunde laufen sollte nur 500 mal pro Sekunde?
Im Anhang das einfache Test-Programm, bei dem ich mir auch die Frequenz anschaue, mit der die Schleife läuft. Ändert man im Blockdiagramm die Wartezeit auf 0 ms, so tritt der im 2. Punkt besagte Effekt auf.
ich habe zwei kleine, von Experten vermutlich leicht zu lösende Probleme. Ich habe eine Anwendung, bei der ich möglichst viele Messwerte pro Sekunde nehmen möchte. Mein Ansatz war der, dass ich mir einfach eine While-Schleife baue, die Messwerte zusammen mit der Zeit, die ich z.B. aus dem "Verstrichene Zeit"-VI bekomme, in ein Array schreibe und irgendwann in eine Datei speichere. Dabei ist mir aufgefallen, dass im fertigen Array die Zeit von Messwert zu Messwert nicht weiterläuft. Erst wenn etwa 2 Hundertstel vergangen sind, springt die Zeit im Array weiter. Das gleiche Ergebnis bekomme ich, wenn ich anstelle des "Verstrichene Zeit"-VIs das "Timer Wert (ms)"-VI benutze. Ich hätte eigentlich erwartet, dass ich zumindest hier immer dann, wenn eine Millisekunde vergangen ist, die neue Zeit im Array sehe. Stattdessen sehe ich bei z.B. 1000 Werten pro Sekunde 20 mal die gleiche Zeit, dann 20 mal die Zeit, die 2 Hunderstel später ist usw.
Um das Ganze zu verstehen, habe ich mir ein ganz einfaches Programm gebaut, in dem nur die Zeit in ein Array geschrieben wird. Als ich ein bischen damit herumspielte, fiel mir eine weitere Sache auf. Ich wollte z.B. mal genau 1000 Werte pro Sekunde haben, also benutzte ich das "Warten (ms)"-VI und stellte es auf 1 ms. Ich bekomme hier aber nur etwa 500 Werte. Wenn ich die Schleife nicht warten lasse sind es hingegen mehrere 1000 Werte pro Sekunde. Dies ist mein 2. Problem: Warum bekomme ich nur etwa 500 Werte pro Sekunde, wo ich 1000 erwarte? Am sonstigen Inhalt der Schleife sollte es nicht liegen, da die Schleife wie gesagt ohne Warten von 1 ms mehrere 1000 mal pro Sekunde läuft.
So, meine 2 Fragen nochmal kurz:
1.: Gibt es eine Möglichkeit, die Zeit millisekundengenau und nicht nur auf 2 Hundertstel genau in ein Array zu schreiben?
Viele Grüße,
Moe
2.: Warum läuft eine While Schleife, die 1000 mal pro Sekunde laufen sollte nur 500 mal pro Sekunde?
Im Anhang das einfache Test-Programm, bei dem ich mir auch die Frequenz anschaue, mit der die Schleife läuft. Ändert man im Blockdiagramm die Wartezeit auf 0 ms, so tritt der im 2. Punkt besagte Effekt auf.