problem z event structure

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Awatar użytkownika
donelbaron
Posty: 61
Rejestracja: 07 sty 2009 23:17
Kontakt:

problem z event structure

Post autor: donelbaron »

Witajce, mi juz ręce opadają, mam taki problem, chce po kliknięciu przycisku aby wykonał się fragment w tym event structure, ale całą pętła while zewnętrzna żęby ciągle chodziła, i tylko przy wywołaniu eventu ten fragment się wykonał, już nie wiem jak to zrobić. Jak zrobię jak na obrazku , while raz się wykona i czeka na eventa.
problem.JPG
Awatar użytkownika
Pitol
Moderator
Posty: 983
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

problem z event structure

Post autor: Pitol »

hmm... bo event zasadniczo czeka na zdarzenie blokując pętlę, w której się znajduje. Jeśli chcesz żeby pozostała część pętli działała niezależnie od struktury event to stwórz dla niej oddzielną pętlę (a na przesyłanie między nimi danych jest parę patentów). No chyba że Ci sie nie chce to podepnij wejście Timeout w strukturze event (lewy górny róg) i obsłuż event Timeout... ale to jak Ci sie naprawdę nie chce ;)
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
coolfon
Posty: 232
Rejestracja: 01 gru 2007 08:59
Wersja środowiska: LabVIEW 2009
Kontakt:

Re: problem z event structure

Post autor: coolfon »

Event jest na tyle zacnym tworem, że zasługuje na swoją własną pętlę While (czyli osobny wątek). Upychanie Event'a w jednej pętli While razem z innymi bloczkami jest bardzo złą praktyką i ogólnie psuje feng shui całego programu :)
Awatar użytkownika
donelbaron
Posty: 61
Rejestracja: 07 sty 2009 23:17
Kontakt:

problem z event structure

Post autor: donelbaron »

no ale ja potzrebuje w tym evencie uzyć wartości z tablicy , to przecież nie przepnę miedzy whilami tablicy chyba że przez jakies loacal variable?
Awatar użytkownika
Pitol
Moderator
Posty: 983
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

problem z event structure

Post autor: Pitol »

local może być ;)
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
donelbaron
Posty: 61
Rejestracja: 07 sty 2009 23:17
Kontakt:

Re: problem z event structure

Post autor: donelbaron »

ok to przy okazji jeszcze takie pytanko , czym się rózni zmienna localna od kontrolki od jej property noda "value" ?
Awatar użytkownika
Pitol
Moderator
Posty: 983
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

problem z event structure

Post autor: Pitol »

gdzies, ktoś, kiedyś mądry mi powiedział, że prop. node to zło, którego należy unikać jak ognia :) a tak poważniej to tutaj (http://www.labview.pl/viewtopic.php?f=11&t=2695) była dyskusja o tym co, kiedy i dlaczego.
Ostatnio zmieniony 15 mar 2010 21:41 przez Pitol, łącznie zmieniany 2 razy.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
donelbaron
Posty: 61
Rejestracja: 07 sty 2009 23:17
Kontakt:

Re: problem z event structure

Post autor: donelbaron »

OK, zrobiłem coś takiego, w zależnosci od eventu zmieniam sobie numercia na podstawie którego potem robie albo jeden albo drugi case, i to nie działą, przy odpaleniu eventu wszytko zwisa. mało tego nie zmienia wcale event tego numerica.
problem2.JPG
Awatar użytkownika
Pitol
Moderator
Posty: 983
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: problem z event structure

Post autor: Pitol »

w obrazku w pierwszym Twoim poście byłoby wszystko ok, gdybyś tylko wyjął event do innej pętli i podłączył local var. Mniej więcej tak
test.PNG
a swoją drogą to odliczanie czasu w pętli z eventem jest niepotrzebne.
Ostatnio zmieniony 15 mar 2010 22:28 przez Pitol, łącznie zmieniany 3 razy.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
donelbaron
Posty: 61
Rejestracja: 07 sty 2009 23:17
Kontakt:

Re: problem z event structure

Post autor: donelbaron »

ok jednak działa, nie wiem dlaczego ale zaczęło jak wywalilem z tej pętli do obsługi eventu ten timeout
Awatar użytkownika
smiga
Administrator
Posty: 801
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: problem z event structure

Post autor: smiga »

Po wstawieniu Wait Until Next ms Multiple Function działa to następująco:
Struktura Event obsługuje zdarzenia (przerwania od klawiatury, myszki itd). Zdarzenia są kolejkowane i przychodzą kolejno jedno za drugim (gdy procesor nie obsługuje akurat wątków o wyższym priorytecie). Jeżeli nie ustawimy terminala Timeout to struktura Event nie zajmuje czasu procesorowi. Gdy ustawimy Timeout na wartość większą od zera to w Case'ie Timeout możemy obsłużyć coś co się wydarzy gdy nie przyszło żadne zdarzenie - np. pojawienie się dymka "obudź się i wciśnij jakiś klawisz" co 10s (timeout= 10000). Działanie takiej pętli jest proste - program wchodzi do pętli while, tam napotyka Event, jeżeli przyjdzie zdarzenie to je obsłuży (odpowiedni Case w Event) i znowu wyjdzie do While, a że w While jest Event to znowu będzie czekał na zdarzenie; jeżeli będzie czekał powyżej przykładowych 10s to wykona to co jest w Case'ie Timeout i wyjdzie do While by wrócić znowu do obsługi Event i tak w kółko -co ważne jeżeli nie przychodzą żadne zdarzenie to nie zajmuje czasu procesora przez wspomniane 10s, budzi się na chwilę żeby obsłużyć to co jest w Timeout (dymek) i znowu "śpi" przez 10s.
W momencie kiedy do pętli While wstawiłeś opóźnienie czasowe skomplikowałeś obsługę zdarzeń. Działało to wtedy tak: załóżmy, że kliknąłeś 3 raz jakiś przycisk na panelu frontowym w celu zmiany jego wartości. Pierwsze kliknięcie (zdarzenie) zostanie obsłużone od razu przez strukturę Event, a następnie zostaje ona opuszczona i program przechodzi do wykonania pętli While, gdzie napotyka Wait... i czeka 1s, po czym wraca do obsługi zdarzeń Ebvet'a, a tam dwa w kolejce, więc bierze kolejne, obsługuje odpowiednim Case'em i znowu trafia na Wait w pętli While ... i znowu czeka 1s zamiast obsłużyć 3 kliknięcie w przycisk ... i tak dalej.

mam nadzieję, że w miarę jasno to opisałem i pomogłem w zrozumieniu problemu :)
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
ODPOWIEDZ