Абонемент. Подключение HID-устройства (считывателя) с использованием утилиты TcpCardReader 

Начиная с версии 1.27.0.1 утилиты TcpCardReader добавлена поддержка HID-устройств.

Поставка включает в себя следующий набор файлов:

tcpcardreader.exe
decodecards.dll
KeyScan.dll
KeyScan.ini

Содержание файла KeyScan.ini:

[buffer]
; минимальное количество символов в коде, полученном от сканера
MinBufferSize=6
; Таймаут в миллисекундах между символами, приходящими со сканера
CharInterval=50
 
Для использования глобального хука на клавиатуру (использования HID-устройства) необходимо в секции [READER] файла конфигурации tcpcardreader.ini прописать isKBReader=1.
 
ВНИМАНИЕ!!! При этом библиотеки KeyScan.dll и decodecards.dll могут блокироваться антивирусами, ввиду чего необходимо будет добавить исключения и т.п. в их настройки.

Абонемент. Подключение считывателя через COM-порт (RS232) или с использованием утилиты TcpCardReader 

1. Расположение файлов

При настройке взаимодействия ПО "Абонемент" и утилиты TcpCardReader следует обратить внимание на то, что библиотека decodecards.dll используется и в ПО "Абонемент" и в утилите TcpCardReader и настраивается отдельно для Абонемента и для tcpcardreader.

Ниже указаны пути к файлам учавствующим в настройке взаимодействия утилиты TcpCardReader и ПО "Абонемент"

\_UCS\_FITNESS\TcpCardReader

\_UCS\_FITNESS\exe\

TcpCardReader.exe 
TcpCardReader.ini
Decodecards.dll
Decodecards.ini

Abonementmanager.exe
Abonementmanager.ini
Decodecards.dll
Decodecards.ini

На Рис. 1 представлена схема получения номера карты и последовательность преобразований: 

(Рис.1 Схема получения номера карты)

1.1. Описание файла конфигурации tcpcardreader.ini утилиты TcpCardReader 


AutoStart = 1                                                                             Автоматически стартовать программу после запуска
AutoHide = 1                                                                             Сворачивать программу после запуска
[setup]
COMPORTCOUNT=1                                                               Количество подключений к СОМ портам.
[TCP]
PORT=7760
IP=0.0.0.0                                                                                 TCP порт и адрес сетевого интерфейса, к которому будет производиться подключение клиентов
[READER1]
COMPORT=3
COMPORTPARAMS=baud=9600 data=8 parity=N stop=1      Настройки первого подключения к сом порту. Номер и параметры СОМ порта.
Prefix=;                                                                                      Строка, которая передаётся клиентам перед первым прочтенным символом. В данном примере добавится символ: «точка с запятой»
Postfix=?                                                                                   Строка, которая передаётся клиентам после последнего прочтенного символа. В данном примере добавится символ: «Вопросительный знак»
useDecodeCards=0                                                                  0 - не использовать декодирование decodecards.dll,  1 - использовать декодирование  decodecards.dll
StartTermChars=;                                                                      Используется, если useDecodeCards=1 Признак начала трека для декодирования
FinishTermChars=?#13;#10;#0;                                                Используется, если useDecodeCards=1 Признак конца трека для декодирования
[LOG]
level=30
debuglevel=30                                                                           Уровни логирования. Используются значения от 0 до 30
[TCPCARDREADER]
Prefix=;                                                                                      Строка, которая передаётся клиентам перед первым прочтенным символом. В данном примере «точка с запятой»  появится перед треком карты (что служит указателем начала для decodecards.dll)
Postfix=?                                                                                   Строка, которая передаётся клиентам после последнего прочтенного символа. В данном примере  «Вопросительный знак» появится после трека карты (что служит указателем конца для decodecards.dll)
[READER.1.CODEPARAMS.90]
Prefix=; BarCode
Postfix=?                                                                                   Специализированный префикс и постфикс для карт после декодирования для  считывателя 1 и  код карт Code=90

2. Подключение считывателя карт с использованием утилиты "TCPCardReader"

