Описание подключения считывателя к Shelter 2
Модель считывателя : Z-2 USB

Подключен по USB
Тип карты Mifare
Необходимо скачать и установить программу PuTTY (предварительно необходимо установить драйвера для считывателя с оф.сайта производителя)
После запуска программы перейти во вкладку Serial и указать COM-порт и скорость :

После нажатия Open откроется окно, необходимо приложить карту к считывателю, должна появиться такая строка (пример) :

Трек, который мы будем декодировать : B2C124CB
Для декодирования необходимо скачать и разархивировать утилиту TcpCardReader из базовой поставки ПО Абонемент (версия на момент написания манула 1.26.0.2). Далее необходимо настроить TcpCardReader.ini, в моем случае настройки выглядят так :
AutoStart = 1
После чего добавляем секцию :
После чего можно прикладывать карту, в окне с программой мы должны увидеть уже обработанный трек-номер :

2999002315 - искомый трек.
Следующим шагом будет настройка считывания карты в Shelter 2. Необходимо запустить Shelter и перейти в настройки :

Ввести пароль для входа в настройки (ucs-shelter) и перейти в системные настройки. Необходимая секция для настроек :

| Тип считывателя | 4 |
;TCP/IP |
| Порт считывателя | 7760 |
;Значение из TcpCardReader.ini |
| StartChar | ; |
|
| StopChar | ? |
|
| IP | 127.0.0.1 |
;IP адрес ПК, где запущен TcpCardReader |
Далее необходимо перейти в настройки декодирования карты :

В появившемся окне нажать кнопку "Добавить" и настроить по аналогии со скриншотом :

После чего необходимо нажать "Сохранить", в каталоге с Shelter появится файл cards.ini
Если в карточке поселения считать эту карту, то в логе увидим следующую запись :
В логе видно, что трек обработался корректно.
Тип карты Mifare
После считывания карты в PuTTY :

Настройки для TcpCardReader.ini :
[application]
AutoStart = 1
AutoHide = 0
[TCP]
PORT=7760
IP=0.0.0.0
[READER1]
COMPORT=7
COMPORTPARAMS=baud=9600 data=8 parity=N stop=1
;Параметр Prefix задаёт строку, которая передаётся клиентам перед первым прочтенным символом
Prefix=;
;Параметр Postfix задаёт строку, которая передаётся клиентам после последнего прочтенного символа
Postfix=?
;Использовать decodecards.dll
useDecodeCards=1
StartTermChars=i
FinishTermChars=?#13;#10;#0;
;Файл логирования треков
TrackLogFile=
ConvertTrackLog=0
IncludeTypeStartTermChar=0
IncludeStartTermChar=0
NeedCheckAndReopenCom=1В decodecards.ini В секции [mask] добавить следующий параметр : card_em = ne* и добавляем следующую секцию :
Запускаем TcpCardReader.exe и прикладывем карту. Результат считывания карты :

