27.03.2008, 12:11
Beitrag #1
|
Kirill
LVF-Grünschnabel
Beiträge: 21
Registriert seit: Jan 2008
8.5
2008
kA
95444
Deutschland
|
Samplingrate von 1kHz am AI
Die Hardware ist ein NI PCI-6251, LabVIEW 8.5 und NI-DAQmx 8.0, das VI ist
AI_Samplingrate.vi (Größe: 61,76 KB / Downloads: 369)
Ich hab [attachment=38950:AI_Samplingrate.vi]hier ein System, das einen analogen Eingang mit einem kHz abtasten soll. Bisher sieht das auf, wie im Anhang.
Das Problem ist die Samplingrate. Klar, ich hab in der Schleife auch eine 0,1s-Wartepause. Es kommt jedenfalls folgendes raus:
100ms.txt (Größe: 1,22 KB / Downloads: 337)
Nun wurde mir schonmal geraten, die Softwareabtastrate runterzustellen. Das Problem ist aber, dass ich a) nicht über 100Hz komme (1ms Verzögerung in der While-Schleife) und b) viel viel weniger Werte rauskommen:
1ms.txt (Größe: 8,51 KB / Downloads: 376)
Was ich bisher versucht hab, war abgesehen von der Veränderung der Wartepause der While-Schleife, das "Analog Wfm 1Chan NSamp" durch was anderes zu ersetzen. Das Problem ist, dass dabei die Auswertung aufgrund Datentypinkompatibilitäten zusammenbricht.
Weiss wer, wie das richtig geht?
|
|
|
27.03.2008, 13:48
Beitrag #2
|
|
|
27.03.2008, 14:07
(Dieser Beitrag wurde zuletzt bearbeitet: 27.03.2008 14:09 von Kirill.)
Beitrag #3
|
Kirill
LVF-Grünschnabel
Beiträge: 21
Registriert seit: Jan 2008
8.5
2008
kA
95444
Deutschland
|
Samplingrate von 1kHz am AI
Das dt von der Hardware kann ich nicht nehmen, da im Verlauf der Messung diese Struktur mehrfach vorkommt (hab nur einen Ausschnitt meines eigentlichen VIs hochgeladen) und sich die Zeit immer auf den Startpunkt des gesamt-VIs beziehen muss und nicht etwa auf die einzelnen Auslesevorgänge.
Also für mich zum Verstehen. Der Puffer (Größe 1000) wird von der Hardware beschrieben und das VI in der Schleife liest "nur" den Puffer aus und gibt mir nen Wert?
Heißt das, dass ich zunächst die Puffergröße hochstellen muss, um bei ner Laufzeit von sagen wir 10 Sekunden genug Werte für 1kHz Samplingrate habe? Und wie bringe ich LabVIEW dann dazu, mir auch tatsächlich 1k Werte/Sekunde in die Datei zu schreiben?
|
|
|
27.03.2008, 15:03
Beitrag #4
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
Samplingrate von 1kHz am AI
Wieso kannst du das dt nicht nehmen? dt ist doch nur ne Schrittweite die du ab dem Startpunkt deiner Aufzeichnung (erster gelesener Wert) hochzählst, ohne einen absoluten Startzeitpunkt!
Ja, das mit dem Puffer hast du richtig verstanden!
Nein, du musst den Puffer nicht groß genug für 10 Sekunden stellen, du musst ihn nur innerhalb der Schleife oft genug auslesen, damit kein Überlauf passiert!
Ein absolute Angabe, 1k Werte pro Sekunde zu speichern kann man so nicht machen! Die Aufzeichnung wird immer hinterherhinken, wei einfach die SW nicht schnell genug ist. Du tastest nur schnell genug ab (das macht für dich der Treiber + die Hardware) und speicherst dann so oft du kannst/willst die verfügbaren Werte auf Platte. Das sind manchmal dann evtl. 1000 Werte pro Sekunde, beim nächsten Mal aber evtl. schon 1346 Werte pro Sekunde, weil deine SW zwischendurch noch was anderes gemacht hat!
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
27.03.2008, 15:20
Beitrag #5
|
Kirill
LVF-Grünschnabel
Beiträge: 21
Registriert seit: Jan 2008
8.5
2008
kA
95444
Deutschland
|
Samplingrate von 1kHz am AI
Wenn ich das dt aus der Wafeform nehme, dann hab ich zwar Werte wie
0.00 0.01
1.34 1.46
und so weiter. Wenn ich aber im weiteren Verlauf des VIs (ein paar Flat-Frames später) eine neue Messung mache, dann bekomm ich
0.00 0.01
1.74 1.44
anstatt
0.02 0.03
1.74 1.44
Ich will also MEHRMALS messen, allerdings soll jedes Mal der aktuellle Messzeitpunkt ab dem Anfang des Gesamt-VIs gezählt sein und nicht ab dem Start der konkreten Messung.
Also mir geht es nicht exact darum, dass ich GENAU 1kHz Samplingrate erreiche. Aber wie komm ich nu in den Bereich von 1kHz? Wie die Samplingrate genau ist, ist ja wurscht, solang die Zeitwerte mit dabei stehen.
|
|
|
28.03.2008, 07:22
Beitrag #6
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
Samplingrate von 1kHz am AI
' schrieb:Aber wie komm ich nu in den Bereich von 1kHz? Wie die Samplingrate genau ist, ist ja wurscht, solang die Zeitwerte mit dabei stehen.
Die Zeitwerte, die du dir aus der Schleife mit dem Timer-VI rausziehst, haben ABSOLUT GAR NICHTS mit den Zeitpunkten zu tun, wann die Werte wirklich aufgenommen wurden!
Die kleinste Zeiteinheit bzw. Zeitdifferenz, die du per "VI-Durchlauf" auflösen/rauskriegen kannst, liegt im Optimalfall bei 1ms. Leider macht da deine Programmierung und dein Betriebssystem meistens nicht mit, weil irgendwas zwischenrein gemacht wird...Deine Anforderung ist damit also nicht zu lösen!
Bei deinem Lese-VI kriegst du die Daten aber als Waveform, und da ist auch dein t0 mit angegeben. Du könntest also evtl. so vorgehen, das du dir das t0 deiner ersten Messung merkst und dann vom jeweiligen t0 der folgenden Messungen abziehst und dann mit diesen relativen Werten (gerechnet ab erster Messung, d.h. "VI - Start") mit dem dt deine Zeitwerte ausrechnest. Allerdings stell ich mir das ziemlich (Rechen-)Zeitintensiv vor, ich weiß nicht ob das so ohne weiteres "on the fly" funktioniert...
Gruß
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
28.03.2008, 13:56
Beitrag #7
|
Kirill
LVF-Grünschnabel
Beiträge: 21
Registriert seit: Jan 2008
8.5
2008
kA
95444
Deutschland
|
Samplingrate von 1kHz am AI
Was müsste ich an der Programmierung ändern, um möglichst nah an 1kHz zu kommen?
|
|
|
28.03.2008, 14:26
Beitrag #8
|
|
|
03.04.2008, 11:09
(Dieser Beitrag wurde zuletzt bearbeitet: 03.04.2008 11:23 von Kirill.)
Beitrag #9
|
Kirill
LVF-Grünschnabel
Beiträge: 21
Registriert seit: Jan 2008
8.5
2008
kA
95444
Deutschland
|
Samplingrate von 1kHz am AI
Mal ne Frage zu den Zeitwerten nochmal. Habe ich es also richtig verstanden, dass wenn ich die DAQmx-Read-VIs auf "Waveform" stelle, dann kommt ein Datentyp raus, der die Zeit- und Y-Werte beinhaltet? Wie verschaff ich mir dann die einzelnen Zeitwerte? Wenn ich es per "Separate waveform" versuche, dann kann der mir nur t0 und dt ausgeben. Scho klar, dass ich dann dt irgendwie ein paar mal auf t0 addieren müsste, aber wie bekomm ich raus, wieviele Zeitschritte rum sind, wenn die Zeit in der While-Schleife mit dem eigentlichen Messvorgang nichts zu tun hat?
Was ich auch nicht ganz verstehe, ist bei welchem Zeitpunkt/VI die Hardware die Messung denn eigentlich vornimmt. Wenn das DAQmx-Read also nur den Puffer ausliest, in welchem VI wird der Puffer geschrieben?
|
|
|
03.04.2008, 11:39
|
|
|
| |