В этом случае мы можем подключить любое количество считывателей и использовать в различных конфигурациях ПО "Абонемент". Утилита "TcpCardReader" слушает COM-порт и передает полученную из него информацию в указанный TCP-порт для последующей рассылки TCP-клиентам.  При этом важно правильным образом сконфигурировать decodecards.ini на стороне ПО "Абонемент" и на стороне TcpCardReader, чтобы в ПО "Абонемент" передавался корректный трек для привязки к клиенту в качестве идентификатора.

2.1. Пример конфигурирования для карт типа Mifare:

(Рис.2 Получение трека карты)

В Putty при считывании карты получили трек (Рис.2) приводим его к виду: 454786863  (1B1B7F2F):


В случае использования карт типа Mifare используется преобразование из шестнадцатиричного формата в десятичный (из HEX в DEC), а именно: первоначально в треке присутствует число в шестнадцатиричном формате - "1B1B7F2F", которое в десятичном формате имеет вид - "454786863" (данное преобразование можно произвести в калькуляторе MS Windows в режиме "Программист"). Программно данное преобразование реализуется через теги usemask=1 и mask=hhhhhhhh файла decodecards.ini.

 
Параметры настройки tcpcardreader.ini на стороне утилиты TCPCARDREADER:
[application]
AutoStart = 1
AutoHide = 0
[TCP]
PORT=7760
IP=0.0.0.0
[READER1]
COMPORT=1
COMPORTPARAMS=baud=9600 data=8 parity=N stop=1
;Параметр Prefix задаёт строку, которая передаётся клиентам перед первым прочтенным символом
Prefix=;
;Параметр Postfix задаёт строку, которая передаётся клиентам после последнего прочтенного символа
Postfix=?
;Использовать decodecards.dll
useDecodeCards=1
StartTermChars=i
FinishTermChars=?#13;#10;#0;
 
Параметры настройки decodecards.ini на стороне ПО "Абонемент":
[cards]
CardPrefix   =
StaffCardPrefix        = y
RegularCardPrefix = z
PDSCardPrefix   = x
FirstSignEquallyAsLetterA = 0
[cards.Card]
CardDecodeType = mask
mask=hhhhhhhh
bitmask=$7FFFFFFF
code=2
[cards.RegularCard]
code=22
[cards.StaffCard]
code=21
[cards.PDSCard]
code=24

После чего, прикладываем карту к считывателю и проверяем лог работы библиотеки преобразования  "decodecards.log" в папке "C:\...\TcpCardReader\LOG\":

DD.MM.YYYY hh:mm:ss 025835372 1B98> CALL extractcardnoexp_int64: track=fare[1B1B7F2F]  (0004,09) 127,06939 ; term0= , term1= 
DD.MM.YYYY hh:mm:ss 025835387 1B98> CALL extractcardnoex: track=fare[1B1B7F2F]  (0004,09) 127,06939 ; term0= , term1= 
DD.MM.YYYY hh:mm:ss 025835387 1B98> UseMask2: UseMask=1
DD.MM.YYYY hh:mm:ss 025835387 1B98> CALL extractcardnoex2: track=fare[1B1B7F2F]  (0004,09) 127,06939 ; term0= , term1= 
DD.MM.YYYY hh:mm:ss 025835387 1B98> EXIT extractcardnoex2: result=454786863 , cardcode=2 , ExtractWithoutPrefix2=1B1B7F2F]  (0004,09) 127,06939, ci=card2 
DD.MM.YYYY hh:mm:ss 025835387 1B98> EXIT extractcardnoexp_int64: result=454786863 , cardcode=2 
 
 При считывании в окне TcpCardReader.exe видим следующий результат (см. Рис. 3):
 
(Рис.3 Рассылка через TCP-порт полученного номера карты)
 
Параметры настройки abonementmanager.ini на стороне ПО "Абонемент":
[TCPCardReader]
PORT=7760
HOST=127.0.0.1
;Если используется TCPCardReader для чтения com-портом, то установите UseTCPCardReader=1
UseTCPCardReader=1
StartTermChars=;
FinishTermChars=?#13;#10;#0;
 
