event structure - pomoc w zrozumieniu i modyfikacji

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.
Awatar użytkownika
Agrest
Posty: 22
Rejestracja: 18 lut 2007 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Szczecin

event structure - pomoc w zrozumieniu i modyfikacji

Post autor: Agrest »

Witam,
Generalnie VI działa tak jak chciałem, wpisuję dane do tablicy (na razie ręcznie) i na wykresie dostaję wykres. Ale jest kilka niuansów o które chcę zapytać:

1. Po starcie XY graph jest pusty. Dostaję wykres dopiero kiedy zmienię jakiś parametr. I jest to zrozumiałe, bo event [1] to "value change". Co zrobić, żeby po starcie program sam rysował wykres z parametrów zapisanych w tablicy? Chodzi mi o jednorazowe rysowanie na początku pracy, nie w timeoucie, żeby później to rysowanie nie zawracało głowy procesorowi.

2. Event [2] to tylko przycisk STOP który wychodzi z eventa i kończy while loop. Niestety, po zakończeniu pracy VI przyciskiem STOP, XY graph jest pusty. A ja chcę, żeby pozostał na nim ostatni wykres. Swoją drogą właśnie tak działa "abort execution", ale STOP będzie bardziej elegancki. Jak go zmusić, żeby pozostawiał na wyświetlaczu wykres?

3. Kiedy wyciągnę array przed strukturę event, wykres jest rysowany z opóźnieniem. Kiedy klikam zmieniając parametry, to wykres jest zawsze o jeden klik do tyłu. Analizowałem to z highlight execution i nie mogę zrozumieć dlaczego :-\ A jest to dla mnie istotne, bo w przyszłości dane do tablicy będę ściągał z bazy, czyli sprzed eventa.

4. Gdybym chciał wprowadzać dane nie bezpośrednio do tablicy, tylko łapać myszą węzły wykresu i przesuwać je po XY graph, to jakich tematów szukać w helpie?

Dziękuję za ewentualne sugestie i podpowiedzi,
PozdrA

ad. 3. Używając "Probe Data" sprawdziłem, że przed wejściem do eventa mam nowe wartości w array, a po przejściu przez granicę struktury event array ma stare wartości sprzed kliknięcia. Poradziłem sobie wrzucając wartości tablicy do local variable. W ten sposób nie przekraczam drutem brzegu tej struktury, ale to chyba dziwaczne obejście problemu :) W każdym razie skuteczne.
Załączniki
EasyCapture4.jpg
Awatar użytkownika
smiga
Administrator
Posty: 817
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: event structure - pomoc w zrozumieniu i modyfikacji

Post autor: smiga »

Zerknij na załączony kod - powinien być odpowiedzią na większość zadanych pytań.
Oczywiście rozwiązać temat można pewnie na inne sposoby również - na szybko wrzucam to:
Załączniki
wykres zmieniany myszka.vi
(18.33 KiB) Pobrany 357 razy
Ostatnio zmieniony 18 lip 2010 00:03 przez smiga, łącznie zmieniany 1 raz.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
Awatar użytkownika
Agrest
Posty: 22
Rejestracja: 18 lut 2007 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Szczecin

Re: event structure - pomoc w zrozumieniu i modyfikacji

Post autor: Agrest »

Dzięki,
Wygląda na to, że wszystkie moje 3 zagadki rozwiązuje wyrzucenie XY Graph przed Event Structure i praca na Local Variable.
Nie wiem tylko czemu służy połączenie między Sequence, a While Loop. Bez tego drutu VI też działa. Można go wywalić bez poważniejszych konsekwencji?
Ale największe dzięki za to sterowanie myszą. Byłem przygotowany na duży poligon, a Ty dałeś mi to na tacy :)
PozdrA
Awatar użytkownika
Pitol
Moderator
Posty: 984
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: event structure - pomoc w zrozumieniu i modyfikacji

Post autor: Pitol »

Ja tam wolę unikać zmiennych lokalnych jak się da, bo to zawsze trochę utrudnia debugowanie. Co nie znaczy, że ich nie stosuję ani że zm. lok. są złe :)
Innym rozwiązaniem Twojego problemu może być rejest przesuwny:
SR.PNG
Ważne, aby w każdym evencie "przedrutować" wartość wykresu. Jedynym "problemikiem" w tym przypadku może być inicjalizacja wykresu. Można podpiąć zmienną lokalną :D do stałej przed pętlą albo skorzystać ze zdarzenia "Timeout" (ustawić np. 100ms).
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
smiga
Administrator
Posty: 817
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: event structure - pomoc w zrozumieniu i modyfikacji

Post autor: smiga »

Agrest pisze:Dzięki,

Nie wiem tylko czemu służy połączenie między Sequence, a While Loop. Bez tego drutu VI też działa. Można go wywalić bez poważniejszych konsekwencji?

