akwizycja ciagła, a rozmiar buforu

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
mwojcie3
Posty: 27
Rejestracja: 07 sty 2015 07:05
Wersja środowiska: LabVIEW 2013

akwizycja ciagła, a rozmiar buforu

Post autor: mwojcie3 »

Cześć

W aplikacji wykonuje pomiar ciągły z 10 kanałów analogowych w jednej pętli. Wynik przesyłam kolejką do drugiej pętli while, w której zapisuję wyniki do pliku TDMS. Struktura aplikacji podobna jest do tej z przykładów - akwizycja i logowanie ciągłe. Chciałbym żeby sygnały były próbkowane z częstotliwością 10 kHz.

Gdy chcę wykonać akwizycji - 1 blok diagram
akwizycja.png
, przy drugim przejściu pętli pojawia się błąd:

Error -200279 occurred at Acqusition Message Loop.vi
Possible reason(s):
The application is not able to keep up with the hardware acquisition.
Increasing the buffer size, reading the data more frequently, or specifying a fixed number of samples to read instead of reading all available samples might correct the problem.


Gdy zwiększę bufor jest ok.
bufor.png
Teoretycznie nie powinienem zmieniać rozmiaru zgodnie z przykładem z labview. Powinien wystarczyć rozmiar buforu 10 kHz/10 = 1000 wg zaleceń.

Nie wiem czy ten bufor trzeba dać dużo większy i ile większy. Jak obliczyć rozmiar buforu?
pawhan11
Posty: 67
Rejestracja: 21 wrz 2011 16:25
Wersja środowiska: LabVIEW 2012

Re: akwizycja ciagła, a rozmiar buforu

Post autor: pawhan11 »

Jeżeli rozmiar buforu masz 1000 to zapełni się on po 0.1s przy próbkowaniu 10k
Daj sobie rozmiar 50k albo więcej, przy kilku Gb ramu na Windowsie i tak jest to pomijalne a jak z jakichś powodów aplikacja zwolni to na pewno się bufor nie przepełni.
CLS - Certified LabVIEW Student
mwojcie3
Posty: 27
Rejestracja: 07 sty 2015 07:05
Wersja środowiska: LabVIEW 2013

Re: akwizycja ciagła, a rozmiar buforu

Post autor: mwojcie3 »

No dobra zapełni się w 0,1 sekundy i co z tego wynika, czemu pojawia się błąd, nie mogę odczytywać małego bufora? Jak to zależy od ilości mierzonych kanałów.
A czy rozmiar bufforu może spowolnić akwizycję? I jak ten bufor dobierać (jak wyznaczyć rozmiar).

A jeżeli nie zrobię w ten sposób:
akwizycja2.png
To jaka będzie częstotliwość próbkowanie i rozmiar buforu?? (z tego co w dokumentacji jest to dla 100 - 10000 kS/s bufor ma rozmiar domyślny 10000 kS)

Gdy używałem tego sposobu to nie miałem żadnych błędów.
Zyga
Posty: 86
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Re: akwizycja ciagła, a rozmiar buforu

Post autor: Zyga »

mwojcie3 pisze:..czemu pojawia się błąd..
Bufor się przepełnił :-B

A tak serio, to co jest w dokumentacji może być tylko założeniem i w 90% przypadków zadziała, ale w 10% już nie. A to komputer za wolny, a to windows odpalił Cortane itd.
pawhan11
Posty: 67
Rejestracja: 21 wrz 2011 16:25
Wersja środowiska: LabVIEW 2012

Re: akwizycja ciagła, a rozmiar buforu

Post autor: pawhan11 »

http://digital.ni.com/public.nsf/allkb/ ... B1004E9B07
http://digital.ni.com/public.nsf/allkb/ ... enDocument

rozmiar bufora nie spowolni akwizycji w żaden sposób, rozmiar bufora mówi o tym ile danych FIFO karty moze przerzucić do ramu PC.
Jeżeli odczytasz dane gdy bufor się przepełnił dostajesz właśnie ten błąd -> DAQ read wykonuje się rzadziej niż co 0.1 sek.
Przy finite samples jak na zalaczonym screenie rozmiar bufora = ilosc probek i tego nie można przepełnić.

Przyjmij sobie wielkosc bufora =10 x Fs i dla większości normalnych aplikacji poinno byc OK
Ostatnio zmieniony 07 kwie 2017 10:48 przez pawhan11, łącznie zmieniany 1 raz.
CLS - Certified LabVIEW Student
pawhan11
Posty: 67
Rejestracja: 21 wrz 2011 16:25
Wersja środowiska: LabVIEW 2012

akwizycja ciagła, a rozmiar buforu

Post autor: pawhan11 »

Tu jest fajnie opisane jak to działa:
http://digital.ni.com/public.nsf/allkb/ ... F60060AB6F
CLS - Certified LabVIEW Student
ODPOWIEDZ