Параметры настройки decodecards.ini на стороне ПО "Абонемент":
[cards]
CardPrefix   =
StaffCardPrefix        = y
RegularCardPrefix = z
PDSCardPrefix   = x
FirstSignEquallyAsLetterA = 0
[cards.Card]
code=2
[cards.RegularCard]
code=22
[cards.StaffCard]
code=21
[cards.PDSCard]
code=24

В этом случае в ПО "Абонемент" будет передан номер карты (см. Рис.4)454786863

(Рис.4 Таблица "Идентификаторы" в ПО "Абонемент") 

 

2.2. Пример конфигурирования для карт типа Em-Marine:

(Рис.5 Получение трека карты в Putty.exe )

В Putty при считывании карты получили трек следующего вида: "Em-Marine[1900] 242,12358", приводим его к виду "24212358" с помощью файла decodecards.ini и tcpcardreader.ini (выделены учавствующие в преобразовании блоки):

Параметры настройки tcpcardreader.ini на стороне утилиты TcpCardReader:

[application]
AutoStart = 1
AutoHide = 0
[TCP]
PORT=7760
IP=0.0.0.0
[READER1]
COMPORT=6
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 на стороне утилиты TcpCardReader: 
[general]
usemask=1
[mask]
card = ne*   
[cards.Card]
ExcludedPrefix=ne[
code=2
CardDecodeType = MASK
mask=****dddddddd
DecodeTypeEx = 0
 
После чего, считываем магнитную карту и проверяем лог работы библиотеки преобразования  "decodecards.log" в папке "C:\...\TcpCardReader\LOG\":
 
 004708780 151C> CALL extractcardnoex2: track=ne[1900] 242,12358 ; term0= , term1= 
 004708796 151C> EXIT extractcardnoex2: result=24212358 , cardcode=2 , ExtractWithoutPrefix2=1900] 242,12358, ci=card
 
И видим при считывании в окне TcpCardReader.exe следующий результат (см. Рис.6):

(Рис.6 Рассылка через TCP-порт полученного номера карты)

Параметры настройки abonementmanager.ini на стороне ПО "Абонемент":

[TCPCardReader]
PORT=7760
HOST=127.0.0.1
;Если используется TCPCardReader для чтения com-портом, то установите UseTCPCardReader=1
UseTCPCardReader=1
StartTermChars=;
FinishTermChars=?#13;#10;#0;
 
Параметры настройки decodecards.ini на стороне ПО "Абонемент":
[cards]
CardPrefix   =
StaffCardPrefix        = y
RegularCardPrefix = z
PDSCardPrefix   = x
FirstSignEquallyAsLetterA = 0
[cards.Card]
CardDecodeType = mask
mask=dddddddddddddd
code=2
[cards.RegularCard]
code=22
[cards.StaffCard]
code=21
[cards.PDSCard]
code=24

В этом случае в ПО "Абонемент" будет передан номер карты: 24212358.

 

3. Подключение считывателя карт напрямую через COM-порт

В этом случае можно подключить только 1 считыватель который будет занимать COM порт в монопольном режиме. Подключаем считыватель карт, устанавливаем драйвера, в Диспетчере устройств MS Windows мониторим какой порт занят считывателем и указываем его в Putty, после чего проверяем требуемые виды карт на считывателе и смотрим входные данные (треки) в Putty. На основании полученных треков настраиваем decodecards.ini и abonementmanager.ini для передачи преобразованного трека со считывателя в ПО "Абонемент".

3.1. Пример конфигурирования для карт типа MIFARE и Em-Marine

Подносим карту к считывателю, получаем в Putty на COM-порт трек следующего вида:
 
(Рис.7 Получение трека карты в Putty.exe )

Параметры настройки abonementmanager.ini на стороне ПО "Абонемент":

[TCPCardReader]
PORT=7760
HOST=127.0.0.1
;Если используется TCPCardReader для чтения com-портом, то установите UseTCPCardReader=1
UseTCPCardReader=0
StartTermChars=i
FinishTermChars=?#13;#10;#0;
[HARDWARE.READER]
COMPORT = 1
COMPORTPARAMS=baud=9600 parity=n data=8 stop=1
;Если UseTCPCardReader=1, то секция не используется
StartTermChars=i
FinishTermChars=?#13;#10;#0;

