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 

Geschwindigkeit einer Schleife festlegen



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!

07.03.2011, 17:39
Beitrag #1

Moeseph Offline
LVF-Grünschnabel
*


Beiträge: 24
Registriert seit: Jul 2008

8.6
-
DE

55128
Deutschland
Geschwindigkeit einer Schleife festlegen
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.


Angehängte Datei(en)
8.6 .vi  test.vi (Größe: 22 KB / Downloads: 250)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
07.03.2011, 21:21
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Geschwindigkeit einer Schleife festlegen
Hallo,
Windows ist KEIN Echtzeitbetriebssystem! Datenerfassungseinzelschleifen mit 1 kHz, das sollte man nicht machen. Alles was schneller als max. 100 Hz geht, hat unter Windows nichts verloren. Ansonsten solltest du auf ein RT-Target ausweichen.

Übrigens unter meinem i7-Windows 7 Laptop kann ich deine Beschreibung nicht bestätigen, da schaffe ich ziemlich genau die 1 kHz, unter meinem etwas älteren Win XP Desktop PC mit Athlon kommen dagegen trotz gewaltiger Vereinfachung nur gut 500 Hz raus. Die Auflösung des Timers scheint nicht gut genug zu sein...
   

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
08.03.2011, 09:12
Beitrag #3

ÜUser Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Feb 2011

2010
2007
EN



RE: Geschwindigkeit einer Schleife festlegen
Hallo,

auch mein Rechner schafft nicht eine nochmals vereinfache Schleife mit 1kHz auszuführen. Meine CPU ist dabei gut ausgelastet. Mit welcher Hardware willst du denn die Messwerte aufnehmen? Mit einem DAQmx System können z.B. mehrere kSamples/s erfasst werden.
Gruß ÜUser
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2011, 10:10 (Dieser Beitrag wurde zuletzt bearbeitet: 08.03.2011 10:14 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: Geschwindigkeit einer Schleife festlegen
(07.03.2011 17:39 )Moeseph schrieb:  2.: Warum läuft eine While Schleife, die 1000 mal pro Sekunde laufen sollte nur 500 mal pro Sekunde?

Mit 1000 mal pro Sekunde würde sie allenfalls laufen, wenn du a) den Metronom statt Wait verwenden würdest b) Das Programm selbst weniger als 1 ms benötigen würde c) das Wait/der Metronom bei 1ms noch verläßlich funktionieren so wie es sein sollte.

Daß die Schleife nur 500 mal pro Sekunde läuft, ist doch genau so wie es zu erwarten ist: 1 ms Wait + 1ms Programmausführung selbst (nach Deinen Angaben) = 2 ms = 500mal pro Sekunde.

Wie Jens schon andeutede, beträgt die Zeitauflösung unter Windows7 ca. 1 ms und nicht wie bei XP ca. 15 ms. Mit diesem vereinfachten Programm kann man das gut sehen:
   

Unendlich viel besser (als Windows 7 zu besorgen) ist allerdings, die kontinuierliche oder endliche Datenerfassung von einer NI-Messkarte selbst besorgen zu lassen und dabei das Waveform-Format zu verwenden. Die Zeitauflösung ist 1 µs oder besser. Man sieht sogar - bei gemultiplexter Datenerfassung von mehreren Kanälen - den geringen Zeitversatz zwischen den einzelnen Kanälen.
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
  Motorsteuerung (VCP) Erfassung Geschwindigkeit und Position JanM 2 2.621 15.06.2021 07:48
Letzter Beitrag: GerdW
  Drei Queues in einer While-Schleife mit case-Struktur EinVolvic 12 11.413 17.05.2017 20:25
Letzter Beitrag: EinVolvic
  Probleme seit einfügen einer For-Schleife JUON 7 5.270 14.02.2017 18:01
Letzter Beitrag: TR61
  Mehrspaltiges Listenfeld mit "Elementwerte indexweise festlegen" füllen C.Maier 3 4.619 12.01.2017 15:09
Letzter Beitrag: C.Maier
  Rechenzeit einer Schleife pro runde bekommen aidinnikoo 1 3.360 30.11.2016 13:53
Letzter Beitrag: GerdW
  Dauer einer Schleife berechnen Marius89 3 5.761 31.10.2016 09:24
Letzter Beitrag: jg

Gehe zu: