Odczyt Unicode z RS-a

Wszelkie sprawy związane z LabVIEW i komunikacją ze sprzętem. Problemy i ciekawe rozwiązania.
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Odczyt Unicode z RS-a

Post autor: mikema72 »

Cześć.
Czy ktoś może wie jak odczytać w LV2011 ramkę UNICODE z urządzenia które komunikuje się zwykłym RS-em? Odczytuje ze spektrometru ramkę która "niby" ma przychodzić jako ASCII. Tak jest napisane w instrukcji. "Cała komunikacja polega na wysyłaniu kodu rozkazu (znaki ASCII) i odbiorze zmierzonych sygnałów natężenia z poszczególnych pikseli (2048) linijki CCD". Realizuję to zwykłymi bloczkami zapisu i odczytu VISA z LV. Wszystko niby działa ale widzę że moje dane odczytane z portu bloczkiem VISA Read NIE przychodzą jako UNICODE tylko jako zwykłe ASCII przez co nie możliwe staje się ich odszyfrowanie. Jednak jak podglądam (innym programem) co się dzieje w porcie to tam wszystko przechodzi jako UNICODE. Da się to jakoś ustawić w VISIE aby na wyjściu był format UNICODE a nie ASCII? A może jakaś późniejsza konwersja. w instrukcji pisze jeszcze coś takiego: Można używać istniejących już komponentów, kontrolek ActivX i procedur ogólnie dostępnych w sieci internet lub używać bezpośrednio funkcji Windows-a WinAPI. Może coś z tym się da zrobić?
CLAD, LabVIEW 6.0 -> LabVIEW 2013
Awatar użytkownika
Pitol
Moderator
Posty: 983
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Odczyt Unicode z RS-a

Post autor: Pitol »

Trochę niespójna ta Twoja wypowiedź. Na początku piszesz:
Odczytuje ze spektrometru ramkę która "niby" ma przychodzić jako ASCII
A za chwilę:
dane odczytane z portu bloczkiem VISA Read NIE przychodzą jako UNICODE tylko jako zwykłe ASCI
Jak dla mnie to wszystko jest zgodne ze specyfikacją :)
Skoro specyfikacja urządzenia mówi, że wysyła znaki ASCII to jakim prawem oczekujesz znaków UNICODE na wyjściu bloczka VISA Read?

Wstaw oczekiwane i rzeczywiste ramki to będziemy coś kombinować.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: Odczyt Unicode z RS-a

Post autor: mikema72 »

Dzięki za uwagę. Może nie za jasno to wytłumaczyłem ;)
Chodzi o to że ramka właśnie jest wysyłana przez urządzenie jako UNICODE (podglądałem ją skanerem portów np free-serial-port-monitor.exe). Załączam 2 pliki : Ze skanera portów - ten jest OK i takie wartości chciałbym dostać, Z LV - to jest to co dostaję z VISY. W drugim pliku widać że coś jest porozdzielane i niby tak ma być ale jak to zamieniam to wychodzą głupoty. Mam dostać coś takiego: BAJT_MSB, BAJT_LSB, BAJT_MSB, BAJT_LSB, ... BAJT_MSB, BAJT_LSB, #254, #253. Jak się ten pierwszy przełoży na zwykłe wartości bloczkiem String To Byte Array to wszystko jest OK, a ten mój to też niby coś podobnego się dostaje ale nie to o co chodzi. Ponawiam prośbę o pomoc bo skończyły mi się pomysły.
Załączniki
Plik ze skanera portów.txt
(7.67 KiB) Pobrany 421 razy
plik z LV.txt
(4 KiB) Pobrany 412 razy
CLAD, LabVIEW 6.0 -> LabVIEW 2013
Awatar użytkownika
Pitol
Moderator
Posty: 983
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Odczyt Unicode z RS-a

Post autor: Pitol »

Czyli rozumiem, że jak wybierzesz opcję "Hex Display" na indykatorze z VISA Read to dane się nie zgadzają z tym co urządzenie wysyła?

Próbowałem "pociąć" oba pliki wg schematu, który podałeś ale się nie udało uzyskać takich zestawów danych (bajt, bajt.... #254, #253).
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: Odczyt Unicode z RS-a

Post autor: mikema72 »

Jak to nie? Wykorzystaj ten programik (kiedyś go skądś ściągnąłem) i odczytaj plik ze skanera. Wychodzi idealnie to co potrzebuję (w tablicy unsigned byte array dane porozdzielane 0 i na końcu dwa oczekiwane znaki). Mój plik z VISY już tak nie wygląda. Problem - jak odczytać przez VISA Read coś co jest wysyłane w UNICODE a nie w zwykłym ASCII. Wie ktoś?
Załączniki
uni-string-read.vi
(20.92 KiB) Pobrany 414 razy
CLAD, LabVIEW 6.0 -> LabVIEW 2013
darekc
Posty: 77
Rejestracja: 29 mar 2007 00:00
Lokalizacja: Gliwice

Re: Odczyt Unicode z RS-a

Post autor: darekc »

Czy możesz podać, co to jest za urządzenie?
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: Odczyt Unicode z RS-a

Post autor: mikema72 »

To niestety jest spektrofotometr zrobiony specjalnie dla nas przez firmę OPTEL. Jednostkowa produkcja. Dali program do tego lecz muszę to uruchomić w LV
CLAD, LabVIEW 6.0 -> LabVIEW 2013
darekc
Posty: 77
Rejestracja: 29 mar 2007 00:00
Lokalizacja: Gliwice

Re: Odczyt Unicode z RS-a

Post autor: darekc »

Czy jest do niego instrukcja w postaci elektronicznej? Jeśli tak, to czy możesz ją udostępnić?
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: Odczyt Unicode z RS-a

Post autor: mikema72 »

Myślę że się nie obrażą ;) . Nie wiele tego jest. Załączam to co dotyczy protokołu. Ale wg mnie jest to standard.... Tylko ten UNICODE...
Załączniki
Instrukcja_Obsługi_CCD2048.pdf
(99.64 KiB) Pobrany 424 razy
CLAD, LabVIEW 6.0 -> LabVIEW 2013
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Odczyt Unicode z RS-a

