Problem z pętlą while

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
plejek
Posty: 25
Rejestracja: 17 lis 2012 19:30
Wersja środowiska: LabVIEW 2010
Lokalizacja: Rzeszów

Problem z pętlą while

Post autor: plejek »

Witam,
Powiedźcie jak poprawić poniższą pętlę(w prawym dolnym rogu) , aby wartość minimalna była wyświetlana w każdym okresie. Teraz wyświetla mi tylko w jednym okresie i w dodatku najmniejszy min z wszystkich okresów branych pod uwagę. Okres w tym przypadku to odległość miedzy dwoma sąsiednimi maxami (fioletowe krzyżyki na grafie). Zielone kropki na przebiegu to valleys(minima) z których chcę wybrać najmniejszy. Żółty krzyżyk to najmniejszy min z zielonych min-ów w konkretnym okresie.
Dodam jeszcze, że próbka n i próbka n+1 to nie że różnica pomiedzy nimi to 1 tylko one są już wyselekcjonowane np. 102, 334, 500, 799 itp. n+1 to następna poprostu.
W porównaniu iteracji z constant wstawiłem 4 bo narazie wystarczyłoby mi 3 lub 4 okresy w zależności czy ostatni uwzględni czy nie, ale to już szczegół.
Jeśli czegoś jeszcze nie sprecyzowałem to powiedźcie.

Liczę na pomoc, z góry dzieki.
Załączniki
progr.png
fala.png
19 lis forum.vi
program v7.1
(196.97 KiB) Pobrany 267 razy
w.txt
dane do załadowania w programie
(74.17 KiB) Pobrany 279 razy
Ostatnio zmieniony 19 lis 2012 16:27 przez plejek, łącznie zmieniany 2 razy.
Awatar użytkownika
Pitol
Moderator
Posty: 987
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Problem z pętlą while

Post autor: Pitol »

Napisz algorytm działania tej pętli krok po kroku. Wypisz wejścia i wyjścia. Co to za dane w rejestrze krążą? Jakieś próbki? Indeksy? Opisz każde wejście.
Na podstawie tego będziemy Ci w stanie pomóc znaleźć błąd bo dla mnie w tym momencie nie jest jasne, co ta pętla ma robić i na jakich danych operować.

EDIT: Co do samego programu to proponuję pozamykać poszczególne funkcjonalności w SubVI. Będzie lepiej wyglądało, łatwiej będzie kod przeglądać.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
plejek
Posty: 25
Rejestracja: 17 lis 2012 19:30
Wersja środowiska: LabVIEW 2010
Lokalizacja: Rzeszów

Re: Problem z pętlą while

Post autor: plejek »

Do pętli z lewej strony wchodzi numer próbki n i numer próbki następnej.Próbka n to początek, a próbka n+1 to koniec zakresu w którym ma mi znaleźć minimum. Wiec przypuszczam ze w Array Subset znajdują sie wszystkie minima z tego zakresu. Wiec powinno mi znaleźć min i wyswietlic go na grafie.Następnie próbka n+1 za pomocą ShiftRegister wchodzi do pętli ponownie ale jak próbka n. itd itd.

Taki jest zamysł.

Zaaktualizowałem screena.

Jak by co to mozesz pisać na gg 5697547. Łatwiej sie prozumiemy.
Awatar użytkownika
Pitol
Moderator
Posty: 987
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: Problem z pętlą while

Post autor: Pitol »

Niepotrzebnie zamotałeś się w tym wszystkim.
Jeśli dobrze zrozumiałem to Twoim oczekiwaniem jest pętla, która znajdzie minima między kolejnymi punktami.

Rozwiązaniem Twojego problemu jest stworzenie pętli FOR, która będzie pracowała n-1 razy, gdzie n jest liczbą znalezionych indeksów maksymalnych.
Dlaczego n-1? Bo skoro punktów masz n, to zakresów między nimi jest n-1.
Następnie należy skorzystać z iteratora pętli FOR. Pozwoli on z użyciem bloczka Index Array wyciągnąć kolejne elementy (indeksy) z tablicy indeksów maksymalnych.
Reszta już jak w Twoim rozwiązaniu, czyli wycięcie odpowiedniej paczki z oryginalnego sygnału, znalezienie minimum i zbudowanie wykresu.

Zrzut ekranu masz poniżej. Proponuję dogłębnie przeanalizować to rozwiązanie, byćmoże odpalić z żarówką. Na przyszłość unikniesz niepotrzebnych "tworów" jeśli dobrze ogarniesz pętle, iteratory, itp.
Indeksy.PNG
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
plejek
Posty: 25
Rejestracja: 17 lis 2012 19:30
Wersja środowiska: LabVIEW 2010
Lokalizacja: Rzeszów

