TDMS (Technical Data Management Streaming) ist das gängigste Dateiformat, mit dem in Software von NI erfasste Datenkanäle gespeichert werden. Das Format ist auch mit Drittanbieterwerkzeugen einsetzbar. Folgendes Dokument bietet eine Übersicht über die Vorteile des TDMS-Dateiformats sowie über die vielen Programme und APIs, welche solche Dateien lesen können:
Tutorium in der NI Developer Zone: NI-TDMS-Dateiformat
Folgendes Dokument erläutert die Binärstruktur einer TDMS-Datei:
Tutorium in der NI Developer Zone: Interne Struktur des TDMS-Dateiformats
Oftmals reicht es nicht aus, einfach nur eine gültige TDMS-Datei zu schreiben. Dieses Dokument beschreibt, wie Sie eine TDMS-Datei so erstellen, dass Sie die erfassten Datenkanäle später möglichst schnell finden, analysieren, vergleichen und dokumentieren können. Wenn Sie diesen Empfehlungen für TDMS-Dateien folgen, stehen Ihnen bei der Datenverwaltung zusätzliche Funktionen zur Verfügung. Die Zeitkanäle sind eindeutig zugeordnet und die Ladegeschwindigkeit wird maximiert.
TDMS-Datendateien enthalten meist zwei verschiedene Typen von Informationen: die erfassten Datenarrays, auch Massendaten genannt, sowie die Setup-Bedingungen und/oder Skalarergebnisse, auch Metadaten genannt. Die Massendaten werden von TDMS-Dateien immer in individuellen 1D-Arrays, genannt Kanäle, gespeichert. TDMS-Dateien können Metadaten als skalare Name/Wert-Paare, genannt Eigenschaften, speichern. Diese können jeder der drei Hierarchieebenen, der Dateiebene, der Kanalgruppenebene und der Kanalebene, zugeordnet werden. Welche Informationen als Eigenschaften gespeichert werden, welcher Ebene die Eigenschaften zugeordnet werden und wie jede Eigenschaft benannt wird, hat wesentliche Auswirkungen auf die Nützlichkeit der Metadaten für die Datenverwaltung.
Schreiben von Metadaten als Eigenschaften anstatt in Kanäle
Metadaten sollten immer als Eigenschaften gespeichert werden, da diese im Gegensatz zu Datenkanälen durchsucht werden können. TDMS-Datenkanäle sind zur Ablage von Datenarrays für Grafiken und Analysen gedacht. Das Speichern von skalaren Setup-Informationen und Skalarergebnissen auf Datenkanäle mit nur einem Wert verwirrt beim Lesen, da hier „reale“ mit „falschen“ Datenkanälen gemischt werden. Werden benannte Skalarinformationen stattdessen als Eigenschaften gespeichert, ist eine erheblich verbesserte Suchfunktionalität in vielen TDMS-Leseanwendungen wie NI LabVIEW und NI DIAdem möglich. Hier sehen Sie beispielsweise die inutitive, simultane Anzeige von Datenkanalwerten (Graph) und Kanaleigenschaften (Tabelle):
Abb. 1: Kanaldaten und Eigenschaften in NI DIAdem
Schreiben von Eigenschaften mit gültigen Namen
Eine TDMS-Eigenschaft besteht aus drei Komponenten: Eigenschaftswert, Eigenschaftsname und Eigenschaftsebene. Im TDMS-Dateiformat kann jedes beliebige Zeichen im Eigenschaftswert verwendet werden, allerdings gelten für viele der Schreib- und Leseanwendungen für TDMS-Dateien Einschränkungen bezüglich der Eigenschaftsnamen. Folgende Empfehlungen für Eigenschaftsnamen stellen sicher, dass die Eigenschaftsnamen nicht geändert werden, gleichgültig welche TDMS-Leseanwendung zum Einsatz kommt.
Es gibt zwei spezielle Eigenschaftsnamen, die in allen TDMS-Dateien verwendet werden sollten. Folgende Tabelle führt diese auf.
Tabelle 1: Spezielle Eigenschaftsnamen
Ebene | Name | Beschreibung |
File (Datei) | DateTime (Speicherzeitpunkt) | Start-Datum und -Zeit der ganzen TDMS-Datei |
Channel (Kanal) | Unit_String (Einheit) | String-Darstellung der Kanaleinheit |
Schreiben von Eigenschaften auf die passende TDMS-Ebene
Eine TDMS-Eigenschaft setzt sich aus drei Komponenten zusammen: Eigenschaftswert, Eigenschaftsname und Eigenschaftsebene. Das TDMS-Dateiformat erlaubt die Zuordnung einer Eigenschaft zu der Datei, zu einer beliebigen Kanalgruppe in der Datei oder zu einem beliebigen Kanal in einer der Kanalgruppen. Der Speicherort der Eigenschaft hat einen großen Einfluss auf ihre Nützlichkeit. Folgende Empfehlungen maximieren die Möglichkeit, auf Basis einer oder mehrerer Eigenschaftsbedingungen gewünschte Teile einer TDMS-Datei zu finden.
Umgekehrt gilt genauso:
Häufig wird der Fehler gemacht, eine Reihe von Setup-Eigenschaften auf eine Kanalgruppe namens Setup Info zu schreiben, die keine Kanäle enthält. Damit wird es unmöglich, nach ausgewählten Kanalgruppen oder Kanälen zu suchen, welche die Bedingungen der Setup-Eigenschaften erfüllen.
Erfasste Datenkanäle verfügen über zugehörige Zeitangaben, entweder implizit (konstante Sample-Rate) oder explizit (Kanal mit Zeitwerten). Um solche Zeitinformationen richtig analysieren zu können, müssen sie beim Lesen der TDMS-Datei zuverlässig gefunden werden. Bitte beachten Sie, dass die Begriffe Timing und Zeit hier eine größere Kategorie verknüpfter Informationen der x-Achse umfassen.
Zumeist werden erfasste Daten gegen die Zeit auf der x-Achse dargestellt. Angaben auf der x-Achse können aber auch Winkel, Frequenz und Verschiebung sein. Die folgenden Empfehlungen gelten für alle Größen der x-Achse gleichermaßen, auch wenn hier zur Vereinfachung der Begriff Zeit verwendet wird. Zwei häufig verwendete Methoden zur Aufzeichnung der zugehörigen Zeitangaben sind implizite Eigenschaften des Signalverlaufskanals und explizite Datums-/Zeitkanäle. Für jede Methode sind mehrere zusätzliche Kanaleigenschaften zur vollständigen Dokumentation nötig.
Verknüpfen von Zeitkanälen und Datenkanälen
Wenn die zur TDMS-Datei gehörenden Zeitwerte für erfasste Datenkanäle in einem oder mehreren Zeitkanälen gespeichert werden, dann ist eine Konvention nötig, um anzuzeigen, welche erfassten Datenkanäle zu welchen expliziten Zeitkanälen gehören. Die Konvention ist notwendig, weil das TDMS-Dateiformat keine integrierte Methode für diese Zuordnung bietet.
Der einfachste Ansatz besteht darin, in jeder Kanalgruppe jeweils nur einen expliziten Zeitkanal zu haben und diesen stets als ersten Kanal in der Kanalgruppe zu positionieren. Das führt zu zwei gängigen Szenarien: Entweder befindet sich ein expliziter Zeitkanal plus ein erfasster Datenkanal (XY) oder ein expliziter Datenkanal plus mehrere erfasste Datenkanäle (XYYY) in jeder Kanalgruppe, wie in folgender Abbildung dargestellt:
Abb. 2: XY-Kanalgruppen
Abb. 3: XYYY-Kanalgruppen
Schreiben vollständiger Datums-/Zeitwerte in Kanäle und Eigenschaften
TDMS-Dateien bieten einen nativen Datentyp für Datums-/Zeitwerte, der sowohl für Eigenschaften als auch für Datenkanäle verwendet werden kann. Zum Speichern von Zeitinformationen sollte immer diese integrierte Option gewählt werden. Das Schreiben eines numerischen Werts der abgelaufenen Sekunden reicht nicht aus, um eine Zeit aufzuzeichnen, da verschiedene Anwendungen, die TDMS-Dateien schreiben und lesen, unterschiedliche Konventionen für Startzeitpunkte und sogar die Schrittweite (Sekunden statt Tage) haben. Bei Programmen, die in NI LabVIEW geschrieben wurden, sollte immer ein Zeitstempel direkt an den Eigenschaftswert- oder den Dateneingang der VIs angeschlossen werden, wie in folgender Abbildung gezeigt:
Abb. 4: Speicherzeitpunkt-Eigenschaft und Zeitkanal in NI LabVIEW schreiben
Des Weiteren sollte bei Datums-/Zeitwerten das Aufzeichnen und Lesen des geografischen Standorts (Zeitzone) berücksichtigt werden. Manche Anwendungen für das Schreiben und Lesen von TDMS-Dateien setzen dieselbe Zeitzone voraus, andere wiederum ziehen die Greenwich-Zeit heran (GMT/UTC). Stimmen die Schreib- und Leseanwendungen der TDMS-Datei bei den geografischen Erwartungswerten nicht überein, können sich die Datums-/Zeitwerte beim Lesen von denen beim Schreiben unterscheiden. Zur Sicherheit sollte daher bei den Metadaten eine zusätzliche UTC_Offset-Eigenschaft (als reale Zahl) gespeichert werden, die die Anzahl der Stunden (oder Bruchteile davon) zwischen der Anwendung zum Schreiben der TDMS-Datei und GMT speichert.
Schreiben vollständiger Signalverlaufskanäle
Wenn Datenkanäle in unregelmäßigen Zeitabständen erfasst werden, dann ist ein expliziter Zeitkanal für die genaue Dokumentation der Zeit erforderlich. Üblicher ist jedoch, dass alle Datenkanäle mit einer konstanten Sample-Rate erfasst werden, in der Regel hardwaregetaktet. In diesem Fall ist das Speichern der Angaben als ein Satz von Kanaleigenschaften ein eleganter und gänzlich ausreichender Ansatz, um die Zeit präzise zu dokumentieren, ohne dass explizite Zeitkanäle notwendig sind. Die empfohlenen Namen für Signalverlaufseigenschaften von TDMS-Dateien sind in folgender Tabelle aufgeführt.
Tabelle 2: Standardnamen von Signalverlaufseigenschaften
Name | Beispiel | Erforderlich? | Beschreibung |
wf_xname (Waveform x-Name) | Zeit | Erforderlich | Name der Quantität auf der x-Achse |
wf_xunit_string (Waveform x-Einheit) | s | Erforderlich | Einheit der Quantität auf der x-Achse |
wf_start_offset (Waveform x-Offset) | 0 | Erforderlich | Start-Offset-Wert der x-Achse |
wf_increment (Waveform x-Schrittweite) | 0,001 | Erforderlich | Schrittweite der x-Achse |
wf_start_time (Waveform x-Startzeit) | Optional | Start-Datums-/Zeitwert der Zeitachse | |
wf_samples (Waveform x-Werte) | Erforderlich | Anzahl der Werte auf der X-Achse |
Bitte beachten Sie, dass Eigenschaftsnamen in Kleinbuchstaben geschrieben werden. Die Eigenschaften wf_xname und wf_xunit_string sind in LabVIEW nicht standardmäßig eingestellt. Sie müssen diese deshalb zu jedem Signalverlaufskanal in der TDMS-Datei hinzufügen.
Das TDMS-Dateiformat wurde dafür konzipiert, Daten so schnell wie möglich zu übertragen und gleichzeitig genug Flexibilität zu bieten, um während der Erfassung Änderungen an der Kanalanzahl und ihrer Abtastrate zuzulassen. Jedoch werden Dateien, die schnell übertragen werden, nicht unbedingt auch schnell geladen. Die TDMS-Datei ist vollständig binär und besteht aus mehreren Abschnitten, die beim Schreiben in die Datei aufeinander gestapelt werden. Diese Abschnitte enthalten Puffer von Datenwerten, die einem oder mehreren Kanälen und/oder Metadateneigenschaften zugewiesen sind, welche wiederum zu einer oder mehreren Ebenen gehören. Generell gilt: Je weniger Abschnitte eine TDMS-Datei besitzt, desto schneller lädt sie.
Jedes Mal, wenn eine TDMS-Datei geschrieben oder gelesen wird, wird eine TDMS_Index-Datei erstellt, die ein Verzeichnis der Binärabschnitte enthält. Bei anschließenden Lesevorgängen derselben TDMS-Datei wird die TDMS_Index-Datei konsultiert, um die korrekte Byte-Position für das Lesen jeder Kanal- und Eigenschaftensammlung aus der TMDS-Datei zu bestimmen. Grob gesagt ist eine TDMS-Datei „fragmentiert“, wenn die TDMS_Index-Datei ähnlich groß ist wie ihre TMDS-Datei. Das bedeutet, dass sie mehr Abschnitte besitzt als nötig sind und deshalb langsamer lädt. Sowohl während und nach der Erfassung stehen mehrere Ansätze zur Verfügung, mit deren Hilfe die Anzahl unnötiger Abschnitte minimiert und die Lesegeschwindigkeit der resultierenden TDMS-Datei maximiert werden kann.
Schreiben von TDMS-Dateien mit minimaler Fragmentierung
Zunächst sollte bei der Datenerfassung mit NI-Hardware in Betracht gezogen werden, TDMS-Dateien mit dem NI-DAQmx zu schreiben, da hierbei automatisch unfragmentierte Dateien entstehen. Werden Datenkanäle mit LabVIEW erfasst, kann über die Palette TDMS (erweitert) eine minimal fragmentierte TDMS-Datei geschrieben werden. Nutzen Sie die Standardfunktionen zum Schreiben von TDMS, helfen Ihnen folgende Tipps dabei, die Fragmentierung von TDMS-Dateien auf ein Minimum zu begrenzen.
Defragmentieren von TDMS-Dateien nach der Erfassung
Wenn Einschränkungen bei der Datenerfassung Sie dazu zwingen, fragmentierte TDMS-Dateien zu erstellen, können diese auch noch nach der Erfassung optimiert werden. Verwenden Sie LabVIEW, können Sie durch Ausführen der Funktion TDMS: Defragmentieren die TDMS-Datei mit minimaler Fragmentierung umschreiben. Alternativ können Sie die TDMS-Datendatei in DIAdem laden und erneut speichern. Die resultierende Datei ist nur minimal fragmentiert.
Schreiben von Kanaleigenschaften zum Erhöhen der Ladegeschwindigkeit
Falls NI DIAdem die Zielanwendung zum Lesen Ihrer TDMS-Dateien ist, können Sie die Ladegeschwindigkeit in NI DIAdem erheblich steigern, indem Sie die folgenden vier Eigenschaften erstellen und mit jedem Datenkanal in der TDMS-Datei verknüpfen. Sind nicht alle vier dieser Eigenschaften vorhanden und mit einem gültigen Wert bestückt, wenn ein TDMS-Datenkanal geladen wird, berechnet NI DIAdem automatisch alle vier Eigenschaften, um die automatische Achsenskalierung von Graphen zu beschleunigen. Sind diese Eigenschaften bereits vorhanden, mit gültigen Werten bestückt und mit jedem Datenkanal in der TDMS-Datei verbunden, lädt diese TDMS-Datei viel schneller in DIAdem.
Tabelle 3: Eigenschaften zum Erhöhen der Ladegeschwindigkeit in NI DIAdem
Name | Beispiel | Beschreibung |
Minimum | -3,14 | Minimalwert des Kanals |
Maximum | 3,14 | Maximalwert des Kanals |
Monotonie | Nicht monoton | Ob der Kanal monoton steigt oder fällt |
NoValues | Nein | Ob sich NAN-Werte im Kanal befinden |