Optimales Messprotokoll - 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: Optimales Messprotokoll (/Thread-Optimales-Messprotokoll) Seiten: 1 2 |
Optimales Messprotokoll - Rainito - 17.11.2010 13:20 Hallo Leute, ich kämpf immer noch mit meinem Messprotokoll meines Dauerlaufprüfstandes. Mein Problem ist einfach die Auswahl des richtigen Datenformates für die Datenspeicherung. Ich hab 2 verschiedene Daten zu Speichern die ich bis jetzt in ein Textfile speicher. Meine Eingabedaten die ständig aktualisiert werden da ich während der Messung bestimmte Parameter verändern kann. Danach folgen Messwertreihen (9 versch. Messwerte). Da ich max. alle 10 Sekunden eine Messwertreihe aufnehme ergeben das bei einer Laufzeit von 1200 Stunden ca 500.000 Messwertreihen. Das fortschreiben der Messwertreihen ans Ende der Textdatei funktioniert hervorragend.....nur die aktualisierung der Eingabedaten am Anfang der Textdatei stellt sich als Speicherfresser dar...weil hierzu die Komplette Datei als Array dargestellt werden muss und einzelne parameter somit verändert werden können. Am Schluss wird das ganze Paket wieder in die Textdatei geschrieben. All dies versucht einen enormen Speicheraufwand bis es nach 3 Tagen zum Absturz kommt. Nach vielen Diskussionen wagte ich mich an das TDMS Format hin. Hier kann ich meine Eingabedaten als Eigenschaftwerte ganz leicht speichern, aktualisiern und auslesen....auch die Messwertspeicherung geht tadellos. Nur sprengt die Dateigröße den Rahm und beim Laden von 20000 Messwertreihen dauert es einfach viel zu lange. Nebenbei ist die Datei auch noch 200 MB gross (Textdatei mit gleich vielen Messwertreihen ca 10MB). Hab ein Beispielprogramm mal angehängt um die mein Vorgang nachzuvollziehen. Knackpunkt ist dass ich während der Messung (Messwerte werden ins Protokoll gespeichert) die Daten auslesen will und mir einen Überblick über den bisherigen Verlauf verschaffen will. Alternative hab ich mir noch gedacht dass ich Eingabedaten und Messdaten einfach trenne und sie in 2 versch. Binärdateien schreibe...dann fällt auch die komplette Formatierung zu Strings flach. Bitte lasst mich an Euren Gedanken teilhaben. Habt ihr noch andere Ideen...oder hab ich noch einen Gedankenfehler? Vielen Dank Euch schon mal Gruß Rainer[attachment=30680] Optimales Messprotokoll - Matze - 17.11.2010 14:41 Hallo Rainer, also diese ganzen String-Operationen sehen im Blockdiagramm nicht nur schrecklich aus, sie sind auch wahnsinnig langsam. Wenn, dann nimm das VI "In String Formatieren". Zu viele String-Verknüpfungen würde ich versuchen zu vermeiden. Auch würde ich nicht lesen und schreiben fortlaufend ausführen. Die Daten, die dich interessieren bzw. die du ständig ausliest, kannst du sicher auch in einem Schieberegister festhalten und so viel schneller darauf zugreifen. Das TDMS-Format an sich ist meiner Meinung nach der richtige Ansatz. Wieso die Datei jedoch so viel größer ist als die Textdatei, verstehe ich nicht. Es sei denn, du schreibst die Double-Werte nur z.B. mit 2 Nachkommastellen in die Textdatei. Durch den Genauigkeitsverlust sparst du natürlich Platz, auch wenn Steuerzeichen in der ASCII-Datei dazu kommen. Binärdateien sind bei Performance-Schwierigkeiten jedoch ASCII-Dateien vorzuziehen, da das Speichern ohne Konvertierungen funktioniert. Optimales Messprotokoll - Rainito - 17.11.2010 16:05 ....mich interessieren eben alle daten...vom Anfang bis zum aktuellen Zeitpunkt....darum muss ich schon immer das komplette Protokoll visualisieren. Zum TDMS Format: Also die Eigenschaftwerte sind ok. das geht ruckzuck .....aber die messwertreihen machen mir zu schaffen. Ich wollte eigentlich nur einen Array mit den 9 Messwerten immer kontinuierlich anhängen und ins Protokoll schreiben...aber da schreibt mir es alles untereinander rein...und ich hätte beim späteren auslesen wieder probleme. Zur Konvertierung: die Messdaten sind alle DBL ...nur in der Anzeige hab ich sie auf eine Kommastelle begrenzt weil es sonst zu unübersichtlich werden würde. Kann ich vielleicht die Messwerte noch einfacher speichern und später wieder auslesen?? Weitere Ideen? Ansonsten überleg ich mir es echt einfach alles in zwei Binärdateien zu packen.. da muss ich nichts konvertieren und die Cluster einfach so wegschreiben!! Optimales Messprotokoll - macmarvin - 17.11.2010 16:18 Die Stringattribute würde ich reduzieren, möglichst die einzelnen Daten vom Ausgangstyp in einen Variant wandeln und dann ein Array von Variants in die TDMS-Attribute schreiben. Also Namesarray als Stringarray lassen, nur die Werte als Variantarray. Die TDMS Datei wird höchstwahrscheinlich so groß, weil du quasi Einzelwerte aneinander hängst. Das sorgt dafür, daß beim jedem Schreiben ein ganzes TDMS-Segment angehängt wird (großer Overhead für einen DBL als Nutzdaten). Die tdms_index Datei neben der eigentlichen Datendatei wird höchstwahrscheinlich ähnlich groß sein, obwohl keine Nutzdaten enthalten sind. Da kannst du etwas Entspannung rein bringen, in dem du die interne TDMS Pufferung aktivierst "setting_tdms_buffersize". Was sich bei deinen Daten sicher auch lohnt, ist ein TDMS defrag am Ende. Optimales Messprotokoll - Rainito - 17.11.2010 17:05 Hallo Macmarvin, kann mir deine Vorschläge leider erst am Freitag einarbeiten weil ich morgen ausser haus bin. Aber danke mal. Und ja....die Index Datei ist annähernd gleich gross. ja...schreib ja jede Messwertreihe und jeden Messwert einzeln rein. hab auch schon die komplette Messwertreihe als array weggeschrieben.....mich hat daran nur gestört dass es alles untereinander geschrieben wurde... hätte halt gerne alle 9 messwerte nebeneinander und die messwertreihen untereinander. Bekomm ich das mit wenig speichernutzung anders irgendwie hin? Danke. Gruß Rainito Optimales Messprotokoll - Rainito - 19.11.2010 10:13 Hallo Macmarvin, komm mit dem Variant irgendwie nicht so klar. Kannst mir sagen wie du dir das vorgestellt hast? Und vor allem....wie bekomm ich meine 9 Messwerte vernünftig speicherschonend in die TDMS Datei? Um einen kleinen Tipp wär ich sehr dankbar. Danke. Gruß Rainito Optimales Messprotokoll - macmarvin - 19.11.2010 11:34 Servus, anbei die spontanen Ideen. Recht hässlich reingebaut, also aufräumen musst du da noch selbst. Da ist die Variantspeicherung drinnen (erhält die orginalen Formaten), damit läßt es sich dann z.B. in Diadem leichter weiterarbeiten. Die TDMS-Pufferung ist für jeden Kanal aktiviert. Am Ende erfolgt ein Defrag. lv2010[attachment=30740] Grüße Götz Optimales Messprotokoll - Rainito - 19.11.2010 13:36 Servus, versteh ich das richtig dass ich jeden Wert in einen Variant umwandle und den als Eigenschaftswerte schreibe??? Das funktioniert aber mit dem Stingarray als Eigenschaftsnamen irgendwie nicht. Und kann ich meine Messwerte nicht noch einfach in die TDMS datei schreiben. Soll ich den kompletten cluster weggschreiben?? wär das besser? Optimales Messprotokoll - macmarvin - 19.11.2010 14:57 Du musst es nicht als Variant wandeln, das dient nur zur Vereinfachung, da du sonst für jeden Datentyp jeweils ein Set Properties ausführen müsstest um die orginalen Datentypen zu erhalten. Was funktioniert mit dem Stringarray nicht? Den unzerlegten Cluster wegschreiben wäre unschön, dann würdest du nicht mehr mit externen Tools an die einzelnen Daten rankommen bzw. es wäre aufwendig. Du "könntest" die Messwerte auch bündeln und zusammen mit deinen Kanalnamen als Stringarray an die TDMS Write hängen und die Daten "interleaved" schreiben. Das würde ich aber tunlichst lassen, da diese "Feature" der Teufel gesehen hat und wenn du Pech hast stürzt dir LV wortlos ab, wenn du noch mehr Pech hast, sind deine Daten beschädigt (was du natürlich auch erstmal merken müsstest). Optimales Messprotokoll - Rainito - 22.11.2010 16:25 Hallo Leute, ich hab mich jetzt dafür entschieden die Messwerte als Array wegzuschreiben und vernachlässige die Form im TDMS Format. Bis jetzt sieht alles gut aus. Bei maximal 500000 Messwertreihen, d.h. 4.500.000 Messwerte untereinander im TDMS File ist die Datei 60 MB groß. Das ist denke ich vertretbar. Abspeichern, aktualisieren und laden funktioniert tadellos. Ich werde dies jetzt auf meine 9 Messplätze erweitern und Langzeittests machen. Vielen Dank für Eure Hilfe. Gruß Rainer |