Multifile mit TDMS-Datei - 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: Multifile mit TDMS-Datei (/Thread-Multifile-mit-TDMS-Datei) |
Multifile mit TDMS-Datei - ZackMcKrackn - 13.06.2014 16:03 Hallo, folgendes Problem ist mir heute aufgefallen: Die Eigentliche Aufgabe besteht darin 40 Kanäle (über DAQmx) mit 1khz (100samples per Block) über ca. 30min-60min als Waveform in eine TDMS-Datei zu Speichern. Dabei steigt natürlich die Größe der Datei ziemlich schnell an. Um mit den aufgezeichneten Daten besser Arbeiten zu können wollte ich nun zB alle 10min eine neue Datei anlegen. Das klappt eigentlich auch ganz gut. Das Problem ist dabei, dass zwischen den einzelnen Dateien immer ein Schleifenzyklus, in dem Fall 100ms, angefallener Daten fehlen. Der Programmablauf sieht so aus: Über einen Schalter wird die Aufzeichnung aktiviert. Das heisst eine Tdms-Datei wird erstellt (TDMS-open/create) und dann beschrieben (TDMS-write). Wenn der Schalter wieder ausgeschaltet wird, wird aufgehört zu schreiben und die TDMS-Datei geschlossen (TDMS-Close). Bei erneuter Betätigung des Schalters wird der Vorgang wiederholt. Wenn die Aufzeichnung nun länger als zB 10 min dauert wird die Tdms-Datei ebenfalls geschlossen (TDMS-close) und eine neue TDMS-Datei angelegt (TDMS-open/create) in welche dann weiter geschrieben wird. (Die TDMS-Daten beinhalten statt einem Index im Namen die Uhrzeit mit Sekunden.) So fehlen aber wie gesagt die Daten die pro Schleifenzyklus anfallen. Wenn ich die TDMS-Dateien nicht schließe (TDMS-close) bevor ich eine neue Datei erstelle (TDMS-create) dann fehlen keine daten. Reichen die Informationen aus um eien Tipp zu geben wie man die "lücke" in der Datenaufzeichnung zwischen den Files schließt ohne auf TDMS-close zu verzichten? Leider habe ich keinen Screenshot da sich alles auf Arbeit befindet und ich hoffe ich konnte es halbwegs Verständlich formulieren. PS: Ich habe bei DASYlab (den kleinen Bruder von Labview und auch von NI) geguckt ob das Problem dort auch auftritt und siehe da, gleiches Problem. Nur das man dort eigentlich nix Falsch machen oder nichts verändern kann weil ja alles vorgefertigt ist und man nur nen Haken setzten kann das man eine Multi-File erstellen will. Also jede n- Blöcke eine neue Datei mit laufender Nummer im Namen erstellen. Aber auch da fehlt genau ein Block Daten zwischen den Files. Und es gibt nicheinmal einen Hinweis darauf das es dieses Phänomen gibt. Danke für die evtl. Hilfe sG F. RE: Multifile mit TDMS-Datei - ZackMcKrackn - 13.06.2014 16:50 Sorry ich habe mich geirrt. bei Dasylab hat man das Problem nicht.... RE: Multifile mit TDMS-Datei - macmarvin - 16.06.2014 10:06 - Sind denn deine 10min-Dateien (deutlich) größer als ca. 180-200MB? - Schreibst du die Datei in der gleichen Schleife wie die DAQmx Operationen? Falls "Ja": - TDMS Buffering pro Kanal aktivieren (suche einfach nach "NI_MinimumBufferSize"). - File IO in eigene Schleife, mit (begrenzter) Queue zwischen den Schleifen, auslagern. RE: Multifile mit TDMS-Datei - ZackMcKrackn - 16.06.2014 14:49 (16.06.2014 10:06 )macmarvin schrieb: - Sind denn deine 10min-Dateien (deutlich) größer als ca. 180-200MB? Danke ersteinmal für die Antwort! - Nein die Dateien sind ca. 180MB bei 10min und 1,2GB bei 1Std - Ja wird alles in einer Schleife gemacht. Also dein Vorschlag wäre dann die FileI/O parallel laufen zu lassen ? Ich habe jetzt noch ein Screenshot der FileI/O gemacht. Dieses VI befindet sich in der "Hauptschleife". "WriteData" ist der Schalter zum aktivieren und an "Reopen" liegt die Flanke zum Datei neu anlegen nach einer bestimmten Zeit. Danke sG F. RE: Multifile mit TDMS-Datei - jg - 16.06.2014 15:17 Ich sag nur RACE Condition... Gruß, Jens RE: Multifile mit TDMS-Datei - ZackMcKrackn - 16.06.2014 18:37 (16.06.2014 17:51 )ZackMcKrackn schrieb: [quote='jg' pid='167286' dateline='1402928234'] Und wo genau??? Erstellen/Schliessen? Eigentlich dachte ich, wäre dies ausgeschlossen, durch die boolschen Bedingungen die zu den "Ereignissen" führen. Oder wo liegt mein Denkfehler? Die Variablen dürften ja keine Probleme machen... Ich glaube Textbasiert würde ich wissen was du meinst Gruß F. RE: Multifile mit TDMS-Datei - jg - 16.06.2014 19:17 Etwas vereinfacht deine Logik inkl. Auswertung: [attachment=50044] Wenn ReOpen 1x True wird, schließt du den File. Damit ist die FileRefnum danach ungültig. Beim nächsten Durchlauf, wenn ReOpen wieder False wird, öffnest du zwar einen neuen File, aber parallel dazu wird schon der Schreibvorgang abgearbeitet. Du hast nicht sichergestellt, dass die FileRefnum zu diesem Zeitpunkt gültig ist, also Race Condition + ein Datensatz ist nicht gespeichert... Gruß, Jens P.S.: Und es geistert öfter durchs Forum, was sollen die For Schleifen, die du nur 1x ausführst? RE: Multifile mit TDMS-Datei - ZackMcKrackn - 16.06.2014 21:06 (16.06.2014 19:17 )jg schrieb: Etwas vereinfacht deine Logik inkl. Auswertung: Mhm,ok. Aber wie soll ich sonst das Problem lösen. Ich muss ja die ein File schliessen und die andere neu anlegen. Da gibt es ja dann den Moment wo die FileRefnum ungültig ist. Die "Race Condition" ist mir immernoch nicht klar. Zur For-Schleife: Die soll halt nur einmal ausgeführt werden in der Schleife. Aber da ich eine Flankenauswertung mache ist das sicher unnötig. Musste halt schnell gehen... RE: Multifile mit TDMS-Datei - jg - 17.06.2014 08:59 Race Condition: THINK Dataflow, wenn du in LabVIEW etwas parallel programmierst, dann kann es auch parallel abgearbeitet werden, bzw. LabVIEW wird die Abarbeitungsreihenfolge entscheiden. Im Fall "Öffnen des Files" darf LabVIEW also gleichzeitig die lokale Variable FileRefnum auslesen und deine Case-Struktur zum Öffnen abarbeiten. In der Regel wird mit 99,9% Wahrscheinlichkeit zuerst die lokale Variable ausgelesen, (edit: da das im Vergleich zur Case-Struktur weniger CPU Zeit kostet). Die enthält zu diesem Zeitpunkt noch die Referenz vom letzten Durchlauf, die jedoch durch das Schließen des Files ungültig ist. Mögliche Lösung: Datenfluss beachten und die Case-Struktur mit dem File-Open VOR dem Schreiben ausführen! Gruß, Jens RE: Multifile mit TDMS-Datei - ZackMcKrackn - 17.06.2014 09:42 Ahhh. Eigentlich logisch . Sorry, ich brauch manchmal etwas länger. Mir ist heute auch schon aufgefallen das die Variablen den Wert "zu spät" bekommen. Dann werde ich wohl noch Sequenzen benutzen. Danke für die nette und gute Hilfe!!!! sG F. |