Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Guten Tag,
ich habe mit Hilfe von LabVIEW in letzter Zeit sehr, sehr viele Messdaten erfasst. Jeder Messschrieb ist eine ASCII-Textdatei mit 3-10 aufgezeichneten Kanälen, 100-500 MB groß. Zur Zeit liegen diese Dateien in einer Ordnerstruktur auf einem Netzlaufwerk, das von der Größe jedoch mittlerweile an seine Grenzen kommt. Welche sinnvollen Möglichkeiten gibt es diese Daten zu archivieren, bzw. katalogisieren um sie datenspeicherschonend aufzubewahren ?
Macht es Sinn die Daten in einer Datenbank zu speichern, spare ich mir dadurch Platz ? Lohnt sich der Aufwand ?
Gibt es eventuell schon die eierlegende Wollmilchsau, der ich die Textdateien per Drag&Drop reinschiebe, diese sie mir komprimiert, Einträge in einer entsprechenden Datenbank macht, die dann wiederum durch ein Frontend leicht zugänglich ist ?
' schrieb:ich habe mit Hilfe von LabVIEW in letzter Zeit sehr, sehr viele Messdaten erfasst.
Wie sich das gehört ...
Zitat:Jeder Messschrieb ist eine ASCII-Textdatei
Hä? (<= fränkisch für "selbst Schuld")
Zitat:100-500 MB groß.
Das kommt davon, warum nimmst du auch ASCII.
Zitat:Netzlaufwerk, das von der Größe jedoch mittlerweile an seine Grenzen kommt.
Wundert mich nicht.
Zitat:Welche sinnvollen Möglichkeiten gibt es diese Daten zu archivieren, bzw. katalogisieren um sie datenspeicherschonend aufzubewahren ?
Von vorne herein TDMS! Das ist ein (spezifisches) Binärformat, das vom LV hervorragend unterstützt wird. Auch Excel und diverse andere Programme verstehen TDMS.
Zitat:Gibt es eventuell schon die eierlegende Wollmilchsau, der ich die Textdateien per Drag&Drop reinschiebe, diese sie mir komprimiert, Einträge in einer entsprechenden Datenbank macht, die dann wiederum durch ein Frontend leicht zugänglich ist ?
Nee, aber kannst du ganz leicht selbst machen. Signalverlauf aus Textfile (CVS?) lesen - Signalverlauf in TDMS speichern - fertig.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
am kleinsten bekommt man Messdaten immer noch in dem man die Fließkommazahlen als SGL Array Blockweise abspeichert und anschließend komprimiert, vielleicht noch mit einem kleinen Header, damit man die Daten später wieder identifizieren kann ...
TDM(S) ist auch nicht schlecht, und man kann die Dateien direkt in Excel einlesen, da gibts ein Addon für Excel, dass NI zur Verfügung stellt ...
Hatte vergessen nen transpose zu machen nach dem Auslesen, deswegen die riesige tdms Datei. Nachdem ich nun den ausgelesenen Array als Single konvertiert habe, komme ich auf ca. 2/3 der Textdateigröße. Komprimiere ich diese nun noch mit Winzip komme ich sogar auf 1/20. Das wäre ein gutes Ergebnis. Die komprimierte Textdatei kommt lediglich auf 1/10.
Die Verwendung von Excel kommt übrigens bei mehreren millionen Zeilen nicht in Frage. Ich arbeite mit Matlab. Habe schon gesehen, dass auch hier durch eine Art Plugin mit TDMS gearbeitet werden kann. Jedoch kann man damit den "Textheader" der TDMS nicht auslesen.
Ist es möglich einen Array blockweise in eine TDMS Datei zu speichern ? Ansonsten macht das wenig Sinn für mich, da mein PC beim Verarbeiten der mehreren hundert MB großen Matrizen Probleme mit dem Arbeitsspeichern bekommt.
23.04.2010, 08:21 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2010 08:23 von dimitri84.)
' schrieb:..., komme ich auf ca. 2/3 der Textdateigröße.
Auf diese Größenordnung bin ich auch immer gekommen. In etwa.
Zitat:Die Verwendung von Excel kommt übrigens bei mehreren millionen Zeilen nicht in Frage. Ich arbeite mit Matlab. Habe schon gesehen, dass auch hier durch eine Art Plugin mit TDMS gearbeitet werden kann. Jedoch kann man damit den "Textheader" der TDMS nicht auslesen.
Was kann denn Matlab, deiner Meinung nach, was LabVIEW nicht kann? Bleib doch einfach in LabVIEW.
Zitat:Ist es möglich einen Array blockweise in eine TDMS Datei zu speichern?
Du meinst, damit du beim lesen nur jeweils die Blöcke bekommst, und nicht alles auf einmal geladen wird? Das musst du garnicht. Einer der Vorteile von binären Dateien ist, dass du beliebig zu einem Zeitpunkt/Messwert springen kannst. (Das geht mit Textdateien nicht so einfach.) Beim TDMS-Read gibt es oben zwei Eingänge: Offset und Länge. Damit kannst du dir deine Blöcke selbst bauen.
' schrieb:Auf diese Größenordnung bin ich auch immer gekommen. In etwa.
Wenn man sich mal minimal bemüht und das kurz nachrechnet macht das auch durchaus Sinn. Habe mit 5 Nachkommastellen gespeichert, im Ascii sind das 6*8=48 Bit. Single Precision macht 32 Bit pro Zahl. 2/3. passt.
' schrieb:Was kann denn Matlab, deiner Meinung nach, was LabVIEW nicht kann? Bleib doch einfach in LabVIEW.
Ich bin viel flexibler in Matlab was das Rechnen mit den Daten anbelangt. Per Befehle in der Kommandozeile kann ich mir Ruckzuck wichtige Sachen ausrechnen oder Plotten lassen. Vorteile auch bei der Stapelverarbeitung von Messdateien, bei der Geschwindigkeit und bei der Darstellung in Grafiken.
' schrieb:Du meinst, damit du beim lesen nur jeweils die Blöcke bekommst, und nicht alles auf einmal geladen wird? Das musst du garnicht. Einer der Vorteile von binären Dateien ist, dass du beliebig zu einem Zeitpunkt/Messwert springen kannst. (Das geht mit Textdateien nicht so einfach.) Beim TDMS-Read gibt es oben zwei Eingänge: Offset und Länge. Damit kannst du dir deine Blöcke selbst bauen.
Nein, mein Problem ist nicht das Lesen sondern das Schreiben. Ich bekomme Probleme wenn ich eine große Matrix mit Messdaten auf einmal in eine Datei schreiben möchte. Save as Spreadsheet bietet mir die Möglichkeit append to file, dadurch kann ich meine Matrix aufsplitten und immer nur kleine Teile auf einmal schreiben. Das geht mit Write Data (TDMS) nicht. Habe es nun per Data Storage versucht, damit kann ich blockweise schreiben, aber dafür Variabelen nur als Double speichern. Was soll das denn ?
' schrieb:immer nur kleine Teile auf einmal schreiben. Das geht mit Write Data (TDMS) nicht.
Das kann ich fast nicht glauben.
TDMS ist ein Stream. LV (ab 2009) kann in DAQmx-Task Daten direkt in der Task per TDMS schreiben. Da sollte es nicht möglich sein, das auch im Datenfluß zu machen?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).