Odczyt Unicode z RS-a
-
- Posty: 72
- Rejestracja: 09 sty 2006 00:00
- Wersja środowiska: LabVIEW 2011
- Lokalizacja: Gliwice
Odczyt Unicode z RS-a
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ć?
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
- Pitol
- Moderator
- Posty: 983
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Odczyt Unicode z RS-a
Trochę niespójna ta Twoja wypowiedź. Na początku piszesz:
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ć.
A za chwilę:Odczytuje ze spektrometru ramkę która "niby" ma przychodzić jako ASCII
Jak dla mnie to wszystko jest zgodne ze specyfikacjądane odczytane z portu bloczkiem VISA Read NIE przychodzą jako UNICODE tylko jako zwykłe ASCI
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ć.
-
- Posty: 72
- Rejestracja: 09 sty 2006 00:00
- Wersja środowiska: LabVIEW 2011
- Lokalizacja: Gliwice
Re: Odczyt Unicode z RS-a
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.
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
- Pitol
- Moderator
- Posty: 983
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Odczyt Unicode z RS-a
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).
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).
-
- Posty: 72
- Rejestracja: 09 sty 2006 00:00
- Wersja środowiska: LabVIEW 2011
- Lokalizacja: Gliwice
Re: Odczyt Unicode z RS-a
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
Re: Odczyt Unicode z RS-a
Czy możesz podać, co to jest za urządzenie?
-
- Posty: 72
- Rejestracja: 09 sty 2006 00:00
- Wersja środowiska: LabVIEW 2011
- Lokalizacja: Gliwice
Re: Odczyt Unicode z RS-a
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
Re: Odczyt Unicode z RS-a
Czy jest do niego instrukcja w postaci elektronicznej? Jeśli tak, to czy możesz ją udostępnić?
-
- Posty: 72
- Rejestracja: 09 sty 2006 00:00
- Wersja środowiska: LabVIEW 2011
- Lokalizacja: Gliwice
Re: Odczyt Unicode z RS-a
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
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Odczyt Unicode z RS-a
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.Tylko ten UNICODE...
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.
Re: Odczyt Unicode z RS-a
Spróbuj jeszcze rozeznać, jaki jest format plików, w których skaner zapisuje odbierane dane.
-
- Posty: 72
- Rejestracja: 09 sty 2006 00:00
- Wersja środowiska: LabVIEW 2011
- Lokalizacja: Gliwice
Re: Odczyt Unicode z RS-a
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
- Pitol
- Moderator
- Posty: 983
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Odczyt Unicode z RS-a
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.
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.
-
- Posty: 72
- Rejestracja: 09 sty 2006 00:00
- Wersja środowiska: LabVIEW 2011
- Lokalizacja: Gliwice
Re: Odczyt Unicode z RS-a
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
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Odczyt Unicode z RS-a
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.Wszystko jest w najlepszym porządku. Bajtów jest tyle bo dochodzą jeszcze "0" rozdzielające.
Może OK, może nie - ciężko to stwierdzić, jak go nie widać.Z moim programem raczej wszystko OK. Normalny odczyt i zapis RS z bloczkami Visa Configure...
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.