Strona 1 z 1

zamykanie referencji

: 17 lip 2006 10:21
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

Re: zamykanie referencji

: 17 lip 2006 10:46
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 ?

Re: zamykanie referencji

: 17 lip 2006 10:51
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

Re: zamykanie referencji

: 17 lip 2006 10:52
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

Re: zamykanie referencji

: 17 lip 2006 11:56
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?

Re: zamykanie referencji

: 17 lip 2006 12:13
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.

Re: zamykanie referencji

: 17 lip 2006 12:21
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...

Re: zamykanie referencji

: 17 lip 2006 12:26
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. ;)

Re: zamykanie referencji

: 17 lip 2006 13:30
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.

Re: zamykanie referencji

: 17 lip 2006 17:19
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.

Re: zamykanie referencji

: 17 lip 2006 17:46
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: