Strona 1 z 2
Opóźnianie sygnałów 0-1
: 07 cze 2013 01:16
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?
Opóźnianie sygnałów 0-1
: 07 cze 2013 14:42
autor: Pitol
Wrzuć swój kod to doradzimy najlepsze rozwiązanie.
Re: Opóźnianie sygnałów 0-1
: 08 cze 2013 00:38
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

Re: Opóźnianie sygnałów 0-1
: 08 cze 2013 09:01
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.
Opóźnianie sygnałów 0-1
: 09 cze 2013 16:46
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?
Re: Opóźnianie sygnałów 0-1
: 09 cze 2013 22:09
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).
Re: Opóźnianie sygnałów 0-1
: 10 cze 2013 00:38
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)
Re: Opóźnianie sygnałów 0-1
: 11 cze 2013 15:06
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ć.
Re: Opóźnianie sygnałów 0-1
: 13 cze 2013 22:03
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?
Re: Opóźnianie sygnałów 0-1
: 16 cze 2013 16:13
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...

Re: Opóźnianie sygnałów 0-1
: 16 cze 2013 20:38
autor: laradek
A może maszyna stanów?

Opóźnianie sygnałów 0-1
: 16 cze 2013 21:54
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...?

Re: Opóźnianie sygnałów 0-1
: 17 cze 2013 10:22
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):

?
Jeśli tak, to użyj timera (którego w lv niestety nie ma, ale na forum znajdziesz).
Re: Opóźnianie sygnałów 0-1
: 17 cze 2013 11:36
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
Re: Opóźnianie sygnałów 0-1
: 17 cze 2013 17:36
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 : ]