LabVIEWForum.de
TDMS loggt nicht/sehr langsam - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: TDMS loggt nicht/sehr langsam (/Thread-TDMS-loggt-nicht-sehr-langsam)



TDMS loggt nicht/sehr langsam - Roumaen - 28.12.2018 13:45

Werte Helfer,

ich komme nicht weiter :/ Ich bin dabei einen Datenlogger aufzubauen und kupfere zu Lernzwecken etwas das LV-Beispiel ab. Ich habe hier aber noch einen Loop zur Messwertbearbeitung (Umrechnung, Filterung etc.) zwischen den DAQ- und den Logging Loop geschoben, weshalb die Messwerte durch zwei Queues durchmüssen, bevor sie gespeichert werden.

Mein Problem besteht aktuell darin, dass mein TDMS-Write (scheinbar) nur sehr langsam arbeitet und oft nur die ersten Werte einer Messung speichert. Wenn ich mir die Anzahl der Elemente in den zwei Queues (vom Aquisition Loop zum Processing Loop und von jenem dann zum Logging Loop) während der Messung anschaue, dann füllt sich die zweite sehr rasch, als würde per TDMS gar nichts "abgeholt" bzw. dequeued werden.

Was mich hier irritiert ist, dass das nicht von der Samplingfrequenz der Datenerfassung abzuhängen scheint, da sich die Queue auch bei einer Messung pro Sekunde mit der selben Geschwindigkeit mit der der Loop zu laufen scheint füllt. Mein DAQmx Read wartet unendlich lang auf neue Werte; deshalb sollte doch auch immer nur etwas enqueued werden, wenn ein neuer Messwert zur verfügung steht?!

Desweiteren; wenn ich die Messung etwas länger laufen lasse (+10 Sekunden) kann ich das ganze Programm oft nicht mehr sauber schließen, weil die Loops (Processing und Logging) noch beschäftigt sind oder komplett hängen. Und wenn das zu oft der Fall ist, muss ich sogar LV komplett schließen, weil das ganze Program selbst nach Neustart kaum auf Befehle reagiert. Ich tippe auf irgendwelche Speicherprobleme.

Meine Fragen an euch:
1.) ist es hier sinnvoller die Daten Blockweise per TDMS zu speichern? Ich hatte gelesen, dass es wohl efizienter wäre wobei ich eigentlich dachte, dass TDMS genau für meine Anwendung gedacht ist (Streaming/Logging).
2.) Spricht etwas gegen die Architektur mit den zwei Queues? Ich möchte gerne die Umgerechneten Daten speichern und auch Anzeigen (per extra Notifier), weshalb meiner Meinung nach der Processing Loop vor der Anzeige bzw. dem Logging Loop durchlaufen werden muss.

Ich nutze LV 2015 Student 32bit auf einem Lenovo W530 mit i7 4x2,6 GHZ und 5400 RPM HDD

Darüber hinaus freue ich mich natürlich über jede Anregung zu meinem Entwurf! (Ich habe einen Ordner mit allen VIs angehängt - ich bin unfähig einen Projekt zu erstellen, das alles enthält Wall)

Ich hoffe meine Probleme sind trivial für euch - Besten Dank im Voraus und guten Rutsch euch allen!


RE: TDMS loggt nicht/sehr langsam - GerdW - 29.12.2018 18:22

Hallo Roumaen,

Zitat:Mein Problem besteht aktuell darin, dass mein TDMS-Write (scheinbar) nur sehr langsam arbeitet und oft nur die ersten Werte einer Messung speichert. Wenn ich mir die Anzahl der Elemente in den zwei Queues (vom Aquisition Loop zum Processing Loop und von jenem dann zum Logging Loop) während der Messung anschaue, dann füllt sich die zweite sehr rasch, als würde per TDMS gar nichts "abgeholt" bzw. dequeued werden.
Hast du mal im Logger geschaut (aka: debugged), warum die Logging-Queue nicht geleert wird?
Tritt da evtl. ein Fehler auf, der eine weitere Abarbeitung behindert?
(Im deinem Beispiel sind die Einstellungen leer, es wird deshalb garantiert kein gültiger Pfad für die Logger-Einstellungen bereitgestellt…)

