odrzucanie wybranych wyników liczbowych
odrzucanie wybranych wyników liczbowych
Cześć,
Szukam rozwiązania następującego problemu. Mam liczbę w postaci DBL, która zmienia się co sekundę. Wiem, że ta liczba powinna przyjmować wartości z zakresu od 1 do 40. Czasem jednak przyjmuje wartości na poziomie 650. Taki wynik chciałbym odrzucić, czyli jeśli przychodzi do mnie liczba i jest większa niż 40 i mniejsza niż 1 to wtedy wyświetlam albo 0 jeśli nie miałem nic wcześniej albo wyświetlam poprzednią wartość z określonego zakresu. Macie pomysł jak zrobić to sprzężenie zwrotne do case'a, żeby wyświetlać zawsze poprawny wynik?
Szukam rozwiązania następującego problemu. Mam liczbę w postaci DBL, która zmienia się co sekundę. Wiem, że ta liczba powinna przyjmować wartości z zakresu od 1 do 40. Czasem jednak przyjmuje wartości na poziomie 650. Taki wynik chciałbym odrzucić, czyli jeśli przychodzi do mnie liczba i jest większa niż 40 i mniejsza niż 1 to wtedy wyświetlam albo 0 jeśli nie miałem nic wcześniej albo wyświetlam poprzednią wartość z określonego zakresu. Macie pomysł jak zrobić to sprzężenie zwrotne do case'a, żeby wyświetlać zawsze poprawny wynik?
Re: odrzucanie wybranych wyników liczbowych
Witam,
czy takie coś Ciebie interesuje?
Zauważyłem pomyłkę, trzeba zmienić warunek na mniejszy niż 1 a nie mniejszy niż 0.
Pozdrawiam
czy takie coś Ciebie interesuje?
Zauważyłem pomyłkę, trzeba zmienić warunek na mniejszy niż 1 a nie mniejszy niż 0.
Pozdrawiam
- Załączniki
-
- vi.png (13.5 KiB) Przejrzano 10855 razy

Re: odrzucanie wybranych wyników liczbowych
Tak, mniej więcej o to chodzi. Pytanie tylko co podłączyć gdzie. Wygląda na to, że do obu wejść bloku Select musiałbym podłączyć sygnał który chcę zbadać, ale w jednym przypadku musiałaby to być wartość poprzednia (np. odczytana z pamięci). Biorąc pod uwagę, że do wejścia Numeric też muszę podpiąć ten sygnał mam trzy miejsca do którego idzie ten sam sygnał, tylko z dwóch różnych chwil czasowych. I to jest najtrudniejsze.
Re: odrzucanie wybranych wyników liczbowych
Zastosowanie iloczynu logicznego spowoduje, że nigdy wyrażenie z przykładu od de80 nie będzie prawdziwe. Załączam program, którego działanie jest następujące:
0. Jeśli liczba należy do zakresu (1,40) i przed nią każda z liczb do niego należała to przepuszczam tę liczbę i ustawiam flagę.
1. Jeśli liczba kolejny raz należy do zakresu bez względu na przeszłość to przepuszczam ją
2. Jeśli liczba nie należy do zakresu i wcześniej nie wprowadzono prawidłowej liczby to wyświetlam 0
3. Jeśli liczba nie zależy do zakresu to wyświetlam poprzednią zapamiętaną liczbę należącą do zakresu.
Czy o coś takiego chodziło? W razie pytań pisz śmiało
0. Jeśli liczba należy do zakresu (1,40) i przed nią każda z liczb do niego należała to przepuszczam tę liczbę i ustawiam flagę.
1. Jeśli liczba kolejny raz należy do zakresu bez względu na przeszłość to przepuszczam ją
2. Jeśli liczba nie należy do zakresu i wcześniej nie wprowadzono prawidłowej liczby to wyświetlam 0
3. Jeśli liczba nie zależy do zakresu to wyświetlam poprzednią zapamiętaną liczbę należącą do zakresu.
Czy o coś takiego chodziło? W razie pytań pisz śmiało

- Załączniki
-
- zakres_liczby.vi
- (10.24 KiB) Pobrany 458 razy
Certified LabVIEW Associate Developer
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: odrzucanie wybranych wyników liczbowych
MicMac, co robi ta case structure u Ciebie, bo kompletnie nie kapuję, czemu to tak skomplikowałeś?
Przede wszystkim warto skorzystać z gotowych bloczków zamiast konstruować całą logikę od zera - proponuję bloczek In Range And Coerce (i poczytać sobie o jego szczegółach). Idziemy dalej:
Co masz na myśli mówiąc: "muszę podpiąć sygnał w trzech miejscach"?

