Dlaczego LV się wyłącza, co robię źle ?

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
czyzak
Posty: 9
Rejestracja: 22 lis 2011 14:54
Wersja środowiska: LabVIEW 2010

Dlaczego LV się wyłącza, co robię źle ?

Post autor: czyzak »

Witam. Chcę wyświetlić na wykresie pewne dane. Jeśli chce wyświetlić trochę danych to jest ok, ale jak danych jest więcej to całe LV się wyłącza. Nie wiem czy to problem z moją wersją, czy coś nie tak z programem. Na obrazku który załączyłem ten układ powyżej działa, a ten poniżej nie.

Proszę o pomoc
Załączniki
nowa_obliczenia_alfa.vi
Plik
(103.9 KiB) Pobrany 310 razy
Problem
Problem
Awatar użytkownika
czab
Posty: 54
Rejestracja: 26 cze 2011 14:59
Wersja środowiska: LabVIEW 2011

Re: Dlaczego LV się wyłącza, co robię źle ?

Post autor: czab »

Nie znam wszystkich szczegolow (w tym rozmiaru tablic ktore laczysz), ale przypuszczam ze dochodzisz do poziomu, w ktorym LabVIEW zaczyna brakowac RAM-u. Przenosisz sporo danych w sposob wymuszajacy ich kopiowanie w pamieci z miejsca na miejsce, wiec (w optymistycznym przypadku) ogrom danych ktorym operujesz jest naraz w dwoch miejscach w pamieci (czyli zajmuje 2x tyle miejsca co powinien jak sie latwo domyslic).

Sposoby rozwiazania:

- Popatrz ile rzeczy moglbys "zwinac" do postaci prostszych instrukcji, zamiast wszedzie prowadzic przeogromne gaszcze drutow,
- SubVI ze srodka sprobuj wolac po kolei, a nie rownolegle (jakas petla for?),
- Wszedzie tam, gdzie operujesz na duzych tablicach korzystaj raczej z In Place Element,
- Mozna rozwazyc przenoszenie tych danych po programie przez Data Value Reference.

Podsumowujac: Nie ma sie co oszukiwac, programik nie jest dobrze napisany. Patrzac na kod (nie podales kodu bledu, nie zamiesciles okna z crashem) domyslam sie, ze problemem jest ogrom danych ktorego komputer nie jest w stanie przemielic. Czeka Cie prawdopodobnie przepisanie tego wszystkiego od nowa do bardziej "strawnej" wersji. Koniecznie musisz tak zonglowac tymi tablicami, klastrami i indeksami?

Na marginesie: Naprawde koniecznie musisz na wykresie wyswietlac WSZYSTKIE probki? Wiekszosc wyswietlaczy duzej ilosci danych ma sprytne algorytmy decymacji, ktore w oddaleniu wyswietlaja niewiele probek, i "doczytuja" krytyczne probki w miejscu przyblizenia, dzieki czemu w pamieci jest aktualnie zaladowanych stosunkowo niewiele probek.
Obrazek
czyzak
Posty: 9
Rejestracja: 22 lis 2011 14:54
Wersja środowiska: LabVIEW 2010

Dlaczego LV się wyłącza, co robię źle ?

Post autor: czyzak »

To nie wina przeciążenia, pousuwałem prawie wszystko, zostawiłem tylko te 3 moduły podłączone i dalej wywala. To fakt, nie jestem wirtuozem LV. Jest może inny sposób na wyświetlenie tego? Bez tej pętli for wydłubującej dane do wykreslenia wszystko działa :(
Awatar użytkownika
czab
Posty: 54
Rejestracja: 26 cze 2011 14:59
Wersja środowiska: LabVIEW 2011

Dlaczego LV się wyłącza, co robię źle ?

Post autor: czab »

To trzeba temat przeleciec od poczatku. Przydalaby sie aktualna wersja tego, co Ci nie dziala, a takze zalaczenie wszystkich subVI.
Obrazek
czyzak
Posty: 9
Rejestracja: 22 lis 2011 14:54
Wersja środowiska: LabVIEW 2010

Re: Dlaczego LV się wyłącza, co robię źle ?

Post autor: czyzak »

Jeśli byś mógł zerknąc, to byłbym wdzięczny.
Załączniki
nowa.rar
Program
(773.98 KiB) Pobrany 328 razy
Awatar użytkownika
czab
Posty: 54
Rejestracja: 26 cze 2011 14:59
Wersja środowiska: LabVIEW 2011

Dlaczego LV się wyłącza, co robię źle ?

Post autor: czab »

Na szybko moge powiedziec tyle - Twoj kod u mnie dziala, ale zzera mi 40-50% zasobow procesora, a w kompie siedzi i5 z tych mocniejszych. To nie pamiec jest problemem, tylko sposob w jaki manipulujesz danymi. W petli "while' ogolnej mielisz wszystkie obliczenia przy kazdej iteracji, co powoduje ogromne marnotrawstwo mocy obliczeniowej. Poza tym, takie subVI jak np. nowa_probkowanie.vi sa niedopuszczalne. Zamiast zajmowac ogromne polacie diagramu przy pakowaniu i rozpakowaniu z klastrow, mozesz skorzystac z petli i innych udogodnien w LabVIEW. Mozesz odejmowac od siebie cale tablice i klastry, poszukaj prawidlowosci i wykorzystaj narzedzia ktore masz. Ten kodzik jest do przepisania caly....

Jesli nie bardzo masz na to czas, mozesz ratowac sie wsadzeniem calosci kodu do event structure i odpalac obliczenia przyciskiem.

EDIT: Zeby zobrazowac skale problemu, to, co jest na pierwszym obrazku da sie zastapic przy pewnej ilosci kombinowania tym, co jest na drugim obrazku.
Załączniki
pomocnicze_alpha_b.png
pomocnicze_alpha.png
Ostatnio zmieniony 20 wrz 2012 13:54 przez czab, łącznie zmieniany 1 raz.
Obrazek
ODPOWIEDZ