Далее настраиваем подключения к Shelter, как было описано ранее. После считывания карты в логе Shelter увидим следующую запись :
Настройки DECODECARDS.INI
БЕЗ ИСПОЛЬЗОВАНИЯ USEMASK (USEMASK=0) - ПО УМОЛЧАНИЮ.
СТАРЫЙ, НЕ РЕКОМЕНДУЕТСЯ К ИСПОЛЬЗОВАНИЮ.
[cards]
;В этой секции прописываются префиксы для карт. Типы карты определяется прификсом.
Существуют 4 типа карт: CardPrefix, RegularCardPrefix, StaffCardPrefix, PDSCardPrefix. НЕ ДОЛЖНЫ СОВПАДАТЬ МЕЖДУ СОБОЙ!!!
CardPrefix - обменная гостевая, действующая на территории комплекса. может быть пустым.
Пример:
CardPrefix =
; CardPrefix =770a87121234a
; CardPrefix =770A199999999A
; CardPrefix =750
RegularCardPrefix - постоянная карта клиента. RegularCardPrefix не может быть пустым.
Пример:
RegularCardPrefix=10
;RegularCardPrefix=йцукен - Если не используется
StaffCardPrefix - постоянная карта сотрудника. StaffCardPrefix не может быть пустым. Если не используется, то следует написать, например
Пример:
; StaffCardPrefix = 770=00260001=
StaffCardPrefix = 778=87121234=
StaffCardPrefix = 778=201050001
; StaffCardPrefix =фывапр - Если не используется
PDSCardPrefix -карта ПДС. PDSCardPrefix не может быть пустым. Если не используется, то следует написать , например
PDSCardPrefix = 811876
; PDSCardPrefix =ячсмит - Если не используется
FirstSignEquallyAsLetterA = 0 - Интерпретировать первый встретившийся символ "=" в треке как символ "A". Используется FirstSignEquallyAsLetterA = 1 для совместного использования GKHOST и инфотерминалов TimeKeeper.
[cards.Card]
CardDecodeType - алгоритм извлечения истинного номера карты
ANGSTREMCARD- для карт E-Marine со считывателем СРЧ-125
ANGSTREMBRASLET- для карт E-Marine со считывателем СРЧ-2M
LAST8 - последние 8 цифр
LAST9 - последние 9 цифр
MASK - накладывается маска. Исползуется параметры mask и bitmask
Например,
mask=**hh* - взять 3-й и 4-й символ как цифры в 16-м формате
mask=**dd* - взять 3-й и 4-й символ как цифры в 10-м формате
bitmask=$00FFFFFF - и применить к ним битовую маску
MaskType= - (пусто-по умолчанию)
MaskType=ARRAYOFBYTES - то анализируется параметр mask. Значения должны быть типа "с".
Например, mask = *cccc*
Это значит, что при декодировании из трека возьмём 2-5 символы, представим каждый символ в 16-ричном формате. Объединим 16-ричные представления символов и применим к ним маску bitmask.
Пример. Со считывателя пришёл трек "Пупкин". Если mask =*cccc*, то для обработки берём часть "упки".
Представляем в 16-ричном виде
у - F3
п - EF
к - EA
и - E8
Объединяем. Получаем F3EFEAE8 . Накладываем маску bitmask=$7FFFFFFF -> Получили 73EFEAE8 - в 16-ричном формате или 1945103080 - в 10-тичном формате
code=2 - идентификатор карты в базе. ПАРАМЕТРЫ CODE ДЛЯ ВСЕХ ТИПОВ КАРТ ДОЛЖНЫ БЫТЬ РАЗЛИЧНЫМИ.
[cards.RegularCard]
Аналогично [cards.Card]
[cards.StaffCard]
Аналогично [cards.Card]
[cards.PDSCard]
Аналогично [cards.Card]
ИСПОЛЬЗОВАНИЕ USEMASK=1
Добавлена секция [mask]. В ней настраиваются маски карт в формате - ИМЯ МАСКИ=МАСКА
Добввлена секция [general] с параметром
usemask=0 – не использовать секцию MASK (по умолчанию)
usemask=1 – использовать секцию MASK
Если usemask=1, то
1. Секция [cards] игнорируется;
2. При декодировании проверяется, какой маске соответствует считанный трек.
После этого происходит обращение к секции [cards.ИМЯ МАСКИ]. Извлекается параметр CardDecodeType и ExcludedPrefix - отделяемый от трека префикс, применяется алгоритм декодирования и возвращается номер карты.
Пример 1.
Трек равен 778=12345678=1234567 . Он удовлетворяет маске card2.
Отрезаем от трека ExcludedPrefix. Получили 1234567.
К этому числу не применяем никакой алгоритм декодирования, так как CardDecodeType не заполнен. В результате получаем 1234567 - истинный номер карты.
Пример 2.
Трек равен 05987654321 . Он удовлетворяет маске card. Отрезаем от трека ExcludedPrefix.
Получили 987654321. К этому числу применяем алгоритм декодирования MASK. Согласно алгоритму декодирования берем 5 первых символов в 10-чном формате. В результате получаем 98765 - истинный номер карты.
[general]
usemask=1
[mask]
card = 05*
card2= 778=12345678=*
[cards.Card2]
ExcludedPrefix=778=12345678=
code=2
[cards.Card]
ExcludedPrefix=05
code=2
CardDecodeType = MASK
mask=ddddd
bitmask=$FFFFFFFF
Далее будут рассмотренны примеру декодирования разных карт на разных прошивках и разных считывателей.
IRON LOGIC Z-2
Все прошивки взяты с официального сайта производителя IronLogic https://ironlogic.ru
ПРИМЕР 1. Заводская прошивка для Z-2 USB. Версия: 230. Карта ISBC MIFARE Classic 1K
В putty возвращается трэк:
Mifare[23D9C4C5] 196,55587 1K (0004,08)
No card
Если необходимо получить искомое значение 19655587, то в TcpCardReader.ini указать:
Prefix=;
Postfix=?
useDecodeCards=1
StartTermChars=]
FinishTermChars=
А в decodecards.ini:
[general]
usemask=1
TrackResultLog=
[mask]
card_mif=*
[cards.card_mif]
excludedprefix=
CardDecodeType=MASK
mask=dddddddd
code=2
bitmask=$FFFFFFFF
В результате в TcpCardReader будет следующий результат:

Если необходимо получить искомое значение 601474245, что соответствует 23D9C4C5, то в TcpCardReader.ini указать:
…
Prefix=;
Postfix=?
useDecodeCards=1
StartTermChars=[
FinishTermChars=]
…
А в decodecards.ini:
[general]
usemask=1
TrackResultLog=
[mask]
card_mif=*
[cards.card_mif]
excludedprefix=
CardDecodeType=MASK
mask=hhhhhhhh
code=2
bitmask=$FFFFFFFF
В результате в TcpCardReader будет следующий результат:

