INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Messkurven aus TDMS auslesen - Nicht genügend Speicher zum Abschließen der Operation



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!

18.11.2011, 23:30
Beitrag #1

jeannyLab Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Nov 2011

8.5
-
kA



Messkurven aus TDMS auslesen - Nicht genügend Speicher zum Abschließen der Operation
Hallo zusammen!

Ich muss für meine Semesterarbeit mehrere Messkurven (mit Unmengen an Punkten) aus TDMS-Dateien auslesen und weiterverarbeiten.

Im Moment versuche ich das einfach über eine FOR-Schleife, über die ich eine TDMS-Datei nach der anderen öffne, mir die gewünschten Kurven auslese und die ganzen Werte dann in einem Array zusammenfüge(wie im anhängenden JPEG erkennbar).

Jedoch bereits bei zwei der riesigen TDMS-Dateien (jede hat ungefähr 230 MB) geht das Ganze irgendwie in die Knie und die Fehlermeldung 'Nicht genügend Speicher zum Abschließen dieser Operation' erscheint.

Gibt es eine Möglichkeit, das effizienter zu programmieren oder mache ich irgendeinen Fehler?

Danke Euch schon mal sehr!

lg jeanny


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2011, 12:07
Beitrag #2

DuffiDuck Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Sep 2011

10.0.1
2007
EN


Oesterreich
RE: Messkurven aus TDMS auslesen - Nicht genügend Speicher zum Abschließen der Operation
Hallo,

muss die Schleife wirklich so schnell laufen? Probier mal eine Durchlaufzeit von 50 oder 100ms?

Sprich Programming > Timing > wait (ms) und eben eine zeit anhängen

mfg duffiBadewanne_2_2

Ich bin kein Politiker,
ich bin kein Dichter,
ich bin kein Mensch...
... ich bin Techniker.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2011, 12:28
Beitrag #3

Der_Elch Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 93
Registriert seit: Jan 2010

2014
2009
DE

4xxx
Oesterreich
RE: Messkurven aus TDMS auslesen - Nicht genügend Speicher zum Abschließen der Operation
Da du weißt wie groß dein Array wird, initialisiere es zuerst und dann erstze die einzelnen Stellen.

Was sagt der Task Manager? Wie groß wird der Speicherplatzbedarf / Auslastung?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2011, 13:02
Beitrag #4

jeannyLab Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Nov 2011

8.5
-
kA



RE: Messkurven aus TDMS auslesen - Nicht genügend Speicher zum Abschließen der Operation
Danke Euch für die schnelle Hilfe!

Also das Einfügen einer Wait-Time hat leider nichts genützt, auch nicht bei 300 ms.

Die CPU-Auslastung liegt nur bei etwa 25 - 30 %, allerdings wird fast mein gesamter 2 GB Arbeitsspeicher 'aufgefressen'. Interessanterweise braucht Labview auch immer noch über 1 GB Arbeitsspeicher, wenn ich das VI gestoppt habe. Erst wenn ich das VI neu starte, kommt er runter.

Ich weißt ja vor dem Schleifenstart nicht genau, wie groß mein Array sein wird, da das von der Anzahl der Messpunkte jeder TDMS-Datei abhängt und die auch in den verschiedenen TDMS-Dateien etwas unterschiedlich sind (könnte das ein Problem darstellen?).

Ich werde jetzt mal versuchen, anstatt die ganze Gruppe 'Aufheizkurve' auszulesen und anschließend meine gewünschten Kanäle zu wählen, direkt nur meine Kanäle einzeln auszulesen...

Sonst noch Ideen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2011, 13:39 (Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2011 13:41 von schrotti.)
Beitrag #5

schrotti Offline
LVF-Freak
****


Beiträge: 842
Registriert seit: Feb 2008

2009 - 2011
2006
kA

70180
Deutschland
Tongue RE: Messkurven aus TDMS auslesen - Nicht genügend Speicher zum Abschließen der Operation
Das Wait hat nur insofern Einfluss auf den Speicherverbrauch, als das er mit höherer Wartezeit langsamerer belegt wird. Big Grin Das Wait kannst du guten Gewissens weglassen.

