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
[
attachment=54998]
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!
Hallo GerdW,
vielen Dank für deine schnelle Antwort.
(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?
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…
(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?
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]
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!)
(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.
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?
Hallo gifo,
wenn es dich nicht stört, dass andauernd auf der Festplatte rumgerödelt wird, dann ist es wohl ok…