LabVIEWForum.de
Probleme mit Buffer - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Probleme mit Buffer (/Thread-Probleme-mit-Buffer)

Seiten: 1 2


Probleme mit Buffer - Tonii - 13.12.2007 15:41

Hallo liebe LVler,

ich muss heute noch einmal Fragen.

Es handelt sich um meine Schaltung (siehe Bild) die ein Signal vom USB-6009 bekommt und anhand der Amplitude einen Ton ausgeben soll, was ja auch soweit funktioniert.
Das Problem dabei ist, dass ich stets zwei Fehlermeldungen im Wechsel bekomme, die den Buffer, Abtastwerte etc betreffen.

Fehler Nr 1:

-200279 bei DAQmx Read (Analog 1D Wfm NChan NSamp).vi

Es wurde versucht Abtastwerte zu lesen, die nicht mehr zur Verfügung stehen. Der angeforderte Abtastwert war zuvor verfügbar, wurde jedoch überschrieben.

Vergrößern des Puffers, häufigeres Lesen der Daten oder Angabe einer festen Anzahl zu lesender Abtastwerte anstatt alle verfügbaren Abtastwerte zu lesen, könnte das Problem eventuell beheben.

Fehler Nr 2:

-200284 bei DAQmx Read (Analog 1D Wfm NChan NSamp).vi

Es wurden einige oder alle der angeforderten Abtastwerte noch nicht erfasst.

Verwenden Sie ein längeres Lese-Timeout oder lesen Sie die Daten später in Ihrem Programm, um zu warten, bis die Abtastwerte zur Verfügung stehen. Um die Abtastwerte früher verfügbar zu machen, können Sie die Abtastrate erhöhen. Wenn Ihr Task einen Starttrigger verwendet, stellen Sie sicher, das dieser korrekt konfiguriert ist. Es ist auch möglich, dass Sie den Task für ein externes Timing konfiguriert haben, ohne eine Taktquelle zur Verfügung zu stellen. Wenn dies der Fall ist, stellen Sie bitte eine Taktquelle zur Verfügung.


Im DAQ-Assistenten ist kontinuierlich eingestellt sowie 1000 zu lesende Werte und 1k Rate. Änder ich die Werte und/ oder die Rate ändert sich nichts bezüglich der Fehlermeldungen.

Tu ich dann im DAQ-Assi den Frontpanel öffnen, bietet sich die Möglichkeit den timeout bei read.vi zu ändern, aber das nützt in diesem Falle auch nichts. Ebenfalls kann man die "Anzahl der Samples pro kanal" bei read.vi ändern, voreingestellt ist -1, was ich merkwürdig finde. Wenn ich es auf 1 setzte, dann läuft zwar meine Schaltung eine Weile, aber mir fehlt da das Verständnis um hinterzusteigen, was die einzelnen Elemente bewirken.
Liege ich da mit meiner Suche in der richtigen Richtung oder bin ich da total falsch und es sind andere Gründe warum dies nicht funktioniert? liegt es vielleicht auch nur am PC? Ist zwar kein highend-PC, aber auch nicht das schlechteste. Generell läuft das Programm recht langsam bzw hohe Reaktionszeiten, wenn es kurz mal läuft.

Vielen Dank erstmal im Voraus.. bin über jede Hilfe dankbar..

tonii

[attachment=10340]


Probleme mit Buffer - monoceros84 - 14.12.2007 09:41

Du suchst definitiv in der richtigen Richtung.Smile

Deine Fehler bedeuten folgendes:
Fehler 1: Du liest zu langsam oder du liest immer zuviele Werte auf einmal (und musst dann immer warten, bis diese Werte erstmal da sind). Die Werte werden dann im Puffer wieder überschrieben, obwohl sie noch gar nicht ausgelesen wurden.
Fehler 2: Du liest zu schnell und willst Werte lesen, die noch gar nicht gemessen wurden.

