Witam,
kiedyś pytałem o zamykanie pętli równoległych teraz pytanie odwrotne - jak uruchomić fragmenty kodu umieszczone w pętlach równoległych? W załączniku przykład. Chciałbym w zależności od przycisku Stop/Start Slave móc zatrzymywać i uruchamiać drugą pętlę. Jak?
Pozdrawiam
Przemek
Uruchamianie pętli równoległych
Uruchamianie pętli równoległych
- Załączniki
-
- Parallel loop - start-stop.vi
- (18.68 KiB) Pobrany 328 razy
Uruchamianie pętli równoległych
Moment... chcesz zatrzymywać i URUCHAMIAĆ drugą pętlę? Popraw mnie, jeśli się mylę, ale pętli while nie da się zatrzymać, a później uruchomić ponownie (dataflow). Owszem, można by pętle while wrzucić jako jeden stan w maszynie stanów i wywoływać ten stan, ale chyba nie o to Ci chodziło...
Uruchamianie pętli równoległych
No właśnie - wiem, że pętli nie da się uruchomić ponownie. Myślałem o maszynie stanów, ale jeśli w którymś stanie mam pętlę while to jest on blokowany aż do czasu jej zamknięcia. Może źle określiłem zadanie. Pytanie jest szersze: jak z pętli głównej uruchamiać i zatrzymywać jakieś procesy w pętlach? Chcę uruchamiać i zatrzymywać odczyt z czujnika - odczyt miał działać w osobnej pętli, żeby nie blokować pętli deterministycznej (całość na cRIO).
Uruchamianie pętli równoległych
Właściwie to odpowiedziałeś sobie na pytanie. Struktura producent-consumer (u Ciebie master-slave) z maszyną stanów. Jeśli zaś chodzi o zatrzymanie pętli, to możesz w niej sprawdzać, czy pojawił się nowy element w kolejce (get queue status ), bądź zrobić sobie FGV, który sprawdzasz po każdym obiegu pętli (od biedy może to być nawet local variable).
Możesz to zrobić również bez struktury P-C, możesz robić to w jednej pętli, w której masz maszynę stanów, którą jednym ze stanów jest Czekaj_na_użytkownika (event structure) z bardzo malym timeoutem. Wtedy po każdej akwizycji danych (jednym obiegu pętli w stanie 'rejestruj') skaczesz to tego stanu i jeśli coś wcześniej przycisnąłeś, to program przejdzie do odpowiednio innego stanu.
Możesz to zrobić również bez struktury P-C, możesz robić to w jednej pętli, w której masz maszynę stanów, którą jednym ze stanów jest Czekaj_na_użytkownika (event structure) z bardzo malym timeoutem. Wtedy po każdej akwizycji danych (jednym obiegu pętli w stanie 'rejestruj') skaczesz to tego stanu i jeśli coś wcześniej przycisnąłeś, to program przejdzie do odpowiednio innego stanu.
Uruchamianie pętli równoległych
Dzięki, wygląda na to, że już jestem na dobrym tropie.
Pozdrawiam
Pozdrawiam