Как правильно настроить считыватель карт

Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.

Страницы: 1
RSS
Как правильно настроить считыватель карт
 
Всем доброго времени суток.
В последнее время участились случаи обращения на линию консультаций по вопросам настройки сканеров и считывателей магнитных карт. Как правило затруднения вызывают модели работающие через буфер клавиатуры. То есть считанное значение (данные) они посылают в виде клавиатурной посылки, только с намного более высокой скоростью по сравнению с пользователем. Как правило старые модели подключались "в разрыв клавиатуры", то есть в клавиатурный порт PS/2 (или устаревший DIN) в системной блоке подключалось устройство, а в него уже следом подключалась штатная клавиатура (если рабочее место ей комплектуется). Так работали многие модели как сканера штрих-кодов (Scanner), так и считыватели карт с магнитной полосой (MSR). Современные модели уже имеют USB-интерфейс подключения к системному блоку (так что включаются они "параллельно" со штатной клавиатурой), но работают точно так же как и раньше, то есть посылают считанные данные в буфер клавиатуры.
Все такие устройства мы будем условно называть "клавиатурные".

Часть I
Так в чем же чаще всего заключается проблема с такими устройствами?
В том что они имеют настройки по умолчанию (то есть заводские), которые нас не устраивают по нескольким причинам.

Вот результат теста работы считывателя в монобоке одного из ПОСов:


И что здесь плохого / не правильного?
1) То что этот считыватеь посылает ненужные символы ";" "?" и возврат каретки (который не отображается, но переводит строку). Если Вы будете считывать карточки сотрудников для помещения их в базу данных то лишние символы ";" и "?" (которые этот считыватель посылает всегда) Вам в вашей базе совершенно не нужны. Кроме того если раскладка клавиатуры измениться на русскую то эти символы тоже изменяться на "ж" и "," и поиск в базе уже не найдет эту карточку!

"Клавиатурные" устройства как я уже писал ранее посылают данные так же как обычная клавиатура.
Так что чтобы проверить их работу не нужно запускать никакие программы и настраивать драйверы.
Достаточно запустить обычный стандартный блокнот системы Windows (Пуск -> Программы -> Стандартные -> Блокнот) и пока фокус ввода находится внутри его окна (курсор мигает) считайте/просканируйте два раза подряд один и тот же код / карточку.
Вот что примерно у вас получится в результате:

Обратите внимание, после переключения на русскую раскладку было еще два считывания той же карты.
И данные уже стали другие! Это неправильное поведение.

2) Считыватель завершает посылку данных возвратом каретки (символ перевода строки). Это аналогично нажатию клавиши "Enter" на стандартной клавиатуре. Зачем? Очевидно производители заботятся о совместимости с широким спектром старых программ не работающих со сканерами самостоятельно, а ждущими когда им введут/пришлют данные в определенном поле ввода. Ввод пользователи как правило завершают как раз нажатием на Enter, вот сканер/считыватель и "позаботился" о том чтобы его "нажать" автоматически.
Программные продукты нашей фирмы работают с оборудованием самостоятельно. Они умеют получать информацию от сканеров и считывателей "по другим каналам" :D  Для их работы вовсе не требуется заботиться о том чтобы фокус ввода был предварительно установлен в определенном поле формы.
И посылка дополнительного (неожидаемого программой) символа возврата каретки в буфер клавиатуры, может восприниматься программой как излишнее нажатие на клавишу "Enter". В зависимости от места (инетрфейса, формы, поля ввода) где это произошло это может либо остаться незамеченным, либо быть воспринято как лишнее нажатие на экранную кнопку по-умолчанию, либо клавишу "Enter" тогда как никаких данных пользователь еще не вводил.

Поэтому все "клавиатурные" устройства необходимо настраивать/программировать чтобы они посылали только нужную/необходимую информацию. Это можно сделать при помощи утилит от производителя устройств. Требуйте их наличие в компекте поставки при покупке! :evil:

Рассмотрим правильную настройку на модели считывателя карт MSR213U-33AUKNR (что было на нашем складе торгового оборудования на момент написания данной инструкции). Он имеет USB-интерфейс подключения и в комплекте поставки есть диск с программами от производителя. Утилита настройки имеет имя "MSR213U Setting AP". После запуска нужно прочитать настройки из устройства при помощи кнопки "Read from EEPROM", потом изменяем следующие настройки
- Set Requred Tracks в значение TK2 — задается чтобы считыватель обязательно контролировал наличие 2-ой дорожки на любой карточке. Как правило в большинстве случаев значащая информация записывается именно на 2-ую дорожку, но в некоторых специальных случаях применения (например, карточки гостининых систем) на может располагаться и на других дорожках.
- Carriage Return в значение No CR — так отключается посылка возврата каретки (т.е. "Enter")
В группе настроек Track Output Order нужно сделать следующее:
- First в значение No SEND  — данные первой дорожки не посылать
- Second в значение Track 2 — посылать данные со второй дорожки карта
- Third в значение No SEND  — данные третьей дорожки не посылать
И еще важная настройка:
- Transmit SS/ES этот флажок нужно выключить — это как раз про символы ";" и "?" (служебные символы обозначающие начало и конец дорожки), которые мы не хотим получать в данных