Wie du schon richtig vermutet hast, liegt das Problem in "Samples pro Kanal". Mit -1 liest du immer so viele Werte aus, wie gerade da sind. Klingt gut, macht aber auch bei mir immer wieder Probleme. Bessere Erfahrung habe ich mit dieser Methode: Man liest nicht N Samples aus, sondern immer nur 1 Sample (erhält also statt 2D ein 1D-Array), dafür aber in einer Schleife. Abbruchbedingung ist ein Timeout oder wenn die erforderliche Anzahl Daten erfasst wurde.
Nachteil dieser Methode. Du bekommst deine Daten zeitverzögert. Das trifft aber auch auf dein bisher verwendetes Verfahren zu.

Wenn du keine Messreihe aufnehmen willst, sondern immer den aktuellen Status brauchst, ist es besser, gar kein Timing zu verwenden. Also einfach DAQmx Read aufrufen und ein Sample je Kanal messen. Das ist glaube auch das, was du vorhast, oder?


Probleme mit Buffer - Tonii - 14.12.2007 13:08

' schrieb:Wenn du keine Messreihe aufnehmen willst, sondern immer den aktuellen Status brauchst, ist es besser, gar kein Timing zu verwenden. Also einfach DAQmx Read aufrufen und ein Sample je Kanal messen. Das ist glaube auch das, was du vorhast, oder?

hmm.. schon richtig.. Aber wenn ich auf den DAQ-Assistenten verzichte und stattdessen create.vi, start.vi und read.vi nutze, dann macht der Filter eine Fehlermeldung das bei ihm stets 0 ankommt. Bei read.vi habe ich alle Möglichkeiten ausprobiert.

Was ich eigentlich will: USB-6009 ist an einer Schaltung angeschlossen und soll Spannung und Frequenz dem LabVIEW übergeben. Also habe ich schon zwei verschiedene paar Schuhe.. und die Frage ist da, ob es mit read.vi allein geht?!

Jedenfalls scheint es nur mit dem DAQ-Assi zu funktionierenSad Und dabei entstehen großen Fehler..

danke tonii


Probleme mit Buffer - jg - 14.12.2007 18:50

Ich bin ja der Meinung, kontinuierliche Datenerfassung gehört so aufgebaut:

-Nachschauen, wieviele Samples vorhanden sind und dann diese Auslesen, und das in einer While-Loop,

ODER:

-Erst 0 Samples auslesen, dann Nachschauen, wieviele Samples inzwischen im Buffer sind, dann diese Anzahl im nächsten Durchlauf einlesen.

Hierzu ein modifiziertes Bsp. aus dem NI-Examplefinder:
[attachment=10371]
Lv80_img[attachment=10372]

MfG, Jens

EDIT: Es geht natürlich auch, einfach in der Loop immer alle gerade verfügbaren Samples auszulesen. Sieht dann so aus:
[attachment=10377]
Jetzt muss man eigentlich nur noch aufpassen, das Puffergröße, Datenerfassungsrate und Geschwindigkeit der Datenleseloop zueinander passen, also Puffergröße > Rate * Zeit der Leseloop.


Probleme mit Buffer - Tonii - 18.12.2007 10:08

Hallo und danke erstmal,

leider kann ich mir dieses vi nicht anschauen, da ich nur Version 7.1 besitze..

Ich bin zwar auf der Suche, aber bisher konnte ich das Beispiel aus dem NI-Examplefinder noch nicht finden -.-

lg tonii


Probleme mit Buffer - jg - 18.12.2007 11:18

Hier drunter zu finden.

[attachment=10402]

Und hier (ohne Garantie, ob das Runterkonvertieren geklappt hat):
Lv71_img[attachment=10403]

MfG, Jens


Probleme mit Buffer - Tonii - 18.12.2007 14:17

Vielen dank,

habe es sogar gefundenSmile

Jedenfalls funktioniert dein geändertes Beispiel.. Fast zumindest.. das Signal was ausgegeben wird, wird nur einmal dargestellt, also kein bewegendes Signal, obwohl das Programm an sich noch läuft.. Liegt es vielleicht daran, das selbst das Übertragen/ Auslesen vom Gerät in der Schleife geschehen muss?

