Strona 1 z 2
Zmienna globalna - wykrywanie zdarzenia (event structure)
: 16 lut 2007 16:54
autor: dynamo
Witam!
Czy jest jakiś sposób żeby wykryć zmianę wartość zmiennej globalnej typu Boolean? Próbowałem to robić tak że zmienną globalną podłączyłem do indycatora a następnie stworzyłem z tego indycatora local variable no i w event structure wybrałem jako event sources tą local variable. Pomijając już zmienną globalną ale to w ogóle nie chce działać przy zmianie wartośći local variable.
Re: Zmienna globalna - wykrywanie zdarzenia (event structure
: 16 lut 2007 20:42
autor: rafider
Jeżeli do wykrywania zmiany wartości zmiennej globalnej chcesz użyć tylko event structure, to nie wiem
, ale zmianę można wykryć na wiele innych sposobów, np wyjście podpiąć do case structure i dla wartości "1" wykonywać inne zadanie a dla wartości "0" inne...
Re: Zmienna globalna - wykrywanie zdarzenia (event structure)
: 17 lut 2007 15:04
autor: Mikrobi
dynamo pisze:Witam! Czy jest jakiś sposób żeby wykryć zmianę wartość zmiennej globalnej typu Boolean? Próbowałem to robić tak że zmienną globalną podłączyłem do indycatora a następnie stworzyłem z tego indycatora local variable no i w event structure wybrałem jako event sources tą local variable. Pomijając już zmienną globalną ale to w ogóle nie chce działać przy zmianie wartośći local variable.
Trochę to zakręcone - pokaż proszę diagram i napisz więcej o programie.
p.s.
indykator jeśli spolszczasz nazwę.
Re: Zmienna globalna - wykrywanie zdarzenia (event structure
: 18 lut 2007 23:26
autor: wino
musisz użyć własności Value(Signaling), aby twój event zareagował na zmianę wartości
przykład poniżej
Re: Zmienna globalna - wykrywanie zdarzenia (event structure)
: 19 lut 2007 07:28
autor: Mikrobi
W ramach uzupełnienia: struktura event przeznaczona jest do interakcji z użytkownikiem, czyli - zasadniczo - obsługi zdarzeń interfejsu.
Nie obsługuje zmian zmiennej lokalnej i wskaźników (indykatorów ). Obsługuje za to tak jak wspomniał wino: Value(Signaling), bo ten węzeł własności wysyła informację o zdarzeniu do wątku interfejsu, z którego event pobiera informację o zdarzeniach
Re: Zmienna globalna - wykrywanie zdarzenia (event structure
: 19 lut 2007 10:32
autor: dynamo
Witam! Dziękuje za odpowiedzi. Zrobiłem tak jak radził wino jednak dalej coś nie działa. Może przedstawię kawałek diagramu i wyjaśnię jak to ma działać. Chodzi mi o to że po zmianie zm_glob_rejestracja z warośći "1" na "0" powinno się wykonać to co jest w strukturze event. A może to trzeba zrobić całkiem inaczej? Próbowałem różnych innych sposobów bez struktury event ale występował jakiś hazard.
Re: Zmienna globalna - wykrywanie zdarzenia (event structure
: 19 lut 2007 10:37
autor: Mikrobi
Pytanie zasadnicze: co Twoim zdaniem dzieje się na diagramie?
Pyt.1: dlaczego stosujesz taki sposób prezentacji danych na wykresie?
Pyt.2: to nie jest caly VI? jakie jeszcze zdarzenia obsługuje event?
Re: Zmienna globalna - wykrywanie zdarzenia (event structure
: 19 lut 2007 12:52
autor: dynamo
Napiszę może coś więcej o całym programie. Jest jeden główny VI który obsługuje 12 kanałów A/C karty NI DAQ M series podłączonej do sejsmometrów. Drugi VI pracuje równolegle i obsługuje kartę CAN-BUS firmy Softing. Do karty CAN podłączony jest jeden kanał (3 składowych sejsmicznych) cyfrowego systemu rejestracji tąpań. W głównym programie zrealizowana jest detekcja zjawisk sejsmicznych i „4 sekundowa linia opóźniająca”. Gdy zostanie wykryte zjawisko rozpoczyna się rejestracja sygnałów z wejść analogowych oraz rejestracja przebiegów przesyłanych magistralą CAN (synchronizacja tego miała odbywać się właśnie za pomocą zmiennej globalnej „zm_blob_rejestracja”. Po ustaniu wstrząsu zmienna globalna przyjmuje wartość „0” i dane zarejestrowane cyfrowo z magistrali CAN są przekazywane za pomocą zmiennej globalnej ”Rejestrator DTSS 3 składowych” do programu głównego który dokłada do 12 przebiegów 3 przebiegi z magistali CAN a następnie zapisuje to do pliku i wysyła na drukarkę wielkoformatową. (Event przedstawiony na diagramie obsługuje jeszcze dodatkowo zdarzenie Timeout)
Re: Zmienna globalna - wykrywanie zdarzenia (event structure
: 19 lut 2007 14:03
autor: jogurt_owocowy
Po pierwsze diagram jest be, ale...
Przykład od wina chyba nie jest najlepszy. Chcąc wykorzystać event do obsługi zmiany indykatora, zamiast wpisywać wartość zmiennej zm_glob... (po co ten prefiks? przecież widać, że to "zm_glob") do samego indykatora utwórz dla niego property node z właśnością Val(Sgnl) i przepisz wartość ze zmiennej do tego węzła - wtedy event będzie reagował.
Re: Zmienna globalna - wykrywanie zdarzenia (event structure
: 19 lut 2007 14:48
autor: Mikrobi
Ponadto jedna uwaga: diagram aktualnie obsłuży zdarzenie "rejestracja" Value Change wielokrotnie.
Podczas obsługi zdarzenia "rejestracja" Value Change: - wpisujesz do węzła "rejestracja"Val(Sgnl) co powoduje
- drugie wywołanie zdarzenia, podczas którego wpisujesz do węzła "rejestracja"Val(Sgnl) co powoduje:
- trzecie wywołanie zdarzenia, podczas którego wpisujesz do węzła "rejestracja"Val(Sgnl) co powoduje:
- czwarte....
krótko: błąd.
Re: Zmienna globalna - wykrywanie zdarzenia (event structure
: 19 lut 2007 15:00
autor: dynamo
Próbowałem już wielu sposobów i albo zdarzenie jest obsługiwane wielokrotnie albo nie jest obsługiwane w ogóle. Cały czas nad tym siedzę i nic mi nie przychodzi do głowy jak to zrobić....[marq=down][/marq]
Pozdrawiam!
Re: Zmienna globalna - wykrywanie zdarzenia (event structure)
: 19 lut 2007 15:13
autor: Mikrobi
Odpowiedz jest brutalna ale niestety tak to jest.
Trzeba rozpocząć od sprzątania diagramu. Zrezygnować z przenoszenia informacji o kolejce za pomocą zmiennej lokalnej - to na prawdę nie jest dobry pomysł. Każda z tych funkcji ma wejście i wyjście wątku kolejki - trzeba z tego korzystać.
Pomoże to na pewno zauważyć i wyeliminować część błędów. Dane przenoszone w drutach od strony lewej do prawej - nie od góry do dołu.
Wyprostować przewody... Wyeliminować zmienne lokalne - zastąpić przewodami.
Re: Zmienna globalna - wykrywanie zdarzenia (event structure
: 19 lut 2007 16:30
autor: jogurt_owocowy
Ponadto jedna uwaga: diagram aktualnie obsłuży zdarzenie "rejestracja" Value Change wielokrotnie.
Dlatego napisałem, że przykład wina jest zły, bo nie bardzo wiem czemu miałoby służyć wpisywanie do property node wewnątrz eventu , albo o czymś nie wiem. Zdarzenie oczywiście można wywołać jednokrotnie (nawet na takim brzydkim diagramie - z pewnymi zastrzeżeniami) robiąc dwie rzeczy: 1. To o czym pisałem poprzednio - zaznaczone wykrzyknikiem.
2. Kasując wpisywanie do property node wewnątrz eventu.
A najlepiej zacząć od kroku zerowego czyli od porządków na diagramie.
Re: Zmienna globalna - wykrywanie zdarzenia (event structure
: 19 lut 2007 17:33
autor: dynamo
Aby nie komplikować już sprawy narysowałem prosty przykład i zrobiłem tak jak radzi mi
jogurt_owocowy, ale zdarzenie nr 1 w strukturze event wykonuje się bez przerwy (wielokrotnie) od razu po uruchomieniu programu. Co robię źle że to nie działa?
Re: Zmienna globalna - wykrywanie zdarzenia (event structure
: 19 lut 2007 17:48
autor: Mikrobi
Petla while zakręci się tylko w sytuacji, gdy pojawi się zdarzenie, które jest zdefiniowane w strukrurze event. Zatem: funkcja Wait until (ms) jest absolutnie niepotrzebna. Niepotrzebne jest definiowanie zdarzenia Timeout Przycisk stop powinien być obsłużony przez strukturę event
Skąd pojawia się informacja Boolean która jest w zmiennej globalnej?