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!
Gerade versuche ich mit dem DAQ-Assistenten ein Analogsignal zu messen. Das klappt.
Ein Spannungseingang wird mit 20000Hz abgetastet und ich gebe das Sammeln von 100 Werten vor, aus denen ich anschließend den Mittelwert bilde. Super Sache soweit.
Jetzt möchte ich aber, dass dieses Messen über eine Dauer von ca. 20 sekunden stattfindet. In dieser Zeit wird die zu messende Spannung von anfangs 0V auf 10V steigen. Das klappt auch noch. Diese Spannung stellt eine Positon einer lineareinheit dar.
Dann fiel es mir plötzlich auf! In dieser Zeit wird die while-Schleife nur ca. 300 mal durchlaufen. Das sind viel zu wenig Messwerte (Schleifendurchläufe, wegen der anschließenden Mittelung). Woran kann das liegen? Oder besser gesagt: wie bekomme ich mehr Messwerte (Schleifendurchläufe)?
Rechnerisch ist mir das auch noch nicht nachzuvollziehen:
20000Hz abtasten - nur 100 Werte zu messen ergibt: 100 Werte in 5 Millisekunden, also ein gemittelter Wert (ein Schleifendurchlauf).
Daraus folgt: In 20 Sekunden müssen 4000 (bereits gemittelte) Messwerte zur Verfügung stehen.
Jetzt sagen wir mal der Rechner hat neben der Erfassung noch etwas mehr zu tun. Da müssen doch wenigstens 1000 Schleifendurchläufe möglich sein, oder?
Wenn das jetzt zu viel Text war, sagt bescheid, dann hänge ich ein kleines VI an.
+arghs+
du darfst dich net wundern, dass deine performance so im arsch ist, wenn immer nur 1 sample liest!
dadurch oeffnest und schließt du bei jeder iteration der while schleife den task und zwingst damit deinen rechner in die knie (zudem benoetigt das oeffnen und schließen der task ca. 100-200ms, je nachdem wieviel schrott du auf deinem rechner noch parallel laufen hast!)
leg eine abtastrate fest, dann waehlst die anzahl der zu lesenden samples und die sache hat sich! dadurch brauchst die while schleife net mehr und alles ist im gruenen bereich!
@freedive:
Kann ich verstehen - ABER: da war der Assistent nur falsch eingestellt (Siehe weiter oben im Text Abtasten mit 20kHz, 100 Samples). Das konnte mir also nicht recht weiterhelfen. Hast Du vielleicht noch eine andere Idee?
Aber den verzicht auf die While-Schleife checke ich net. Kann mit einer eingestellten Abtastrate und Samplezahl die ganze Messung von 20 Sekunden mit also 1000 aus 100 gemittelten Messwerten durchgeführt werden?
Danke
@MrSieb:
Ok, ich sehe, man sollte sich immer selber einen Task bauen. Anbei meiner - mit dem ist aber nichts anders, als oben beschrieben.
Warum ich das "Freigeben" mit in die Schleife tun muß verstehe ich nicht, sonst läüft es aber garnicht. Dein SubVi ist auf kontinuierliche Messwertaufnahme gestellt - wieso?
@all: Ich bin frischling - seht es mir nach, daß ich noch viel Erklärungsbedarf habe :roll:
aaah frischling :-)
dann lies dir mal das bookshelf durch :-)
LabVIEW oeffnen -> dann findest unter Hilfe den Eintrag "Search the LabVIEW Bookshelf" -> wennst das manual durch hast, weißt bissi was in LabVIEW :-)
Wennst dann noch in DAQmx fit werden willst, dann klick noch auf Start-Programme-NationalInstruments-NI-DAQ-DAQ Schnellstart...
Wenn du endliche Werte angibst, und dann eine Abtastrate waehlst und eine zugehoerige Anzahl an Samples (die wohlgemerkt pro erfassten Kanals zu verstehen ist), gibt dir der Assistent ALLE Werte gleichzeitig zurueck - du musst net pollen, du ersparst dir eine While Schleife (while-schleife nur, wennst eine kontinuierliche Erfassung laufen laesst!), und und und und und
falsch ist es grundsaetzlich net, nur der daqmx read ist net vollstaendig angeschlossen, somit liest der alle verfuegbaren werte (jedoch mind. 1 aus) -> somit laeuft die schleife ungetimet (auf grund der hohen abtastrate gibts auch kein implizites timing) -> setz einen chronographen ein, dann laeufts :-)