Zmienna globalna - wykrywanie zdarzenia (event structure)

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.
dynamo
Posty: 6
Rejestracja: 16 lut 2007 00:00

Zmienna globalna - wykrywanie zdarzenia (event structure)

Post 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.
Awatar użytkownika
rafider
Posty: 23
Rejestracja: 16 kwie 2006 00:00
Lokalizacja: Kraków

Re: Zmienna globalna - wykrywanie zdarzenia (event structure

Post autor: rafider »

Jeżeli do wykrywania zmiany wartości zmiennej globalnej chcesz użyć tylko event structure, to nie wiem :P, 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...
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: Zmienna globalna - wykrywanie zdarzenia (event structure)

Post 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ę.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: Zmienna globalna - wykrywanie zdarzenia (event structure

Post autor: wino »

musisz użyć własności Value(Signaling), aby twój event zareagował na zmianę wartości
przykład poniżej
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: Zmienna globalna - wykrywanie zdarzenia (event structure)

Post 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
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
dynamo
Posty: 6
Rejestracja: 16 lut 2007 00:00

Re: Zmienna globalna - wykrywanie zdarzenia (event structure

Post 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.
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: Zmienna globalna - wykrywanie zdarzenia (event structure

Post 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?
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
dynamo
Posty: 6
Rejestracja: 16 lut 2007 00:00

Re: Zmienna globalna - wykrywanie zdarzenia (event structure

Post 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)
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Zmienna globalna - wykrywanie zdarzenia (event structure

Post 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ł.
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: Zmienna globalna - wykrywanie zdarzenia (event structure

Post 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.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
dynamo
Posty: 6
Rejestracja: 16 lut 2007 00:00

Re: Zmienna globalna - wykrywanie zdarzenia (event structure

Post 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!
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: Zmienna globalna - wykrywanie zdarzenia (event structure)

Post 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.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Zmienna globalna - wykrywanie zdarzenia (event structure

Post 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.
dynamo
Posty: 6
Rejestracja: 16 lut 2007 00:00

Re: Zmienna globalna - wykrywanie zdarzenia (event structure

Post 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? :(
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: Zmienna globalna - wykrywanie zdarzenia (event structure

Post 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?
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
ODPOWIEDZ