ПРИМЕР 2. Прошивка для Z-2 USB. Читает только карты 13,56 МГц: Mifare. Прошивка актуальна для карт двойного стандарта (в один и тот же пластик вплавляют EM-Marine и Mifare), позволяет читать мультиформатному считывателю только один формат карт. Карта ISBC MIFARE Classic 1K.
В putty возвращается трэк:
Mifare[23D9C4C5] 217,50373 1K (0004,08)
No card
Настраивается по аналогии, как и в пример 1.
ПРИМЕР 3. Прошивка для Z-2 USB. Вывод в COM-порт код карты в формате, аналогичном Z-2 USB MF (для карт mifare). Версия: 240. Карта ISBC MIFARE Classic 1K.
В putty возвращается трэк:
Mifare[23D9C4C5] 1K (0004,08) 196,55587
No card
Если необходимо получить искомое значение 19655587, то в TcpCardReader.ini указать:
Prefix=;
Postfix=?
useDecodeCards=1
StartTermChars=]
FinishTermChars=
А в decodecards.ini:
[general]
usemask=1
TrackResultLog=
[mask]
card_mif=*
[cards.card_mif]
excludedprefix=
CardDecodeType=LAST8
code=2
В результате в TcpCardReader будет следующий результат:

Если необходимо получить искомое значение 601474245, что соответствует 23D9C4C5, то в TcpCardReader.ini указать:
…
Prefix=;
Postfix=?
useDecodeCards=1
StartTermChars=[
FinishTermChars=]
…
А в decodecards.ini:
[general]
usemask=1
TrackResultLog=
[mask]
card_mif=*
[cards.card_mif]
excludedprefix=
CardDecodeType=MASK
mask=hhhhhhhh
code=2
bitmask=$FFFFFFFF
В результате в TcpCardReader будет следующий результат:

ПРИМЕР 4. Прошивка для Z-2 USB. Вывод номера карты в формате W24(8цифр), без запятой между ними, без подавления первых нулей, без NoCard, перевод строки есть. (Десятиричный формат без nocard). Версия: 10.51.54.8. Карта ISBC MIFARE Classic 1K.
В putty возвращается трэк:
21750373
В TcpCardReader.ini не используем декодирование:
…
Prefix=;
Postfix=?
useDecodeCards=0
StartTermChars=
FinishTermChars=
…
В результате в TcpCardReader и shelter будет следующий результат:

ПРИМЕР 5. Для карт ISBC MIFARE Ultralight EV1 (7-байтный UID) настраивается по аналогии с рассмотренными примерами, за исключением следующих моментов:
В putty возвращается трэк:
Mifare[04DE4CDAA34084] UL (0144,00) 218,19678
No card
Если необходимо получить искомое значение 1370321573855364, что соответствует 04DE4CDAA34084, то TcpCardReader.ini и decodecards.ini настраивается по аналогии с рассмотренными примерами, но (ВАЖНО!!!) данное число (1370321573855364) не входит в диапазон integer и при прикреплении идентификатора будет возвращаться ошибка.
Чтобы ошибки не было необходимо получать искомое значение 21819678, либо настраивать decodecards.ini следующим образом:
[general]
usemask=1
TrackResultLog=
[mask]
card_mif=*
[cards.card_mif]
excludedprefix=
CardDecodeType=MASK
mask=*hhhhhhh*****
code=2
bitmask=$FFFFFFFF
В результате в TcpCardReader и shelter будет следующий результат:

Для считывателя Matrix-III RD-ALL настраивается аналогично, т.к возвращаемые трэки будут одинаковые.

Подключение HID-устройства (считывателя) с использованием утилиты TcpCardReader
Начиная с версии 1.27.0.1 утилиты TcpCardReader добавлена поддержка HID-устройств.
Поставка включает в себя следующий набор файлов:
KeyScan.dll
KeyScan.ini
Содержание файла KeyScan.ini:
[buffer]
; минимальное количество символов в коде, полученном от сканера
MinBufferSize=6
; Таймаут в миллисекундах между символами, приходящими со сканера
CharInterval=50
Для использования подключенного HID-устройства (В нашем случае использовался сканер штрих-кодов) необходимо в секции [READER] файла конфигурации tcpcardreader.ini прописать isKBReader=1.
После запуска TcpCardReader в области считывания должна появится надпись «Занят KBReader», что свидетельствует о подключении библиотеки KeyScan.dll, которая взаимодействует с HID устройством.

При считывании штрих-кода TcpCardReader получит трэк 46204837.

После получения трэка в TcpCardReader его можно обработать выше перечисленными способами.
Данный мануал является ознакомительным, в некоторых случаях алгоритм обработки карты будет различаться.