Dein Problem ist eigentlich ganz simpel: Du lädst zu viele Daten von der HD in den RAM. Die Lösung ist kann da wesentlich schwieriger sein. Der von dir genannte Ansatz, nur das zu lesen, was später auch gebraucht wird, ist hierbei der beste und einfachste Weg. Langt auch das nicht, bleiben noch zwei Möglichkeiten:
1. Wenn du den alle Kanäle gleichzeitig in einem Graph anzeigen willst, musst du erst einen angemessen Ausschnitt des Kanals lesen (Offset und Länge) und komprimieren. Anschließend das ganze wiederholen, bis der komplette Kanal gelesen wurde. Dabei geht natürlich Information durch das Komprimieren verloren.
2.Wenn dich das stört, dann wirst du nicht alle Dateien komplett und gleichzeitig öffnen können, sondern musst dich auf einen Ausschnitt beschränken, der von deinem Rechner bzw. von LV bewältigt werden kann.

Ansonsten schließe ich mich Der_Elch an. Die Sampleanzahl ist als Eigenschaft mittels des Schlüssels NI_ChannelLength abrufbar.

Gruß Julius
Empfehlungen: expressionflow, LavaG , mooregoodideas, OpenG, JKI Blog
Tipp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2011, 14:22
Beitrag #6

Der_Elch Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 93
Registriert seit: Jan 2010

2014
2009
DE

4xxx
Oesterreich
RE: Messkurven aus TDMS auslesen - Nicht genügend Speicher zum Abschließen der Operation
(19.11.2011 13:02 )jeannyLab schrieb:  Danke Euch für die schnelle Hilfe!

Also das Einfügen einer Wait-Time hat leider nichts genützt, auch nicht bei 300 ms.

Die CPU-Auslastung liegt nur bei etwa 25 - 30 %, allerdings wird fast mein gesamter 2 GB Arbeitsspeicher 'aufgefressen'. Interessanterweise braucht Labview auch immer noch über 1 GB Arbeitsspeicher, wenn ich das VI gestoppt habe. Erst wenn ich das VI neu starte, kommt er runter.

Ich weißt ja vor dem Schleifenstart nicht genau, wie groß mein Array sein wird, da das von der Anzahl der Messpunkte jeder TDMS-Datei abhängt und die auch in den verschiedenen TDMS-Dateien etwas unterschiedlich sind (könnte das ein Problem darstellen?).

Ich werde jetzt mal versuchen, anstatt die ganze Gruppe 'Aufheizkurve' auszulesen und anschließend meine gewünschten Kanäle zu wählen, direkt nur meine Kanäle einzeln auszulesen...

Sonst noch Ideen?
Das wait kannst du getrost vergessen, da der Rechner ja nicht "überlastet" wird, sondern "nur" den RAM anfüllt.
Zu den 2GB Arbeitsspeicher: Da ich annehme das du eine 32Bit LV hast, ist das schon ein Problem. Denn mit 32 Bit System sind nur 2GB Arbeitsspeicher pro Programm möglich.

Schau dir mal deine Messdaten an, sind wirklich alle Messpunkte von Bedeutung? Vielleicht kannst du sie ja zusammenfassen (Mittelwertbildung über x Messwerte). Das mit dem Offset von schrotti klingt auch nacher einer sehr guten Idee.

Bzw vielleicht kannst du uns ein Bild vom FP geben oder genauer erklären was du anzeigen willst?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2011, 20:31
Beitrag #7

jeannyLab Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Nov 2011

8.5
-
kA



RE: Messkurven aus TDMS auslesen - Nicht genügend Speicher zum Abschließen der Operation
Also das mit dem Lesen der einzelnen Kurven hat leider auch nichts gebracht.

Ich hab's nun auch an einem PC mit 4 GB Arbeitsspeicher probiert - dort läufts.