Параметры настройки decodecards.ini на стороне ПО "Абонемент":

[general]
usemask=1
TrackResultLog=
[mask]
card = ne*
card2 = fare* 
[cards.Card]
ExcludedPrefix=ne[
code=2
CardDecodeType = MASK
mask=****dddddddd
[cards.Card2]
ExcludedPrefix=fare[
code=2
CardDecodeType = MASK
mask=hhhhhhhh 
 
Запускаем ПО "Абонемент" и прикладываем карту к считывателю, после чего получаем номер карты: 454786863 (для наглядности можно иницировать операцию прикрепления идентификатора к клиенту (см. Рис. 8)):
 
(Рис.8 Прикрепление идентификатора к клиенту в ПО "Абонемент" )

 

Для проверки корректности преобразования смотрим лог-файлы ПО "Абонемент".

В лог-файле библиотеки декодирования decodecards.dll (\...\exe\LOG\[YYYY-MM].log\decodecards'YYYY-MM-DD=HH.logищем записи следующего вида:

DD.MM.YYYY   006115441 1154> CALL extractcardnoexp_int64: track=fare[1B1B7F2F]  (0004,09) 127,06939 ; term0= , term1= 
DD.MM.YYYY   006115441 1154> CALL extractcardnoex: track=fare[1B1B7F2F]  (0004,09) 127,06939 ; term0= , term1= 
DD.MM.YYYY   006115441 1154> UseMask2: UseMask=1
DD.MM.YYYY   006115441 1154> CALL extractcardnoex2: track=fare[1B1B7F2F]  (0004,09) 127,06939 ; term0= , term1= 
DD.MM.YYYY   006115441 1154> EXIT extractcardnoex2: result=454786863 , cardcode=2 , ExtractWithoutPrefix2=1B1B7F2F]  (0004,09) 127,06939, ci=card2 
DD.MM.YYYY   006115441 1154> EXIT extractcardnoexp_int64: result=454786863 , cardcode=2 
 

В лог-файле ПО "Абонемент" (\...\exe\LOG\[YYYY-MM].log\abonementmanager'YYYY-MM-DD=HH.log) ищем записи следующего вида:

DD.MM.YYYY hh:mm:ss 006639589 1154> TMSCReaderThread.Execute :: Success=OK; track2=fare[1B1B7F2F]  (0004,09) 127,06939
DD.MM.YYYY hh:mm:ss 006639589 1154> TMSCReaderThread.Execute Synchronize(threadsyncfunc):: Success=OK; track2=fare[1B1B7F2F]  (0004,09) 127,06939; CardCode=454786863, LastCardCode=454786863
DD.MM.YYYY hh:mm:ss 006639589 10AC> TDM.MakeQuery SQLTEXT=select gi.guest  from guest_identifiers gi  where gi.strvalue=:intvalue and gi.physicaltype=:physicaltype and gi.enabled=1 and gi.folio>0 
DD.MM.YYYY hh:mm:ss 006639589 10AC> TDM.GetFirstValue Parameters: [0]=454786863 , [1]=2
DD.MM.YYYY hh:mm:ss 006639589 10AC> TDM.GetFirstValue RESULT=1005
DD.MM.YYYY hh:mm:ss 006639589 10AC> RunPDS_GetMessage CALL: CardNo=454786863

4. Настройка входа (идентификации) в ПО "Абонемент" с использованием карты сотрудника

Заходим в "Настройки"->"Пользователи"->Выбираем нужного сотрудника и нажимаем кнопку "Прикрепить идентификатор" (см.Рис 9):

(Рис.9 Прикрепление идентификатора к пользователю в ПО "Абонемент" )

Появится окно прикрепления идентификатора, соответственно прикладываем карту сотрудника к считывателю (см. Рис 10,11):

(Рис.10 Прикрепление идентификатора)

(Рис.11 Прикрепление идентификатора)

После прикрепления идентификатора, сотрудник сможет производить вход (идентификацию) в ПО "Абонемент" с использованием своей карты (не вводя логин и пароль).