LabVIEWForum.de
TDMS-Datei mit XML header konvertieren - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: TDMS-Datei mit XML header konvertieren (/Thread-TDMS-Datei-mit-XML-header-konvertieren)



TDMS-Datei mit XML header konvertieren - Jarrao - 22.03.2020 01:11

Hallo Zusammen,

leider habe ich ein kleines Problem mit TDMS-Dateien. Das Problem kann ich leider nicht näher beschreiben, da ich nur indirekt damit zu tun habe.
Aber vielleicht kann mir Jemand dabei helfen das Problem zu lösen, was mir sehr helfen würden.

Ich habe mir ein ziemlich aufwendiges Python Script geschrieben, um eine vielzahl von TDMS-Dateien auszulesen, zu sortieren, bearbeiten, plotten und umzuwandeln.
Das hat mir extrem viel Arbeit abgenommen.
Leider ist es so, dass es im LabView Programm, weches die TDMS-Daten erzeugt, vor einigen Monaten ein Update gab. Seither funktioniert das einlesen der TDMS-Daten nicht mehr. Zwar habe ich nun einen Workaround mit VBA, der aber nicht annähernd an Python heran kommt und auch nur CSV-Dateien verarbeiten kann, womit diese zuerst alle manuell per Excel-Addin geöffnet und abgespeichert werden müssen.

Versuche ich die TMDS-Dateien zu exportieren, gibt es die Meldung, dass extended float nicht mehr unterstützt werden. Der Programmierer des Python Paketes hat auch darauf hingewiesen:

Limitations
This module doesn’t support TDMS files with XML headers or with extended floating point data.
TDMS files support timestamps with a resolution of 2^-64 seconds but these are read as numpy datetime64 values with microsecond resolution.


Ich habe nachgefragt, um herauszufieden warum die TDMS-Dateien auf einmal nicht mehr kompatiebel sind, jedoch haben mir die LV Expterten gesagt, dass es keinen Unterschied gäbe.
Als Test habe ich mir eine TDMS-Datei genommen, welche vor dem Update erzeugt wurde und eine neue. Von den Informationen die dort enthalten sind und von den Datentypen scheint es keinen Unterschied zu geben.
Lade ich die alten Dateien ins Skript, funktioniert alles ohne Probleme, lade ich die neuen rein, bekomme ich die oben genannte Fehlermeldung.

Falls mir Jemand sagen kann, was zu dieser Änderung geführt haben könnte und was ich den LV Menschen sagen kann, damit sie die Dateien wieder so abspeichern können, dass diese geladen werden können, wäre ich euch wirklich sehr dankbar !
Meine Vermutung ist, dass es evt. eine eine neue Version von LV aufgespielt wurde und nun die Datentypen unterschiedlich sind, so dass man nichts daran ändern kann, aber ggf. gibt es ja eine Möglichkeit die ganzen Dateien Batchmäßig in andere TDMS zu konvertieren ? Oder auch mit einer neureren LV Version im alten Format zu speichern ?
Am schönsten wäre es, wenn die Dateien sofort als CSV, txt gespeichert würden, wobei ich nicht weiß ob das bei LV standardmäßig möglich ist?

Vielen Dank schon einmal im Voraus !


RE: TDMS-Datei mit XML header konvertieren - GerdW - 22.03.2020 17:43

Hallo Jarrao,

Zitat:Leider ist es so, dass es im LabView Programm, weches die TDMS-Daten erzeugt, vor einigen Monaten ein Update gab. Seither funktioniert das einlesen der TDMS-Daten nicht mehr.
… This module doesn’t support TDMS files with XML headers or with extended floating point data. … Falls mir Jemand sagen kann, was zu dieser Änderung geführt haben könnte und was ich den LV Menschen sagen kann, damit sie die Dateien wieder so abspeichern können, dass diese geladen werden können, wäre ich euch wirklich sehr dankbar !
Die Änderung scheint ja im LabVIEW-Programm vorgenommen worden zu sein, und anscheinend weißt du auch, wann das Update kam.
Du weißt auch, was von deiner Python-Routine nicht unterstützt wird, kannst als auch speziell danach fragen.

Sag also dem Programmierer, dass er mal in seinem SCC-System schauen soll, was sich mit diesem Update bezüglich "XML headers" und "extended floating point" alles geändert hat…


RE: TDMS-Datei mit XML header konvertieren - Jarrao - 23.03.2020 09:44

(22.03.2020 17:43 )GerdW schrieb:  Hallo Jarrao,

Zitat:Leider ist es so, dass es im LabView Programm, weches die TDMS-Daten erzeugt, vor einigen Monaten ein Update gab. Seither funktioniert das einlesen der TDMS-Daten nicht mehr.
… This module doesn’t support TDMS files with XML headers or with extended floating point data. … Falls mir Jemand sagen kann, was zu dieser Änderung geführt haben könnte und was ich den LV Menschen sagen kann, damit sie die Dateien wieder so abspeichern können, dass diese geladen werden können, wäre ich euch wirklich sehr dankbar !
Die Änderung scheint ja im LabVIEW-Programm vorgenommen worden zu sein, und anscheinend weißt du auch, wann das Update kam.
Du weißt auch, was von deiner Python-Routine nicht unterstützt wird, kannst als auch speziell danach fragen.

Sag also dem Programmierer, dass er mal in seinem SCC-System schauen soll, was sich mit diesem Update bezüglich "XML headers" und "extended floating point" alles geändert hat…

