Witam!
Z gory przepraszam za brak polskich liter ale nie znajduja sie one w jezyku systemu operacyjnego jakiego uzywam
Od pewnego czasu zmagam sie z pewnym bledem i wrecz spedza mi on sen z powiek. Mam do stworzenia prosta aplikacje ktora komunikuje sie przez port Serial z urzadzeniem do mierzenia cisnienia.
Moj program zalaczam ponizej. Ogolnie to po pojedynczym odpaleniu program dziala prawidlowo oraz podaje prawidlowe wyniki. Jednakze ta aplikacja do komunikacji bedzie uzywana wielokrotnie (multiple calls) i wtedy okazjonalnie (nie zawsze) pojawia sie slawetny blad a mianowicie:
VISA: (Hex 0xBFFF0072) The resource is valid, but VISA cannot currently access it
Szybki search na forum NI uzmyslowil mi ze w miare duza ilosc osob otrzymuje ten blad jednakze nikt tak naprawde nie udzielil odpowiedzi czemu sie tak dzieje i jak sobie z tym poradzic.
Rozumiem znaczenie bledu to jest ze sesja VISA jest juz zrobiona i nie mozna otworzyc nowej jednakze tak sie wcale nie dzieje. Jezeli spojrzec w programie sesja jest zawsze zamykana na koncu aplikacji. Dodatkowo w ramach testow przed kazdym nowym otwarciem sesji VISY w Serial Initialization.vi dodalem Close VISA.vi. Wtedy zobaczylem paradoksalna sytuacje kiedy Close VISA zwracal Warning mowiacy ze operacja zostala wykonana jednakze nie bylo co zamykac a zaraz po tym Open VISA zwracal Blad ktory pokazalem wyzej . Dodatkowo przy wyszukiwaniu sesji brak ikony mowiacej o aktywnej sesji VISY.
Pare osob sugerowalo ze to moze byc zwiazane z uzywaniem konwerterow USB 2 Serial ktorych uzywalem jednakze pozbylem sie tego i uzylem orginalnego portu plyty glownej i niestety blad nadal sie potwarzal.
Uzywam LV 8.5 oraz Windows XP.
Bardzo bede wdzieczny za jakiekolwiek wskazowki. Czy moze komunikacja przez port Serial uzywajac VISY zostala poprawiona w pozniejszych wersjach LV albo wersja systemu operacyjnego moze miec tu znaczenie? Niestety nie mam mozliwosci przetestowania mojej aplikacji na innym systemie czy wersji LV.
Jezeli ktos bedzie tak dobry i bedzie probowal odpalac moja aplikacje to niech wie, ze:
- w Serial Operation.vi buffer jest przygotowywany w taki sposob ze do komendy dodawana jest reszta tekstu ktory tworzy pelna komende ktora rozumie urzadzenie tj. komenda MD zamieni sie w @254MD?;FF
- termination char powoduje przerwanie VISA read kiedy napotka znak ';' (3B w hexie) i wynik jest obrabiany aby uzyskac odpowiedz od urzadzenia
- aby wywolac blad nalezy uruchomic Serial test.vi ustawic zmienna Loops na liczbe wieksza od 1 i odpalic. Za pierwszym razem program powinnien zadzialac jednakze po uporczywym wciskaniu ctrl+r (ktory ma symulowac wielokrotne uruchamianie ) program w koncu zwroci blad
Aha chcialbym takze nadmienic ze komunikacja dziala bez zarzutu uzywajac takich programow jak Docklight czy Hyperterminal.
Jestem otwarty na jakiekolwiek propozycje i z gory dziekuje
Blad 1073807246 w komunikacji Serial
- rivui
- Posty: 27
- Rejestracja: 01 lut 2010 16:50
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Kopenhaga
Blad 1073807246 w komunikacji Serial
- Załączniki
-
- Serial test.vi
- (24.57 KiB) Pobrany 335 razy
-
- Serial Operation.vi
- (32.17 KiB) Pobrany 336 razy
-
- Serial Initialisation.vi
- (22.78 KiB) Pobrany 328 razy
- wino
- Posty: 549
- Rejestracja: 23 gru 2005 00:00
- Wersja środowiska: Nie mam LabVIEW
- Lokalizacja: Kraków
Re: Blad 1073807246 w komunikacji Serial
VI VISA open ma wejście Duplicate Session może ustaw tam True.
I jakbyś napisał, który VI generuje ten błąd.
I jakbyś napisał, który VI generuje ten błąd.
Ostatnio zmieniony 19 sty 2011 11:25 przez wino, łącznie zmieniany 1 raz.
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Blad 1073807246 w komunikacji Serial
Rzuć nam jeszcze plik Serial refresh.vi, bez wiadomości co tam się dzieje ciężko zgadywać co może być przyczyną.
Czy plik Serial test.vi jest subVi'em wywoływanym cyklicznie przez inny VI, czy to tylko fikcyjny twór na potrzeby prezentacji problemu?
Czy plik Serial test.vi jest subVi'em wywoływanym cyklicznie przez inny VI, czy to tylko fikcyjny twór na potrzeby prezentacji problemu?
-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 ....
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 ....
- rivui
- Posty: 27
- Rejestracja: 01 lut 2010 16:50
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Kopenhaga
Re: Blad 1073807246 w komunikacji Serial
A wybacz zapomnialem Serial Refresh wrzucic i zalaczam do danego posta. Jest to prymitywny subVi ktory mial sluzyc jako 'error handling'.
Serial test jest raczej sztucznym tworem do testowania i w orginalnej aplikacji wielokrotnie ladowany bedzie Serial Operation.vi.
Wino, dziekuje za podpowiedz chyba juz tego probowalem ale sprobuje ponownie i dam znac czy pomoglo. Blad zaczyna sie w wiekszosci przypadkow w VISA open (obecnym w Serial Initialization) ale takze czasami z rzadka w VISA read (obecnym w Serial operation).
Serial test jest raczej sztucznym tworem do testowania i w orginalnej aplikacji wielokrotnie ladowany bedzie Serial Operation.vi.
Wino, dziekuje za podpowiedz chyba juz tego probowalem ale sprobuje ponownie i dam znac czy pomoglo. Blad zaczyna sie w wiekszosci przypadkow w VISA open (obecnym w Serial Initialization) ale takze czasami z rzadka w VISA read (obecnym w Serial operation).
- Załączniki
-
- Serial refresh.vi
- (21.39 KiB) Pobrany 333 razy
Ostatnio zmieniony 19 sty 2011 15:01 przez rivui, łącznie zmieniany 1 raz.
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Blad 1073807246 w komunikacji Serial
Nie bardzo rozumiem dlaczego Twoja obsługa błędu polega na zamknięciu sesji i otwarciu nowej. Czemu to ma służyć? Jeśli wystąpił np timeout bo ktoś urwał kabel, to ponowna inicjalizacja nic nie da W Serial refresh dzieją się dziwne rzeczy i stawiam na to, że to on stwarza problemy. Np timeout odczytany z property node wynosi 2000, ale był zainicjalizowany na 4000. Poza tym po wejsciu do tego subVI zamykasz sesję, ale przy otwieraniu nowej korzystasz z identyfikatora do właśnie zamkniętej sesji, a nie z nazwy zasobu do którego chcesz otworzyć sesję.
Wywal cały serial refresh i daj znać czy problem się utrzymuje - jak tak to będziemy kombinować dalej
Wywal cały serial refresh i daj znać czy problem się utrzymuje - jak tak to będziemy kombinować dalej
-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 ....
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 ....
- rivui
- Posty: 27
- Rejestracja: 01 lut 2010 16:50
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Kopenhaga
Re: Blad 1073807246 w komunikacji Serial
Hej!
Dzieki za odpowiedz. Jednakze to nie zalezy od Serial refresh. Serial refresh dodalem duzo pozniej na tzw. 'szybcika' zeby zobaczyc czy pomoze. Rzeczywiscie popelnilem blad z przekazywaniem VISA resource. Jednakze wywalenie tego nic nie daje. Blad nadal sie pojawia.
Ustawienie duplicate session w VISA open na true takze niestety nie naprawia problemu.
Ja bym bardziej obstawial ze to cos dotyczace sprzetu albo tego w jaki sposob VISA traktuje port Serial. Blad wystepuje najczesciej kiedy po uzyciu VISA Close uzytkownik szybko uzywa VISA Open i pomimo ze wybrany port jest prawidlowy nie moze utworzyc sesji. Wydaje mi sie ze po uzyciu VISA Close LabView zamyka sesje ale fizyczne 'oddanie' kontroli portu zajmuje troche wiecej czasu niz same wykonanie tego SubVI i zanim to sie stanie LabView probuje znow sie do niego dobrac uzywajac VISA Open powodujac blad. Jednakze nie znam innego sposobu jak zamknac komunikacje pomiedzy portem a LabView jak uzywajac VISA Close...
Dzieki za odpowiedz. Jednakze to nie zalezy od Serial refresh. Serial refresh dodalem duzo pozniej na tzw. 'szybcika' zeby zobaczyc czy pomoze. Rzeczywiscie popelnilem blad z przekazywaniem VISA resource. Jednakze wywalenie tego nic nie daje. Blad nadal sie pojawia.
Ustawienie duplicate session w VISA open na true takze niestety nie naprawia problemu.
Ja bym bardziej obstawial ze to cos dotyczace sprzetu albo tego w jaki sposob VISA traktuje port Serial. Blad wystepuje najczesciej kiedy po uzyciu VISA Close uzytkownik szybko uzywa VISA Open i pomimo ze wybrany port jest prawidlowy nie moze utworzyc sesji. Wydaje mi sie ze po uzyciu VISA Close LabView zamyka sesje ale fizyczne 'oddanie' kontroli portu zajmuje troche wiecej czasu niz same wykonanie tego SubVI i zanim to sie stanie LabView probuje znow sie do niego dobrac uzywajac VISA Open powodujac blad. Jednakze nie znam innego sposobu jak zamknac komunikacje pomiedzy portem a LabView jak uzywajac VISA Close...
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Blad 1073807246 w komunikacji Serial
Czy na tym porcie podłączone jest inne urządzenie z którym się komunikujesz wykorzystując inne parametry transmisji? Jeśli nie, to dlaczego zamykasz sesję żeby za chwilkę ją znowu otworzyć i ponownie konfigurować port? Czy to ma jakieś uzasadnienie? Wydaje mi się, że powinno to wyglądać tak: startuje program główny i w jakiejś tam fazie inicjalizacji otwiera sesję i konfiguruje port. W pętli głównej wykorzystujesz tylko Write, Read i Clear (tak jak masz w serial operation, ale bez refresh), a zamykając program główny zamykasz sesję. Pomijając ewentualny event zmiany parametrów transmisji port jest inicjalizowany i zamykany tylko raz, a nie przy każdym wywołaniu podprogramu do komunikacji. Jak to wygląda u Ciebie?
-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 ....
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 ....
- rivui
- Posty: 27
- Rejestracja: 01 lut 2010 16:50
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Kopenhaga
Re: Blad 1073807246 w komunikacji Serial
Wyglada to tak teraz poniewaz Serial test.vi zostal tylko zbudowany do testowania tego bledu. Normalnie w prawdziwej aplikacji wyglada to dokladnie tak jak mowisz. Odpalany jest raz na poczatku Serial initialization.vi a potem tylko Serial operation.
Jednakze dzisiaj zmienilem jedna rzecz ktora spowodowala ze narazie blad zniknal i nie potrafie go powtorzyc. Mianowicie po moim ostatnim poscie zaczalem grzebac w ustawieniach sprzetu a jak to nic nie dalo to zauwazylem pewna banalna rzecz ktora wczesniej po prostu ignorowalem. Mianowicie VISA Open posiada tzw 'VISA Open Timeout' ktory jako default wynosi 0. Czyli jezeli nie uda sie otworzyc portu odrazu przesylany jest blad. Po ustawieniu tej wartosci na jakies 500 blad po prostu zniknal a aplikacja nie stracila NIC na szybkosci ( no moze z 10ms). Taka prosta rzecz ktorej nie zauwazylem wczesniej jakos ze myslalem ze wartosc domyslna wynosi jaka sensowna liczbe albo -1 czyli bez timeout'u natomiast wartosc domyslna jak juz wspominalem jest po prostu 0.
Takze trzymam kciuki ze to bylo problemem i dziekuje bardzo za wszystkie uwagi i wskazowki!
Jednakze dzisiaj zmienilem jedna rzecz ktora spowodowala ze narazie blad zniknal i nie potrafie go powtorzyc. Mianowicie po moim ostatnim poscie zaczalem grzebac w ustawieniach sprzetu a jak to nic nie dalo to zauwazylem pewna banalna rzecz ktora wczesniej po prostu ignorowalem. Mianowicie VISA Open posiada tzw 'VISA Open Timeout' ktory jako default wynosi 0. Czyli jezeli nie uda sie otworzyc portu odrazu przesylany jest blad. Po ustawieniu tej wartosci na jakies 500 blad po prostu zniknal a aplikacja nie stracila NIC na szybkosci ( no moze z 10ms). Taka prosta rzecz ktorej nie zauwazylem wczesniej jakos ze myslalem ze wartosc domyslna wynosi jaka sensowna liczbe albo -1 czyli bez timeout'u natomiast wartosc domyslna jak juz wspominalem jest po prostu 0.
Takze trzymam kciuki ze to bylo problemem i dziekuje bardzo za wszystkie uwagi i wskazowki!