Re: Problem z pętlą while

Post autor: plejek »

Połączyłem tak jak wyżej podałeś i efekt jest niezadowalający. Co jest nie tak? Bez Shift registerów da sie to wykonać?
Dodatkowo musiałem skorzystać z dwóch Build Array (co widać na screenie), bo bez tego wywalało złe połączenia w pętli - dziwne.

Screen nr 1 po lekkiej przeróbce twojego pomysłu
Screen nr 2 to twój pomysł, ale niestety bez powodzenia.
Załączniki
progr33.png
progr22.png
fala2.png
Awatar użytkownika
Arronax8
Posty: 69
Rejestracja: 06 kwie 2012 21:25
Wersja środowiska: LabVIEW 2012

Re: Problem z pętlą while

Post autor: Arronax8 »

Hmmm..., wywalało Ci złe połączenia ze względu na domyślnie włączone autoindeksowanie na brzegu pętli.
Nie musisz robić z tego tablic bloczkiem Build Array. Wystarczy kliknąć na tym połączeniu na brzegu pętli i wybrać Disable Indexing. ;)
Awatar użytkownika
Pitol
Moderator
Posty: 987
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Problem z pętlą while

Post autor: Pitol »

Popatrz na moje rozwiązanie, a potem na swoje i znajdź różnice (pomijając te build array, które dodałeś).

Już znalazłeś?

Świetnie... zatem kliknij prawym klawiszem na wejściowe terminale i kliknij Disable Indexing. Po tym cudownym zabiegu powinno wszystko działać.
Na przyszłość polecam przyglądać się uważnie obrazom!!! :)
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
plejek
Posty: 25
Rejestracja: 17 lis 2012 19:30
Wersja środowiska: LabVIEW 2010
Lokalizacja: Rzeszów

Re: Problem z pętlą while

Post autor: plejek »

Ok zadziałało ale w 50% powiedzmy, spójrz na screna. Ciekawe dlaczego pomija niektóre przedziały hmm...
Załączniki
fala3.png
Awatar użytkownika
Pitol
Moderator
Posty: 987
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Problem z pętlą while

Post autor: Pitol »

Na przykładowych danych, które załączyłeś w pierwszym poście działało.

Załącz te dane co masz, to coś poradzimy.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
plejek
Posty: 25
Rejestracja: 17 lis 2012 19:30
Wersja środowiska: LabVIEW 2010
Lokalizacja: Rzeszów

Re: Problem z pętlą while

Post autor: plejek »

Problem w tym, że ładuje te same dane hmm...

Dla pewności wrzucam jeszcze screena z programu.
Załączniki
progr44.png
Ostatnio zmieniony 19 lis 2012 21:30 przez plejek, łącznie zmieniany 1 raz.
Awatar użytkownika
Pitol
Moderator
Posty: 987
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Problem z pętlą while

Post autor: Pitol »

Załącz raz jeszcze kod i dane.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
plejek
Posty: 25
Rejestracja: 17 lis 2012 19:30
Wersja środowiska: LabVIEW 2010
Lokalizacja: Rzeszów

Re: Problem z pętlą while

Post autor: plejek »

Dalej to samo...rozkładam ręce
Awatar użytkownika
Pitol
Moderator
Posty: 987
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: Problem z pętlą while

Post autor: Pitol »

Ok, pomyliłem się...

Musisz odjąć od siebie dwa wyjścia z Index Array (drugi index od pierwszego) i wynik podpiąć do wejścia Length bloczka Array Subset (tak jak to miałeś w jednym z przykładów parę postów wyżej).

Umknęło mi to jakoś... Przepraszam. Po zmianach powinno działać prawidłowo.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
plejek
Posty: 25
Rejestracja: 17 lis 2012 19:30
Wersja środowiska: LabVIEW 2010
Lokalizacja: Rzeszów

Re: Problem z pętlą while

Post autor: plejek »

Dzieki wielkie. Hula jak sie patrzy. Masz piwo u mnie ;) Dobrze, że są jeszcze tacy ludzie jak Ty :)
Awatar użytkownika
Pitol
Moderator
Posty: 987
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Problem z pętlą while

Post autor: Pitol »

Zamiast piwa zrób dla mnie coś: posprzątaj diagram.

Pozamykaj części kodu do SubVI, staraj się nie kłaść przewodów od prawej do lewej. Ogólnie porządek ma być! Diagram ma się mieścić na jednym ekranie.
Chcesz się potem tym chwalić gdzieś? To niech to wygląda porządnie...
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
ODPOWIEDZ