Problem z uruchomieniem

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
Gorbaczov
Posty: 29
Rejestracja: 21 gru 2009 13:23
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Lublin

Problem z uruchomieniem

Post autor: Gorbaczov »

Witam ponownie. Tworzę aplikację która ma za zadanie wizualizować co dzieje się w pomieszczeniach domku jednorodzinnego. Jestem bliski ukończenia tego zadania jednak napotkałem pewien problem. Po wstawieniu pętli która miała za zadanie obracać wiatrak, pozostałe kontrolki przestały działać. To samo działo się po wstawieniu rejestratora zdarzeń odczytującego z pliku stan uruchamianych kontrolek, który na początek wstawiłem w zakładkę "Salon" i jedynie kontrolki z tej zakładki działały. Chciałbym jakoś rozwiązać ten problem ale skończyły mi się pomysły. Może znajdzie się ktoś, kto jest ode mnie mądrzejszy i mi pomoże. Bardzo proszę o ewentualne uwagi które pomogą mi zoptymalizować działanie programu. Proszę też o wyrozumiałość gdyż jest to mój pierwszy poważny program w LabVIEW. Pozdrawiam
Załączniki
Kontrolki.rar
(311.15 KiB) Pobrany 390 razy
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Problem z uruchomieniem

Post autor: smiga »

No cóż, to wszystko jest "niezgodne z zasadami sztuki"

Wiatrak kręci się w pętli, która wykonuje się 1000 razy co 150ms - ten kawałek programu zajmuje więc 150s czasu.

Struktura całego programu nie jest "elegancka".

Proponuję wykorzystać gotowe templeat'y (File/New.../Design Patterns) jako bazę do zbudowania programu - polecam jeden z dwóch (drugi daje więcej możliwości):
- User Interface Event Handler
- Producer/Consumer Design Pattern (Events)


Proponuję trochę o tym poczytać.

Zauważ, że wszystkie programy w 99% przypadków zamknięte są w pętli While co pozwala na ich ciągle wykonywanie się.
Ty zbudowałeś program, który wykona się raz (wszystko poza pętlą Event), a później czeka na Event i tylko jeden z 3 Event'ów wykonuje.
Ostatnio zmieniony 13 kwie 2010 20:26 przez smiga, łącznie zmieniany 1 raz.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
Awatar użytkownika
coolfon
Posty: 232
Rejestracja: 01 gru 2007 08:59
Wersja środowiska: LabVIEW 2009
Kontakt:

Problem z uruchomieniem

Post autor: coolfon »

Ok, czegoś nie rozumiem... Masz w programie strukturę Event, ale nie masz nawet jednej pętli While!
Czy w takim razie (aż strach się zapytać ;) ) uruchamiasz program za pomocą Run Continously? Jeśli tak, to moją pierwszą sugestią jest zapoznanie się z Helpem do LabVIEW, bo programów, które mają działać 'ciągle' w żadnym wypadku się w ten sposób nie uruchamia!
Jeśli faktycznie tak uruchamiasz ten program, to nic dziwnego, że 'przestał działać' po wstawieniu pętli For. W końcu każesz jej się wykonać 1000 razy, a w jej wnętrzu dałeś opóźnienie 150 ms... Poczekaj dwie i pół minuty, a program się pewnie odezwie ;)

EDIT:
Jeszcze dwie uwagi:
1. Przy debuggowaniu polecam korzystać z Highlight Execution - łatwo sprawdzić gdzie badany program się 'wiesza'
2. Polecam trochę ograniczyć 'rozłożystość' kodu. Póki co program jest rozbudowany, ale w pionie :) Nawet naprawdę duże programy można zmieścić na jednym ekranie.
Ostatnio zmieniony 13 kwie 2010 20:42 przez coolfon, łącznie zmieniany 2 razy.
Gorbaczov
Posty: 29
Rejestracja: 21 gru 2009 13:23
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Lublin

Re: Problem z uruchomieniem

Post autor: Gorbaczov »

ok, poprawiłem kilka rzeczy zgodnie ze wskazówkami. Korzystałem z 'Clean up diagram' i dlatego tak mi go rozciagnęło w pionie. Jednak w dalszym ciągu program strasznie się "muli" :). Co zrobić, żeby go trochę przyspieszyć i żeby efekty widoczne były w miarę jak najszybciej?
Załączniki
Kontrolki1.rar
(312.5 KiB) Pobrany 375 razy
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Problem z uruchomieniem

Post autor: smiga »

Wciąż polecam zmienić architekturę programu.
smiga pisze: - User Interface Event Handler
- Producer/Consumer Design Pattern (Events)


