LabVIEWForum.de - In TDMS Datei schreiben und updaten

LabVIEWForum.de

Normale Version: In TDMS Datei schreiben und updaten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

ich steh vor dem Problem dass mein Messprotokoll im Moment als Textdatei weggeschrieben wird und das ziemlich viel Speicherfrist bei Umwandlungen und aktualisierungen. Jeder rät mir zu TDMS aber irgendwie versteh ich die Logik dahinter nicht wie ich dort was updaten kann. Ich hab mal als Beispiel eine Excel File generiert wie ich mir das ganze vorstelle. Ich hab bestimmte Eingabedaten die ich bei Gelegenheit updaten will und in einer 2. Gruppe meine 8-10 Kanäle in der die Messwerte kontinuierlich geschrieben werden.

Nebeher sollte ein Lesezugriff auch noch möglich sein damit ich mit einem anderen Programm das messprotokoll auch visualisieren kann.

Kann mir da jemand helfen??

Vielen Dank schon mal

[attachment=30317]

Lv10
Erst mal zu deinem Upload: xlsx kann ich nicht öffnen und ein Tool zum Umwandeln lad ich mir nicht runter.

Zweitens: Versteh dein Anliegen nicht so recht. Liegt hauptsächlich an deinem schlechten Gebrauch der deutschen Sprache. Es muss doch möglich sein, eine klar verständliche Frage zu stellen, die ohne entstellende Rechtschreib- und Interpunktionsfehler auskommt. Was ist denn zum Beispiel ein Update? Ersetzt oder ergänzt du dabei Daten?
Hallo Schrotti,

sorry wenn ich mich etwas unverständlich ausgedrückt habe. Ich versuch es einfach nochmal.

Derzeit scheib ich verschiedene Daten in mein Messprotokoll (Textdatei).

Auf der einen Seite viele Eingabeparameter und Steuerungsparameter die von Zeit zu Zeit einfach aktualisiert werden müssen, d.h. ich ersetze die alten Werte mit den neuen an der gleichen Stelle am Beginn des Messprotokolls.

Auf der anderen Seite schreib ich während der Messung immer eine Messwertreihe bestehend aus 8 oder 9 Messwerten kontinuierlich ab einer bestimmten Zeile ins Protokoll.

Da dieses Messprotokoll bis zu 500.000 Messwertreihen enthalten kann stellt sich die Aktualisierung der Eingabedaten Anfang des Protokolls als Speicherintensiv dar, weil ich das komplette Protokoll mit allen Messwertreihen in einen Array umwandle......die Eingabedaten aktualisier und das Komplette protokoll wieder ablege.

Jetzt ist die Frage ob ich für diese Akualisierung und den vielen Messwertreihen auf ein anderes Datenformat umsteigen soll, das leichter zu handlen ist oder nicht. Hab mir jetzt auch die TDMS Dateien angeschaut aber irgendwie scheint mir das auch umständlich zu sein mit der Datenkonvertierung da meine Eingabedaten unterschiedliche Datentypen vorweisen. Zudem ist bei Tests herausgekommen dass eine TDMS Datei bei annähernd gleicher Anzahl von Messwertreihen um ein vielfaches größer ist (von ~30MB Textdatei auf ~100MB TDMS Datei)

Um meine Daten nochmal darzustellen hab ich das Excelfile generiert wie es auch evtl. in der TDMS Datei aussehen könnte.

Vielleicht hast du ja ein paar Ideen/ Hilfestellungen wie ich mein Speicherproblem durch eine Veränderung im Protokoll in den Griff bekomme.

Vielen Dank.

Gruß

[attachment=30353]
Ließe sich mit TDMS machen. Selbst bei geschickter Vorgehensweise wird der Speicherverbrauch wahrscheinlich größer sein als bei einer Ascii-Datei, aber, die *.tdms_index kann verworfen und die *.tmds defragmentiert werden. Die häufigen Schreibzugriffe mit gleichzeitig wenig zu schreibenden Daten blähen die Datei ab trotzdem auf. Die "Eingabedaten" könntest du als Eigenschaften der Datei bzw Kanalgruppe realisieren. Du kannst es aber selbstverständlich auch mit Ascii-Dateien ressourcenschonend umsetzen, indem du entweder zwei Dateien benutzt oder der Header, also die Eingabedaten, eine fixe Größe aufweist. Ersteres wurde früher zB von Diadem als natives Dateiformat benutzt. Eine Datei enthielt die Daten, die andere den Header. Bei einer fixe Headergröße musst nicht benutzten Platz mit Platzhaltersymbolen auffüllen. ZB könnte jeder Eigenschaftenname 32 Zeichen und der zugehörige Wert 256 Zeichen lang sein. Wenn du jetzt einen Wert ändern willst muss du nur dessen Position in Bezug auf den Anfang der Datei ermitteln und kannst die 256 Zeichen durch neue ersetzen. Die Position merkst du dir entweder oder ermittelst sie, indem du die Datei durchsuchst. Ein Idee wäre auch, die ersten x-zeilen als Header zu definieren. Oder, wie es die meisten Asciibasierenden Formate machen, du Kennzeichnest den Beginn und das Ende des Headers mit einer einzigartigen Zeichenkette. Die lässt sich leicht suchen etc.
Hallo Schrotti,

hab meine ASCI File schon so gestaltet wie mit einem Header (siehe TXT-Dokument). Ich überschreib es auch alles und es funktioniert auch gut....aber bis jetzt hab ich noch keine Möglichkeit gefunden nur immer den Header zu überschreiben sondern Lese die ganze Datei aus.....mit Write data to spreadsheet, dann aktualisier ich die Werte im Array.... und anschließend schreib ich wieder alles in die Datei. Beim Versuch immer nur den header zu schreiben scheiter ich immer wieder. Hab es mit einem fixen Array als header probiert aber das hat auch nichts gebracht.

Ich lad dir mal mein bisheriges VI hoch damit du dir ein bild machen kannst. Schön wär natürlich schon wenn ich mein Fileformat so belassen könnte und nicht alles umstellen müsste. Vielleicht kannst du mir noch aufzeigen wie ich den Header ohne Formatierungsfehler am besten immer wieder an den Anfang der Datei schreiben kann.

Danke.

Gruß

Rainer

[attachment=30381][attachment=30382]

Lv10
Stell dir die Datei bzw der String, der in der Datei steckt, als ein langes Array vor, wobei jedes Element des Arrays ein Byte ist. Damit enthält jedes Element ein Zeichen. Ein Byte kann 256 verschieden Zeichen codieren (2^8). Wenn du nun einen Teil des Strings auf der Festplatte überschreiben willst, muss der neue String die gleiche Länge wie der zu überschreibende String haben, da sonst darüber hinaus Zeichen überschrieben werden oder Zeichen stehen bleiben, die im String gar nichts mehr zu suchen haben. Das bedeutet, der neue Header muss exakt die gleiche Länge haben wie der alte.
Referenz-URLs