Noch eine weitere Frage zum Verständnis, es herrschen ja doch oft ähnliche Wörter:

Zu lesende Werte = Number of Samples = Buffergröße!?
und Samples pro Kanal = zu lesende Werte?

Buffergröße > Rate * Zeit, (wartende Zeit von "wait" ?)
also zB wenn Rate 1000Hz ist und der wait-timer auf 10 ist, dann muss Buffer mind. 10000 sein!?

:)danke im Voraus

lg Tonii


Probleme mit Buffer - jg - 18.12.2007 14:37

' schrieb:Vielen dank,

habe es sogar gefundenSmile

Jedenfalls funktioniert dein geändertes Beispiel.. Fast zumindest.. das Signal was ausgegeben wird, wird nur einmal dargestellt, also kein bewegendes Signal, obwohl das Programm an sich noch läuft.. Liegt es vielleicht daran, das selbst das Übertragen/ Auslesen vom Gerät in der Schleife geschehen muss?
Keine Ahnung, wie du dein VI jetzt aufgebaut hast, wahrscheinlich, mein Bsp. zeigt kontinuierlich das Signal.
' schrieb:Noch eine weitere Frage zum Verständnis, es herrschen ja doch oft ähnliche Wörter:

Zu lesende Werte = Number of Samples = Buffergröße!?
und Samples pro Kanal = zu lesende Werte?
Meinst du jetzt die Übersetzung der englischen Bezeichnung zum deutschen LabVIEW? Da muss ich passen.
' schrieb:Buffergröße > Rate * Zeit, (wartende Zeit von "wait" ?)
also zB wenn Rate 1000Hz ist und der wait-timer auf 10 ist, dann muss Buffer mind. 10000 sein!?
Fast, da die Zeit bei wait ja in ms angegeben ist, als bei 10 = 10 ms hast du 1000Hz*0,01s = 10, ansonsten hst du hier richtig verstanden. Würde die Buffersize bei kontinuierlicher Erfassung aber großzügig bemessen.

MfG, Jens


Probleme mit Buffer - Achim - 18.12.2007 15:07

' schrieb:Zu lesende Werte = Number of Samples = Buffergröße!?
und Samples pro Kanal = zu lesende Werte?

Guck dir mal im MAX die Hilfe-Einträge zu den einzelnen Größen an...(rechts im MAX..."Hilfe einblenden")...da steht alles dabei!


Probleme mit Buffer - Tonii - 18.12.2007 16:31

' schrieb:Keine Ahnung, wie du dein VI jetzt aufgebaut hast, wahrscheinlich, mein Bsp. zeigt kontinuierlich das Signal.

Ich versuche mich an deinem Beispiel, aber ich bekomm als Signalausgabe nur ein stehendes Signal welches sich auch nicht ändert bei Veränderungen der Schaltung. Liegt vermutlich an den zusätzlich eingefügten Modulen!?

' schrieb:Meinst du jetzt die Übersetzung der englischen Bezeichnung zum deutschen LabVIEW? Da muss ich passen.

jain.. aber ein Tipp kam von Achim.

' schrieb:Fast, da die Zeit bei wait ja in ms angegeben ist, als bei 10 = 10 ms hast du 1000Hz*0,01s = 10, ansonsten hst du hier richtig verstanden. Würde die Buffersize bei kontinuierlicher Erfassung aber großzügig bemessen.

Danke, gut zu wissen. Hmm leider sind die Zahlen ja meist schon voreingestellt wenn man zB den DAQ-Assistenten mit einbindet. Wie in meinem Codebeispiel oben, es müsste ja laut dieser Formel ja dann funktionieren -.-


' schrieb:Guck dir mal im MAX die Hilfe-Einträge zu den einzelnen Größen an...(rechts im MAX..."Hilfe einblenden")...da steht alles dabei!

hmm.. danke dir..