ERROR 2500 przy otwieraniu pliku *.tdms

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: Harnas »

Witam,

Mam problem z czytaniem duzych plikow TDMS. Przy otwieraniu pliku powyzej 1GB pojawia sie blad 2500. Doczytalem sie gdzies na stronach NI, ze ma to zwiazek z duzym plikiem INDEX. Podobno juz przy zapisywaniu pliku w formacie TDMS powinienem byl ograniczyc wielkosc "buforu" czy cos w tym stylu.
Nie zmienia to faktu, ze te duze TDMSy musze przekonwerterowac to plikow TXT...a na razie nawet nie wiem je otworzyc bez generowania bledu.

Czy ktos moglby mnie wspomoc jakas rada, przykladowym VIem albo linkiem do pomocy?

Pozdrawiam
Harnas
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: Pitol »

Jest plugin do Excela, który czyta pliki TDMS. Byćmoże będzie w stanie sobie z tym poradzić.
http://zone.ni.com/devzone/cda/epd/p/id/2944
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: Harnas »

Kiedys go instalowalem. Plugin przydatny przy mniejszych plikach. Problem w tym, ze Excel moze odtworzyc maksymalnie troche ponad 1 milion wierszy. Zapisujac z czestotliwoscia 5 kHz milion wierszy to ok 200sekund zapisu. 200 sekund to ponad 3 minuty. Moj plik TDMS zawiera kolo 10 minut :)

Znalazlem taki temat:
https://decibel.ni.com/content/docs/DOC-8985
Problem w tym, ze przy ladowaniu pliku TDMS o wielkosci 1,3 GB u mnie dalej pokazuje sie blad.
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: Pitol »

A próbowałeś tego rozwiązania podanego w komentarzu?
https://decibel.ni.com/content/docs/DOC-20054
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: Harnas »

Czytalem co tam pisali.
Problemem jest samo otwarcie pliku TDMS o wielkosci 1,2GB. Zrobilem prosty VI - otwieranie TDMS -> zamykanie TDMS. Przy otwieraniu pakuje wszystko do RAMu...a jak juz wiecej zapakowac nie moze to albo wyskakuje blad 2500 - pamiec pelna, ew. LabVIEW sie wiesza.

Pracuje w VirtualBoxie z zainstalowanym Win XP i 4GB ramu.
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: jogurt_owocowy »

W ramach luźnych pomysłów... Spróbuj użyć TDMS Defragment.
Awatar użytkownika
bezimienny
Posty: 10
Rejestracja: 10 wrz 2013 21:31
Wersja środowiska: LabVIEW 2012

ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: bezimienny »

W ramach luźnych pomysłów... to może warto zmienić format zapisu danych!
Wiem że może to zabrzmiało banalnie ale aby podjęć decyzję trzeba wiedzieć czy opisane 1,3GB
to maksymalna wartość w projekcie?
Jeśli nie to może warto zastanowić się nad własną obsługą plików

Ja również miałem problemy z plikami wynikające z przydzielania pamięci w systemie systemu XP
Zgodnie z Helpem dopisałem do Boot.ini wartość "/3G i to pomogło doraźnie
Choć przy zapisie tak dużych plików to dostępne w LV tablice o maksymalnym rozmiarze I32
są w stanie zaadresować 2GB danych (1 Bajt na sampel).
Nie korzystam z plików TDMS choć wygodnych ale pamięciożernych.
Dla dużych plików np. rejestracji sygnału GPS stosuje się "dopisywanie danych do otwartego pliku"
A odczyt jedynie fragmentów (<1GB) z pliku np.:o rozmiarze 20 GB
Pozdrawiam
may
Posty: 96
Rejestracja: 20 lut 2012 12:30
Wersja środowiska: LabVIEW 2014
Lokalizacja: Katowice / Ruda Śląska

Re: ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: may »

Jestem przekonany, że coś robicie źle. Od pewnego czasu pracuję z plikiem TDMS mającym 4,67 GB. Na komputerze z 4GB pamięci RAM i 32 bitowym LabVIEW (czyli potrafi zaadresować 3,2 GB pamięci). Czyli w skrócie: nie ma fizycznej możliwości wczytania tego pliku w całości do pamięci. Mimo tego wszystko działa poprawnie. Otwarcie pliku TDMS (TDMS open) nie powoduje żadnego zauważalnego zwiększenia zużycia pamięci. Nawet otwarcie pliku TDMS File Viewerem nie robi niczego strasznego (ok. +10 MB zużycia). Plik posiada dane pogrupowane w kilka grup pomiarów zawierających po 4 kanały, każda grupa ok. 600 MB danych. Gdy przeglądając plik File Viewerem włączę opcję "Load All Values" i otworzę jedną z grup, to rzeczywiście LabVIEW zajmuje dodatkowe 600 MB pamieci. Polecenie wczytania wszystkich danych (czyli kliknięcie w korzeń drzewka struktury pliku TDMS) powoduje wyrzucenie okienka "Not enough memory to complete this operation" i wysypanie się File Viewera z błędem "Memory Full". Innymi operacjami które powodują takie zachowanie jest przykładowo odczytanie w pętli wszystkich kanałów za pomocą TDMS Read. Jednak jest to całkowicie zrozumiałe, bo świadomie każę upchnąć 4,7 GB danych w dostępne 3 GB pamieci. Natomiast jeżeli operuje sobie na jednej grupie danych na raz, wszystko działa poprawnie. Podejrzewam, że problemy mogą występować jeżeli plik TDMS ma jakiś patologicznie duży indeks (np. jeżeli był tworzony metodą Otwórz TDMS - dopisz jedną wartość - Zamknij TDMS), albo ma jakąś dziwną strukturę (jedna grupa pomiarowa? jeden ogromny kanał danych?). Jak będę miał chwilę czasu to może spróbuję zasymulować sobie jakieś takie patologiczne pliki.
Pisanie własnego systemu plików raczej odradzam - tam dopiero może być ciężko poprawnie alokować i zwalniać dane z pamięci.
Obrazek
Awatar użytkownika
bezimienny
Posty: 10
Rejestracja: 10 wrz 2013 21:31
Wersja środowiska: LabVIEW 2012

