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?
Zbyt duża ilość danych
- Pitol
- Moderator
- Posty: 986
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Zbyt duża ilość danych
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ę.
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ę.
Re: Zbyt duża ilość danych
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.
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.
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Zbyt duża ilość danych
Dwa pytania:
1) Jak uruchamiasz ten program? Za pomocą Run czy Run Continously?
2) Drugie na obrazku:
1) Jak uruchamiasz ten program? Za pomocą Run czy Run Continously?
2) Drugie na obrazku:
Re: Zbyt duża ilość danych
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 425 razy
Re: Zbyt duża ilość danych
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.
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

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.
Ostatnio zmieniony 11 wrz 2012 12:46 przez czab, łącznie zmieniany 1 raz.
Re: Zbyt duża ilość danych
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 


- Pitol
- Moderator
- Posty: 986
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Zbyt duża ilość danych
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ą 
