LabVIEWForum.de
TDMS in Queue laden - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: TDMS in Queue laden (/Thread-TDMS-in-Queue-laden)



TDMS in Queue laden - gifo - 07.01.2016 14:45

Hallo LabVIEW Forum,

ich habe ein Problem und würde mich über Hilfe von euch freuen.
Ich würde gerne eine TDMS-Datei in eine Queue einlesen, um diese dann in einer anderen Schleife kontinuierlich auszulesen.
Bei meinen Versuchen wurden die Daten zwar aus der Queue geladen, dann jedoch nur kurz im Signalverlaufsgraph angezeigt.
Hat vielleicht jemand einen Tipp für mich woran das liegt oder was ich ändern muss um mein Ziel zu erreichen?

Viele Grüße,
Gifo
lv14_img [attachment=54998]


RE: TDMS in Queue laden - GerdW - 07.01.2016 14:56

Hallo gifo,

momentan liest du die komplette TDMS-Datei mit einmal ein und schreibst die gelesenen Waveforms in die Queue.
Am anderen Ende liest du die Waveforms aus und stellst sie dar.
Dann rufst du wahrscheinlich den "Datei lesen"-State erneut auf: dummerweise wurde die Datei ja schon komplett gelesen, sodass der zweite Lesezugriff mit einem Fehler enden sollte (EOF erreicht!) und dementsprechend leere Waveforms in die Queue geschrieben werden. Und die werden dann auch dargestellt…

Zusammenfassung:
- Debugging betreiben!
- Fehlerbehandlung programmieren!


RE: TDMS in Queue laden - gifo - 07.01.2016 15:16

Hallo GerdW,
vielen Dank für deine schnelle Antwort. Top1


(07.01.2016 14:56 )GerdW schrieb:  Hallo gifo,

momentan liest du die komplette TDMS-Datei mit einmal ein und schreibst die gelesenen Waveforms in die Queue.
Am anderen Ende liest du die Waveforms aus und stellst sie dar.
Dann rufst du wahrscheinlich den "Datei lesen"-State erneut auf: dummerweise wurde die Datei ja schon komplett gelesen, sodass der zweite Lesezugriff mit einem Fehler enden sollte (EOF erreicht!) und dementsprechend leere Waveforms in die Queue geschrieben werden. Und die werden dann auch dargestellt…

Heißt das, ich müsste bei jedem neuem „Datei lesen“-State die Queue leeren? Was meinst du mit Fehlerbehandlung programmieren?


RE: TDMS in Queue laden - GerdW - 07.01.2016 15:34

Hallo gifo,

Zitat:Heißt das, ich müsste bei jedem neuem „Datei lesen“-State die Queue leeren?
Nein. Du solltest aber nicht versuchen, die TDMS-Daten weiter zu lesen, wenn du gerade eben erst die komplette Datei gelesen hast…

Zitat:Was meinst du mit Fehlerbehandlung programmieren?
Damit meine ich, dass man Fehler wie "EOF erreicht" auch programmatisch behandeln kann…


RE: TDMS in Queue laden - gifo - 07.01.2016 15:51

(07.01.2016 15:34 )GerdW schrieb:  Hallo gifo,

Zitat:Heißt das, ich müsste bei jedem neuem „Datei lesen“-State die Queue leeren?
Nein. Du solltest aber nicht versuchen, die TDMS-Daten weiter zu lesen, wenn du gerade eben erst die komplette Datei gelesen hast…
Okay, also könnte ich die Datei einmal einlesen und dann zum nächsten State (z.B. Datei schließen -> Init) gehen, wenn ich das richtig verstehe.
Mein Problem dabei ist aber das wenn ich dann in einer zweiten Schleife das Frequenzspektrum darstellen lasse und an diesem Änderung vornehme, ich jedes Mal die Datei neu einlesen muss. Gibt es dafür auch eine andere Lösung?

(07.01.2016 15:34 )GerdW schrieb:  
Zitat:Was meinst du mit Fehlerbehandlung programmieren?
Damit meine ich, dass man Fehler wie "EOF erreicht" auch programmatisch behandeln kann…

Sorry da stehe ich jetzt etwas auf dem Schlauch. Wenn der Fehler erscheint dann bricht das Programm ja ab. Oder wie meinst du das?


RE: TDMS in Queue laden - gifo - 07.01.2016 16:15

Mein jetziges Problem ist, dass meine zweite Schleife, nach dem Auslesen der Queue, wartet bis die Daten in der Queue erneuert wurden.
Erst wenn das geschieht, erfolgt ein neuer Iterationsschritt der Schleife 2.
Warum ist es denn nicht möglich, die Daten in der Queue immer und immer wieder neu auszulesen?

[attachment=54999]


RE: TDMS in Queue laden - GerdW - 07.01.2016 16:25

Hallo gifo,

Zitat:Mein jetziges Problem ist, dass meine zweite Schleife, nach dem Auslesen der Queue, wartet bis die Daten in der Queue erneuert wurden.
Erst wenn das geschieht, erfolgt ein neuer Iterationsschritt der Schleife 2.
Korrekt. Wo ist hier überhaupt ein Problem?
Lies dir doch einfach mal die Hilfe zur Dequeue-Funktion durch! Die kennt ja auch einen Timeout-Input und einen TimedOut-Output, die man verwenden könnte…

Zitat:Warum ist es denn nicht möglich, die Daten in der Queue immer und immer wieder neu auszulesen?
Weil eine Queue so nicht funktioniert! (Mit einem Melder wäre das möglich, der arbeitet aber auch anders.)
Wenn du ein Element aus der Queue entnimmst, ist es (logischerweise) in der Queue nicht mehr verfügbar…
(Du könntest mit QueueStatus arbeiten, ist dann aber eher ein Missbrauch als eine sinnvolle Vorgehensweise!)


RE: TDMS in Queue laden - gifo - 07.01.2016 16:33

(07.01.2016 16:25 )GerdW schrieb:  Hallo gifo,

Zitat:Mein jetziges Problem ist, dass meine zweite Schleife, nach dem Auslesen der Queue, wartet bis die Daten in der Queue erneuert wurden.
Erst wenn das geschieht, erfolgt ein neuer Iterationsschritt der Schleife 2.
Korrekt. Wo ist hier überhaupt ein Problem?
Lies dir doch einfach mal die Hilfe zur Dequeue-Funktion durch! Die kennt ja auch einen Timeout-Input und einen TimedOut-Output, die man verwenden könnte…

Ach mensch stimmt ja. Das mit dem Timeout-Input hatte ich total vergessen. Manchmal hat man aber auch Tomaten auf den Augen. Blush

Ich habe das jetzt etwas anders gelöst. Und zwar führe ich die States "Einstellung Datei laden", "Datei lesen" und "Datei schließen" solange nacheinander aus, bis "STOPP Daten lesen" gedrückt wird.

Ist diese Vorgehensweise okay oder ist das unsauber?


RE: TDMS in Queue laden - GerdW - 07.01.2016 16:41

Hallo gifo,

wenn es dich nicht stört, dass andauernd auf der Festplatte rumgerödelt wird, dann ist es wohl ok…