LabVIEWForum.de - Daten live aus dem Puffer Lesen

LabVIEWForum.de

Normale Version: Daten live aus dem Puffer Lesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Mein Problem:
Ich gebe Spannungen synchron zu einer Datenerfassung aus: http://www.labviewforum.de/Thread-Maxima...Messkarte.
Nun möchte ich die Daten, die ich erfasse live auslesen, d.h. er soll mir während der Messung die gemessenen Daten schon zum auswerten geben.

Jetzt habe ich schon eine Funktion bei dem DAQmx Read Vi gefunden:

Anzahl Samples pro Kanalgibt die Anzahl der zu lesenden Samples an. Wenn Sie diesen Eingang offen lassen oder auf -1 setzen, wird die Anzahl der Samples automatisch bestimmt, und zwar je nachdem, ob fortlaufend Samples erfasst werden sollen oder nur eine bestimmte Anzahl.

Bei der fortlaufenden Erfassung von Samples, liest das VI bei der Einstellung dieses Eingangs auf -1 alle Samples aus, die sich gerade im Puffer befinden.

Wenn mit dem Task eine bestimmte Anzahl von Samples erfasst wird und Sie diesen Eingang auf -1 setzen, wartet das VI bis zur Erfassung der angegebenen Anzahl von Samples und liest diese dann aus. Ist die Eigenschaft Alle verfügbaren Werte einlesen TRUE, liest das VI nur die Samples im Puffer aus und wartet nicht bis zum Eintreffen aller Samples.


Wenn ich diese einbinde funktioniert es nicht. D.h. er liest keine Daten aus. Wenn ich eine die Funktion "Verzögerung" in den Fehlerstream direkt nach dem DAQmx Start einfüge liest er mir die Daten aus (je nach länge der Verzögerung alles oder nur teile), aber auch nicht kontinuierlich, sondern er gibt mir ein ganzes Array zurück.

Weiß jemand wie ich das in das VI einbinden kann?

Gruß Lars
Wenn ich dich richtig verstehe musst du eigentlich nur das DAQmx Read und das DAQmx Wait Until done in eine While-Schleife legen. Das Ergebnis vom Wait Until done wird das Abbruchkriterium der Schleife. Die Timeouts passt du dann vom DAQmx Read zu 0 an und vom DAQmx Wait Until done z.B. zu 0,1. Den Eigenschaftsknoten kannst du komplett weglassen.

Ergebnis ist, dass du innerhalb der Schleife aller 0,1 Sekunde alle bis dahin erfassten Daten bekommst und die Schleife am Ende der Erfassung sich beendet.
Ich habe es so versucht, aber wie kann ich das Ergebnis von "Wait until done" als Abbruchkriterium für die Schleife verwenden (der gibt doch nur einen Task aus und einen Fehler, aber keinen boolean?!) ? Oder meist du "Is task done" (der hätte als Ausgang einen Boolean)?

Ein Beispiel wäre nett Wink
Deine Rate ist 5000. Bei sofortigem Lesen der Daten muss DAQmx Read nie länger als 0.2ms warten, bis wieder etwas im Buffer ist. Länger, nämlich bis zum Timeout, dauerts nur, wenn nichts mehr ankommt. Mußt also nur Timeout=1ms anschließen und den Timeoutfehler als Abbruchkritrium der while-Schleife verwenden.

Andere Möglichkeit: Anzahl der zu lesenden Samples nicht "-1", sondern "1", und DAQmx Read in einer for-Schleife mit der konfigurierten Anzahl von Samples laufen lassen.
Ob Deine Auwertung das mit 5000 Hz noch schafft, steht auf einem anderen Blatt. Es kann aber funktionieren, wenn Du nicht auf die absonderliche Idee kommst, mit dieser Rate etwas auf dem FP anzuzeigen.
(17.07.2013 15:32 )LarsO schrieb: [ -> ]Ich habe es so versucht, aber wie kann ich das Ergebnis von "Wait until done" als Abbruchkriterium für die Schleife verwenden (der gibt doch nur einen Task aus und einen Fehler, aber keinen boolean?!) ? Oder meist du "Is task done" (der hätte als Ausgang einen Boolean)?

Ein Beispiel wäre nett Wink

Ja hast recht "Is task done" meinte ich eigentlich. Hab hier leider kein DAQmx zuhause auf dem PC, daher leider auch kein Beispiel Wink
Ich habe mit jetzt selbst eine Lsg zusammengebastelt, die soweit ich es bis jetzt testen konnte auch sehr gut funktioniert (auch bei hohen Schreib- und Leseraten).
Im Anhang sie Screenshots (Für die ohne Labview vor Ort) und das Beispielprogramm.

Verbesserungen nehme ich natürlich gerne an.
Referenz-URLs