Вот что должно было получиться в итоге:

Для сохранения результатов изменения настроек (запрограммировать устройство) нужно воспользоваться кнопкой "WRITE TO EEPROM"

Открываем опять блокнот, считываем карту два раза подряд, проверяем что получилось:

Условия выполнены, никаких лишних символов, перевода строк между двумя считываниями тоже нет. (А самый последний символ на скриншоте это на самом деле "мигающий курсор". И его положение в этом месте лишний раз свидетельствует что ничего лишнего устройство нам теперь не посылает)
Это все?  Нет  :oops:


Часть II
1. Теперь поговорим о "других путях" получения программным продуктом данных из устройства.
Это делается при помощи драйверов оборудования, которыми комплектуются все наши программные продукты. Как работает драйвер "клавиатурного" устройства? Он постоянно "прослушивает" все что набирается на клавиатуре и отслеживает не его ли это данные, которые он должен "выхватить" и передать программе которая его запустила. А как он узнает что вот пошли "его данные" в общем клавиатурном потоке? Смотрим настройки драйвера. Для всех клавиатурных моделей там задаются  префикс и постфикс кода (см. самый первый скриншот). Именно по этим символам драйвер и отслеживает/определяет "свои данные". Следует учесть что драйвер отбросит эти символы и отправит в приложение (программу его использующую) только то что находится между префиксом и постфиксом. При этом вся "клавиатурная посылка" которую сформировало устройство будет полностью "вырезена" из буфера клавиатуры (драйвер передаст эти данные в программу другим способом — через программный интерфейс взаимодействия между драйвером и запустившей программой).

Таким образом проверка работает ли клавиатурный (именно клавиатурный!) сканер или считыватель в наших программах заключается в том чтобы убедиться что в при включенном устройстве в поле ввода (ну например в поле "Наименование" в любом справочнике) "НЕ ПОПАДАЮТ" никакие считанные данные т.к. согласно тому что написано выше при правильной работе драйвера они должны быть полностью "вырезаны" из клавиатурного потока. А если устройство выключить (в 1С продуктах их можно включать и выключать отдельно через доп. меню справочника "Оборудование"), то драйвер перестает "выкусывать" из буфера клавиатуры и считанные данные начинают попадать в поле с фокусом ввода. Если так и есть, то все настроено правильно. Прорамма обработает полученные данные в только в тех своих интерфейсах (формах документов, АРМах, списках), где это специально предусмотрено.

2. Так что еще нужно настроить чтобы все наконец заработало правильно?
Нужно сделать чтобы "клавиатурное" устройство при отправке нам данных "обрамляло" бы их символами префикса и постфикса, по которым их узнает драйвер, "выкусит" из буфера клавиатуры и  отправит в программу "другим путем".
При этом символы префикса и постфикса рекомендуется выбирать такими чтобы они были одинаковыми при любой раскладке клавиатуры и не зависели от других нажатых клавиш (например от Shift).
Обычно мы рекомендуем использовать клавишу  "+" на дополнительной цифровой клавиатуре, и наши драйвера имеют настройки по умолчанию три символа "+" как в префиксе так и в суффиксе

Опять запускаем утилиту "MSR213U Setting AP" и настраиваем устройство дальше, на закладке "Set Prefix", включаем три символа (KeyPad +)для префиксации данных 2-ой дорожки:


А на закладке "Set Suffix" включаем те же самые три символа (KeyPad +) которые устройство пошлет нам после данных второй дорожки:

Не забываем воспользоваться кнопкой "WRITE TO EEPROM" чтобы запрограммировать устройство.
И опять проверяем что у нас получилось при помощи програмы "Блокнот"

Правильная работа "клавиатурного" устройства в "Блокноте" должна выглядеть вот так:

Обратите внимание считывание выполнялось два раза подряд — нет никаких переводов строк!  
Потом раслкадка клавиатуры менялась на русскую, в блокнот добавлялась фраза про это,
для удобства сравнения также вручную делался перевод строки и опять повторялось считываение той же карты два раза подряд — нет никаких отличий!

Теперь осталось проверить еще раз настройки префикса и суффикса в драйвере программы
(см. самый верхний скриншот) чтобы там были установлены соответствующие +++ и +++ и вот теперь уже точно все. Все настройки завершены. Теперь ваш считываатель/сканер должны работать правильно всегда.
Успехов!
Изменено: Андрей Рыданов - 07.09.2012 15:56:25
 
Также следует добавить что при использовании клавиатурных моделей существуют следюущие ограничения:

1) В системе может использоваться только одно такое устройство. Если Вы подключите/настроете их больше одного, то правильно работать сможет только одно из них (скорее всего то, которое включилось последним). Поэтому следует сразу исключить варианты с применением клавиатурный считыватель + клавиатурный сканер, либо два клавиатурных считывателя одновременно на одном рабочем месте.

2) Также нельзя использовать клавиатурный вариант устройства при наличии работающей службы управления оборудованием. Служба необходима для предоставления доступа к оборудованию этого рабочего места (где она запускается) с стороны других (удаленных) рабочих станций. Но при этом все программные модули этой рабочей станции начинают использовать ВСЕ свое оборудование наравне со всеми другими станциями. То есть так же как и они они будут использовать его по сети, несмотря на то что оборудование фактически является локальным для этой станции.
В таком "сетевом режиме" клавиатурные устройства не смогут работать вообще, либо будут работать неправильно. (Принцип работы системы Windows с клавиатурой заключается в наличии активного окна текущего приложения, а у сервисной службы его по определению нет.)


P.S. Все эти ограничения не относятся к работе устройств с другими вариантами подключения.
Например, любой сканер с подключением последовательному порту (COM-порт), либо безконтактный считыватель карточек (к примеру Parsec v3) будут работать в вышеуказанных условиях без каких-либо проблем.
Изменено: Ярослав Дубровский - 29.05.2012 12:01:43
 
Спасибо, очень полезная инфа!
 
В последних версиях драйверов для клавиатурных считывателей, которые невозможно настроить описанным в первом посте данной темы способом (не программируется, невозможно найти/достать утилиты производителей) нашими программистами был добавлен экспериментальный режим определения клавиатурной посылки, основанный на "высокой скорости нажатия клавиш" когда это делает устройство (считыватель или сканер). Для включения этого режиме следует установить флажок "Использовать межсимвольный интервал" на форме настроек драйвера и подобрать как можно меньшее значение таймаута при котором драйвер будет успешно выделять "посылку от устройства". См. скриншот

Однако мы предупреждаем что это скорее аварийный, не рекомендуемый нами способ настройки оборудования, когда просто никаких других вариантов больше уже не осталось.
 Во-первых, из-за меньшей надежности данного способа т.к. в случае когда CPU системы имеет высокую загрузку из-за текущих выполняемых процессов/программ, в этот момент интервал между символами клавиатурной поыслки может быть непредсказуемо увеличен (точнее неправильно определен/подсчитан). В результате не все символы из посылки будут правильно выделены, либо наоборот попадут "лишние", которые параллельно вводил пользователь на клавиатуре. Таким образом программа получит неправильные данные, не соответствующией тем что были на карточке или на этикетке со штрих-кодом.
 Во-вторых, из-за того что устройство все равно будет продолжать посылать "ненужные символы"  (начало/конец дорожки и перевод строки/"Enter"). Из-за этого их придется указывать в качестве префиксов и потсфиксов для того чтобы драйвер их отбросил и не посылал в программу. Но если эти символы зависимы от раскладки клавиатуры или регистра (кнопки Shift), то опять же возможны неправильные срабатывания. Код символа перевода строки (Enter) также часто используется пользователями при работе на клавиатуре, поэтому его указние в суффиксе также может приводить к неправильным срабатываниям "клавиатурного" устройства и задержкам в работе пользователя.

Поэтому рекомендуется предпринять все возможное чтобы настроить устройство согласно рекомендациям, описанным в первом посте данной темы.
Изменено: Ярослав Дубровский - 29.05.2012 12:55:31
 
Настройка клавиатурных сканеров

Появились модели сканеров с физическим интерфейсом подключения USB, но в системе определющиеся как HID-устройство. То есть они работает также как и USB-клавиатуры. И тоже попадают под наше определение "клавиатурных" (см. первый пост)

Такие устройства тоже имеют свои заводские настройки по умолчанию. Как правило в качестве суффикса используется ENTER, а префикс обычно отсутствует.

Но как объясялось в этой теме выше, для правильной работы клавиатурного драйвера необходимо иметь в клавиатурном потоке маркеры начала и конца посылки от оборудования. То есть префикс совершенно необходим для работы драйвера! Поэтому сканер тоже требуется настроить (задать ему префикс и постфикс). Обычно это делается управляющими штрих-кодами (они приводятся в документации к оборудованию). Их распечатывают на лазерном принтере и считывая их последовательно сканер "программируется" на нужные режимы, параметры и значения префикса и постфикса. Так что по-умолчанию (без какой-либо настройки) клавиатурный сканер не заработает.

P.S. Со сканерами/считывателями подлкючаемыми по последовательному порту (он же COM-порт, он же интерфейс RS-232) таких проблем не бывает и указав в настройках правильный порт и скорость обмена как правило сразу же получаем работающее в программном продукте оборудование, но это все уже не "клавиатурные" устройства
Страницы: 1
Читают тему
Поддержка отраслевых решений «1С-Рарус»
Услуги 1С