Danke schon einmal für die Antwort. Was ist genau mit SCC-System gemeint, leider kenne ich mich mit LV gar nicht aus.
Ich habe Ihm zwei Dateien geschickt und er meinte, die Dateien sehen gleich und es gäbe seiner Meinung nach keinen Unterschied bzw. es hätte sich daran nichts geändert. Ich muss im quasi konkret sagen, was er sich genau angucken soll.
In der TDMS hatte ich einmal einen Dateitypen gefunden, ich weiß leider nicht mehr ob es float oder double war.
Das Problem war nur, dass die Daten bei den alten TDMS-Dateien gleich zu den neuen war, sonst hätte ich sagen können "Die alte datei ist Float, die neue double, woher kommt der Unterschied?", aber so kann ich außer an der Fehlermeldung keinen unterschied an den Dateien erkennen.

Ich werden aber noch einmal genauer nachfragen.


RE: TDMS-Datei mit XML header konvertieren - GerdW - 23.03.2020 11:38

Hallo Jarrao,

Zitat:Was ist genau mit SCC-System gemeint, leider kenne ich mich mit LV gar nicht aus.
SCC = Source Code Control, also etwas wie SVN oder GIT. (Hat nichts mit LabVIEW im Speziellen zu tun.)

Zitat:Ich habe Ihm zwei Dateien geschickt und er meinte, die Dateien sehen gleich und es gäbe seiner Meinung nach keinen Unterschied bzw. es hätte sich daran nichts geändert. Ich muss im quasi konkret sagen, was er sich genau angucken soll. Das Problem war nur, dass die Daten bei den alten TDMS-Dateien gleich zu den neuen war, sonst hätte ich sagen können "Die alte datei ist Float, die neue double, woher kommt der Unterschied?", aber so kann ich außer an der Fehlermeldung keinen unterschied an den Dateien erkennen.

Also gibt es überhaupt keinen Unterschied zwischen "alten" und "neuen" TDMS-Dateien?
Wieso denkst du dann, dass das Problem beim LabVIEW-Programm liegt?

Zitat:In der TDMS hatte ich einmal einen Dateitypen gefunden, ich weiß leider nicht mehr ob es float oder double war.
Mangels Beispieldaten können wir dir hier nicht weiterhelfen…


RE: TDMS-Datei mit XML header konvertieren - Jarrao - 23.03.2020 12:25

Leider darf ich die Dateien nicht teilen, sonst hätte ich im ersten Post direkt beide angehangen.
Mir ist bewusst, dass solche schwammigen Beschreibungen schwierig sind.
Aber es hätte natürlich sein können, dass Jemand sowas sagt wie "Ja, beim Wechsel von LV xy auf LV yxz wurde der dateityp standardmäßig geändert, man kann dies jedoch mit Parameter xy leicht auf den alten Stand speichern"

Ich geh nur davon aus das es an LV liegt, weil tausende Dateien vor dem Update in das Python Programm geladen werden können und alle Dateien die nach dem Update aus der selben Quelle erzeugt wurden nicht.

Und das ist eben die Kernfrage, was könnte bei LV anders sein. Vielleicht werden die TDMS-Dateien ab einer bestimmten Version in einer anderen Weise abgespeichert? Ich als Leihe kann leider keinen Unterschied erkennen.
Mit Excel lassen sich beide Problemlos öffnen, nur eben nicht mit dem npTDMS-Paket von Python.


RE: TDMS-Datei mit XML header konvertieren - jg - 23.03.2020 13:25

Hallo,

es gab vor langer Zeit eine große Änderung - mit LabVIEW 2009 wurde TDMS 2.0 eingeführt:
http://www.ni.com/product-documentation/9995/en/

Leider erzählst du bisher nichts über die Art der Änderungen an deinem LabVIEW Programm, also keine Ahnung, ob das auf dich zutrifft.

Bei TDMS 2.0 gibt es offenbar sowohl Double als auch Extended als "Binary Data Format":
https://www.ni.com/de-de/support/documentation/supplemental/07/tdms-file-format-internal-structure.html

Wenn also jetzt auf einmal extended data geschrieben werden, dann würde ich an deiner Stelle einen Blick in den LabVIEW Code werfen und überprüfen, ob da jetzt auf einmal "extended" geschrieben wird.

Gruß, Jens


RE: TDMS-Datei mit XML header konvertieren - Jarrao - 23.03.2020 15:12

(23.03.2020 13:25 )jg schrieb:  Hallo,

es gab vor langer Zeit eine große Änderung - mit LabVIEW 2009 wurde TDMS 2.0 eingeführt:
http://www.ni.com/product-documentation/9995/en/

Leider erzählst du bisher nichts über die Art der Änderungen an deinem LabVIEW Programm, also keine Ahnung, ob das auf dich zutrifft.

Bei TDMS 2.0 gibt es offenbar sowohl Double als auch Extended als "Binary Data Format":
https://www.ni.com/de-de/support/documentation/supplemental/07/tdms-file-format-internal-structure.html

Wenn also jetzt auf einmal extended data geschrieben werden, dann würde ich an deiner Stelle einen Blick in den LabVIEW Code werfen und überprüfen, ob da jetzt auf einmal "extended" geschrieben wird.

Gruß, Jens

Hallo Jens,
das wird es auf jedenfall sein. Tut mir leid, ich habe leider auch keine Information über die genaue Art der Änderung. Also ich weiß nicht ob ein neues Update wie LV 2009 zu 2015 aufgespielt wurde, oder im Code etwas angepasst wurde.

ich bin mir aber auf jedenfall sicher, dass dies das Problem ist. Wenn sowohl Double als auch Extended möglich ist, bin ich guter Dinge, dass es sich ohne großen Aufwand anpassen lässt.

Danke dir!