Opóźnianie sygnałów 0-1

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.
Ciamek
Posty: 8
Rejestracja: 07 cze 2013 01:04
Wersja środowiska: LabVIEW 2012

Opóźnianie sygnałów 0-1

Post autor: Ciamek »

Witam, mam pewien prosty problem. Chciałbym stworzyć blok, do którego dostarczany jest sygnał 0-1. W momencie, gdy nastąpi zmiana z 0 na 1, układ odczekuje wskazaną ilość milisekund, a następnie przesyła sygnał dalej. Zaś gdy nastąpi zmiana z 1 na 0, układ zmienia analogicznie swój stan na wyjściu natychmiast, bez żadnego zwlekania. Czyli takie proste oczekiwanie na sygnał i przepuszczanie go dalej po odczekaniu kilku chwil (tylko w przypadku TRUE). Próbowałem użyć Time Delay i Wait w różnych kombinacjach z pętlami i warunkami, ale bez skutku, co najwyżej funkcja opóźniała wejście sygnału, ale też i jego wyjście... Czy istnieje może jakiś prosty sposób na rozwiązanie tego problemu?
Awatar użytkownika
Pitol
Moderator
Posty: 987
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Opóźnianie sygnałów 0-1

Post autor: Pitol »

Wrzuć swój kod to doradzimy najlepsze rozwiązanie.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Ciamek
Posty: 8
Rejestracja: 07 cze 2013 01:04
Wersja środowiska: LabVIEW 2012

Re: Opóźnianie sygnałów 0-1

Post autor: Ciamek »

To, co stworzyłem jest w załączniku. W przypadku zmiany z 0 na 1 jest w porządku, odczekuje dany czas, ale jak już zmieniam z powrotem 1 na 0 natychmiastowo zmienia tylko przy opóźnieniu ustalonym na nie większe niż 1 sekunda. Dla większych wartości lampka wyraźnie gaśnie później niż po wciśnięciu buttona. Ciężko też określić dokładnie, od czego ten czas wygaśnięcia zależy... wie ktoś, dlaczego tak się dzieje? Aha, z LabVIEW nie miałem wcześniej do czynienia, zatem nie zdziwcie się, jeżeli zapytam o coś banalnego :)
Załączniki
Czekaj.vi
(19.06 KiB) Pobrany 379 razy
Grzesiek080
Posty: 82
Rejestracja: 26 maja 2009 07:18
Wersja środowiska: LabVIEW 2012
Lokalizacja: Sucha Beskidzka
Kontakt:

Re: Opóźnianie sygnałów 0-1

Post autor: Grzesiek080 »

Dzieje sie tak bo delay wykonywany w każdym obrocie pętli jeśli jest wciśniety przycisk. I w zalezności jak trafisz na ten delay podczas wyłączania przycisku diodka jest wyłączana po takim czasie.
W tym przypakdku lepije by było użyć event case. Spróbuj czegoś takiego jak w załączniku.
Jak dodasz wiecej przcisków i diodek to dodajesz tylko eventy do obsługi zdarzeń i możesz definiowac delay dla każdego przycisku.
Załączniki
Event Case.vi
Event obsługiwany jest po zmianie stanu przycisku.
Stop zatrzymuje program.
(10.25 KiB) Pobrany 399 razy
Ciamek
Posty: 8
Rejestracja: 07 cze 2013 01:04
Wersja środowiska: LabVIEW 2012

Opóźnianie sygnałów 0-1

Post autor: Ciamek »

Ooo, świetne, dokładnie o coś takiego mi chodziło, dzięki :) Spróbuję ogarnąć samemu co i jak, gdybym czegoś nie potrafił wykminić, jeszcze się zapytam ;) Dzięki!

