zamykanie referencji

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.
Awatar użytkownika
fenix
Posty: 97
Rejestracja: 21 mar 2006 00:00
Lokalizacja: Warszawa

zamykanie referencji

Post autor: fenix »

Witam,
mam pytanie:) w programie ktory robie mam aplikacje otwierania podprogramu. problem jest taki, gdy probuje go zakonczyc naciskajac stop(zatrzymujac petle) , wysyla on blad zamkniecia referencji. dlaczego ten blad sie pojawia i jak to naprawic? :)
sam problem przedstawiam w zalaczniku.
dziekuje za pomoc i pozdrawiam
Awatar użytkownika
progor
Posty: 197
Rejestracja: 01 kwie 2005 00:00
Lokalizacja: Kraków

Re: zamykanie referencji

Post autor: progor »

bład nie pojawia się przy zamykaniu referencji ale przy otwieraniu. powód: nie istnieje taka ścieżka. Open VI Reference in problem.vi<APPEND> VI Path: <b>C:Documents and SettingsadministratorPulpitproblem.viaa.vi</b>
Po co do ścieżki bierzącego vi'a dokładasz jeszcze aa.vi ?
Awatar użytkownika
Ender
Posty: 137
Rejestracja: 02 cze 2005 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Cieszyn

Re: zamykanie referencji

Post autor: Ender »

Bo na moj gust nie dostaje tej referencji do zamkniecia. Jesli przesledzisz uwaznie dzialanie programu, to zauwazysz, ze kiedy naciskasz stop, case jest w stanie false, a tam nic nie jest tworzona zadna referencja
Swoja droga ciekawi mnie, dlaczego program daje sie uruchomic, skoro ma niepodpiete wyjscia z case'a?
Moja rada - referencje otworz poza petla while, a w case = true zostaw tylko property node i invoke node
-Czy orał pan już kiedyś morskie fale?
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: zamykanie referencji

Post autor: jogurt_owocowy »

Gdy wciskasz przycisk startujący podprogram wewnątrz Case'a jest otwierana referencja do podprogramu i pojawia się ona też na wyjściu Case'a. Ale Twój program kręci się w kółko i gdy nie naciskasz tego przycisku na wyjściu Case'a pojawia się wartość domyślna referencji (bo w ramce False nic nie jest dołączone do tunelu) i ta właśnie wartość płynie do Close Reference. A jak naprawić? Najogólniej to zrobić tak, żeby do Close Reference szła dobra referencja:P Najprościej zamknąć ją jeszcze wewnątrz Case'a o ile jej nie potrzebujesz w dalszej części programu.
I przemyśl czy nie lepiej użyć tu eventów - taki program kręcący się w kółko tylko po to żeby "odpytywać" przycisk to nie jest dobre rozwiązanie.
Pozdrawiam(:
PS.
Swoja droga ciekawi mnie, dlaczego program daje sie uruchomic, skoro ma niepodpiete wyjscia z case'a?
PKM na niepodpiętym tunelu - Use Default If Unwired
Awatar użytkownika
fenix
Posty: 97
Rejestracja: 21 mar 2006 00:00
Lokalizacja: Warszawa

Re: zamykanie referencji

Post autor: fenix »

wlasnie dla mnie chyba lepsze by bylo zamkniecie poza petla, bo gdy jest zamykanie wewnatrz casa i przypadkowo zostanie jeszcze raz uruchomiony podprogram gdy juz dziala w tle wowczas program zglasza blad zwiazany z Invoke Node a tak by bylo bezpieczniej a otwieranie poza petla while tez nic nie daje. Jak mozna to zamkac poza petla albo zrobic zeby nie bylo tego drugiego bledu?
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: zamykanie referencji

Post autor: Mikrobi »

Trochę innaczej. Dopisujesz do ścieżki tego VIja dodatkowy plik zatem: plik problem.vi ma lokalizację np. C:problem.vi a chcesz otworzyc plik: C:problem.viaa.vi powinieneś zamiast funkcji Build Path użyć funkcję Strip Path [zwróci ona scieżkę C: i osobno string zawierający nazwę problem.vi] a potem dopiero stosować funkcję Build Path , korzystając w podobny sposób jak na diagramie.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Awatar użytkownika
fenix
Posty: 97
Rejestracja: 21 mar 2006 00:00
Lokalizacja: Warszawa

Re: zamykanie referencji

Post autor: fenix »

sciezke mam dobrze w programie a tu to tylko przykladowo tak zamiescilem, podprogram normalnie mi sie uruchamia w drugim okienku ale gdy go zminimalizuje do paska i przez przypadek jeszcze raz wywolam z przyciku to wtedy mi sie pojawia blad z Invoke Node jak referencja jest zamykana wewnatrz case. Dlatego wolalbym zamykac ja poza petla bo wtedy takiego bledu nie ma ... i nie moge tego rozpracowac...
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: zamykanie referencji

Post autor: Mikrobi »

cóz, czyli przykład był zły bo z błędem 8) możesz uniknąć opisywanego przez ciebie błedu jeśli będziesz najpierw sprawdzał węzeł FP.Open [czyli klasycznie w wersji odczytującej czy panel jest otwarty].
Możesz też przeczytać o co chodzi w błędzie i odpowiednio to obsłużyć. Komunikaty o błędach na prawdę są pomocne. ;)
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: zamykanie referencji

Post autor: jogurt_owocowy »

Po pierwsze: Za zamknięciem referencji wewnątrz Case'a przemawia prosta logika: Po co ciągnąć przez cały diagram niepotrzebne druty?! Niepotrzebna referencja zamykana jest zaraz po uruchomieniu podprogramu, natomiast przed jego uruchomieniem jest sprawdzane czy podprogram już przypadkiem nie hula. Proste.
A po drugie to sprawa tej ścieżki.
powinieneś zamiast funkcji Build Path użyć funkcję Strip Path [zwróci ona scieżkę C: i osobno string zawierający nazwę problem.vi] a potem dopiero stosować funkcję Build Path , korzystając w podobny sposób jak na diagramie.
To jest poprawne podejście.
Ale tu jest taka mała ciekawostka, która chyba jest źródłem nieporozumień. Jeśli Strip Path nie ma, czyli do Open VI Reference dochodzi np. ścieżka C:problem.viaa.vi, a podprogram aa.vi jest "ręcznie" otwarty (choć nie działający) to uruchomi się poprawnie. Natomiast po zamknięciu jego panelu wyskakuje błąd "File not found". Dziwne.
PS. Na obrazku rozwiązanie.
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: zamykanie referencji

Post autor: Mikrobi »

Jeśli panel jest otwarty to VI jest w pamięci operacyjnej.
Próba otworzenia VIja to sprawdzenie najpierw czy nie ma go w pamięci - jeśli jest zostaje wywołany ten z pamięci, zamiast szukać po dysku.
Jeśli go nie ma - następuje oczywiście próba otwarcia z podanej ścieżki dostępu.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: zamykanie referencji

Post autor: jogurt_owocowy »

No tak, tylko jakieś opory budzi w mnie to, że podawana jest ścieżka do nieistniejącego pliku, a LV łyka to bez oporu.
Z tego wniosek, że po załadowaniu podprogramu aa.vi do pamięci można na wejście Open VI Reference podać ścieżkę w rodzaju ó:pozdrawiam mamę, ciocię i psa Ciapkaaa.vi i będzie działać
tak samo
:lol:
ODPOWIEDZ