Problem z poprawnym działaniem aplikacji po jej zakończeniu.

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Paw Saw
Posty: 37
Rejestracja: 12 maja 2016 16:02
Wersja środowiska: LabVIEW 2017

Problem z poprawnym działaniem aplikacji po jej zakończeniu.

Post autor: Paw Saw »

Witam,

Chciałbym poradzić się w pewnej sprawie. Mianowicie przygotowuję aplikację, w której po raz pierwszy stosuję strukturę producent - konsument. Stworzyłem "szkielet", który mam zamiar wykorzystać w projekcie, jednak nie do końca działa jak należy. Ogólnie aplikacja będzie przeznaczona do weryfikacji na podstawie różnych pomiarów, czy produkt nadaje się do użytku, czy nie (tzn. czy proces produkcji przeszedł poprawnie).
Do rzeczy... Problem polega na tym, że po zamknięciu aplikacji za pomocą kontrolki "Close" nie można wykonać pomiaru po ponownym włączeniu. Problem ten nie występuje, gdy zakończę działanie aplikacji przyciskiem Abort Execution. Nie mam pojęcia jak temu zaradzić. Może ktoś z Was ma jakiś pomysł? Mile widziane będą również porady odnośnie samej struktury, ponieważ uczyłem się jej z youtube'a i nie jestem pewny, czy robię wszystko zgodnie ze sztuką. W załączniku przesyłam to, co udało mi się zrobić.

Pozdrawiam
Załączniki
ST700_main.vi
(145.43 KiB) Pobrany 442 razy
Obrazek
Awatar użytkownika
micard
Posty: 207
Rejestracja: 30 wrz 2011 11:28
Wersja środowiska: LabVIEW 2017
Kontakt:

Problem z poprawnym działaniem aplikacji po jej zakończeniu.

Post autor: micard »

Witam

Ślicznie utkana aplikacja :) aż miło popatrzeć.
Aby móc ci pomóc - mógłbyś trochę jaśniej opisać co oznacza:
"...nie można wykonać pomiaru po ponownym włączeniu..." ?
Paw Saw
Posty: 37
Rejestracja: 12 maja 2016 16:02
Wersja środowiska: LabVIEW 2017

Re: Problem z poprawnym działaniem aplikacji po jej zakończeniu.

Post autor: Paw Saw »

Witam,

Nie wiem, czy potrafię opisać jaśniej, ale spróbuję. W momencie, gdy kończę działanie aplikacji za pomocą przycisku Close, uruchamiam ją ponownie i wciskam Start, aby rozpocząć pomiar, sam przycisk przechodzi w True (świeci na żółto), ale pomiar nie rusza (na wykresie nic się nie dzieje). Poprzednim razem zapomniałem dołączyć SubVI, dlatego nie można było uruchomić aplikacji. Tym razem lekko ją zmodyfikowałem, więc możesz osobiście sprawdzić o co mi chodzi.
Według mnie wygląda to tak, jakby nie był generowany event w pętli Communication with PLC (na samym dole), ale zupełnie nie wiem dlaczego. Wszystko działa tak jak należy w momencie kiedy zmienię warunki wystąpienia eventu na zwykłe przyciśnięcie przycisku Start. Jednak nie mogę tego tak zostawić, ponieważ pomiar będzie włączany poprzez sygnał z PLC.

PS. Bardzo mi miło, że ktoś docenia moją pracę ;)

Pozdrawiam
Załączniki
ST700_main_v2.vi
(147.56 KiB) Pobrany 426 razy
Obrazek
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Problem z poprawnym działaniem aplikacji po jej zakończeniu.

Post autor: PiDi »

Kontrolka Exit, której local variable zatrzymuje pętlę "Communication with PLC", nie jest nigdy ustawiana na False. Po pierwszym zatrzymaniu programu jest ustawiona na True i taka pozostaje, więc przy drugim uruchomieniu pętla PLC wykonuje się raz i od razu zatrzymuje.
Wniosek: nie używać local variable do komunikacji między pętlami, w szczególności do zatrzymywania ich.
ObrazekObrazekObrazekObrazek
Paw Saw
Posty: 37
Rejestracja: 12 maja 2016 16:02
Wersja środowiska: LabVIEW 2017

Re: Problem z poprawnym działaniem aplikacji po jej zakończeniu.

Post autor: Paw Saw »

Kontrolka Exit jest zawsze ustawiana na False w pętli inicjalizacji, więc raczej nie to powoduje problem, ale skoro uważasz, że to nie jest dobre rozwiązanie, to może masz jakąś inną propozycję jak zatrzymywać tą pętlę?
Obrazek
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Problem z poprawnym działaniem aplikacji po jej zakończeniu.

Post autor: PiDi »

A faktycznie, nie przyjrzałem się. Ale zanim ta kontrolka będzie ustawiona w jednej pętli, to już w drugiej będzie odczytana stara wartość False. Co więcej - to zachowanie może się zmieniać wraz z rozwojem programu, zmianą komputera, zmianą fazy księżyca, itp. Może się zdarzyć, że ta inicjalizacja nastąpi czasem jednak wcześniej i program będzie "działać", a innym razem nastąpi później i efekt będzie taki, jak widzimy.

Co do lepszych propozycji, to więcej uwag do tego kodu mogę wrzucić jak będę miał chwilę, żeby przysiąść nad nim, ale na szybko - przecież sam wiesz, jak to zrobić lepiej, bo widzę dwie pętle z ładnymi kolejkami przesyłającymi do nich polecenia, m.in. polecenie Exit ;)
ObrazekObrazekObrazekObrazek
Paw Saw
Posty: 37
Rejestracja: 12 maja 2016 16:02
Wersja środowiska: LabVIEW 2017

Re: Problem z poprawnym działaniem aplikacji po jej zakończeniu.

Post autor: Paw Saw »

Nie zastosowałem w tej pętli kolejek ze względu na to, że komunikacja z PLC musi działać niezależnie, na przykład PLC Status musi być "czytany" w czasie rzeczywistym, ale nie pomyślałem, żeby dodać pętlę z kolejkami tylko do kończenia While'a, a całą resztę zostawić tak jak jest (bezpośrednio w While'u). Takie rozwiązanie likwiduje mój problem :)
Dziękuję za pomoc. Za jakiekolwiek dodatkowe sugestie będę bardzo wdzięczny. Jako początkujący programista jestem otwarty na wszelkie porady.
Obrazek
Awatar użytkownika
micard
Posty: 207
Rejestracja: 30 wrz 2011 11:28
Wersja środowiska: LabVIEW 2017
Kontakt:

Problem z poprawnym działaniem aplikacji po jej zakończeniu.

Post autor: micard »

Do kończenia wielu pętli LV proponuje zastosowanie tzw. functional_global_variable. Ładny przykład jest dostarczany jako template projektu myRio.
ODPOWIEDZ