EDIT: Jest jeszcze jedna sprawa, której do końca nie potrafię ogarnąć. Funkcja Wait najwyraźniej działa na "całość" programu, czyli wstrzymuje wszystkie akcje dookoła. Czy jest jakiś sposób, na zawężenie tego pola do tylko wybranych funkcji? Chciałbym na przykład stworzyć program, który jednym przyciskiem zapala dwie lampki, ale drugą z nich ze wskazanym opóźnieniem. Jak można to zrobić, istnieje jakaś struktura?
Grzesiek080
Posty: 82
Rejestracja: 26 maja 2009 07:18
Wersja środowiska: LabVIEW 2012
Lokalizacja: Sucha Beskidzka
Kontakt:

Re: Opóźnianie sygnałów 0-1

Post autor: Grzesiek080 »

Przejdz do front panel, prawy klawiasz na event i wybierz z menu "Edit events handles by this case" i nastepnie w oknie odznacz opcje na dole "Lock Front panel........"
Jesli chciałbys robic coś w tym czasie to chyba musisz użyc w tym przypadku petli równoległej w której bedziesz coś tam robił ( dodawał czy coś innego).
Ciamek
Posty: 8
Rejestracja: 07 cze 2013 01:04
Wersja środowiska: LabVIEW 2012

Re: Opóźnianie sygnałów 0-1

Post autor: Ciamek »

Nie rozumiem, co miało dać odznaczenie tej opcji? Jakoś nie widzę żadnych różnic w działaniu...
Chciałbym tez pójść o krok dalej - by sama chwilowa zmiana z 0 na 1 była czynnikiem uruchamiającym lampki (bez stałego sygnału 1). Próbowałem sam podejść do problemu i stworzyłem to co w załączniku. Mam jednak kłopot - wygląda na to, że choć lampka włącza się po sekundzie, bardziej ma na to wpływ fakt zmiany położenia buttona wykrywany przez event structure, aniżeli układ sygnałów. Zdecydowanie wolałbym osiągnąć efekt, gdy button jest zwalniany po wciśnięciu natychmiastowo, a druga lampka zapala się niezależnie od jego stanu, po prostu po ustalonym czasie od wciśnięcia... Czy można to jakoś osiągnąć w prosty sposób?
I też drugie pytanie, czy i jak można sprawić, by w Case Structure w warunku true i false pojawił się ten sam wskaźnik? Czy trzeba wyprowadzić wartość na zewnątrz? (powoduje to niewskazane zachowania)
Załączniki
Event Case X.vi
(10.45 KiB) Pobrany 335 razy
Grzesiek080
Posty: 82
Rejestracja: 26 maja 2009 07:18
Wersja środowiska: LabVIEW 2012
Lokalizacja: Sucha Beskidzka
Kontakt:

Re: Opóźnianie sygnałów 0-1

Post autor: Grzesiek080 »

Hej,

Nie wiem co chcesz osiągnąć. Ale odznaczenie opcji spowodowało ze panel nie jest zablokowany po wciśnięciu przycisku.
Czyli np jeśli umieścisz coś innego na tym panelu np numeric controll albo drugi przycisk to możesz go wciskac dowoli gdy wykonywane jest zdarzenie event.
Ale oczywiście nic nie może sie wykonywać w czasie gdy wykonuje sie event.
Moze chciałbyś wyłączyć przycisk podczas trwania eventu. To proponuje petle while loop gdzie co iteracje bedzie sprawdzany stan przycisku i resetowany timer.
Napisz co chcesz zrobić to pomyśle jak to można rozwiązać.
Ciamek
Posty: 8
Rejestracja: 07 cze 2013 01:04
Wersja środowiska: LabVIEW 2012

Re: Opóźnianie sygnałów 0-1

Post autor: Ciamek »