Zu deinen VIs:
- Das En-Q und De-Q benötigen keine While-Loop (Rube-Goldberg!)
- Bei den FGVs kann man auf die While-Loops verzichten, wenn man statt Schieberegistern FeedbackNodes verwendet…
- Die Queue-Size muss man im Run-State nicht prüfen, es reicht aus, wenn dies im Stop-State passiert…
- Diverse FOR-Loops verwenden nicht-initialisierte Schieberegister: das kann beim ersten Start noch gut gehen, aber nicht notwendigerweise bei nachfolgenden…

Zitat:Ich habe einen Ordner mit allen VIs angehängt - ich bin unfähig einen Projekt zu erstellen, das alles enthält
1. Neues leeres Projekt erstellen
2. Ordner zu Projekt hinzufügen
3. Projektdatei speichern
Fertig.


RE: TDMS loggt nicht/sehr langsam - Roumaen - 30.12.2018 23:48

Hallo Gerd,

danke für deine Rückmeldung! Auch wenn deine Antwort die Lösung nicht direkt enthalten hat, bin ich durch deine Anregung drauf gekommen. Die Einstellungen, die ich verwende wären wohl hilfreich gewesen; ich habe die Anzahl der zu lesenden Samples am DAQmx Read auf -1 (Alle) und Continious Sampling eingestellt. Stelle ich das auf 1 oder größer, verhält sich alles wie es soll und das Program schließt auch nach der Aufnahme sauber. Da kann ich das Problem lange im Logging Loop suchen...debugging habe inatürlich probiert und selbstverständlich konnte ich den Fehler da nicht feststellen. Logging Pfad hat auch immer gepasst Smile