PozdrA
Sequence Structure podłączona do pętli While daje nam gwarancję kolejności wykonania kodu. Właściwie sam drut podłączony do pętli While daje nam tą gwarancję - struktura sekwencyjna tylko "optycznie to porządkuje".
W tym przypadku można usunąć tą strukturę, a nawet ten drut wchodzący do While i powinno działać - teoretycznie zmienna lokalna stworzona z Indicator'a powinna "poczekać aż on powstanie" zanim "ona powstanie" ... ale pewny tego to ja nie jestem, a wtedy może być wypełniona "śmieciami"
Agrest pisze:Jedynym "problemikiem" w tym przypadku może być inicjalizacja wykresu. Można podpiąć zmienną lokalną :D ...
Osobiście też wolę rejestry, ale z uwagi na powyższe ... i idąc "za ciosem" na łatwiznę, wrzuciłem zmienne lokalne wszędzie :)
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
Awatar użytkownika
Agrest
Posty: 22
Rejestracja: 18 lut 2007 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Szczecin

Re: event structure - pomoc w zrozumieniu i modyfikacji

Post autor: Agrest »

Witam Kolegów po urlopach/wakacjach,
Dopieszczam pomalutku moją aplikację w miarę wolnego czasu. Teraz rzeźbię nakładanie na XY Graph drugiego wykresu z danych przychodzących z regulatora, o aktualnej temperaturze w piecu. Idea jest taka, żeby pętla While wysyłała zapytania co 1 sekundę, a odpowiedzi regulatora ma przechwytywać struktura Event. Tak więc znów pytanie o Event. Wyczytałem tu http://zone.ni.com/reference/en-XX/help ... trctonelp/ że należy unikać umieszczania kilku struktur Event w jednej pętli. No niby mogę wszystkie zdarzenia w programie obsługiwać jedną strukturą Event. Nawet zajmie to mniej miejsca na diagramie. Ale z kolei w helpie piszą, że struktura w jednej chwili może obsługiwać tylko jedno zdarzenie. W takim razie co się stanie, jeżeli struktura będzie akurat czymś zajęta, a w tym czasie przyjdzie odpowiedź z regulatora? Dane z regulatora "przepadną", czy jest jakiś mechanizm kolejkowania zdarzeń? Jeżeli tak, to czy oczekujące zdarzenia są odkładane na stos na zasadzie kolejki FIFO, albo FILO, czy może da się im nadać jakieś priorytety? Może decyduje o tym numeracja Eventów, np. im wyższy, tym ważniejszy? To brzmi logicznie, bo zdarzenie pod nazwą "timeout", o ile w ogóle jest używane, ma najniższy priorytet i ma zawsze najniższy numer. Tak sobie kombinuję, a jak jest naprawdę?
PozdrA
Awatar użytkownika
Agrest
Posty: 22
Rejestracja: 18 lut 2007 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Szczecin

Re: event structure - pomoc w zrozumieniu i modyfikacji

Post autor: Agrest »

Pitol pisze:Jedynym "problemikiem" w tym przypadku może być inicjalizacja wykresu. Można podpiąć zmienną lokalną :D do stałej przed pętlą albo skorzystać ze zdarzenia "Timeout" (ustawić np. 100ms).
Rozwiązałem to przez "timeout". W taki sposób, że po uruchomieniu programu wartość opóźnienia wynosi 1. Ale po pierwszym wykonaniu "timeout" sam zmienia wartość opóźnienia na -1. A więc drugi raz "timeout" się już nie wykona.
PozdrA
Zamiast pisać posty jeden po drugim można/trzeba/należy pierwszego posta edytować. Podobno jest o tym w regulaminie ale jeszcze nie doczytałem więc krzyczeć nie będę ;) Pitol
Awatar użytkownika
Pitol
Moderator
Posty: 984
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: event structure - pomoc w zrozumieniu i modyfikacji

Post autor: Pitol »

Agrest pisze: Tak więc znów pytanie o Event. Wyczytałem tu http://zone.ni.com/reference/en-XX/help ... trctonelp/ że należy unikać umieszczania kilku struktur Event w jednej pętli. No niby mogę wszystkie zdarzenia w programie obsługiwać jedną strukturą Event. Nawet zajmie to mniej miejsca na diagramie. Ale z kolei w helpie piszą, że struktura w jednej chwili może obsługiwać tylko jedno zdarzenie. W takim razie co się stanie, jeżeli struktura będzie akurat czymś zajęta, a w tym czasie przyjdzie odpowiedź z regulatora? Dane z regulatora "przepadną", czy jest jakiś mechanizm kolejkowania zdarzeń? Jeżeli tak, to czy oczekujące zdarzenia są odkładane na stos na zasadzie kolejki FIFO, albo FILO, czy może da się im nadać jakieś priorytety? Może decyduje o tym numeracja Eventów, np. im wyższy, tym ważniejszy? To brzmi logicznie, bo zdarzenie pod nazwą "timeout", o ile w ogóle jest używane, ma najniższy priorytet i ma zawsze najniższy numer. Tak sobie kombinuję, a jak jest naprawdę?
PozdrA
Zdarzenia są kolejkowane, ale w jakiej kolejności są potem wykonywane to Ci nie powiem. Strzelam, że w takiej w jakiej przyszły (EDIT: znalazłem na LAVIE dyskusję o tym, jest to trochę skomplikowane ale ogólnie powinno w kolejności przyjścia zdarzeń). Ogólnie struktura Event powinna służyć tylko do odbioru zdarzenia i wysłania informacji dalej. NIe powinno się w strukturze event przeprowadzać obliczeń, czy innych zadań, żeby właśnie nie blokować struktury (a w tym przypadku przydałaby się jakaś architektura typu Producer-Consument...)
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
ODPOWIEDZ