LabVIEWForum.de
Logdatei für unregelmäßige Daten (TDMS?) - 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: Logdatei für unregelmäßige Daten (TDMS?) (/Thread-Logdatei-fuer-unregelmaessige-Daten-TDMS)



Logdatei für unregelmäßige Daten (TDMS?) - TpunktN - 18.06.2021 10:46

Servus zusammen,

ich versuch aktuell einen besseren Datenlogger für unsere hauseigenen Geräte zu programmieren.
Aktuell werden die geloggten Befehle hintereinander an das Gerät geschickt und wenn alle Ergebnisse da sind, wird das in eine Logdatei geschrieben.
So eine Abfrage dauert zwischen 300 und 600 ms, wenn ich dann 5 Befehle abfrage können das auch mal 3 s sein zwischen den geloggten Werten. An sich bekomme ich nicht mehr aus einem Gerät, der Datenlogger soll aber mehrere Geräte in eine Datei loggen können, mit unterschiedlichen Befehlen. Wenn dann ein Gerät parallel nur 2 Befehle loggt, wird das unnötige Pausen haben, das würde ich beim neuen Logger gerne vermeiden.

Ich habe mich ein wenig in TDMS und Waveform eingelesen und damit rumgespielt. Waveform passt nicht wirklich, weil die dt fest ist (mehr dazu später). TDMS habe ich noch nicht richtig hinbekommen, dazu habe ich mal 3 tdms-Dateien angehängt.

Ich generiere mir ein paar Zufallszahlen mit zufälligen Zeitabständen und speichere diese in verschiedenen Gruppen und Kanälen.
[attachment=61969] - Zusätzlich zum Wert, wurde danach der Kanal 'Time' mit nem Zeitstempel eingetragen.
-> Zeiten sind nicht mit den Werten verknüpft.

[attachment=61970] - Bei jedem Wert wurde mit Build Array ein Kanal und Wert vorher die Zeit mit Stempel eingefügt.
-> Es gibt nur noch den Kanal Zeit, und die Werte stehen ohne ID (Kanalname) untereinander.

[attachment=61971] - Wert wurde als Waveform mit immer neuem t0 gespeichert
-> sieht im TDMS File Viewer super aus, in Excel stehen da aber keine Zeiten bei den Werten.

Habe ich da einen Denkfehler oder etwas falsch verstanden? Ich habe die tdms Dateien einfach danach mal in Excel geöffnet.

Eine Idee habe ich noch, weiß aber nicht wie ich die umsetzen soll:
Ich speichere alles wirklich als richtige Waveform und sammel die Daten für 1s (dt) und schreibe dann die gesammelten Daten in dieser Zeit weg, leere die Daten und sammel wieder für 1s.
Hier hat sich aber mit der Hitze mein Kopf abgeschalten und ich habe keine Idee wie ich diese 1s einhalte/abfrage zum wegschreiben.
Hier bin ich für Tipps dankbar Smile

Das angehängte Programm ist nur zum Testen für mich aus der Producer-Comsumer Vorlage zusammengeklickt und extra ohne SubVIs um es einfach hochladen zu können Tongue

MfG Timo


RE: Logdatei für unregelmäßige Daten (TDMS?) - GerdW - 18.06.2021 10:52

Hallo Timo,

Zitat:Wert wurde als Waveform mit immer neuem t0 gespeichert
-> sieht im TDMS File Viewer super aus, in Excel stehen da aber keine Zeiten bei den Werten.
Das TDMS-Plugin für Excel kennt die "üblichen" Anwendungsfälle und importiert die Daten dafür passend.
Dein Anwendungsfall ist dann wohl eher "unüblich"…

Wie willst du denn später die Messdaten auswerten? Muss das zwingend Excel sein?
Kannst du deine eigene Routine in LabVIEW dafür programmieren? Oder gar Diadem verwenden?

Wenn es TDMS sein soll, dann finde ich den Ansatz mit den Waveforms (+Port als Gruppe und Befahl als Kanal) ganz gut…


RE: Logdatei für unregelmäßige Daten (TDMS?) - TpunktN - 18.06.2021 12:10

