LabVIEWForum.de
TDMS schreiben viele Daten - 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: TDMS schreiben viele Daten (/Thread-TDMS-schreiben-viele-Daten)

Seiten: 1 2


TDMS schreiben viele Daten - Sam789 - 04.07.2013 09:21

Hi LabVIEW Pro´s

Ich habe folgendes Problem:

Ich speichere eine Menge Daten kontinuierlich in ein TDMS file. Sprich bis zu 35 Messdaten und das alle 0,5 sek. Und ca 100 Messdaten alle 20 sek.
Über die Zeitdifferenz vor dem Schreiben und danach sehe ich, dass nach und nach der Vorgang immer langsamer wird.
Nach dem starten des Aufzeichnens benötigt das VI ca. 10-20 ms. Nach 1 Stunde sind es schon um die 650ms und ist 25MB groß. Man kann dirket zuschaun wie der Zeitbedarf fürs schreiben länger wird.

Was kann ich tun? Habe ich da ein Speicherleck oder sind das zuviele Speicherzugriffe / Daten??


(Das Programm habe ich aus einem großen VI rauskopiert, leider wird alles irgendwo eingefügt von LabVIEW, es geht aber nur um das Blockdiagram und die TDMS dlls.)
Eine TimedLoop is alle 500ms die andere alle 20sek.

Das VI funktioniert nur bei 2012, 2010 nicht...


RE: TDMS schreiben viele Daten - GerdW - 04.07.2013 12:01

Hallo Simon,

Zitat:Ich speichere eine Menge Daten kontinuierlich in ein TDMS file. Sprich bis zu 35 Messdaten und das alle 0,5 sek. Und ca 100 Messdaten alle 20 sek.
Und wo kommen hier eine "Menge Daten" vor? Hmm

Zitat:Über die Zeitdifferenz vor dem Schreiben und danach sehe ich, dass nach und nach der Vorgang immer langsamer wird.
Ohne dein VI anschauen zu können: irgendwo ein BuildArray, welches ein immer größer werdendes Array erzeugt?


RE: TDMS schreiben viele Daten - Sam789 - 04.07.2013 12:21

Das sind doch ne Menge Daten, und werden nach jedem schreiben auf das TDMS file immer mehr. Die müssen doch beim nächsten mal schreiben verwaltet werden?!?

Was meinst du mit Array schreiben?

Hab jetzt noch screenshots gemacht.


RE: TDMS schreiben viele Daten - GerdW - 04.07.2013 12:28

Hallo Simon,

also 70 Messwerte pro Sekunde sind nun nicht wirklich "eine Menge Daten"...

Zu den Scrennshots:
- Mir ist nicht wirklich klar, warum man so viele lokale Variablen nutzen muss.
- Mir ist nicht wirklich klar, warum man ein 1D-Array so kompliziert in ein 2D-Array wandeln muss, damit man dann 1D-Array in TMDS speichern kann.

Zitat:Was meinst du mit Array schreiben?
Man sieht leider nicht, wo z.B. diese lokalen Variablen mit 1D-Arrays befüllt werden. Man sieht nicht, wie die Arrays zusammengesetzt werden. Man sieht nicht, ob du irgendwo eine Schleife mit einem uninitialisierten Schieberegister (und Arrays darin) verwendest...


RE: TDMS schreiben viele Daten - eb - 04.07.2013 12:41

Hallo,

Um dir effektiv helfen zu können, bitten wir dich, dein VI hochzuladen. Wenn es "geheime" Dinge enthält, dann lösche sie vorher raus; es ist meist immer noch besser ein nicht funktionierendes VI zu sehen, als ein paar Screenshots.


RE: TDMS schreiben viele Daten - Sam789 - 04.07.2013 12:49

(04.07.2013 12:28 )GerdW schrieb:  - Mir ist nicht wirklich klar, warum man so viele lokale Variablen nutzen muss.
- Mir ist nicht wirklich klar, warum man ein 1D-Array so kompliziert in ein 2D-Array wandeln muss, damit man dann 1D-Array in TMDS speichern kann.