Re: ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: bezimienny »

Pisanie własnego systemu plików raczej odradzam - tam dopiero może być ciężko poprawnie alokować i zwalniać dane z pamięci.
Mi się ten pomysł też nie podobał ale *tdms nie odsługuje danych typu "complex". Po za tym nie znalazłem gotowej metody przeglądania (w ruchomym oknie) 20 GB danych ciągłych danych
Oczywiście nie uważam, że pisanie własnej obsługi jest jedynym najlepszym rozwiązaniem - poprostu nie znalazłem gotowego ubrania więc szyję na miarę.
Co do głównego wątku to na co zwrócił uwagę użytkownik "may" może problem w tym że tak duże dane są w jedne grupie.
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: Jamal79 »

A probowales Skasowac indeksa i otworzyc plik??
Czasami pomaga, wszystkie dane sa zawarte w tdms. Index, zawiera indeksacje pomiarow, grup, jednostek i innych properytow. Po skasowaniu utworzy go na nowo, moze z lepszym skutkiem.
may
Posty: 96
Rejestracja: 20 lut 2012 12:30
Wersja środowiska: LabVIEW 2014
Lokalizacja: Katowice / Ruda Śląska

ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: may »

Jamal79, ten post to tak jakoś z okazji rocznicy tego wątku?
Obrazek
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: Jamal79 »

hehehehe, nie musial byc jakis bot. Bo wyskoczylo mi jako nie przeczytane...
A tak przy okazji udalo sie??
kicaj
Posty: 26
Rejestracja: 30 mar 2008 20:39
Wersja środowiska: LabVIEW 2013
Kontakt:

ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: kicaj »

ja też miałem ten temat jako nieprzeczytany... przed "wystąpnieniem" Jamal79...

no to jak jest z tymi plikami z TDMS można otworzyć/zapisć większy niż dostępna pamięć RAM? a może to kwestia pamięci podręcznej Windowsa?
Robię co lubię, lubię co robię: satysfakcja gwarantowana dla mnie i dla szefa...
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: PiDi »

kicaj pisze: no to jak jest z tymi plikami z TDMS można otworzyć/zapisć większy niż dostępna pamięć RAM? a może to kwestia pamięci podręcznej Windowsa?
Jeśli pytasz o to, czy da się wczytać całość danych z 4GB pliku TDMS do 2GB pamięci, to odpowiedź brzmi: wlej 4 litry wody do 2-litrowego słoika. Pytanie podstawowe, jakie należy sobie zadać, to po co mi takie ilości danych naraz w programie? Jaką wartość niesie to, że wczytam kilkaset milionów punktów pomiarowych naraz? Zakładam przy tym, że nie pracujemy o CERN czy NASA ;)
To, co się w związku z tym da zrobić, to wczytywać plik po kawałku. Da się prawdopodobnie napisać program nawet tak, żeby wczytywanie danych nie zajęło nigdy więcej niż dokładny rozmiar danych. Czyli - wczytuję 200 MB, zużycie pamięci skacze o dokładnie 200 MB. Wczytuję kolejne 200 MB, zużycie pamięci już nie skacze (bo wykorzystuję poprzednio stworzony bufor).
ObrazekObrazekObrazekObrazek
kicaj
Posty: 26
Rejestracja: 30 mar 2008 20:39
Wersja środowiska: LabVIEW 2013
Kontakt:

Re: ERROR 2500 przy otwieraniu pliku *.tdms

Post autor: kicaj »

PiDi pisze: Jeśli pytasz o to, czy da się wczytać całość danych z 4GB pliku TDMS do 2GB pamięci, to odpowiedź brzmi: wlej 4 litry wody do 2-litrowego słoika.
no chyba że masz jeszcze zapas w postaci wiaderka... czytaj pamięć wirtualna windowsa, która rozszerza pojemność RAMu...
PiDi pisze: Pytanie podstawowe, jakie należy sobie zadać, to po co mi takie ilości danych naraz w programie? Jaką wartość niesie to, że wczytam kilkaset milionów punktów pomiarowych naraz? Zakładam przy tym, że nie pracujemy o CERN czy NASA ;)
nie wnikam w to - pytam teoretycznie. Praktycznie robie tak jak podano w przepisie wcześniej - tylko część danych, te które mnie interesują, są wczytywane. Reszta nie ruszana...
a propos CERN i NASA: oba to pikuś przy XFELu... ;)
PiDi pisze:
To, co się w związku z tym da zrobić, to wczytywać plik po kawałku. Da się prawdopodobnie napisać program nawet tak, żeby wczytywanie danych nie zajęło nigdy więcej niż dokładny rozmiar danych. Czyli - wczytuję 200 MB, zużycie pamięci skacze o dokładnie 200 MB. Wczytuję kolejne 200 MB, zużycie pamięci już nie skacze (bo wykorzystuję poprzednio stworzony bufor).
pewnie się da tylko po co? zazwyczaj operuje się na stałych wielkościach, zazwyczaj osi X... czyli liczba punktów albo np. czas
ale to już temat na inny wątek ;)
Robię co lubię, lubię co robię: satysfakcja gwarantowana dla mnie i dla szefa...
ODPOWIEDZ