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!
ich hätte da meine eine Frage zur Abspeicherung von Messdaten in großer Anzahl
Ich sollte über ein Wago-Modul ca. 60 Analogwerte und ca. 60 Binärsignale mit einer Zykluszeit von 10ms aufzeichnen und über einen Zeitraum von 24 Stunden ablegen und dies möglichst für mehrere Tage, Wochen, Monate.
Wie kann ich eine Masse von Daten am besten handeln. Welches Datenformat ist das geeigneste.
Ich habe ein Muster VI angehängt (LV8.5) ich der ich über TDMS files und über EXcel die Daten ablege. Genauso könnte die Speicherung über eine Datenbank zu realisieren sein
Gibt es aus eurer Erfahrung eine bessere kompaktere Lösung???
ein einfacher Weg wäre sicher ein Binärfile. Wenn du dir eine Datei erstellst und die Referenz offen lässt, dann kannst du die Daten sicher auch in dieser Zykluszeit schreiben.
Da du ja immer dieselbe Anzahl an Daten schreibst, kannst du später auch, gezielt durch vorheriges Setzen des Read-Pointers der Datei einzelne Datensätze auslesen.
Ich weiß nicht, ob man in Datenbanken überhaupt so schnell schreiben kann.
Auch wenn es nur ein Bsp. ist, zum Einstieg ein paar Kritikpunkte:
Wieso die Race-Condition mit dem "Zähler"? Wieso dafür das Datenformat DBL?
Du erstellst keine Excel-Files, sondern csv-Files!
Die Datenmenge schreit geradezu nach einer Datenbank im Hintergrund. Bei entsprechend optimierten INSERT-Befehlen, z.B. gleich mehrere Datensätze pro INSERT-Befehl, sollte das kein Problem sein.
TDMS mag auch eine gute Idee sein, allerdings müsstest du noch einiges optimieren, wie z.B. ebenfalls immer wieder mal neue Files anlegen und nicht Einzelwerte wegschreiben - das bläht den File unnötig auf.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Mit dem Binärfile kann ich nichts anfangen, kenn ich nicht. Gibt es dafür ein Beispiel??
Die Daten kann ich auch in einem Array sammeln und mehrer Datensätze übertragen, aber mein Problem ist auch das genaue Timeing der Abspeicherung der Messdaten. Desto größer das Array umsogrößer die Übertragungszeit. Sollte ich vielleicht mit zwei parallelen While schleifen arbeiten??
Ich sollte auch eine exakte Abspeichenrate hinbekommen. Wenn es mit 10ms nicht geht kann ich auch auf max. 50ms erhöhen.
Ich sollte parallel erfassen, aufzeichen und übertragen und das ohne Unterbrechungen.
Mit dem Binärfile kann ich nichts anfangen, kenn ich nicht. Gibt es dafür ein Beispiel??
Die Daten kann ich auch in einem Array sammeln und mehrer Datensätze übertragen, aber mein Problem ist auch das genaue Timeing der Abspeicherung der Messdaten. Desto größer das Array umsogrößer die Übertragungszeit. Sollte ich vielleicht mit zwei parallelen While schleifen arbeiten??
Ich sollte auch eine exakte Abspeichenrate hinbekommen. Wenn es mit 10ms nicht geht kann ich auch auf max. 50ms erhöhen.
Ich sollte parallel erfassen, aufzeichen und übertragen und das ohne Unterbrechungen.
Kennt dafür jemand ein Muster vi??
29.01.2013, 22:50 (Dieser Beitrag wurde zuletzt bearbeitet: 29.01.2013 22:56 von Trinitatis.)
die Idee mit parallelen Schleifen ist sicher keine schlechte.
Ich würde eine Schreibschleife, die in eine Queue schreibt und eine, die aus dieser wieder ausliest verwenden.
Dann kannst du noch hin und wieder den Füllstand der Queue prüfen und ggf. meckern.
Gruß, Marko
Edit:
Da du Zufallswerte zw 0 und 1 mit 255 multiplizierst, gehe ich von zu schreibenden bytes aus. Im Binärfile könnte man dann pro Wert ein Zeichen = 1 byte schreiben. Gegen die Tatsache, dass das file irgendwann vor Größe platzen würde sollte man sicher auch was tun, also hin und wieder ein neues anlegen - aber dieses Problem hast du sowieso.
Im Binärfile müsste man sich dann nur etwas für den Zeitstempel überlegen, dort also Low/High-Bytes bzw. eben dann noch mehrere Ebenen für den Zeitstempel generieren.
Ein "selbstdefinierter" Binärfile hat eine Reihe von Nachteilen, für einen Langzeitversuch würde ich davon abraten.
1) Du kannst das nur mit deiner eigenen Software wieder auslesen.
2) Wenn nur 1 Byte falsch ist / verschoben wird / o.ä., kannst du deinen kompletten Datensatz ab dieser Stelle wegschmeißen.
3) Erweiterungen (z.B. mehr oder weniger Messkanäle) bedeuten immer eine Änderung des Fileformats.
etc. pp.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
die Tatsache, dass das Auslesen nur mit eigener Software geht, ist sicher ein Nachteil. Ich bin nur wegen der nötigen Schreibgeschwindigkeit auf diese Idee gekommen.
Und die spätere Erweiterbarkeit ließe sich in Grenzen sicher durch das Schreiben von Füllbytes realisieren, was das file natürlich aufbläht.
Wenn es denn mit Datenbanken ginge, wäre dies sicher der bessere Weg.