PDA

Просмотр полной версии : Взаимодействие со сканером по USB



CORSAR1500
02.06.2024, 20:26
вначале разместил свой вопрос здесь
https://owen.ru/forum/showthread.php?t=37901&highlight=%F1%EA%E0%ED%E5%F0
а потом заметил, что это ветка по СПК, аналогичных тем по ПЛК210 я не нашел, поэтому создал новую тему здесь

Добрый день, если требуется считывать штрих-код, то там только цифры. В этом случае вопросов нет, все работает отлично. В моем случае я считываю код DataMatrix (система честный знак). Там все интереснее, в первом столбце код при подключении сканера к компьютеру, во втором - то, что получает ПЛК210 при подключении по USB, пример:

0104601025115609215NFZ8»&gEjv%493e9OP -> 0104601025115609215LEFTSHIFTNFZ8LEFTSHIFTAPOSTROPH E7GLEFTSHIFTEJVLEFTSHIFT54F893E9LEFTSHIFTOP
0104601025115609215NNC&?<d1iR5u93mvuY -> 0104601025115609215LEFTSHIFTNNC7SLASHCOMMAD1ILEFTS HIFTR5UF893MVULEFTSHIFTY
0104601025115609215x2=bj-lzUmaV93MOy0 -> 0104601025115609215X2=BJ-LZLEFTSHIFTUMALEFTSHIFTVF893LEFTSHIFTMOY0
0104601025115609215FRg8zHntErZ!93QrDr -> 0104601025115609215LEFTSHIFTFRG8ZLEFTSHIFTHNTLEFTS HIFTERLEFTSHIFTZ1F893LEFTSHIFTQRLEFTSHIFTDR
0104607005815507215ZtX%tLGKl%oe93tlZJ -> 0104607005815507215LEFTSHIFTZTLEFTSHIFTX5TLEFTSHIF TLGKLLEFTSHIFT5OEF893TLLEFTSHIFTZJ
0104601642018543215b!rbxXWFXebv93JkJr -> 0104601642018543215BLEFTSHIFT1RBXLEFTSHIFTXWFXEBVF 893LEFTSHIFTJKLEFTSHIFTJR
01046070058154842159ke2ShccM)c6932T1T -> 01046070058154842159KE2LEFTSHIFTSHCCLEFTSHIFTM0C6F 8932LEFTSHIFTT1LEFTSHIFTT
0104607005815484215F8RQgcvCnMye93Zt7e -> 0104607005815484215LEFTSHIFTF8LEFTSHIFTRQGCVLEFTSH IFTCNLEFTSHIFTMYEF893LEFTSHIFTZT7E
0104607005815484215LnTRU8)X9Iux93wwLD -> 0104607005815484215LEFTSHIFTLNLEFTSHIFTTRU8LEFTSHI FT0X9LEFTSHIFTIUXF893WWLEFTSHIFTLD
0104607005815484215T7Bn»VuTVmsr93NR3k -> 0104607005815484215LEFTSHIFTT7LEFTSHIFTBNLEFTSHIFT APOSTROPHEVULEFTSHIFTTVMSRF893LEFTSHIFTNR3K
0104607005815484215kaay.iigKLZd93SBVG -> 0104607005815484215KAAYDOTIIGLEFTSHIFTKLZDF893LEFT SHIFTSBVG

на первый взгляд, все достаточно логично: LEFTSHIFTS - это большая S. Но, например SBVG = LEFTSHIFTSBVG. Вроде бы логично: нажали shift и кнопки - получили символы в верхнем регистре. Но теперь здесь: TVmsr93 = LEFTSHIFTTVMSRF893. Как узнать, что нажали shift, нажали кнопку Т, нажали V, отпустили shift, нажали m, нажали r. Как понять на сколько следом идущих символов распространяется LEFTSHIFT?

Насколько я понимаю, при подключении к компьютеру ответ от сканера обрабатывается операционной системой и производится преобразование спецсимволов и служебных слов в ответе сканера к требуемому виду. В случае с контроллером ответ от сканера получается, условно говоря, в "чистом виде" без обработки драйверами операционной системы.

Сталкивался ли кто с такой проблемой и есть ли информация об алгоритмах "раскодировки" ответов сканера?

melky
03.06.2024, 09:13
вообще странно, что все идет заглавными буквами.
Для проверки после LEFTSHIFT показывайте коды в HEX символах в тестовой программе, может это поможет разобраться. Так как по коду ascii таблицы заглавные и прописные отличаются.

CORSAR1500
03.06.2024, 16:59
вообще странно, что все идет заглавными буквами.
Для проверки после LEFTSHIFT показывайте коды в HEX символах в тестовой программе, может это поможет разобраться. Так как по коду ascii таблицы заглавные и прописные отличаются.

использую библиотеку ОВЕН UsbHid, на выходе FB HID_EVENT получаю сразу строку ответа сканера
представление этой строки в HEX по идее никак не изменит символов из которых она состоит
пока в ступоре: копаю по интернету информацию, но ничего подобного найти не удается...

melky
03.06.2024, 17:05
Ну вопрос на каком основании библиотека меняет все на заглавные?
Может она только отображает все большими, но коды букв отличаются? или есть какая-то настройка самой библиотеки, чтобы она не меняла буковки?

CORSAR1500
03.06.2024, 17:35
Попробовал прикрепить скрин, ответ находится в DAT_SC[1].Res
Мне кажется, что FB HID_EVENT (у меня называется SCAN) просто отдает мне весь ответ от сканера без изменений.
Точно такую же строку получает и компьютер от сканера. Отличие в том, что в Windows есть драйвера, которые по системным словам вроде LEFTSHIFT/DOT/ENTR и прочее понимают как нужно преобразовать ответ сканера. В блоке HID_EVENT этой логики нет. Я пытаюсь понять/найти алгоритм этой логики. Пока "мне отвечают, что у них сложилось мнение, что меньше более у нас и больше менее".
76219

МихаилГл
03.06.2024, 17:40
Похоже код из последовательности блоков. Перед 93 всегда F8. И этот LEFTSHIFT для каждого блока свою роль играет. Вернее в блоке. И надо понять как эти блоки организованы.

PS Складывается впечатление, что в ответе урезаются служебные символы (перенос строки и пр.), и похоже надо попробовать считать полный ответ из этого порта. Помню работал с китайским дальномером, тоже подобное было, пришлось как то выкручиваться... Год прошёл, уже всё забыл что там было, но сильно напоминает именно это...

CORSAR1500
03.06.2024, 18:33
Считать полный ответ - это уже создание своей версии блока HID_EVENT (библиотека ОВЕН UsbHid). Для меня это более серьезная задача. Надеюсь, что удастся найти вариант "дешифровки" ответов сканера менее изощрённым способом.

МихаилГл
03.06.2024, 19:07
Из описания библиотеки:
ПРИМЕЧАНИЕ
При работе с символьными устройствами с помощью библиотеки поддерживается только
англоязычная раскладка клавиатуры. Символы принимаются в верхнем регистре. Обработка
одновременного нажатия нескольких клавиш не поддерживается.

melky
04.06.2024, 08:48
А библиотека хранит сам байтовый массив, кроме последующего преобразования в строку?

CORSAR1500
04.06.2024, 10:22
Очень интересное и настораживающее примечание из библиотеки про верхний регистр... спасибо за заметку.
"А библиотека хранит сам байтовый массив, кроме последующего преобразования в строку?" - если бы ОВЕН дал доступ к массиву ответа устройства, то, думаю, появились бы варианты.