LabVIEWForum.de - Fehler bei AI mit TimeOut = 0

LabVIEWForum.de

Normale Version: Fehler bei AI mit TimeOut = 0
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
mein Programm besteht aus einer Mainloop, welche mit ca. 20Hz durchlaufen wird.
Innerhalb dieser werden Analogsignale mit einer kleineren Frequenz eingelesen (5Hz). Um das Signal/Rausch Verhältnis zu verbessern bilde ich den Mittelwert aus 50 Einzelmessungen (Konfiguration: 6 Kanäle single-ended, kontinuierliche Abtastung, rate=50*5=250SpS) und lese entsprechend 50 Werte mit dem DAQ-Lesen aus. Damit das funktioniert und die Hauptschleife nicht durch das DAQ-Lesen ausgebremmst wird, habe ich das TimeOut des DAQ-Lesen auf 0 gesetzt, so dass nur die angegebene Datenmenge gelesen oder ein Fehler ausgegeben wird, falls noch keine 50 Samples durchgeführt wurden. Die Schleife kann sich somit mit einer höheren Frequenz wiederholen. Es werden also bei ca. jedem vierten Schleifendurchlauf analoge Daten ausgelesen, ansonsten gibt die Funktion den Fehler -200284 aus.
Dies funktioniert, jedoch liefert das DAQ-Lesen manchmal nur noch diesen Fehler (-200284) und es können keine Daten mehr gelesen werden. Erst nach einem DAQ-Stop funktioniert dies wieder. Meist tritt der Fehler auf, wenn andere Programme geöffnet wurden, welche zu Beispiel USB-Ressourcen nutzen (ich verwende einen USB-Hub).
Ist dieser Fehler zu beheben oder gibt es eine andere Möglichkeit analoge Daten mit einer festen, aber kleineren Abtastrate innerhalb einer schnellen Schleife auszulesen (evtl. ein DAQ Ereignis oder so)?

Vielen Dank!
s

PS.: ich verwende ein NI-USB6009 mit NI DAQmx8.6 in LabVIEW8.5
Hast du die Beispiele über eine gepufferte Messung schon angeschaut.

Warum es auf USB eine Störung gibt ist sicher auch nicht gut, kann ich aber nicht helfen.

Gruss
Roland
Die von Dir verwendete Methode mit timeout=0 im DAQmx read ist mir äußerst suspekt und ich wundere mich sehr, daß es überhaupt teilweise funktioniert.
Du solltest es besser so machen:
Daten in einer eigenen unabhängigen Schleife erfassen und die Daten über Melder (oder queue) an die Haupschleife schicken.
Der Melde-Empfänger in der Hauptschleife kann ja dann timeout=0 haben, so daß dort nicht auf Daten gewartet werden muß.
Fall Du noch nicht mit Meldern gearbeitet hast: Es ist supereinfach!
Hallo Lucki,
gibt es einfache Beispiele für die Methode mit den Meldern?
Vielen Dank!
s
Hallo Roland,
ich habe das 'DAQ Eingangspuffer konfigurieren' versucht mit einer Puffergröße von 5000 und höher. Der Fehler tritt noch immer auf. Vielleicht sollte ich es mit diesen Meldern versuchen.
Dennoch danke für den Tip.
Viele Grüße
s
Hallo Lucki,
die Hauptschleife wird durch ein TimeOut in einem Ereignis Case generiert. Wie kann ich parallel dazu eine langsamere Schleife programmieren? Geht das innerhalb des gleichen Programms?
Vielen Dank und viele Grüße
s
Hallo Lucki,
es funktioniert mit einem Melder und ist tatsächlich gar nicht so schwer. Dass man zwei oder mehr Schleifen parallel laufen lassen kann, wußte ich nicht. Es ist aber sehr hilfreich!
Nochmals vielen Dank!
s
' schrieb:es funktioniert mit einem Melder und ist tatsächlich gar nicht so schwer.
Freut mich. War jetzt nicht da, konnte Dir nicht eher antworten.
Referenz-URLs