Program poskładany z subvi przestaje działać poprawnie

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
Awatar użytkownika
Zer0
Posty: 29
Rejestracja: 25 sty 2010 23:23
Wersja środowiska: LabVIEW 2014
Lokalizacja: Olsztyn

Program poskładany z subvi przestaje działać poprawnie

Post autor: Zer0 »

Szanowni,
Postanowiłem podzielić tworzoną aplikację na subvi, szczególnie że pewnych bloków będę używał wielokrotnie do różnych innych zadań... I tutaj pojawił się problem. Otóż, gdy aplikacja jest poskładana tak:
Aplikacja
Aplikacja
sterowany siłownik nie jest w stanie złapać zadanej pozycji (za wszystkie obliczenia odpowiada bloczek oznaczony strzałką). Jeżeli wrzucam odczyt i zapis z karty pomiarowej do środka tego subvi, to program zaczyna jakoś działać, przy czym "jakoś" nie jest tutaj opcją. Zauważyłem, że LV po wywołaniu poszczególnych podprogramów zatrzymuje je, jak tylko ich działanie dobiegnie końca.
Wobec tego, jak można rozwiązać ten problem wyłączania się podprogramów? Czy jest to wina samego LV, czy może ja coś źle zrobiłem?
Wnętrze subvi sterującego siłownikiem wygląda następująco:
SubVI
SubVI
Oczywiście sam podprogram zamknięty w pętlę i uruchomiony działa bez zarzutu i steruje siłownikiem tak, jak ma sterować.
MK_Zuk
Posty: 83
Rejestracja: 01 gru 2009 11:53
Wersja środowiska: LabVIEW 2014

Re: Program poskładany z subvi przestaje działać poprawnie

Post autor: MK_Zuk »

Witam.
Proponuję zrobić dwie rzeczy:
- otoczyć subvi pętlą while a warunek wyjścia ustawić jako True (constant),
- wskaźnik przemieszczenie [V] połączyć z rejestrem przesuwnym (na prawej ścianie struktury)
a zmienną lokalną Przemieszczenie[V] także połączyć z tym rejestrem przesuwnym
ale z lewej strony, sam rejestr proszę pozostawić niezainicjowany.

Pozdrawiam
Zuk
Awatar użytkownika
Zer0
Posty: 29
Rejestracja: 25 sty 2010 23:23
Wersja środowiska: LabVIEW 2014
Lokalizacja: Olsztyn

Re: Program poskładany z subvi przestaje działać poprawnie

Post autor: Zer0 »

Nie wiem, czy dobrze zrozumiałem. Chodziło o coś takiego?
SubVI
SubVI
Ale w takim układzie zmienna lokalna Przemieszczenie [V] traci sens, bo jej zadaniem było przepisanie wartości z p_out do p_old - równie dobrze spisuje się feedback node ;) ... W każdym razie to, co tu zrobiłem też nie działa - w zależności od konfiguracji warunku wyjścia z pętli - albo program dalej "świruje", albo zawiesza się całkowicie i nie reaguje na wprowadzanie danych z panelu operatorskiego...

EDIT:
Nie, nic z tego... LV nie chce mnie w żaden sposób słuchać... Aplikacja jako samodzielny program działa, jako SubVI nie chce... Zauważyłem, że to nie tyle jest problem z zatrzymywaniem SubVI przez LV, tylko z odczytem analogowym z karty pomiarowej. O ile siłownik stoi w bezruchu, to odczyt jest w miarę stabilny. Jak tylko zadam jakiekolwiek wysunięcie i siłownik rozpoczyna pracę, to odczyt skacze sobie średnio o 0,4V (np 4,8V - 4,4V dla 30% zakresu wysunięcia).
Jakieś pomysły odnośnie tego?
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: Program poskładany z subvi przestaje działać poprawnie

Post autor: Pitol »

Zer0 pisze:Zauważyłem, że LV po wywołaniu poszczególnych podprogramów zatrzymuje je, jak tylko ich działanie dobiegnie końca.
No powiem Ci, że odkryłeś Amerykę :)
A czego byś oczekiwał od LabVIEW? Wyobraź sobie przykład: masz pętlę a w niej dwa subVI połączone ze sobą tak, że wyjścia z jednego są podłączone do wejść drugiego.
Jeżeli ten pierwszy (wg Twojej teorii) miałby się nie zatrzymywać, to ten drugi nigdy by się nie uruchomił (czekałby na zakończenie działania pierwszego).
Tak działa LabVIEW! SubVI musi się skończyć, jeśli chcesz przejść do dalszej części programu.

W czym Ci to "zatrzymywanie" działania subVI przeszkadza?
Patrząc na Twój kod to wygląda tak:
1. komunikacja z urządzeniem
2. odczyt przesunięcia
3. magiczna matematyka (ten Twój "zły" subVI)
4. zadanie wartości do przekaźnika

Wielkiej filozofii nie ma.

Tak więc proponuję następujące działania:
Zacznij od DOKŁADNEGO opisu co nie działa. To że subVI sam w sobie uruchomiony działa to nie wiele nam mówi.
Co to w ogóle wg Ciebie znaczy, że nie działa poprawnie? Uruchamia się? Jakimi danymi operuje (poprawne, czy nie)?

Następnie prosty test:
Wyrzuć komunikację ze sprzętem zastępując ją jakimiś stałymi. Pozwoli Ci to zobaczyć, czy całość się kręci tak jak należy.

Jak już będziesz miał więcej szczegółów dotyczących Twojego problemu to się zgłoś, bo na razie to wróżyć z fusów nie będziemy.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
Zer0
Posty: 29
Rejestracja: 25 sty 2010 23:23
Wersja środowiska: LabVIEW 2014
Lokalizacja: Olsztyn

Re: Program poskładany z subvi przestaje działać poprawnie

Post autor: Zer0 »

Chodziło o to, że odczyt z potencjometru (służącego jako encoder) był bardzo niestabilny, gdy siłownik wykonywał przemieszczenie. Sytuacja ta natomiast nie występowała, gdy SubVI puszczony był samodzielnie. W każdym razie to rozwiązało 90% problemu:
Aplikacja
Aplikacja
Natomiast dopisanie kilku linijek kodu w C do "złego suba z magiczną matematyką" rozwiązało mój problem całkowicie (przy okazji znacznie go upraszczając) ;)
Także dzięki Wam za zainteresowanie :)
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Program poskładany z subvi przestaje działać poprawnie

Post autor: Pitol »

No i gra gitara... Najważniejsze to dłubać samemu, bo na nas liczyć to można... czsaem... heheh :D
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
ODPOWIEDZ