(18.06.2021 10:52 )GerdW schrieb:  Wie willst du denn später die Messdaten auswerten? Muss das zwingend Excel sein?
Die Messdaten haben immer einen anderen Grund aufgenommen zu werden, jeweils ein eigenes Programm wird zu viel Arbeit, meist wird da auch nur in Excel ein Diagramm erstellt und Tendenzen, Fehler oder Sprünge gesucht.
Zitat:Kannst du deine eigene Routine in LabVIEW dafür programmieren? Oder gar Diadem verwenden?
DIAdem habe ich nicht, bzw kenne ich auch nicht.
Bisher ist alles in einer Textdatei, mit dem "Array to spreadsheet" ausgegeben und von dort in eine Excel kopiert worden zur Auswertung. Nach der Messung die gemessenen Daten in ein spreadsheet umzuwandeln sollte schon funktionieren, so wirklich habe ich mir aber keine Gedanken dazu gemacht, weil ich auch nicht weiß, was am Ende so wirklich raus kommt oder möglich ist.
Für eine Auswertung in Excel, wäre es glaube ich am einfachsten, jeden Kanal separat zu speichern, um NaN's/NV's zu vermeiden. Wobei ich dann aber auch jeden Kanal in eine eigene Datei speichern kann.. -.-'
Zitat:Wenn es TDMS sein soll, dann finde ich den Ansatz mit den Waveforms (+Port als Gruppe und Befahl als Kanal) ganz gut…
Mit festem t0 oder dt?
Waveform scheint hierfür nicht gemacht worden zu sein, ich hab es da wohl eher mit dem Vorschlaghammer in die passende Form gepresst..
Als alternative habe ich noch [attachment=61973] nebenher erstellt, nach dem aktuell Prinzip (mit der Idee im Hinterkopf die Daten für x Sekunden zu sammeln und dann wegzuschreiben). Dieses Format aus der TDMS Datei wäre auch eine Möglichkeit. Und mir gefällt die Tatsache das ich dann die Details zur Verfügung hätte (auch wenn es bisher nie relevant war).

Das Format ist eigentlich frei wählbar, ich habe mich nur damit beschäftigt, wegen den oben genannten Gründen. Mit Waveform habe ich mich hiermit auch zum ersten Mal beschäftigt.

Ich steh immer noch auf dem Schlauch, Daten 1 s zu sammeln und die dann weg zu schreiben, lasse ich da eine separate Schleife laufen, während ich die Daten sammel und trigger dann das wegschreiben und zurücksetzen als (prio-)Queue?


RE: Logdatei für unregelmäßige Daten (TDMS?) - GerdW - 18.06.2021 12:32

Hallo Timo,

Zitat:jeweils ein eigenes Programm wird zu viel Arbeit, meist wird da auch nur in Excel ein Diagramm erstellt und Tendenzen, Fehler oder Sprünge gesucht.
"Jeweils ein eigenes Programm" würde wirklich zuviel Arbeit machen.
Ich habe das so gelöst, dass ich mir ein für die Messaufgabe passendes Dateiformat überlegt habe. Letztendlich eine Text-Datei, die mit reichlich Zusatzinformationen angereichert wurde…
(Notfalls kommt man an die eigentlichen Messdaten auch "händisch" per Excel ran, die Kollegen müssen dann nur einige "Absätze" vor/nach den Messdaten löschen.)
Und für dieses Format habe ich ein Tool erstellt, mit dem man dann solche Messdateien laden kann, nach Zeit oder Messkanälen filtern kann, entsprechend gefilterte Messdaten dann wieder als CSV (für Excel) speichern kann, schnell mal einen Screenshot als PNG zu den Messdaten erzeugt (prima, um Diskussionen per Email anzustoßen), usw.
Die zugehörige Logging-Routine ist jetzt Teil unserer user.lib und wird in nahezu jedem unserer Prüfstände/Messsoftware benutzt.

Zitat:so wirklich habe ich mir aber keine Gedanken dazu gemacht, weil ich auch nicht weiß, was am Ende so wirklich raus kommt oder möglich ist.
Bei mir ist da auch einiges an der aktuellen Lösung "organisch gewachsen" - aber du hast doch nun die Möglichkeit, mal die Requirements von deinen Usern einzusammeln!
Mit diesen Requirements kannst du dir dann Gedanken um einen möglichst einheitliche Lösung machen…

Zitat:Das Format ist eigentlich frei wählbar, ich habe mich nur damit beschäftigt, wegen den oben genannten Gründen. Mit Waveform habe ich mich hiermit auch zum ersten Mal beschäftigt.
Bisher habe ich entnommen, dass du eigentlich XY-Paare speichern willst, mit X=Zeitstempel und Y-Messwert - und es gibt kein festes dT zwischen den X-Werten.
Die aktuelle Lösung mit Waveforms macht das…

Du könntest aber auch einfach zwei Kanäle (pro Gruppe) in die TDMS-Datei schreiben, ein Kanal enthält dann den Zeitstempel zum zugehörigen Messwert.
Du könntest auf TDMS verzichten, was für solche "Einzelwerte" auch etwas überdimensioniert erscheint. Das "S" im Namen steht ja für "Streaming" und ist für größere Datenmengen ausgelegt…

