Witam,
mam dość nietypowy problem, spędziłem już mnóstwo czasu nad nim a rozwiązania nie mam do tej pory.
Może najprościej będzie opisać to przykładem.
Mam sześć przycisków których mechanical action ustawiony jest na "switch until released". Mam również sześć liczników iteracji pętli (zwykłe indykatory podpięte do w nieskończonej pętli while). Chcę, aby indykator 1 działał tylko jak będę trzymał wciśnięty przycisk 1. Indykator 2 jak trzymam przycisk 2, itd.
Chcę rozwiązać ten problem wykorzystując event structure. Problem w tym że dodając odpowiedni event, z "value change" dla odpowiedniego przycisku nie mogę później zakończyć tego eventa - po puszczeniu klawisza myszy przycisk się wyciska (czyli de facto zmienia swoją wartość) ale licznik dalej się zwiększa...
Jak sobie poradzić z tym problemem?
W załączniku plik.
Event structure i przycisk "Switch until released"
Event structure i przycisk "Switch until released"
Sprobowalem u siebie to zbudowac. U mnie po wejsciu w petle while, juz jej nie opuszcza. Sprobuj obslugiwac stop petli while, bo inaczej jej nie opuszcza nawet po puszczeniu przycisku.
-
- Posty: 96
- Rejestracja: 20 lut 2012 12:30
- Wersja środowiska: LabVIEW 2014
- Lokalizacja: Katowice / Ruda Śląska
Re: Event structure i przycisk "Switch until released"
Nie jestem absolutnie przekonany, czy właśnie o to Ci chodzi i jak bardzo zależy Ci na użyciu event structure, ale możliwe jest dużo prostsze rozwiązanie wykorzystujące wyłącznie shift register'y i case'y. Działa to, o ile Cię dobrze zrozumiałem, tak jak chcesz, czyli dany "licznik" (indykator) zlicza przejścia pętli, tylko jeżeli jest wciśnięty odpowiadający mu przycisk. Mechanical action przycisków ustawione jest na "switch until released ", w przypadku wartości false w case'ach kabel jest tylko przeciągnięty.
//EDIT//
Możesz też zrobić to dokładnie tak jak na twoim przykładzie, jedyne co musisz zrobić to na event structure kliknąć prawym, wybrać "Edit events handled by this case" i odznaczyć ptaszka na dole mówiącego "lock front panel (...)". Nie jest to jednak "ładne" rozwiązanie, a w szczególności należy unikać event struktur rozrzuconych chaotycznie po całym programie.
//EDIT//
Możesz też zrobić to dokładnie tak jak na twoim przykładzie, jedyne co musisz zrobić to na event structure kliknąć prawym, wybrać "Edit events handled by this case" i odznaczyć ptaszka na dole mówiącego "lock front panel (...)". Nie jest to jednak "ładne" rozwiązanie, a w szczególności należy unikać event struktur rozrzuconych chaotycznie po całym programie.
Ostatnio zmieniony 07 mar 2012 19:18 przez may, łącznie zmieniany 2 razy.
- Pitol
- Moderator
- Posty: 984
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Event structure i przycisk "Switch until released"
Kolego Rubid... Wszelkie próby pomocy będą bezsensowne, dopóki nie wyjaśnisz konkretnie co chcesz uzyskać. W jakim celu liczysz iteracje? W pętli nie masz żadnego ograniczenia czasowego, co oznacza, że pętla kręci się z maksymalną prędkością, zależną od ilości procesów przetwarzanych przez Twój system operacyjny. Wyniki te nie mają kompletnie sensu, gdyż wystarczy np. otworzyć Mój Komputer żeby zakłócić pomiary.
Zatem wyjaśnij nam proszę konkretnie co chcesz osiągnąć, a wtedy nasza pomoc będzie bardziej precyzyjna i zdecydowanie lepsza.
Zatem wyjaśnij nam proszę konkretnie co chcesz osiągnąć, a wtedy nasza pomoc będzie bardziej precyzyjna i zdecydowanie lepsza.
Re: Event structure i przycisk "Switch until released"
Witajcie,
dzięki za zainteresowanie tematem - dopiero teraz wróciłem do domu, więc spieszę z odpowiedzią.
Harnas,
to właśnie jest mój problem
may,
masz absolutną rację, jednak Twoje rozwiązanie ma jedną podstawową wadę - jeśli będziesz miał 20 przycisków to strach pomyśleć jak będzie wyglądał kod. Ja mam narazie sześć, jednak nie mam pewności czy niedługo nie będę musiał dorobić jeszcze sześć... Dlatego zależy mi na eventach - łatwiej to obsłużyć i uporządkować.
Pitol,
masz rację - starałem się jednak jak najmniej skomplikować temat. Mój program ma wysyłać sygnały o określonych parametrach (np. częstotliwości) po naciśnięciu odpowiedniego przycisku. Oczywiście że można to zrobić łatwiej, jednak żeby się czegoś nauczyć to nie można nisko stawiać sobie poprzeczki...
EDIT:
A przesłany przeze mnie screen to oczywiście zrobiony na szybko program - chodziło o zarysowanie tematu.
dzięki za zainteresowanie tematem - dopiero teraz wróciłem do domu, więc spieszę z odpowiedzią.
Harnas,
to właśnie jest mój problem
may,
masz absolutną rację, jednak Twoje rozwiązanie ma jedną podstawową wadę - jeśli będziesz miał 20 przycisków to strach pomyśleć jak będzie wyglądał kod. Ja mam narazie sześć, jednak nie mam pewności czy niedługo nie będę musiał dorobić jeszcze sześć... Dlatego zależy mi na eventach - łatwiej to obsłużyć i uporządkować.
Pitol,
masz rację - starałem się jednak jak najmniej skomplikować temat. Mój program ma wysyłać sygnały o określonych parametrach (np. częstotliwości) po naciśnięciu odpowiedniego przycisku. Oczywiście że można to zrobić łatwiej, jednak żeby się czegoś nauczyć to nie można nisko stawiać sobie poprzeczki...
EDIT:
A przesłany przeze mnie screen to oczywiście zrobiony na szybko program - chodziło o zarysowanie tematu.
Ostatnio zmieniony 07 mar 2012 21:17 przez Rubid, łącznie zmieniany 1 raz.
-
- Posty: 96
- Rejestracja: 20 lut 2012 12:30
- Wersja środowiska: LabVIEW 2014
- Lokalizacja: Katowice / Ruda Śląska
Re: Event structure i przycisk "Switch until released"
Rubid, nie wiem czy twój problem został już rozwiązany, ale tak w ramach ćwiczeń napisałem sobie szablon aplikacji reagującej na naciśnięcia i puszczenia przycisków, opartej o zdarzenia i schemat producent-konsument. Wydaje mi się, że program napisany jest w miarę poprawnie i "ładnie". Kod nie będzie rozrastał się przy dodawaniu nowych przycisków, a wszystkie zdarzenia obsługi interfejsu użytkownika są zebrane w jednym miejscu. Indykatory w dolnej pętli mają za zadanie pokazać tylko, że pętla cały czas się kręci i możemy wrzucać tam subVije ze swoimi funkcjami odpowiednimi dla każdego przycisku.
- Załączniki
-
- Buttons_events.zip
- (23.29 KiB) Pobrany 285 razy