Proponuję trochę o tym poczytać.
Dalej szereg elementów (zakładek) wykona się tylko raz.
W nowych pętlach While nie ma żadnego opóźnienia (wstaw tam jakiś Wait chociaż), więc zajmują "cały czas" procesorowi, a ponieważ działają równolegle to jeszcze go sobie "kradną" (pomijając inne wątki dziejące się w systemie).
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
Awatar użytkownika
coolfon
Posty: 232
Rejestracja: 01 gru 2007 08:59
Wersja środowiska: LabVIEW 2009
Kontakt:

Problem z uruchomieniem

Post autor: coolfon »

Naprawdę weź sobie do serca to, co Ci pisze smiga! Konieczna jest zmiana architektury programu, tym bardziej jeśli jest to praca magisterska (sądząc po ścieżce do pliku w programie...).
Te pętle While dołożyłeś chyba losowo. Każdy SubVI wykona się tylko raz, a chyba nie o to Ci chodzi. Zapoznaj się z Helpem, a zwłaszcza z zagadnieniami, o których napisał smiga.

TUTAJ masz przykład jak w prosty sposób obsługiwać przyciski na front panelu.

Mam jeszcze uwagę co do Twoich SubVI - wiele z nich zawiera w sobie niemal wyłącznie strukturę Case. W ten sposób tylko utrudniasz sobie pracę, bo zamykanie tego do SubVI nic Ci nie daje.

Naprawdę przysiądź chwilę nad tym programem. Zdecydowana większość kontrolek to boolean'y, obliczeń nie ma prawie wcale... Napisanie tego nie powinno Ci zająć więcej niż 2h.
Gorbaczov
Posty: 29
Rejestracja: 21 gru 2009 13:23
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Lublin

Problem z uruchomieniem

Post autor: Gorbaczov »

Macie rację, właśnie trochę poczytałem i też doszedłem do wniosku, że trzeba będzie zmienić architekturę. Mam jeszcze pytanie. Czy Producer/Consumer Design Pattern (Events) wykorzystać tylko do jednej zakładki w moim programie, i tak po kolei do pozostałych zakładek (ale to chyba wyjdzie podobnie jak teraz??) czy może da się zwiększyć ilość 'producentów' i 'konsumentów' tak aby dostosować to do moich potrzeb (podobnie jak w przykładzie zamieszczonym przez coolfon'a:))? Jakie są ograniczenia w zastosowaniu tego Template? Ile może być producentów i konsumentów?

Ps. Wielkie dzięki za pomoc :)
Awatar użytkownika
coolfon
Posty: 232
Rejestracja: 01 gru 2007 08:59
Wersja środowiska: LabVIEW 2009
Kontakt:

Re: Problem z uruchomieniem

Post autor: coolfon »