Zitat:Als alternative habe ich noch Test.txt nebenher erstellt, nach dem aktuell Prinzip
Anstatt so viele NaNs einzufügen, könntest du jedem Messwert auch seine eigene Zeitachse/-spalte gönnen.
Macht sich aber etwas umständlich, da bei CSV die Spalten eher gleich lang sein sollten…

Du könntest auch Anleihen bei XML oder JSON nehmen und jeden Messwert in dieser Art abspeichern:
Code:
<Messwert>
  <Kanal>  Kanalname </Kanal>
  <Time> Zeitstempel </Time>
  <Wert> 0.1234 </Wert>
</Messwert>

Am besten stellst du erstmal alle Requirements zusammen…


RE: Logdatei für unregelmäßige Daten (TDMS?) - TpunktN - 18.06.2021 13:36

(18.06.2021 12:32 )GerdW schrieb:  Ich habe das so gelöst, dass ich mir ein für die Messaufgabe passendes Dateiformat überlegt habe. Letztendlich eine Text-Datei, die mit reichlich Zusatzinformationen angereichert wurde…
Vermutlich würde das auch reichen.
Zitat:.. aber du hast doch nun die Möglichkeit, mal die Requirements von deinen Usern einzusammeln!
Mit diesen Requirements kannst du dir dann Gedanken um einen möglichst einheitliche Lösung machen…
Haha, der war gut.. Als ob das jetzt jemand weiß, was er als nächstes braucht Tongue Meist sind das irgendwelche sporadischen Fehler, die bei dem einen Kunden aufgetaucht sind und dann mit verschiedensten Versuchen versucht wird einzugrenzen und zu beheben.
Zitat:Bisher habe ich entnommen, dass du eigentlich XY-Paare speichern willst, mit X=Zeitstempel und Y-Messwert - und es gibt kein festes dT zwischen den X-Werten.
Die aktuelle Lösung mit Waveforms macht das…
Ja, das fasst es gut zusammen, Excel lesbar würde ich sonst noch optional mit dazu packen.
Nach allem was ich über waveform gelesen habe, ist es für feste dt gedacht und meine Hammer Methode .. naja, Hammer halt .. Aber solange es funktioniert, warum nicht, solange ich nicht langsam in eine Falle laufe.
Zitat:Du könntest aber auch einfach zwei Kanäle (pro Gruppe) in die TDMS-Datei schreiben, ein Kanal enthält dann den Zeitstempel zum zugehörigen Messwert.
Du könntest auf TDMS verzichten, was für solche "Einzelwerte" auch etwas überdimensioniert erscheint. Das "S" im Namen steht ja für "Streaming" und ist für größere Datenmengen ausgelegt…
Es war interessant TDMS mal zu testen, es ist aber wohl wirklich oversized. Wobei die Idee mit den 2 Kanälen, werde ich mal noch mit rumspielen, gibt dann halt mehr Gruppen.
Zitat:Anstatt so viele NaNs einzufügen, könntest du jedem Messwert auch seine eigene Zeitachse/-spalte gönnen.
Macht sich aber etwas umständlich, da bei CSV die Spalten eher gleich lang sein sollten…
Eben, geht halt nicht einfach ohne NaN's
Zitat:Du könntest auch Anleihen bei XML oder JSON nehmen und jeden Messwert in dieser Art abspeichern
Es geht zwar um kleinere Datenmengen, aber das pumpt die Datei glaube ich doch etwas zu sehr auf. Wobei hier natürlich die NaN's wegfallen..

Danke für die Ideen, ich versuch mich mal ncoh ein bischen daran.

MfG Timo


RE: Logdatei für unregelmäßige Daten (TDMS?) - TpunktN - 22.06.2021 15:25

Ich habe mit dem Format noch ein wenig rumgespielt, dabei ist mir augefallen, das speichern als Waveform funktioniert nicht so wie gedacht.
Es wird nur die Startzeit gespeichert, egal ob ich die Zeit neu reinschreibe..
[attachment=61976]
Es sollten eigentlich 2 Sekunden sein (1 Wert alle 200 ms), beim Auslesen wird dann aber wieder die dt genommen.

Dann habe ich das mal separat gespeichert und wieder ausgelesen, das mag TDMS nicht (lesen VI), wenn man da Zeitstempel verwendet, erst beim wandeln in DBL und dann wieder zurück hat es funktioniert.
[attachment=61978]
(Nebenbei, (wie) kann man das Anzeigeformat der Y-Achse beim Viewer auf Zeit umstellen?)

Bin immer noch am rumprobieren, was denn besser passt, bzw nicht all zu kompliziert ist Daten zu extrahieren.
Die Idee, nur Daten zu schreiben, die auch wirklich neu gemessen wurden, ist irgendwie schwieriger als ich es mir vorgestellt habe -.-'