Post autor: jogurt_owocowy »

Tylko ten UNICODE...
Twój problem nie ma nic wspólnego z Unicode. Unicode to standard kodowania znaków, a Ty nie dostajesz znaków, tylko wartości liczbowe.
Spektrometr wysyła Ci strumień 4098 bajtów, który musisz zamienić na 2048 liczb typu U16. "plik z LV.txt" rzeczywiście nie wygląda na to, co powinieneś otrzymać, ale "Plik ze skanera portów.txt" też nie, bo ma 7852 bajtów.
Pokaż fragment Twojego programu, który odpowiada za odbiór danych.
darekc
Posty: 77
Rejestracja: 29 mar 2007 00:00
Lokalizacja: Gliwice

Re: Odczyt Unicode z RS-a

Post autor: darekc »

Spróbuj jeszcze rozeznać, jaki jest format plików, w których skaner zapisuje odbierane dane.
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: Odczyt Unicode z RS-a

Post autor: mikema72 »

Wszystko jest w najlepszym porządku. Bajtów jest tyle bo dochodzą jeszcze "0" rozdzielające. Zobaczcie plik w programie który dołączyłem. Z moim programem raczej wszystko OK. Normalny odczyt i zapis RS z bloczkami Visa Configure, Visa Read i Visa Write. Na ramkę ASCII która jest podana w instrukcji (wysyłana w bloczku jako String) dostaję Ramkę (również jako String) tyle że błędną. I tutaj widzę problem. Czy da się jakoś konfigurować bloczki VISA aby nie otrzymywać Stringów tylko wartości np. HEX lub jakieś inne. Oczywiście nie mówię tu o podglądzie Stringa jako HEX (z prawego klawisza myszy). Bo to już jest przysłowiowa "musztarda po obiedzie" ;) Z tego co wiem odpowiedź z bloczku VISA odczytana z urządzenia jest zawsze jako STRING. W tym jest problem bo LV sam daje mi tutaj odpowiedź obciętą do ASCII a nie UNICODE. Chyba że źle to rozumie.... :-\
CLAD, LabVIEW 6.0 -> LabVIEW 2013
Awatar użytkownika
Pitol
Moderator
Posty: 983
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Odczyt Unicode z RS-a

Post autor: Pitol »

No właśnie wydaje mi się, że źle to ogarniasz, bo tak jak pisał jogurt_owocowy tu nie jest problem UNICODE/ASCII bo to jest tylko interpretacja znaków.
Jeżeli urządzenie wysyła "00FE" (czyli przykładowy znak w unicode) to VISA tak czy siak powinna odebrać "00FE" (jeśli popatrzylibyśmy na Hex Display). Późniejsza interpretacja UNICODE/ASCII odbywa się w samej kontrolce/indykatorze i nie ma wpływu na odebrane dane.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
mikema72
Posty: 72
Rejestracja: 09 sty 2006 00:00
Wersja środowiska: LabVIEW 2011
Lokalizacja: Gliwice

Re: Odczyt Unicode z RS-a

Post autor: mikema72 »

Dzięki wszystkim ale sprawa rozwiązała się sama. Błąd w pracy złącza USB przez które było podłączone urządzenie.... Temat można zamknąć.
CLAD, LabVIEW 6.0 -> LabVIEW 2013
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Odczyt Unicode z RS-a

Post autor: jogurt_owocowy »

Wszystko jest w najlepszym porządku. Bajtów jest tyle bo dochodzą jeszcze "0" rozdzielające.
Tylko skąd te zera się biorą? W instrukcji jest napisane, że "spektrometr odsyła (...) 4096 bajtów + 2 bajty równe #254#253" - ani słowa o zerach rozdzielających.
Z moim programem raczej wszystko OK. Normalny odczyt i zapis RS z bloczkami Visa Configure...
Może OK, może nie - ciężko to stwierdzić, jak go nie widać.
Domyślne opcje Visa Configure oznaczają m.in. zakończenie odczytu po napotkaniu w strumieniu bajtów wartości 0Ah (Enable Termination Char = TRUE, termination char = 0xA). "plik z LV.txt" kończy się właśnie takim znakiem. Spróbuj zmienić Enable Termination Char na FALSE, potem odczytaj 4098 bajtów i zobacz, czy transmisja zakończy się znacznikiem końca ramki (254, 253). Nie oczekuj żadnych zer rozdzielających - nie będzie ich i będzie to poprawne działanie.
ODPOWIEDZ