Przede wszystkim warto skorzystać z gotowych bloczków zamiast konstruować całą logikę od zera - proponuję bloczek In Range And Coerce (i poczytać sobie o jego szczegółach). Idziemy dalej:
Czy wiesz jak działa shift register?bikekowal pisze:Tak, mniej więcej o to chodzi. Pytanie tylko co podłączyć gdzie. Wygląda na to, że do obu wejść bloku Select musiałbym podłączyć sygnał który chcę zbadać, ale w jednym przypadku musiałaby to być wartość poprzednia (np. odczytana z pamięci). Biorąc pod uwagę, że do wejścia Numeric też muszę podpiąć ten sygnał mam trzy miejsca do którego idzie ten sam sygnał, tylko z dwóch różnych chwil czasowych. I to jest najtrudniejsze.
Co masz na myśli mówiąc: "muszę podpiąć sygnał w trzech miejscach"?
Re: odrzucanie wybranych wyników liczbowych
Tak, wiem. Zakręciłem się w tamtej odpowiedzi. Sorry.Czy wiesz jak działa shift register?
Co masz na myśli mówiąc: "muszę podpiąć sygnał w trzech miejscach"?
Tak o to własnie mi chodziło. Niestety ja niedoprecyzowałem z jakiego typu źródłem mam do czynienia. Rzuciłem okiem na szybko i myślałem, że to po prostu double. To jednak jest 1D array of double, teraz nie zgadzają mi się typy danych. Zaraz zrobię konwersję, żeby wszystko było poprawnie i dam znać czy wszystko działa jak należy.MicMac89 pisze:Czy o coś takiego chodziło? W razie pytań pisz śmiało
EDIT:
Zrobiłem konwersję z array'a na double i podłączyłem ten fragment pod resztę programu. Najwyraźniej albo ja coś pomieszałem, albo jest gdzieś błąd (chociaż wydaje mi się to mało prawdopodobne), ale cały program po podłączeniu programu od MicMac89 odczytuje wartość (program czyta z portu szeregowego) tylko raz i to wszystko, efekt zawieszenia programu. Po usunięciu fragmentu programu, wszystko wraca do normy. Co może być przyczyną?
PiDi pisze:MicMac, co robi ta case structure u Ciebie, bo kompletnie nie kapuję, czemu to tak skomplikowałeś?![]()
Przede wszystkim warto skorzystać z gotowych bloczków zamiast konstruować całą logikę od zera - proponuję bloczek In Range And Coerce (i poczytać sobie o jego szczegółach). Idziemy dalej:Czy wiesz jak działa shift register?bikekowal pisze:Tak, mniej więcej o to chodzi. Pytanie tylko co podłączyć gdzie. Wygląda na to, że do obu wejść bloku Select musiałbym podłączyć sygnał który chcę zbadać, ale w jednym przypadku musiałaby to być wartość poprzednia (np. odczytana z pamięci). Biorąc pod uwagę, że do wejścia Numeric też muszę podpiąć ten sygnał mam trzy miejsca do którego idzie ten sam sygnał, tylko z dwóch różnych chwil czasowych. I to jest najtrudniejsze.
Co masz na myśli mówiąc: "muszę podpiąć sygnał w trzech miejscach"?
Lubię proste rozwiązania! Wypróbuję to i dam znać czy efekt będzie podobny jak w przypadku rozwiązania poprzedniego.
EDIT 2:
Sprawdziłem i efekt jest podobny jak w przypadku poprzednim. Oba składowe programy działają poprawnie, niestety po połączeniu nie chcą ze sobą grać - znów - odczyt jest jednorazowy i tyle.
Ostatnio zmieniony 05 cze 2012 19:23 przez bikekowal, łącznie zmieniany 3 razy.
Re: odrzucanie wybranych wyników liczbowych
Chciałbym odświeżyć temat pytaniem. Mianowicie chcę umieścić sprawdzanie warunku wewnątrz większego programu, który działa w pętli while. Nie mam tylko pomysłu na warunek, który należałoby dodać do shift registera, żeby nie wykonywał się w nieskończoność a tylko wtedy kiedy na wejście zostanie podana nowa wartość do sprawdzenia. Proste dodanie warunku sprawdzanie liczbę iteracji nie działa, bo program wykona się raz i to wszystko. Macie jakieś pomysły?
Re: odrzucanie wybranych wyników liczbowych
Nie wiem czy dobrze zrozumiałem, ale załączam VI który za każdym wywołaniem sprawdza czy wartość wejściowa uległa zmianie.bikekowal pisze:Chciałbym odświeżyć temat pytaniem. Mianowicie chcę umieścić sprawdzanie warunku wewnątrz większego programu, który działa w pętli while. Nie mam tylko pomysłu na warunek, który należałoby dodać do shift registera, żeby nie wykonywał się w nieskończoność a tylko wtedy kiedy na wejście zostanie podana nowa wartość do sprawdzenia. Proste dodanie warunku sprawdzanie liczbę iteracji nie działa, bo program wykona się raz i to wszystko. Macie jakieś pomysły?
- Załączniki
-
- sin_idx.vi
- (28.13 KiB) Pobrany 443 razy