Hallo,
ich möchte ein analoges Signal mit "hoher" Frequenz kontinuierlich ausgeben. Die einzelnen Werte werden während der Programmausführung definiert.
Ich nutze das NI 9263.
Mit dem jetzigen Test VI funktioniert dies auch soweit.
Ich verstehe allerdings folgendes Verhalten nicht:
Es scheint einen Offset Fehler in der Ablaufzeit zu geben.
Beispielsweise ist die Schleife bei einer Abtastrate von 1 kHz und 1k auszugebenen Samples beriets nach ca. 367 ms beendet.
Bei 1 kHz und 10k Samples nach 9367 ms. Das beudeudet also das die ersten 1K Samples schneller ausgegeben werden als der Rest.
Mit steigender Abtastrate (z.B. 5 kHz) nimmt das offset ab (nur noch 32 ms schneller).
Ich vermute es hängt irgendwie mit dem initialisierten Puffer zusammen.
Kann mir das jemand erklären?
Hallo lumaxo,
das Problem könnte daran liegen, dass du DAQmx mit der Ausgabe von Einzelwerten quälst!
Wenn du Samples mit "hohen" Sampleraten ausgeben willst, dann mach das mit der Option "1Chan NSamp" und lass DAQmx den Rest erledigen. Aber dauernd/ungebremst Einzelwerte auszugeben ist nun mal nicht das Gelbe vom Ei…
Das hatte ich befürchtet.
Ich wollte eigentlich somit gleiche eine zeitgesteuerte while Loop haben.
Da ich die Ausgangsspannung regeln will (hatte gehofft so an eine ms ranzukommen, daher auch die Einzelwerte).
Du siehst da etwas grundsätzlich falsch. Auf der Karte befindet sich ein Echtzeitsastem mit eigenem Timer für die Ausgabe der Werte. Das Bindeglied zwischen Karte und dem Labview-Programm auf dem PC sind Puffer. DAQmxWrite gibt normalerweise keine Daten aus, sondern schreibt sie nur in den Puffer. Damit dann alle Daten vor Beendes des VI auch ausgegeben werden, gibt es die Funktion "Warten bis Task beendet". Du aber beendest den Task brutal, nachdem alle Daten in den Puffer geschrieben worden sind. Es hat also weder die von Dir gemessene Zeit irgendetwas mit der Datenausgabezeit zu tun, noch werden alle in den Puffer geschriebenen Daten wirklich ausgegeben. Um die Zeit zu messen, müßtest Du warten, bis die Funktion "Warten bis Task beendet" ausgeführt worden ist.
Edit: Wenn das von Gerd angesprochene "Quälen mit Einzelwerten" eine Usache für das Nichtfunktionieren Deines VIs sein sollte - was ich nicht glaube -, so käme dann eine Fehlermeldung wegen Datenmangel. (Weil der Datennachschub mit der vorgegebenen Datenrate nicht Schritt halten kann). Solange die Fehlermeldung nicht kommt, besteht kein Handlungsbedarf. Der Einschätzung als "Quälerei" ist aber trotzdem zuzustimmen
Danke Lucki.
Also ist das generell der falsche Ansatz für mein Vorhaben.
Gibt denn keine Möglichkeit ohne Labview RT Einzelwerte in einstelligen ms-Bereich zu erfassen, verarbeiten (LabVIEW PID) und auszugeben?
(zur Datenaufnahme habe ich das NI 9239)
Dass das VI gnerall falsch ist, wollte ich nicht sagen. Ich wollte nur sagen, dass Du bei der Zeitmessung das Faktum der Pufferung nicht berücksichtigt hast. Mit Enfügen des VI "Warten bis Task beendet", wie ursprünglich von mir gesagt, ist es auch nicht getan. Denn bei kontinuierlicher Ausgabe wird der Task nie beendet, man kann den Task wirklich nur durch brutales Abbrechen beenden. Aber dann weiß man nicht, wie viele Werte gechrieben wurden.
Wenn Du also so wie bei Dir eine ganz bestimmte Anzahl von Werten ausgeben willst, dann ist die Saubere Lösung "Finite Samples" in der Konfiguration.
Habe das mal gemacht, und dann stimm die Zeitmessung.
Die Daten erst wärend die Ausgabe läuft zu berechnen geht natürlich, aber bei eine Rate von 5000 ollten Berechnung und der Daten-Nachschub schon arrayweise erfolgen und nicht in Einzelwerten. (Aber mit Einzelwerten funktioniert Dein VI auch, habe es probiert)