Dobra, pisząc już wprost - tworzę program, który ma wysyłać kolejne sygnały w zależności od wciskanych przycisków. Coś na wzór tego w załączniku - na początku ustala się, czy urządzenia typu frezarka, grawerka mają działać w cyklu, potem start i wykonują się kolejne akcje, gdy będą wciskane odpowiednie przyciski. Problem w tym, że chcę zrezygnować z tych przycisków na rzecz odczekiwania pewnego czasu. Przykładowo - wciskam start, świeci się podnoszenie pojemnika, a dajmy na to po 2 sekundach od startu, program odbiera sytuację tak, jakby zostało wciśnięte "pojemnik podniesiono". Czyli gaśnie podnoszenie. Potem, po następnych załóżmy 3 sekundach, "dotarło do frezarki", więc wyłącza się taśmociąg, a w zależności od warunku frezarka uruchamia się bądź detal jest z niej spychany... itd. Czyli żeby te sygnały pojawiały się po po zadanym czasie względem poprzedniego polecenia, najlepiej za pomocą osobnych wewnętrznych VI. Korzystanie z wait i podanych rozwiazań sprawia, że cały program wpada w pętlę i nie można już nic zadziałać... Jakie propozycje, rozwiązania, jak można rozwiązać moje wyzwanie?
Załączniki
SR-2.vi
Przełącznik Set-Reset
(8.46 KiB) Pobrany 364 razy
Makieta.vi
Główny program
(16.28 KiB) Pobrany 346 razy
Ciamek
Posty: 8
Rejestracja: 07 cze 2013 01:04
Wersja środowiska: LabVIEW 2012

Re: Opóźnianie sygnałów 0-1

Post autor: Ciamek »

Myślę, że tego, czego potrzebuję, jest rozwinięcie funkcji Time Event, którą przysłałeś. W taki sposób, by zamiast przekazania sygnału "trwałego", na wyjściu został wysłany jedynie krótki "pik". Czy można jakoś zdefiniować program, by wysyłał sygnał równoznaczny z wciśnięciem i odciśnięciem przycisku? Próbowałem zrobić to za pomocą struktur Event, połączonych z If a nawet tymi przełącznikami SR które miałem w SubVI, ale nijak nie udało się osiągnać zamierzonego efektu... :(
laradek
Posty: 47
Rejestracja: 06 kwie 2013 18:25
Wersja środowiska: LabVIEW 2012

Re: Opóźnianie sygnałów 0-1

Post autor: laradek »

A może maszyna stanów? :)
Ciamek
Posty: 8
Rejestracja: 07 cze 2013 01:04
Wersja środowiska: LabVIEW 2012

Opóźnianie sygnałów 0-1

Post autor: Ciamek »

Hmm... z tego co czytam o tym, wygląda na to, że będę musiał całą strukturę programu napisać w zasadzie od nowa... Nie ma może prostszego sposobu na zmultiplikowane SubVI działające w sposób, jaki opisałem...? :)
Zyga
Posty: 86
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Re: Opóźnianie sygnałów 0-1

Post autor: Zyga »

Ciamek pisze:Dobra, pisząc już wprost - tworzę program, który ma wysyłać kolejne sygnały w zależności od wciskanych przycisków..
Rozumiem, że masz zrealizować pewien cyklogram. Coś na wzór tego (tylko przykład z neta):
Obrazek
?
Jeśli tak, to użyj timera (którego w lv niestety nie ma, ale na forum znajdziesz).
TMa
Posty: 203
Rejestracja: 07 sty 2010 12:56
Wersja środowiska: LabVIEW 2017

Re: Opóźnianie sygnałów 0-1

Post autor: TMa »

Zyga pisze:Jeśli tak, to użyj timera (którego w lv niestety nie ma, ale na forum znajdziesz).
A nieprawda :) w palecie Timing można znaleźć Elapsed Time Express VI
Zyga
Posty: 86
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Re: Opóźnianie sygnałów 0-1

Post autor: Zyga »

TMa pisze:
Zyga pisze:Jeśli tak, to użyj timera (którego w lv niestety nie ma, ale na forum znajdziesz).
A nieprawda :) w palecie Timing można znaleźć Elapsed Time Express VI
Faktycznie. A ja sie zastanawiałem nieraz, jak to jest, że w LV brak timera : ]
ODPOWIEDZ