Hallo Hannes,
Zitat:Aber ehrlich gesagt klingt das sogar für mich recht dämlich.
Wieso sollte das dämlich sein?
Genau so funktioniert das doch grundsätzlich: du gibst Samplerate und Sampleanzahl vor und musst entsprechend auf deine Samples warten...
Das klingt deswegen dämlich, da dann das eingelesene Signal nicht mehr stetig ist, da doch auch das wegspeichern Zeit benötigt.
Außerdem kann ich da nie sicher sein, dass im Cache gerade genau die nächsten Samples sind.
Das war vermutlich auch das Problem vorher, dass ich die alten Werte so teilweise mehrfach ausgelesen habe.
Oder umgehe ich das mit dem Metronom?
Was sollte ich besser verwenden, Metronom oder Uhr?
Hallo Hannes,
Zitat:Das klingt deswegen dämlich, da dann das eingelesene Signal nicht mehr stetig ist, da doch auch das wegspeichern Zeit benötigt.
Dann rate mal, wozu DAQmx einen Puffer für die Daten anlegt. Und warum es eine Funtion namens DAQmxStart gibt. Und warum man Tasks mit DAQmxStop wieder anhalten kann/sollte...
Dieser Puffer wird genutzt, um Samples abzulegen, ohne das der User ständig abfragen muss! Du kannst in der Zwischenzeit andere Dinge erledigen (wie z.B. Daten speichern) und musst nur rechtzeitig neue Samples aus dem Puffer holen, bevor er überläuft...
Also nochmal auf Anfang zurück und
Beitrag #4 lesen...
Gelesen habe ich ihn.
Ich weiß aber immer noch nicht, was du mir damit sagen willst.
Stoppe ich den Task nämlich, gehen natürlich auch die Daten bis zum nächsten Start verloren.
Die warten ja nicht auf den DAQ.
Hallo Hannes,
Zitat:Ich weiß aber immer noch nicht, was du mir damit sagen willst.
- Du konfigurierst deinen Task mit einer bestimmten Samplerate.
- Du startest den Task - noch vor der Schleife.
- Du liest eine bestimmte Anzahl Werte mittels DAQmxRead: dazu musst du nichts weiter machen als DAQmxRead eben diese Anzahl mitzuteilen. DAQmx handhabt alles im Hintergrund. Du kannst parallel alles andere erledigen.
- Wenn du keine neuen Werte mehr lesen willst,
dann erst stoppst du den Task (nach der Schleife).
Alle Init- und DeInit-Funktionen gehören nicht in die Messschleife. Hatte ich das nicht schon mal (lautstark) erwähnt?
Doch. Da sind sie doch auch gar nicht mehr drin?
Hallo Hannes,
Zitat:Da sind sie doch auch gar nicht mehr drin?
Woher soll ich das wissen?
Ah, da war ja noch ein VI...
Du brauchst gar keine Uhr.
Das Timing wird doch über Samplerate und Anzahl der gewünschten Samples festgelegt. Solange nicht die gewünschte Anzahl Samples im Puffer steht, wartet DAQmxRead...
Hatte die aktuelle VI an meinen Beitrag angehängt.
Laut Hilfe wartet es eben nicht, wenn der Sample-Modus auf kontinuierlich steht.
Oder habe ich das da falsch verstanden?
Ich habe mir mal die Gesamtzahl der gelesenen Samples anzeigen lassen.
Die steigt in genau passenden Schritten, bloß halt schneller als mit 1Hz.
Die Anzahl der auf einmal gelesenen Samples stimmt also.
Ich habe jetzt einmal das Schreiben in eine externe Schleife ausgelagert.
Geht immer noch zu schnell.
Oder wären da eventuell Melder zur Synchronisation besser als eine Queue?
VI ist im Anhang
Edit: Ich habe die obere Schleife nun durch eine zeitgesteuerte ersetzt, die nur jede Sekunde schreibt.
Das scheint zu passen, das Signal ist auch nicht mehr totaler Murks, im Gegensatz zur Methode beides in einer zeitgesteuerten Schleife zu haben.
Oder war das gerade nur Zufall?