Ciągłe wykonywanie eventu z event structure
-
- Posty: 8
- Rejestracja: 31 sie 2017 15:28
- Wersja środowiska: LabVIEW 2011
Ciągłe wykonywanie eventu z event structure
Hej,
mam taką sprawę że mam kilka pętli while korzystających z kolejek. Jedna główna pętla chodzi na okrągło, a pozostałe są odpalane poprzez przyciski w głównej pętli. Te przyciski nie są do niczego podpięte, tylko jest jedna pętla z "Event structure", która w zależności jaki nacisnę przycisk to to wysyła, np. przycisk stop który wyłącza wszystkie pętle. I właśnie tu rodzi mi się pytanie: Mam pewien event reagujący na przycisk OK (załącznik 1), i za każdym razem gdy się go kliknie to wykonywany jest raz, wiadomo. Natomiast moim marzeniem jest coś takiego, aby dany event wykonywał się na okrągło co jakiś określony czas. Powiedzmy mamy przycisk z akcją 'switch when pressed', i jeżeli mamy na nim logiczną jedynkę to event się co chwila wykonuje, a jeżeli go odklikniemy to event nie wykonuje się. Ja wiem że może architektura z event structure nie jest najlepsza, ale zacząłem program robić dość dawno i wtedy o tym nie pomyślałem. Jeżeli ktoś coś by wiedział... to z góry dziękuję
mam taką sprawę że mam kilka pętli while korzystających z kolejek. Jedna główna pętla chodzi na okrągło, a pozostałe są odpalane poprzez przyciski w głównej pętli. Te przyciski nie są do niczego podpięte, tylko jest jedna pętla z "Event structure", która w zależności jaki nacisnę przycisk to to wysyła, np. przycisk stop który wyłącza wszystkie pętle. I właśnie tu rodzi mi się pytanie: Mam pewien event reagujący na przycisk OK (załącznik 1), i za każdym razem gdy się go kliknie to wykonywany jest raz, wiadomo. Natomiast moim marzeniem jest coś takiego, aby dany event wykonywał się na okrągło co jakiś określony czas. Powiedzmy mamy przycisk z akcją 'switch when pressed', i jeżeli mamy na nim logiczną jedynkę to event się co chwila wykonuje, a jeżeli go odklikniemy to event nie wykonuje się. Ja wiem że może architektura z event structure nie jest najlepsza, ale zacząłem program robić dość dawno i wtedy o tym nie pomyślałem. Jeżeli ktoś coś by wiedział... to z góry dziękuję
- Pitol
- Moderator
- Posty: 982
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Ciągłe wykonywanie eventu z event structure
Najprościej (niekoniecznie najlepiej) byłoby brać wartość NewVal w zdarzeniu dla przycisku OK i w zależności od wartości (T/F) zrobić case.
Jeśli jest T (czyli wciśnięty) to zawołaj Prop. Node -> Value (Signaling). Jak F (czyli wyłączony) to nic nie rób.
Własność Value (Signaling) spowoduje ponowne uruchomienie Eventu.
Daj sobie na wszelki wypadek jakiś Wait w tym zdarzeniu, żeby nie chodziło to za szybko...
Jeśli jest T (czyli wciśnięty) to zawołaj Prop. Node -> Value (Signaling). Jak F (czyli wyłączony) to nic nie rób.
Własność Value (Signaling) spowoduje ponowne uruchomienie Eventu.
Daj sobie na wszelki wypadek jakiś Wait w tym zdarzeniu, żeby nie chodziło to za szybko...
-
- Posty: 8
- Rejestracja: 31 sie 2017 15:28
- Wersja środowiska: LabVIEW 2011
Re: Ciągłe wykonywanie eventu z event structure
Tzn, jak ten Val(sgnl) podpiąć? Bo tak jak jest teraz, to działa co prawda, ale nie można nacisnąć innego przycisku (np stop), oraz pętla Buttons control działa na okrągło, a w zamyśle ma działać tylko przy wykonywaniu eventa.
- Pitol
- Moderator
- Posty: 982
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Ciągłe wykonywanie eventu z event structure
To był głupi pomysł...
Nie chciało mi się odpalić LV i sprawdzić i wyszedł klops.
Jak coś wymyślę to dam znać ;)
Nie chciało mi się odpalić LV i sprawdzić i wyszedł klops.
Jak coś wymyślę to dam znać ;)
-
- Posty: 8
- Rejestracja: 31 sie 2017 15:28
- Wersja środowiska: LabVIEW 2011
Re: Ciągłe wykonywanie eventu z event structure
Byłbym wdzięczny ;)
Chodzi też o to aby program reagował na pozostałe przyciski. Siedzę nad tym i nic nie mogę wykminić, a nie chciałbym przerabiać architektury programu.
Chodzi też o to aby program reagował na pozostałe przyciski. Siedzę nad tym i nic nie mogę wykminić, a nie chciałbym przerabiać architektury programu.
- Pitol
- Moderator
- Posty: 982
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Ciągłe wykonywanie eventu z event structure
No to bardziej toporne rozwiązanie...
Zrób sobie zdarzenie Timeout i je obsłuż w taki sam sposób jak Twój przycisk OK.
Timeout ustaw sobie na bardzo małą wartość, żeby latał dość często (niekoniecznie 1ms... wystarczy 10).
Wewnątrz zdarzenia sprawdzasz stan przycisku.
Jak jest TRUE, to sprawdzasz kiedy ostatni raz była wykonana funkcjonalność przycisku OK.
Jeśli czas nie minął, to nic nie rób, jeśli już czas, to wykonaj co trzeba...
Masakra... ale kombinuję
Zrób sobie zdarzenie Timeout i je obsłuż w taki sam sposób jak Twój przycisk OK.
Timeout ustaw sobie na bardzo małą wartość, żeby latał dość często (niekoniecznie 1ms... wystarczy 10).
Wewnątrz zdarzenia sprawdzasz stan przycisku.
Jak jest TRUE, to sprawdzasz kiedy ostatni raz była wykonana funkcjonalność przycisku OK.
Jeśli czas nie minął, to nic nie rób, jeśli już czas, to wykonaj co trzeba...
Masakra... ale kombinuję
- Załączniki
-
- Event.png (41.54 KiB) Przejrzano 15288 razy
-
- Posty: 8
- Rejestracja: 31 sie 2017 15:28
- Wersja środowiska: LabVIEW 2011
Re: Ciągłe wykonywanie eventu z event structure
Zrobiłem tak jak zaproponowałeś i jest tak:
1 - po włączeniu programu nic się nie dzieje (tak ma być!), dopiero po włączeniu przycisku zaczyna wszystko ruszać, czyli jest OK. Natomiast po wyłączeniu go, program dalej działa, moze coś w falsach źle podpiąłem? Wrzuciłem domyślnie wartość 0 (załącznik).
2 - Pozostałe przyciski nie reagują, jak wspominałem program ma kilka pętli w których wykorzystuję kolejkowanie i przycisk STOP który ma je wszystkie wyłączyć nie działa.
1 - po włączeniu programu nic się nie dzieje (tak ma być!), dopiero po włączeniu przycisku zaczyna wszystko ruszać, czyli jest OK. Natomiast po wyłączeniu go, program dalej działa, moze coś w falsach źle podpiąłem? Wrzuciłem domyślnie wartość 0 (załącznik).
2 - Pozostałe przyciski nie reagują, jak wspominałem program ma kilka pętli w których wykorzystuję kolejkowanie i przycisk STOP który ma je wszystkie wyłączyć nie działa.
- Pitol
- Moderator
- Posty: 982
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Ciągłe wykonywanie eventu z event structure
Znowu nie przetestowałem... powinni mnie z roboty wylać.
No nic. W załączniku masz przykład (ten sam co w poprzednim poście), tylko przetestowany i działający. Jak jest OK wciśnięty, to wykonuje się akcja w zewnętrznym stanie TRUE. W nim sprawdzany jest czas od poprzedniego kliknięcia.
I tutaj jest mała zmiana w stosunku do poprzedniego postu: w stanie FALSE (w wewnętrznym case) jest przedrutowana poprzednia wartość CzasOstatniegoWykonaniaPrzyciskuOK. Poprzednio zapomniałem o tym.
A w stanie TRUE wewnętrznego case jest inkrementacja licznika.
U mnie to działa jak należy. Przetestuj i daj znać.
No nic. W załączniku masz przykład (ten sam co w poprzednim poście), tylko przetestowany i działający. Jak jest OK wciśnięty, to wykonuje się akcja w zewnętrznym stanie TRUE. W nim sprawdzany jest czas od poprzedniego kliknięcia.
I tutaj jest mała zmiana w stosunku do poprzedniego postu: w stanie FALSE (w wewnętrznym case) jest przedrutowana poprzednia wartość CzasOstatniegoWykonaniaPrzyciskuOK. Poprzednio zapomniałem o tym.
A w stanie TRUE wewnętrznego case jest inkrementacja licznika.
U mnie to działa jak należy. Przetestuj i daj znać.
- Załączniki
-
- Test.vi
- (8.61 KiB) Pobrany 405 razy
Re: Ciągłe wykonywanie eventu z event structure
Witam,
proponuję w przycisku obsłużyć zmianę wartości Timeout terminal wartości -1
i jakąś zadaną.
Prosty przykład znajduje się w pliku: wersja rozwojowa z 4 przyciskami (z możliwością obsługi dwóch na raz - Akcja 1 oraz akcja 2)
znajduje się w pliku: Ta wersja jest rozwojowa a w dodatku łatwo wszystko na subVI porozrzucać bo kod powtarza się,
wersja poprawiona znajduje się w pliku: Pozdrawiam
Zuk
proponuję w przycisku obsłużyć zmianę wartości Timeout terminal wartości -1
i jakąś zadaną.
Prosty przykład znajduje się w pliku: wersja rozwojowa z 4 przyciskami (z możliwością obsługi dwóch na raz - Akcja 1 oraz akcja 2)
znajduje się w pliku: Ta wersja jest rozwojowa a w dodatku łatwo wszystko na subVI porozrzucać bo kod powtarza się,
wersja poprawiona znajduje się w pliku: Pozdrawiam
Zuk
- Pitol
- Moderator
- Posty: 982
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Ciągłe wykonywanie eventu z event structure
Hej Zuk.
Jak już coś pokazujesz w sieci to posprzątaj chociaż diagram, co by inni złych nawyków nie nabierali.
A Twoje rozwiązanie ma jedną wadę:
Jeśli użytkownik będzie robił cokolwiek na panelu to Timeout się nie uruchomi, lub uruchomi rzadko.
Lepiej mieć szybki Timeout i w nim sprawdzać czy czas już minął.
Jak już coś pokazujesz w sieci to posprzątaj chociaż diagram, co by inni złych nawyków nie nabierali.
A Twoje rozwiązanie ma jedną wadę:
Jeśli użytkownik będzie robił cokolwiek na panelu to Timeout się nie uruchomi, lub uruchomi rzadko.
Lepiej mieć szybki Timeout i w nim sprawdzać czy czas już minął.
-
- Posty: 8
- Rejestracja: 31 sie 2017 15:28
- Wersja środowiska: LabVIEW 2011
Re: Ciągłe wykonywanie eventu z event structure
Pitol, może nie wywalą Cię z roboty (i mnie dzieki temu też ), wszystko jak do tej pory działa jak należy, dzięki wielkie ;) Jeżeli coś by dalej sprawiało problemy to się odezwę.
Re: Ciągłe wykonywanie eventu z event structure
Ok, postaram zapamiętać i poprawić się, kody pisałem na szybko przed snem...
Nic też nie stoi na przeszkodzie, żeby w moim rozwiązaniu przyspieszyć timeouta
i wykonywać akcje co zadaną liczbę iteracji.
Pozdrawiam
Zuk
Re: Ciągłe wykonywanie eventu z event structure
Generalnie zabawa z timeout'em to wielkie zuo.
Polecanym rozwiązaniem jest rejestracja "user event" w event structure i odpalenie w nowym wątku (np przez "run and forget") vi który po zadanym czasie wygeneruje owy event.
Jeśli jesteś zainteresowany takim podejściem to mogę jutro wydziergać przykładowy vi.
Polecanym rozwiązaniem jest rejestracja "user event" w event structure i odpalenie w nowym wątku (np przez "run and forget") vi który po zadanym czasie wygeneruje owy event.
Jeśli jesteś zainteresowany takim podejściem to mogę jutro wydziergać przykładowy vi.
- Pitol
- Moderator
- Posty: 982
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Ciągłe wykonywanie eventu z event structure
Zgadzam się z Tobą, jednak w tym przypadku kolega uzurpator12 nie chciał/nie mógł iść w bardziej "koszerne" rozwiązania.
Twoja propozycja jest ciekawa. Problem w tym, że dodała by sporo skomplikowania (chyba, że czegoś nie widzę).
Jak kontrolowałbyś ten nowy wątek? Zmienną globalną czy innym podobnym rozwiązaniem?
Timeout to zło... ale zło konieczne w tym przypadku...
Ale chętnie zobaczyłbym Twoje rozwiązanie więc, śmiało, dodaj przykład.
Re: Ciągłe wykonywanie eventu z event structure
Wszystko zależy od tego jak dużo "skomplikowania" zaczyna być problemem. Najważniejsze wg mnie jest to, żeby developer odpowiedzialny za późniejsze utrzymanie kodu nie miał z tym zbyt dużego problemu.
Załączony projekt pokazuje uruchomienie vi w trybie "call and forget", którego jedynym zadaniem jest wygenerowanie event'a po zadanym czasie. Clear error jest tam po to, żeby nie przejmować się błędem, gdy główne vi zostanie zatrzymane i event nie będzie już istniał.
Main vi obsługuje tego event'a (tu poprzez dodatnie linii do string'a) i wymusza kolejne odpalenie trigger.vi poprzez (nieeleganckie) ustawienie wartości guzika z flagą signalling.
Załączony projekt pokazuje uruchomienie vi w trybie "call and forget", którego jedynym zadaniem jest wygenerowanie event'a po zadanym czasie. Clear error jest tam po to, żeby nie przejmować się błędem, gdy główne vi zostanie zatrzymane i event nie będzie już istniał.
Main vi obsługuje tego event'a (tu poprzez dodatnie linii do string'a) i wymusza kolejne odpalenie trigger.vi poprzez (nieeleganckie) ustawienie wartości guzika z flagą signalling.
- Załączniki
-
- loop.zip
- (97.41 KiB) Pobrany 355 razy
-
- trigger.png (19.71 KiB) Przejrzano 15060 razy