RE: Logdatei für unregelmäßige Daten (TDMS?) - GerdW - 23.06.2021 07:18

Hallo Timo,

Zitat:Es sollten eigentlich 2 Sekunden sein (1 Wert alle 200 ms), beim Auslesen wird dann aber wieder die dt genommen.
Ist ja auch irgendwie sinnvoll: eine Waveform ist nun mal über die Startzeit und den konstanten (!) zeitlichen Abstand der einzelnen Samples definiert…

Zitat:Dann habe ich das mal separat gespeichert und wieder ausgelesen, das mag TDMS nicht (lesen VI), wenn man da Zeitstempel verwendet, erst beim wandeln in DBL und dann wieder zurück hat es funktioniert.
Einzelne Timestamps mag TDMS eben nicht, da musst du also nach/von DBL umwandeln…

Zitat:(Nebenbei, (wie) kann man das Anzeigeformat der Y-Achse beim Viewer auf Zeit umstellen?)
Der Viewer zeigt Messwerte über einer Zeitachse an - genau dafür ist er gemacht.

Wenn du etwas anderes willst, musst du den Viewer editieren - oder deinen eigenen erstellen (hatte ich das nicht schon mal vorgeschlagen? Big Grin)…
(Der Viewer ist auch nur ein VI. Wenn du aber VIs aus der VI.lib editieren willst, solltest du das immer nur an einer Kopie dieser VIs durchführen!)

Zitat:Die Idee, nur Daten zu schreiben, die auch wirklich neu gemessen wurden, ist irgendwie schwieriger als ich es mir vorgestellt habe
Vor allem, weil du auch zu jedem Datum einen Zeitstempel haben willst!
Du musst also jeweils (mindestens) die Informationen "Zeitstempel, Messkanal-Name, Messwert" speichern. Eigentlich ist genau das ja nicht schwer, aber du willst weiterhin nur "schon fertige" Lösungen zum Anschauen dieser Informationen nutzen - und die sind nicht darauf ausgelegt.
Ergo: eigene Anzeigeroutine erstellen… Wink


RE: Logdatei für unregelmäßige Daten (TDMS?) - TpunktN - 23.06.2021 07:56

(23.06.2021 07:18 )GerdW schrieb:  Ist ja auch irgendwie sinnvoll: eine Waveform ist nun mal über die Startzeit und den konstanten (!) zeitlichen Abstand der einzelnen Samples definiert…
Einzelne Timestamps mag TDMS eben nicht, da musst du also nach/von DBL umwandeln…
Man lernt nie aus und am meisten lernt man durch scheitern..

Zitat:Der Viewer zeigt Messwerte über einer Zeitachse an - genau dafür ist er gemacht. ...
Wenn du etwas anderes willst, musst du den Viewer editieren - oder deinen eigenen erstellen (hatte ich das nicht schon mal vorgeschlagen? Big Grin)…
(Der Viewer ist auch nur ein VI. Wenn du aber VIs aus der VI.lib editieren willst, solltest du das immer nur an einer Kopie dieser VIs durchführen!)
Die Idee ist gut, ich schau mir den Viewer mal genauer an Wink

Zitat:Vor allem, weil du auch zu jedem Datum einen Zeitstempel haben willst!
Du musst also jeweils (mindestens) die Informationen "Zeitstempel, Messkanal-Name, Messwert" speichern. Eigentlich ist genau das ja nicht schwer, aber du willst weiterhin nur "schon fertige" Lösungen zum Anschauen dieser Informationen nutzen - und die sind nicht darauf ausgelegt.
Nein, ich lerne, ich versuche mich an den fertigen Lösungen, wenn man immer alles selber macht, ist das auch verschwendete Zeit. Es gibt sooooo viel fertiges, das man eben halt wissen/kenne muss um es zu verwenden oder halt eben nicht.
Ich bin kein Vollzeit-Softwareentwickler, ich bin nichtmal Softwareentwickler Big Grin Es macht dennoch Spaß, muss halt mehr lernen. (Wieviele LabVIEW Programmierer sind überhaupt gelernte/studierte Softwareentwickler? Big Grin )

Zitat:Ergo: eigene Anzeigeroutine erstellen… Wink
Das wird es wohl, erstmal versuche ich aber wohl noch ein bischen das vorhandene zu verstehen. Bisher ist aber wohl die vorgeschlagene xml/json Variante am effektivsten, da die Menge doch sehr gering ist, zumindest habe ich das jetzt so verstanden.

Ich bin nur am rumprobieren um zu lernen und bin über jede Antwort froh, danke.
Timo