Ponieważ w Twoim programie reakcją na większość Event'ów jest zmiana jakiegoś LED'a (boolean'a), całość da się zrobić na jednym 'producencie' i jednym 'konsumencie'.
Gorbaczov pisze: czy może da się zwiększyć ilość 'producentów' i 'konsumentów' tak aby dostosować to do moich potrzeb (podobnie jak w przykładzie zamieszczonym przez coolfon'a:))? Jakie są ograniczenia w zastosowaniu tego Template? Ile może być producentów i konsumentów?
Producentem jest w tym przypadku pętla While ze strukturą Event w środku. Po co Ci więcej niż jedna? Ograniczenia pojawiają się w momencie, gdy reakcją na naciśnięcie jest np jakieś długo trwające odliczanie (np kilka sekund), w trakcie którego chciałbyś wywołać jakieś inne działanie (zmiana boolean'a). Wtedy potrzebujesz osobnego konsumenta (dla tej 'długiej' akcji). Ale tylko wtedy! Ponownie odsyłam do zamieszczonego przeze mnie przykładu.
Gorbaczov
Posty: 29
Rejestracja: 21 gru 2009 13:23
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Lublin

Re: Problem z uruchomieniem

Post autor: Gorbaczov »

Użyłem polecanego przez Was template i udało mi się stworzyć program wykorzystujący kolejkę. Jednak w dalszym ciągu program sie muli. Co poprawić, aby działał płynnie? Może wstawić jakieś opóźnienia czasowe? Mam też problem z Regulacją termometru. Wskaźnik stoi w miejscu, zmienia się jedynie kolor wskaźnika. Pewnie to dlatego, że w event structure przypisałem mu własność "Change value". Jak to ustawić aby płynnie przesuwał się wskaźnik? Jeśli macie jeszcze jakieś dodatkowe uwagi to bardzo chętnie je poznam :)
Załączniki
Kolejka.vi
(199.13 KiB) Pobrany 398 razy
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Problem z uruchomieniem

Post autor: smiga »

Podepnij regulacje temperatury do wskaźnika temperatura w Event'cie ... chyba że ma on reagować na coś innego - teraz nie jest ten wskaźnik podłączony do niczego.
W 2 górnych pętlach While wstaw jakieś opóźnienie np. 100ms Wait lub Wait Until Next.

Włącz sobie śledzenie (żarówka) i pooglądaj co program robi.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
Gorbaczov
Posty: 29
Rejestracja: 21 gru 2009 13:23
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Lublin

Problem z uruchomieniem

Post autor: Gorbaczov »

Hmmm, nie za bardzo to widzę, program nie działa poprawnie. Po wciśnięciu przycisku zapala się dioda, ale po wyciśnięciu nie dzieje się nic. Prześledziłem działanie programu za pomocą żarówki i zauważyłem że reaguje tylko na pierwszą czynność a nie reaguje na dalsze akcje.
Obrazek
Wiecie może jak to poprawić?

Ps. regulacja temperatury działa poprawnie ale wstawienie opóźnienia w górnych pętlach niewiele pomogło...
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Problem z uruchomieniem

Post autor: smiga »

Przy kolejkach opóźnienie na górnych pętlach nie jest potrzebne i niczego nie zmieni, bo kolejki czekają - sorki za zamieszanie.

Zastosowanie 2 pętli czytających z kolejkami, czyli pobierających elementy z kolejki ma jedną wadę - nie wiemy która najpierw przeczyta.
W przypadku opisywanej "łazieniki" element trafia do pętli nie obsługującej "łazieniki" więc nic się nie dzieje.
Raz pobrany element z kolejki nie jest do pobrania ponownie w innym miejscu (kolejka jest pusta). To jest tak jakbyśmy odkładali elementy na stosie pamięci - jak coś zabrało to drugie "coś" nie weźmie już tego samego, weźmie kolejny element.
W takiej konstrukcji gdzie jest kilka pętli czytających polecam zastosowanie notyfikatorów.

Można też zostawić kolejkę i wywalić jedną pętlę, robiąc wszystko w jednej.
Załączniki
Kolejka.vi
(198.45 KiB) Pobrany 378 razy
Ostatnio zmieniony 15 kwie 2010 16:55 przez smiga, łącznie zmieniany 1 raz.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
Gorbaczov
Posty: 29
Rejestracja: 21 gru 2009 13:23
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Lublin

Problem z uruchomieniem

Post autor: Gorbaczov »

Wielkie dzięki Smiga, Sam bym na to na pewno nie wpadł :)
Gorbaczov
Posty: 29
Rejestracja: 21 gru 2009 13:23
Wersja środowiska: LabVIEW 8.6
Lokalizacja: Lublin

Re: Problem z uruchomieniem

Post autor: Gorbaczov »

Witam ponownie. Dokonałem modyfikacji wcześniejszego programu tak, aby była możliwość sterowania przyciskami za pomocą napięcia odczytywanego z karty. wcześniej ustawione napięcie będzie sprawdzane z napięciem zmierzonym i w zależności od otrzymanego stanu (true lub false) będzie wykonywana właściwa czynność. Mam problem związany z kolejką (tak myślę), ponieważ działa jedynie ta część która jest ustawiona na "default" w pętli Case. co zrobić zeby program działał poprawnie, czyli były wykrywane stany we wszystkich zakładkach?
Załączniki
program.PNG
Dom 8.6proba.vi
(194.87 KiB) Pobrany 375 razy
Awatar użytkownika
smiga
Administrator
Posty: 824
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2019
Lokalizacja: Słupsk

Re: Problem z uruchomieniem

Post autor: smiga »

Zauważ, że w pętli producenta do Case'a masz podłączoną stałą "Dom" - czyli wchodzi do case'a "dom" , a że takiego nie ma to Default "Salon".

Przełączanie zakładki Tab Control, a jeszcze lepiej zmiana wartości czujników dla danej zakładki, powinno wygenerować odpowiedni Case.
Jeżeli jest to symulacja i klikasz na każdy czujnik (każda zmiana napięcia jest ręcznie modyfikowana) to proponuję zastosować strukturę Event.

Najprościej to zrobić Eventy (Value Change) dla każdej kontrolki tak jak na obrazku:
Załączniki
Najprościej to zrobić Eventy (Value Change) dla każdej kontrolki tak jak na obrazku<br />.
Najprościej to zrobić Eventy (Value Change) dla każdej kontrolki tak jak na obrazku
.
kuchnia.png (8.8 KiB) Przejrzano 16079 razy
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Pomogłem ... postaw kawę: https://buycoffee.to/smiga
ODPOWIEDZ