Strona 1 z 1

Zatrzymywanie kilku równoległych pętli while

: 17 paź 2015 17:13
autor: PrzemB
Witam,

zabrałem się za moją pierwszą większą aplikację i oczywiście mam problemy. W aplikacji (będzie ona działała na myRIO) będę miał kilka równoległych pętli while pracujących z różnymi częstotliwościami. Pytanie jest proste: jakim mechanizmem zatrzymywać wszystkie pętle? Na szkoleniach i w znalezionych przykładach najczęściej są dwie pętle (consumer-producer) i można je zatrzymać chociażby poprzez kolejkę. Ale w przypadku kilku pętli kolejka zostanie opróżniona przez pierwszą pętlę... Bardzo proszę o porady :)

Pozdrawiam
Przemek

Zatrzymywanie kilku równoległych pętli while

: 17 paź 2015 18:51
autor: semper fidelis
Mozesz sobie dodac zmienna Boolean ktorej wartosc podlaczyc do stop w kazdej petli (zmienne lokalne). Jesli zmienisz wartosc tej zmiennej na True to wszystkie petle sie zatrzymaja (oczywiscie przy warunku Stop if true).

Re: Zatrzymywanie kilku równoległych pętli while

: 18 paź 2015 22:46
autor: pawhan11
Kilka pętli -> kilka kolejek :)
Każda pętelka to swego radzaju maszyna stanów, nie zależnie od tego czy bazuje na UE czy kolejkach. Każda pęta powinna miec jakiś mechanizm komunikacji tak aby pozostałe mogły się z nią porozumieć.
Jeżeli w pewnym momencie decydujesz zatrzymac aplikację najlepiej wysłać wiadomośc do kazdej z pętelek aby poprawnie zwolniła wszystkie zasoby i się wyłączyła.

Zatrzymywanie kilku równoległych pętli while

: 19 paź 2015 08:16
autor: Pitol
Jeżeli nie chcesz produkować oddzielnych kolejek dla każdej z pętli możesz użyć tylko jednej kolejki.
W menu kolejek jest funkcja, pozwalająca podejrzeć elementy kolejki (Preview Queue chyba).
Więc jeśli wyślesz do kolejki stan QUIT, to każda z pętli może podejrzeć ten stan w kolejce i na niego zareagować, bez konieczności wyciągania tego elementu z kolejki.

Re: Zatrzymywanie kilku równoległych pętli while

: 19 paź 2015 08:34
autor: PrzemB
Dzięki za podrzucone pomysły. Oczywiście kolejki do przesyłania danych pomiędzy pętlami będę miał, ale ze względu na planowaną sporą liczbę tych pętli nie za bardzo chciałem robić dodatkowe kolejki do sterowania stanem każdej pętli osobno. Chyba spróbuję rozwiązania z jedną kolejką i "podglądania" jej zawartości we wszystkich pętlach.

Pozdrawiam
Przemek

Re: Zatrzymywanie kilku równoległych pętli while

: 19 paź 2015 16:03
autor: MK_Zuk
Witam.
Pierwsze pytanie jest takie:
Czy tylko jedna pętla będzie Masterem i będzie mogła generować rozkaz zatrzymania
dla pozostałych, czy może zatrzymanie dowolnej pętli ma zatrzymać cały program?
Jeżeli chodzi o rozwiązania to ja widzę 2.
1. Zmienną lokalną od przycisku STOP,
2. zamiast kolejki użyć powiadomienia ale wtedy jest 1 writer multiple readers.

Pozdrawiam
MK_Zuk

Re: Zatrzymywanie kilku równoległych pętli while

: 21 paź 2015 12:35
autor: aaddaas
Osobiście odradzam zmiennych lokalnych "stop". Można tego sposobu używać gdy program jest "na szybko", ale jeśli chcesz zapewnić sobie odpowiednie zarządzanie zasobami, error handling, lepiej poświęcić trochę więcej czasu i zastosować inne wcześniej wymienione sposoby. Szczególnie jeśli planujesz obsługę myRIO, czy chociażby zapis do plików. Rzuć sobie okiem na templates-> continous measurements (bodajże).

Re: Zatrzymywanie kilku równoległych pętli while

: 01 lis 2015 19:28
autor: PrzemB
Zrobiłem jedną kolejkę do przesyłania informacji "krytycznych" - m.in. stop silników, czy właśnie zatrzymanie aplikacji. Wszystko działa super.

Pozdrawiam
Przemek

Re: Zatrzymywanie kilku równoległych pętli while

: 22 mar 2022 11:50
autor: konos513
Dołączę do tego tematu z moim problemem, ponieważ jest zbieżny.
Mmam kilka pętli działających równolegle i także chciałbym je zatrzymać jednym przyciskiem.
Zastosowałem Channel Writer -Tag:Write i Read.
Niestety jedna z pętli,w której jest Event Structure nie zatrzymuje po naciśnięciu stop. Zatrzymuje się ona dopiero po kolejnym naciśnieńciu klawiszy ja aktywujących.
Można to jakoś wyeliminować. Czy takie podejście jest poprawne.

Re: Zatrzymywanie kilku równoległych pętli while

: 23 mar 2022 08:13
autor: MateZdun
W twoim przypadku najprościej dodać do Event structur Timeout, gdyż pętla while loop numer 3 działa tylko w przypadku "nienaciśnięcia klawiszy ją aktywujących" polecam zapoznanie się z kolegi kanałem na youtubie "Estymując" w odcinku "Kurs LabVIEW #6 - Struktura zdarzeniowa/Event structure" prezentuje działanie struktury zdarzeniowej.

Re: Zatrzymywanie kilku równoległych pętli while

: 23 mar 2022 08:25
autor: smiga
Stop powinien być w Event'cie.
BTW, posprzątaj te zakręcone druty, proszę :)

Re: Zatrzymywanie kilku równoległych pętli while

: 24 mar 2022 13:28
autor: konos513
Dziękuję za komentarze,
Stop w Event'cie pomógł.
Zastosowanie Timeout-u w Event'cie nie zadziałał, prawdopodobnie z brakach w mojej wiedzy.

Re: Zatrzymywanie kilku równoległych pętli while

: 27 mar 2022 01:16
autor: smiga
Jak masz stop w event'cie, nie potrzebujesz timeout'u...w Twoim przypadku :)
logo_Bitfold3.png
logo_Bitfold3.png (6.06 KiB) Przejrzano 1716 razy