Messpunkte 'verlieren' ist keine Option.
Was ich mit den Messkurven machen will ist prinzipiell folgendes:
Ich habe mehrere TDMS-Dateien mit den 'selben' Messkurven - um eine statistisch korrekte Auswertung machen zu können. Also werde ich jeweils die Punkte der selben Messkurve aller TDMS-Dateien mitteln (und an bstimmten Punkten Streuwerte ermitteln etc.).
Anschließend möchte ich zwei verschiedene Messkurven gegeneinander darstellen. Daraus entsteht eine Art 'Punktewolke', die ich mittels Kurvenanpassung approximiere und somit schlussendlich aus den vielen Kurven eine schöne xy-Kurve erhalte (mit statistischen Aussagen zur Standardabweichung etc.).

Die Lösung mit dem stückweisen Auslesen der Kurven aus den TDMS-Dateien wäre also eine mögliche Lösung: Ich könnte ein Stück aller Messkurven aus allen TDMS-Dateien auslesen, mitteln und dann das nächste Stück auslesen und die gemittelten Werte an die vorigen anhängen... Etwas kompliziert, aber eine gute Idee - DANKESCHÖN (ich werde die Notwendigkeit mit meinem Betreuer vorerst besprechen).

Ich wollte auch noch die Initialisierung des Arrays ausprobieren. Allerdings hänge ich da fest, da er mir in dem 3-dimensionalen Array immer nur die n-1 te Seite des initialisierten Arrays mit den richtigen Werten ersetzt - seht ihr den Fehler (JPEG hängt an)??


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.11.2011, 19:59
Beitrag #8

jeannyLab Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Nov 2011

8.5
-
kA



RE: Messkurven aus TDMS auslesen - Nicht genügend Speicher zum Abschließen der Operation
Ich bin langsam am verzweifeln... so lange schiebe ich schon die Blöcke durch die Gegend.
kann mir keiner von Euch helfen, wieso nur im letzten Schleifendurchgang das initialisierte Array ersetzt wird?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.11.2011, 20:56
Beitrag #9

jeannyLab Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Nov 2011

8.5
-
kA



RE: Messkurven aus TDMS auslesen - Nicht genügend Speicher zum Abschließen der Operation
Okay, das mit der Array-Initialisierung hat nun geklappt, aber bezüglich der Speicherproblematik auch nicht geholfen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.11.2011, 23:20
Beitrag #10

schrotti Offline
LVF-Freak
****


Beiträge: 842
Registriert seit: Feb 2008

2009 - 2011
2006
kA

70180
Deutschland
RE: Messkurven aus TDMS auslesen - Nicht genügend Speicher zum Abschließen der Operation
Dass dein Speicherproblem durch das initialisierte Array gelöst wird war auch nicht zu erwarten, aber bei solchen Ungetümen ist wird es sicherlich etwas dazu beitragen. Du könntest es jetzt noch optimieren, indem du jedem Kanal ein eindimensionales Array initialisierst, das exakt dessen Größe entspricht und dieses Array in ein Cluster packst. Ansonsten habe ich dir mal ein kleines Beispiel zusammengeklickt. Viel Spaß


Angehängte Datei(en)
10.0 .vi  TDMS_Speicherproblem.vi (Größe: 17,37 KB / Downloads: 300)

Gruß Julius
Empfehlungen: expressionflow, LavaG , mooregoodideas, OpenG, JKI Blog
Tipp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Auslesen TDMS Dateien simcum 6 5.770 20.02.2024 10:53
Letzter Beitrag: Woodeye
  Nicht genügend Quoten? THL 7 5.430 26.11.2013 12:50
Letzter Beitrag: jg
  Arbeitsspeicher ist voll Meldung, obwohl noch genügend da ist YYYs 4 5.438 09.04.2013 08:59
Letzter Beitrag: YYYs
  "Nicht genügend Speicher zum Abschließen dieser Operation" Excalibour 9 14.953 10.10.2010 14:10
Letzter Beitrag: eMKay
  Kann globale Variable nicht auslesen matzimus 5 7.263 11.06.2010 10:09
Letzter Beitrag: jg
  Zeitabschnitt aus Tages-tdms-Dateien auslesen kevlin 2 4.352 11.01.2010 15:21
Letzter Beitrag: kevlin

Gehe zu: