Обновлено: 15.04.2009
Общий принцип работы любой системы RFID состоит в следующем. В системе всегда есть два основных компонента: это считыватель и идентификатор (RFID-метка). Считыватель излучает в окружающее пространство электромагнитную энергию. Идентификатор принимает сигнал от считывателя и формирует ответный сигнал, который принимается антенной считывателя и обрабатывается его электронным блоком.
По принципу действия системы RFID можно разделить на пассивные и активные. В более простой пассивной системе излучение считывателя постоянно во времени (не модулировано) и служит только источником питания для идентификатора. Получив требуемый уровень энергии, идентификатор включается и модулирует излучение считывателя своим кодом, который принимается считывателем.
В интерактивном режиме считыватель излучает модулированные колебания, то есть формирует запрос. Идентификатор дешифрирует запрос и при необходимости формирует ответ.
Система программ 1С:Предприятие поддерживает обмен данными с различным оборудованием RFID по согласованной технологии (рис.1).
Рис.1
Драйвер для считывателей RFID-меток должен быть реализован в соответствии с общей концепцией использования внешних компонент для взаимодействия с торговым оборудованием, подключаемым к системе программ 1С:Предприятие. Использование данного подхода позволяет упростить процесс подключения нового торгового оборудования к 1С:Предприятию.
Общие требования к драйверу:
Названия свойств и методов должны быть русскоязычными и англоязычными (например, Порт - Port, Скорость - Speed, Сигнал() – Signal()).
Также драйвер должен поддерживать множественные подключения (в соответствии с идеологией COM технологии) и поддерживать работу с несколькими устройствами.
При возникновении ошибки в работе драйвер должен сообщить об этом и передавать описание произошедшей ошибки.
Система 1С:Предприятие (в дальнейшем "система") инициализирует соединение с драйвером и загружает его. Далее устанавливаются конфигурационные параметры, необходимые для работы, и происходит подключение к устройству.
Система активизирует драйвер. После этого от драйвера могут поступать сообщения о наступлении внешнего события при появлении меток в поле считывателя. При этом передача данных о метках не ведется.
Работа с драйвером предполагается в активном и пассивном режимах. Пассивный режим подразумевает, что драйвер выполняет какие-либо действия в ответ на команды от системы. При активном режиме работы драйвер должен сам послать сообщение о внешнем событии по изменению своего внутреннего состояния.
Дополнительно к активному режиму для чтения данных из меток введено понятие сессии.
Сессия – это процесс чтения и накопления данных из обнаруженных меток и передача их системе. Начало и окончание сессии определяется системой, вызовом функций драйвера.
При активном режиме и открытой сессии выполнение команд пассивного режима, а также попытки открыть еще одну сессию для того же логического устройства, должны блокироваться и драйвер должен возвращать сообщение об ошибке.
Примечание. Команды общего назначения выполняются независимо от режима и состояния сессии.
Работа с метками может осуществляться на чтение и на запись данных.
При пассивном режиме:
1. Дается команда на обнаружение меток в поле считывателя. В ответ возвращается количество обнаруженных RFID-меток.
2. Последовательно вызывается функция на получение данных из каждой обнаруженной метки*. Драйвер возвращает данные из меток. Команда посылается N раз, где N – количество обнаруженных меток.
* На радиочастотной метке может храниться код EPC (Electrinic Product Code, электронный код продукта). Это уникальный номер, определяющий конкретный товар (предмет).
При открытой сессии:
a. Достигнуто максимальное количество меток, установленное в свойствах компоненты;
b. Нет больше меток в поле считывателя;
c. В поле считывателя ненулевое количество меток и их количество не меняется в течение промежутка времени, установленного в свойствах компоненты;
d. Команда от системы на окончание сессии – в штатном режиме все метки к моменту окончания заполнения документа покинут поле считывателя, и передача данных из меток не понадобится.
Запись меток протекает в пассивном режиме:
Состояния могут изменяться только последовательно:
"Пассивный" <=> "Активный" <=> "Сессия".
Все прочие попытки некорректного изменения состояния должны приводить к ошибке.
Например, нельзя из пассивного режима открыть сессию или переключить в пассивный режим, пока открыта сессия.
По окончании работы с драйвером система закрывает соединение с устройством.
Соединение с драйвером закрывается только при завершении работы системы, либо при пересоздании объекта, связанного с драйвером.
Описание свойств | ||||
---|---|---|---|---|
Название (alias) |
Тип |
Доступность |
Описание | |
Чтение | Запись | |||
|
Описание методов | |||||
---|---|---|---|---|---|
Название (alias) – режим работы * |
Параметры |
Возвращаемое значение |
Описание | ||
Имя |
Тип |
Описание | |||
ПолучитьОшибку (GetLastError) – ОК | ОписаниеОшибки (ErrorDescription) |
BSTR [OUT] |
Описание ошибки |
LONG |
Возвращает код и описание последней произошедшей ошибки |
Подключить (Open) – ОК | МассивЗначений (ValuesArray) |
IDispatch* |
Массив значений для настройки подключения |
BOOL |
Подключает устройство для использования |
ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства | |||
Отключить (Close) – ОК | ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Отключает устройство |
ВключитьАктивныйРежим (EnableActiveMode) - КПР | ИДУстройства (DeviceID) |
LONG |
Идентификатор устройства |
BOOL |
Включает активный режим |
ВыключитьАктивныйРежим (DisableActiveMode) - КАР | ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Выключает активный режим |
ОткрытьСессию (OpenSession) – КАР | ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Начинает сессию получения меток (из всех обнаруженных меток прочитанные данные передаются системе). Если сессия уже открыта, вернуть ошибку |
ЗакрытьСессию (CloseSession) – КС | ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Заканчивает сессию работы с метками. Сессия, при наличии меток в поле считывателя, закрывается, только если параметр ИгнорироватьМеткиВПоле (IgnoreCardsInField) имеет значение Истина. Если сессия не была закрыта, то возвращается ошибка |
ИгнорироватьМеткиВПоле (IgnoreCardsInField) |
BOOL [IN] |
Если Ложь, то при наличии в поле меток сессия не закрывается, в противном случае сессия остается открытой | |||
КоличествоМеток (CardsCount) |
LONG |
Количество меток в поле при закрытии сессии | |||
СессияОткрыта (SessionIsOpened) – ОК | ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Проверяет, была ли открыта сессия на чтение/запись |
НайтиМетки (FindCards) – КПР | ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Осуществляет поиск меток в поле считывателя и возвращает количество обнаруженных меток |
КоличествоМеток (CardsCount) |
LONG |
Количество обнаруженных меток | |||
СчитатьСледДанные (GetNextData) – КПР | ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Считать по очереди из каждой метки данные |
ИДМетки (CardID) |
BSTR |
Идентификатор метки | |||
ДанныеМетки (CardData) |
BSTR |
Данные, записанные в метке | |||
ЗаписатьДанные (WriteData) – КПР | ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Записывает переданные данные в метки, находящиеся в поле считывателя |
Данные (Data) |
BSTR [IN] |
Данные для записи в метки | |||
Количество |
LONG |
Кол-во успешно прописанных меток | |||
СобытиеОбработано (EventProcessed) - ОК |
ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Оповещает драйвер о том, что событие системой было получено. Параметр "ФлагСостояния" указывает на успешность обработки. |
ФлагСостояния (StateFlag) |
BOOL |
Флаг обработки события | |||
ПодатьСигнал (Signal) – ОК | ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Подает сигнал на устройстве длительностью, указанной в параметре (если устройство поддерживает данную возможность) |
Длительность (Duration) |
LONG |
Длительность сигнала в мс. | |||
ПоддерживаетПБ (AntistealBitSupported) - ОК | ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Данная функция проверяет, поддерживает ли оборудование работу с противокражным битом |
УстановитьПБ (SetAntistealBit) - КПР | ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Функция устанавливает состояние противокражного бита в состояние установлен/снят в зависимости от передаваемого значения. Если Адрес метки передается пустой строкой, то установка бита происходит у всех меток в поле считывателя |
АдресМетки (CardAddress) |
BSTR |
Идентификатор метки | |||
Состояние (State) |
BOOL |
Режим установки/снятия противокражного бита | |||
УстановитьПБ (SetAntistealBit) - КПР | ИДУстройства (DeviceID) |
BSTR |
Идентификатор устройства |
BOOL |
Функция получает состояние противокражного бита |
АдресМетки (CardAddress) |
BSTR |
Идентификатор метки | |||
Состояние (State) |
BOOL |
Режим получения противокражного бита | |||
ТестУстройства (DeviceTest) | МассивЗначений (ValuesArray) |
IDispatch* |
Массив значений для настройки подключения |
BOOL | Выполняет пробное подключение и опрос устройства. При успешном выполнении подключения в описании возвращается описание устройства. При отрицательном результате возвращается описание возникшей проблемы при подключении. |
ДополнительноеОписание (AdditionalDescription) |
BSTR | Описание результата выполнения теста |
* КАР – команды активного режима; КПР – команды пассивного режима; КС - команды сессии; ОК – общие команды
Дополнительное описание:
«МассивЗначений» (пример значений для устройства, подключаемого на последовательном порту)
Тип данных "1С:Предприятия 8" - Массив.
Наименование параметра | Наличие в структуре | Типы данных | Описание параметра |
Порт (Port) | Необязательно | LONG | Номер последовательного порта |
Скорость (Speed) | Необязательно | LONG | Скорость, на которой происходит подключение |
ТипУстройства (DeviceType) | Необязательно | LONG | Тип устройства (по способу подключения) |
РазделительМетки (CardDelimiter) | Обязательно | BSTR | Символ, для разделения идентификатора метки и данных при передаче строки в событии «ЧтениеМеток» |
ПредельноеКолвоМеток (CardsLimit) | Обязательно | LONG | Предельное количество меток, после которого генерируется событие «ЧтениеМеток» (в соответствии с гл. 3.2 п. 2а) |
Таймаут (Timeout) | Обязательно | LONG | Таймаут, после которого при отсутствии изменения количества меток посылается событие (в миллисекундах) |
МаксКоличМетокСобытия (EventMaxCardsCount) | Обязательно | LONG | Максимальное количество меток, передаваемое в событии |
Во время подключения драйвер возвращает параметр "Идентификатор устройства". Данный параметр используется в дальнейшем драйвером для указания источника события (устройства) при отправке события, а также конфигурациями для определения связанной с событием обработки обслуживания. Идентификатор устройства должен быть уникальным для каждого подключения, для этого предлагается вести сопоставление «Подключенное устройство – Идентификатор устройства», добавляя новые строки при подключении к устройству и удаляя при отключении от него. Т.е. драйвер при вызове метода Подключить() должен сформировать новый идентификатор устройства (предлагается в качестве имени использовать GUID в виду простоты его получения программным путем) и передать в выходном параметре.
При наступлении событий в драйвере в систему можно посылать сообщение о возникновении внешнего события. При посылке сообщения о внешнем событии необходимо указать: источник внешнего события (Идентификатор устройства), наименование (тип) события и данные.
Имя события – "ЧтениеМеток" ("CardsReading")
Событие наступает только при открытой сессии.
При получении данных от драйвера в виде строки необходимо их разобрать, проверить и погрузить в структуру (для удобства работы прикладного уровня). Наиболее подходящей для этих целей будет структура данных "Соответствие", где Ключу сопоставляется уникальный идентификатор метки, а в поле "Значение" записываются данные, считанные из метки.
Для передачи данных используется тип данных "Строка", поэтому ниже будет определена структура передаваемой строки с целью упрощения дальнейшего разбора.
Для драйвера определена следующая структура строки для передачи данных из меток:
<ИДМетки><РазделительМетки><Данные>#13<ИДМетки><РазделительМетки><Данные>#13<ИДМетки><РазделительМетки><Данные>#13 и т.д.
(<CardID><CardDelimiter><Data>#13<CardID><CardDelimiter><Data>#13<CardID><CardDelimiter><Data>#13 etc.),
где ‘<CardDelimiter>’ (настраиваемый параметр) и ‘#13’ (символ перевода строки) – специальные символы-разделители.
Максимальное количество меток в строке – количество, передаваемое в параметре при открытии сессии. Определяет то количество меток, которое прикладное решение готово отработать в одном событии.
Имя события – "МеткаВПоле" ("CardDetected")
Данные – описание события.
Событие наступает если сессия не открыта, а в поле считывателя появилась одна или несколько меток. Повторное наступление события возможно только после исчезновения всех меток из поля считывателя.
Имя события – "ОшибкаВДрайвере" ("Error")
Данные – описание ошибки.
Событие наступает, если в процессе работы драйвера возникли ошибки.