Scheinbar habe ich immer noch Verständnisprobleme mit den DAQmx VI`s. Hat im Modus "Continious Sampling" die Samplefrequenz ("Rate") keinen Einfluss wenn ich "Anzahl zu lesender Samples" am Read VI auf -1 stelle?
Mich wundert nach wie vor, dass meine Anzeige sich trotzdem immer schön mit der eingestellten Frequenz geupdated hat - also bei Rate=1, Samples to Read=-1 und continious sampling - wobei die Queue aber in Lichtgeschwindigkeit gefüllt wurde.

Zu den VI`s:
- Rude Goldberg war ein überbleibsel; ist eliminiert
- sind FeedbackNodes denn Schieberegistern vorzuziehen?
- die Queue Size wird jetzt nur noch im Stop State kontrolliert - im ANzeige Loop habe ich das nur temporär drinnen, um zu sehen, wie schnell sich die Queue füllt
- ich habe alle Schieberegister (außer FGV`s) initialisiert

Zum Projektordner:
- So habe ich das gemacht aber das File hat danach immer noch nur 32KB größe...vergesse ich da was?


Einen schönen Abend dir/euch allen und vielen Dank!


RE: TDMS loggt nicht/sehr langsam - GerdW - 31.12.2018 14:15

Hallo roumaen,

Zitat:ie Einstellungen, die ich verwende wären wohl hilfreich gewesen; ich habe die Anzahl der zu lesenden Samples am DAQmx Read auf -1 (Alle) und Continious Sampling eingestellt. Stelle ich das auf 1 oder größer, verhält sich alles wie es soll und das Program schließt auch nach der Aufnahme sauber.
Meine Empfehlung lautet:
- mit fester Sampleanzahl arbeiten, d.h. Wert >0
- Sampleanzahl sollte 1/10 der Samplerate entsprechen

Wenn du mit "-1" arbeitest, bekommst du immer Blöcke verschiedener Größe (Sampleanzahl) zurück, je nachdem, wieviele Samples mittlerweile gesampelt wurden. Das führt dazu, dass dein Processing hinterher etwas komplizierter wird (wie willst du z.B. sicherstellen, dass ein Mittelwert immer die gleiche Anzahl Samples benutzt?). Außerdem führt es beim TDMS-Logging zu jeweils unterschiedlich großen Datenblöcken, was sich dann wieder beim Auswerten der Daten nachteilig auswrken kann…

Zitat:Scheinbar habe ich immer noch Verständnisprobleme mit den DAQmx VI`s. Hat im Modus "Continious Sampling" die Samplefrequenz ("Rate") keinen Einfluss wenn ich "Anzahl zu lesender Samples" am Read VI auf -1 stelle?
Du hast eine Samplerate von 1Hz (=1S/s) vorgegeben: du bekommst genau ein Sample pro Sekunde. Wieviel mehr Einfluss willst du denn noch?
Es könnte höchstens passieren, dass du 0 (null) Samples zurückbekommst, wenn du mit "-1" abfragst, weil eben noch keine neuen vorhanden sind. Und wie reagiert dann dein Logging auf leere Waveforms?

Zitat:Zum Projektordner: So habe ich das gemacht aber das File hat danach immer noch nur 32KB größe...vergesse ich da was?
Die Projektdatei (*.lvproj) enthält die Beschreibungen der im Projekt enthaltenen Elemente - aber nicht die Elemente selbst!
Außerdem ist diese Datei eine XML-Datei, die du dir gern mal mit einem Texteditor anschauen kannst…
Der Projektordner dagegen sollte durchaus mehr Inhalt haben: da packt man üblicherweise die im Projekt enthaltenen Elemente (wie VIs, CTLs, etc.) hinein!

Guten Rutsch!


RE: TDMS loggt nicht/sehr langsam - Roumaen - 03.01.2019 13:34

Hallo Gerd,

Zitat:
Du hast eine Samplerate von 1Hz (=1S/s) vorgegeben: du bekommst genau ein Sample pro Sekunde. Wieviel mehr Einfluss willst du denn noch?
Es könnte höchstens passieren, dass du 0 (null) Samples zurückbekommst, wenn du mit "-1" abfragst, weil eben noch keine neuen vorhanden sind. Und wie reagiert dann dein Logging auf leere Waveforms?

Vielleicht hab ich mich schlecht ausgedrückt; ich habe das so verstanden, dass das Read VI bei z.B einer Einstellung von 10 (Anzahl zu lesender Samples) solange wartet bis 10 Samples vorhanden sind und diese dann ausliest. Heißt bei einer Rate von 1 und Anzahl zu lesender Samples von 1 bekomme ich jede Sekunde einen Wert. Wenn ich die Anzahl der zu lesenden Samples auf -1 also Alle (verfügbaren) stelle, sollte doch trotzdem nur einmal pro Sekunde ein Wert gelesen werden.

Meine Queue hat sich ja aber VIEL schneller gefüllt - waren das die leeren Waveforms, die du meintest? Und spielt die Einstellung Continius Sampling einen Einfluss dabei?

Danke für die Unterstützung!


RE: TDMS loggt nicht/sehr langsam - GerdW - 03.01.2019 14:40

Hallo Roumaen,

Zitat:ich habe das so verstanden, dass das Read VI bei z.B einer Einstellung von 10 (Anzahl zu lesender Samples) solange wartet bis 10 Samples vorhanden sind und diese dann ausliest.
Korrekt.
Allerdings kann es bei diesen Werten (10 Samples bei 1S/s Samplerate) dazu kommen, dass du einen Timeout-Fehler bekommst: standardmäßig wartet DAQmxRead maximal 10s…

Zitat:Heißt bei einer Rate von 1 und Anzahl zu lesender Samples von 1 bekomme ich jede Sekunde einen Wert.
Korrekt.

Zitat:Wenn ich die Anzahl der zu lesenden Samples auf -1 also Alle (verfügbaren) stelle, sollte doch trotzdem nur einmal pro Sekunde ein Wert gelesen werden.
Bei "-1" bekommst du die gerade verfügbaren Samples zurück.
Wenn du nun alle 10ms nachfragst, könnte das eben 99mal "kein Sample" sein und 1mal "1 Sample"…
("Ich schreibe "könnte", weil ich es nicht genau weiß und gerade kein DAQmx-Gerät zum Testen hier habe. Du dagegen könntest sowas ja ziemlich schnell per Debugging überprüfen…)

Zitat:Meine Queue hat sich ja aber VIEL schneller gefüllt - waren das die leeren Waveforms, die du meintest?
Das ist meine Vermutung.
Wie schon ein paarmal gesagt: debugging…

Zitat:Und spielt die Einstellung Continius Sampling einen Einfluss dabei?
Nein, kann ich nicht erkennen.
"Continuous" sorgt nur dafür, dass der Task quasi "endlos" Samples liefert und du den Task explizit wieder beenden musst…