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.
event structure - pomoc w zrozumieniu i modyfikacji
- 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
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:
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.
- Agrest
- Posty: 22
- Rejestracja: 18 lut 2007 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Szczecin
Re: event structure - pomoc w zrozumieniu i modyfikacji
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
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
- 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
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: 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ą do stałej przed pętlą albo skorzystać ze zdarzenia "Timeout" (ustawić np. 100ms).
Innym rozwiązaniem Twojego problemu może być rejest przesuwny: 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ą do stałej przed pętlą albo skorzystać ze zdarzenia "Timeout" (ustawić np. 100ms).
- 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
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".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
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"
Osobiście też wolę rejestry, ale z uwagi na powyższe ... i idąc "za ciosem" na łatwiznę, wrzuciłem zmienne lokalne wszędzieAgrest pisze:Jedynym "problemikiem" w tym przypadku może być inicjalizacja wykresu. Można podpiąć zmienną lokalną ...
- Agrest
- Posty: 22
- Rejestracja: 18 lut 2007 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Szczecin
Re: event structure - pomoc w zrozumieniu i modyfikacji
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
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
- Agrest
- Posty: 22
- Rejestracja: 18 lut 2007 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Szczecin
Re: event structure - pomoc w zrozumieniu i modyfikacji
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.Pitol pisze:Jedynym "problemikiem" w tym przypadku może być inicjalizacja wykresu. Można podpiąć zmienną lokalną do stałej przed pętlą albo skorzystać ze zdarzenia "Timeout" (ustawić np. 100ms).
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
- 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
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...)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