Zbyt duża ilość danych

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Void
Posty: 3
Rejestracja: 05 wrz 2012 23:39
Wersja środowiska: LabVIEW 2011

Zbyt duża ilość danych

Post autor: Void »

Witam,
Mam następujący problem. Piszę program który jednocześnie steruje silnikiem krokowym oraz dokonuje pomiaru zmiany napięcia które spowodowane jest praca tego silnika, pomiar ten jest wyświetlany na wykresie oraz zapisywany do pliku tekstowego. Niestety pomiar jest dokonywany przy każdym kroku silnika co daje ogromną ilość danych, czy jest jakiś sposób by ograniczyć te dane zapisywane do pliku aby np. tylko co pięćdziesiąty pomiar był zapisywany?
Załączniki
labview_czujnik.jpg
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: Zbyt duża ilość danych

Post autor: Pitol »

Witaj Void.

Po pierwsze posprzątaj diagram. Prowadź druty w miarę prosto, nie zawijaj. Część funkcjonalności możesz do subVI schować. Pamiętaj o tym, że nam jest łatwiej analizować posprzątany diagram. Choć muszę przyznać, że do mistrzów "spaghetti LabVIEW" to Ci dużo brakuje i całość nie wygląda aż tak źle ;) Korzystasz z LV 2011, więc polecam na początek Ctrl-U, posprząta zgrubnie, a resztę już sam zrobisz.

A wracając do Twojego problemu:
najprostszym rozwiązaniem jest dodanie kolejnego rejestru przesuwnego, który będzie zliczał iteracje pętli FOR i np. robił dzielenie modulo (bloczek Quotient & Remainder z palety numeric). Następnie zapnij odczyt (lub zapamiętywanie w rejestrze, jeśli nie chcesz wyłączać odczytu) danych w strukturę Case i uruchamiaj to tylko gdy np. liczba iteracji będzie podzielna przez 10, co da Ci zbieranie danych co 10-tą iterację.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
TMa
Posty: 203
Rejestracja: 07 sty 2010 12:56
Wersja środowiska: LabVIEW 2017

Re: Zbyt duża ilość danych

Post autor: TMa »

Można sobie jeszcze trochę ułatwić sprawę i liczbę iteracji struktury FOR brać bezpośrednio z terminala (i).

Warto również rozważyć przyjęcie stałej ilości pomiarów na sekundę bez względu na szybkość próbkowania. Należy wtedy przeliczyć co który obieg pętli będzie potrzebny zapis.
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Zbyt duża ilość danych

Post autor: PiDi »

Dwa pytania:
1) Jak uruchamiasz ten program? Za pomocą Run czy Run Continously?
2) Drugie na obrazku:
Załączniki
pyt.png
ObrazekObrazekObrazekObrazek
Void
Posty: 3
Rejestracja: 05 wrz 2012 23:39
Wersja środowiska: LabVIEW 2011

Re: Zbyt duża ilość danych

Post autor: Void »

Na początku chcę przeprosić za te „spaghetti”, dopiero zaczynam poznawać to środowisko i jest to mój pierwszy większy program pisany w labview. Program jest uruchamiany przez polecenie run, ta wartość początkowa jest podłączona do dwóch rejestrów przesuwnych. Korzystając z Waszych porad przerobiłem mój program tak jak mi radziliście, niestety nadal jest zapisywana taka sama ilość danych jak wcześniej. Program w załączniku.
Załączniki
czujnik_swiatlowodowy.vi
(43.38 KiB) Pobrany 350 razy
Awatar użytkownika
czab
Posty: 54
Rejestracja: 26 cze 2011 14:59
Wersja środowiska: LabVIEW 2011

Re: Zbyt duża ilość danych

Post autor: czab »

Hej,

Dostajesz dokladnie to samo co wczesniej bo i funkcjonalnosc programu jest taka sama jak wczesniej. Iteracje "i" odczytujesz po zakonczeniu petli while, na tunelu wyjsciowym, jesli zrobisz petle majaca N iteracji to "i" na wyjsciu takiej petli ZAWSZE bedzie rowne N-1, czyli Twoj case zawsze bedzie mial wartosc true i tym samym wszystko dziala tak samo jak bez niego :) Malo tego, w Twoim rozwiazaniu jesli petla for bedzie miala mniej niz dziesiec krokow, do pliku nie zapisze sie nic (sprawdz dlaczego).

W zalaczniku zamiescilem szybkie (i brzydkie) rozwiazanie decymacji tablicy w zadanym stopniu (wybieranie co n-tej probki). Mozesz wstawic ten fragment kodu za Twoja petla for akwizycji danych, a przed zapisem do pliku.

Kilka uwag natury ogolnej:

- Postaraj sie program rozbic na podprogramy robiace wyspecjalizowane czynnosci, bo aktualnie bardzo slabo widac ktora czesc kodu za co jest odpowiedzialna.
- Mozesz rozwazyc otwarcie referencji do pliku na caly czas trwania pomiaru, a nie otwierac i zamykac go przy kazdej iteracji.
- Spora czesc kodu powtarza Ci sie co iteracja mimo ze wartosci kontrolek nie ulegaja zmianie, jest to niepotrzebny moim zdaniem narzut czasowy i polecilbym zainteresowanie sie Event Structure, ktora takie problemy elegancko rozwiazuje.
Załączniki
decymacja_tablicy.png
Ostatnio zmieniony 11 wrz 2012 12:46 przez czab, łącznie zmieniany 1 raz.
Obrazek
Void
Posty: 3
Rejestracja: 05 wrz 2012 23:39
Wersja środowiska: LabVIEW 2011

Re: Zbyt duża ilość danych

Post autor: Void »

Może i brzydkie jest to rozwiązanie ale za to skuteczne :), wreszcie mój program zapisuje tyle danych, ile ja chcę żeby zapisywał. Dziękuje wszystkim za pomoc :)
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: Zbyt duża ilość danych

Post autor: Pitol »

Podziękowania możesz rozszerzyć używając przycisku Pochwal. Nie żebym sam dla siebie chciał, ale z racji piastowanego stanowiska muszę edukować ludzkość forumową :D
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
ODPOWIEDZ