Hallo Heribert,
erst einmal etwas simple Mathematik: Zeit zum Lesen eines Datenblocks = Blockgröße/Frequenz
Deine Beispiele:
10 Werte/ 500Hz = 20ms
2 Werte/1000Hz = 2ms
100 Werte/1000Hz = 100ms
ABER: Zu diesen Zeiten zum Messen der Samples addiert (oder besser: überlagert) sich der Aufwand zum Kopieren der Werte in dein Programm (Hardware-Treiber+Software-Layer…). Dieser Aufwand ist relativ konstant und unabhängig von der Blockgröße. Ich würde ihn mal auf ca. 5ms schätzen.
UND: Du hattest noch eine zusätzliche Wartezeit in deinem VI von 20ms. Auch diese stört dich hier.
Was passiert nun?
Du versuchst z.B. jeweils 2 Werte bei einer Samplerate von 1kHz zu lesen. Damit ist der Aufwand zum Abholen der Messwerte größer als der für die eigentliche Messung: es staut sich ein Buffer mit Messwerten auf, die du immer stärker zeitverzögert abholst. Wenn du lang genug wartest, wird es auch noch einen Buffer-Overflow-Fehler geben. Um im Beispiel zu bleiben: die reine Messzeit dauert 2ms, deine Schleife braucht aber 20ms (wg. der Wartezeit) zum Lesen der Daten: Faktor 10 zu langsam!
Noch einmal:
Zitat:Ganz allgemeine Daumenregel: man liest Daten in 0.1s-Blöcken ein. Bei einer Samplerate von 20kHz bedeutet das eine Blockgröße von 2000 Samples…
Noch ein Tipp:
Wenn es auf möglichst gute Ausnutzung der Rechenkapazität deines PCs ankommt (z.B. wg. größerer Datenmengen und aufwendiger Signalaufbereitung), dann bietet sich immer eine Entkopplung von DAQ-Schleife und Datenverarbeitung durch Queues an!