Strona 1 z 1

Opóźnienie w maszynie stanów

: 26 sty 2016 18:36
autor: RafalFCB
Witam

Mam taki problem:

Na zdjęciu widać kawałek kodu programu. Chciałbym, żeby dioda (jeżeli ma się zapalić) świeciła przez jakieś 5 sekund. Teraz ta część pętli case jest realizowana bardzo szybko, a świecenie diody jest niezauważalne. Dodanie bloczka wait ms nie pomogło, gdyż teraz ta część pętli czeka 5 sekund, a potem zapala diode tak że jest to niezauważalne :/

Czy macie jakiś pomysł co z tym zrobić ? :)

Opóźnienie w maszynie stanów

: 26 sty 2016 18:59
autor: dajpanspokój
Musisz ustawic ten wait wtedy jak sygnal dojdzie do diody, teraz robisz to przed
Mozesz wyciagnac to czekanie poza petle, albo dac je do stanu czuwania, bo to chyba o to chodziło

Opóźnienie w maszynie stanów

: 26 sty 2016 19:23
autor: RafalFCB
Dzięki dajpanspokój za pomysł, ale:

1. Po dodaniu waita do "stan czuwania" dioda świeci dłużej, jednakże wyjście ze stanu czuwania także jest opóźnione.
2. Dodanie waita poza pętlą powoduje opóźnienie wykonania każdego case :/

Ma ktoś jeszcze jakiś pomysł??? :)

Opóźnienie w maszynie stanów

: 26 sty 2016 19:36
autor: dajpanspokój
Mozesz w stanie czuwania ustawic event z timeoutem na 5 sekund, który wylaczy diody i stamtad z powrotem do czuwania
albo wstawic tego waita w osobny case i regulowac kiedy ma sie czekac a kiedy nie. Ale to jest troche nieeleganckie
Mozesz napisac jak ma dzialac stan czuwania?

Opóźnienie w maszynie stanów

: 26 sty 2016 20:30
autor: koofaya
Nie wiem, jaki jest sens działania całego programu, co tam się dzieje w pozostałych case'ach, ale można to zrobić całkiem łopatologicznie.

Po wyjściu z event structure dajesz flat sequence, a w nim wait. W zależności od case'a podpinasz różne wartości. Trochę lepszym rozwiązaniem jest zrobienie VIa "Wait with error in/out". Nie wiem, czemu nie wpadli jeszcze, żeby taki bloczek umieścić w podstawowych paletach... ---___---

Na pewno bardziej eleganckim rozwiązaniem byłoby wrzucenie waita do stanu czuwania, zwłaszcza jeżeli wait występuje tylko w jednej z możliwych sytuacji/kombinacji stanów, ale bez całego kodu nie stwierdzę, czemu u Ciebie to nie działa.

Re: Opóźnienie w maszynie stanów

: 26 sty 2016 23:47
autor: RafalFCB
Szczerze to już się trochę pogubiłem i nie ogarniam.

Program dołączyłem, możecie sobie popatrzeć :)

Re: Opóźnienie w maszynie stanów

: 27 sty 2016 11:48
autor: Daniel PCL
Wrzuć odmierzanie czasu do maszyny stanów i w momencie kiedy uruchamiasz diodę generuj czas zadany=czas aktualny + 5 sekund. W stanie idle sprawdzaj, czy czas aktualny jest większy lub równy czas zadany. Jeśli tak ... wyłączasz diodę.

Re: Opóźnienie w maszynie stanów

: 28 sty 2016 10:32
autor: dajpanspokój
koofaya pisze:"Wait with error in/out". Nie wiem, czemu nie wpadli jeszcze, żeby taki bloczek umieścić w podstawowych paletach... ---___---
Jest time delay.
delay.png
delay.png (24.37 KiB) Przejrzano 11852 razy
Ale tez właśnie go odkryłem ;D

Opóźnienie w maszynie stanów

: 28 sty 2016 23:03
autor: koofaya
O, zapomniałem o tym bloczku.
Tyle, że on przyjmuje delay w sekundach i typu double.
Dlatego zawsze wolę mieć w zanadrzu bloczek "Wait with error", który przyjmuje wartość w ms is od razu w U32.

Re: Opóźnienie w maszynie stanów

: 29 sty 2016 14:28
autor: PiDi
koofaya pisze:Trochę lepszym rozwiązaniem jest zrobienie VIa "Wait with error in/out". Nie wiem, czemu nie wpadli jeszcze, żeby taki bloczek umieścić w podstawowych paletach... ---___---
http://forums.ni.com/t5/LabVIEW-Idea-Ex ... 856#M26878