Uruchamianie pętli równoległych

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
PrzemB
Posty: 38
Rejestracja: 24 mar 2015 18:42
Wersja środowiska: LabVIEW 2017

Uruchamianie pętli równoległych

Post autor: PrzemB »

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
Załączniki
Parallel loop - start-stop.vi
(18.68 KiB) Pobrany 328 razy
Awatar użytkownika
aaddaas
Posty: 202
Rejestracja: 26 cze 2013 20:42
Wersja środowiska: LabVIEW 2015

Uruchamianie pętli równoległych

Post autor: aaddaas »

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...
Obrazek
PrzemB
Posty: 38
Rejestracja: 24 mar 2015 18:42
Wersja środowiska: LabVIEW 2017

Uruchamianie pętli równoległych

Post autor: PrzemB »

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).
Awatar użytkownika
aaddaas
Posty: 202
Rejestracja: 26 cze 2013 20:42
Wersja środowiska: LabVIEW 2015

Uruchamianie pętli równoległych

Post autor: aaddaas »

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.
Obrazek
PrzemB
Posty: 38
Rejestracja: 24 mar 2015 18:42
Wersja środowiska: LabVIEW 2017

Uruchamianie pętli równoległych

Post autor: PrzemB »

Dzięki, wygląda na to, że już jestem na dobrym tropie.
Pozdrawiam
ODPOWIEDZ