zu 1: Ich hab so viele Controls und Indicator die ich an anderen Stellen schon benötige. Und wenn ich die vom Ursprung hier hin "verdrahte", dann verliert man den Überblick bei so vielen Linien.
zu 2: Weil ichs nur so geschaft hab, dass die Daten ins TDMS geschrieben werden. Vielleicht kannst mir sagen wie man das anstellt?
Ich hab nur eine Group Name und und darin sind alle Daten in unterschiedlichen Channels.

Zitat:Man sieht leider nicht, wo z.B. diese lokalen Variablen mit 1D-Arrays befüllt werden. Man sieht nicht, wie die Arrays zusammengesetzt werden. Man sieht nicht, ob du irgendwo eine Schleife mit einem uninitialisierten Schieberegister (und Arrays darin) verwendest...

Die Arrays werden durch For-Schleifen erstellt. Schieberegister habe ich keine...

Hilft das weiter??


RE: TDMS schreiben viele Daten - jg - 04.07.2013 13:01

Das sehr häufige Schreiben von einzelnen Datensätzen ist bei TDMS auf Dauer unperformant.

Vgl. z.B. hier:
http://www.labviewforum.de/Thread-TDMS-kontinuierliche-Datenspeicherung?pid=151660#pid151660
oder hier:
http://www.labviewforum.de/Thread-Problem-beim-Streamen-in-TDMS-Datei

Schau doch mal, ob die erwähnten Optionen auch bei der Advanced API Abhilfe schaffen.

Gruß, Jens


RE: TDMS schreiben viele Daten - Sam789 - 05.07.2013 08:58

Also dass hilft alles nichts, selbst wenn ich die Beispiele von NI verwende..

Wenn ich das VI kontinuierlich durchlaufen lasse und die TDMS file öffne, schreibe, und wieder schließe, wird das von Zeit zu Zeit langsamer.

Ich brauch jemanden der sich mit TDMS auskennt und selbst kontinuierlich Daten abspeichert und das am besten mit TDMS ADVANCED OPEN, SYNCHRON oder ASYNCHRON...

Hoffe es meldet sich jemand...

Bin am verzweifelnKAKA


RE: TDMS schreiben viele Daten - GerdW - 05.07.2013 09:02

Hallo Simon,

du hast Jens' Bermekung gelesen?

1.) Quick&Dirty-Lösung: lagere die Speicherung in eine parallele Schleife aus und transferiere die zu speichernden Daten per Queue zu dieser Schleife. Dies ist der Standardansatz, um eine Datenerfassungsschleife von allen bremsenden Einflüssen zu entkoppeln...

2.) Profil ergänzen nicht vergessen...

3.) Zu meiner Anmerkung zu den unnötigen Array-Operationen:
[attachment=45253]

4.) Wenn man dann sieht, wieviele einzelne Daten du in in die TMDS-Datei schreibst: kann man die nicht etwas besser zusammenfassen? Erst wird ein 1D-Array zeilenweise geschrieben, dann das nächste. Warum nicht beide zu einem 2D-Array zusammenfassen? Usw. usf.


RE: TDMS schreiben viele Daten - Sam789 - 05.07.2013 09:29

[quote]4.) Wenn man dann sieht, wieviele einzelne Daten du in in die TMDS-Datei schreibst: kann man die nicht etwas besser zusammenfassen? Erst wird ein 1D-Array zeilenweise geschrieben, dann das nächste. Warum nicht beide zu einem 2D-Array zusammenfassen? Usw. usf. [\quote]

Ich will doch alle Messdaten in ein extra Channel schreiben?

Ich hab hier ein kleines VI was 12 mal Pseudowerte speichert.
Vll magst du das Programm mal 10 min laufen lassen, und siehst dabei auf die verstrichen Zeit "time".

Grüße

Danke für deine kräftige HilfeGuru1