Операция инвентаризации поддерживается на уровне радио-протокола обмена между метками и считывателем, и возвращает данные о том, какие EPC присутствуют в зоне считывания.
Например, все метки могут иметь один и тот же EPC/UII, и в этом случае по итогам инвентаризации мы будем знать, что это за EPC, и сколько всего RFID-меток с этим EPC/UII удалось считать ридеру.
Если все метки имеют свой уникальный EPC/UII (не путать с уникальным номером чипа, который безусловно есть у каждой метки Class 1 Gen 2), то операция инвентаризации вернет список этих EPC/UII.
Синхронное чтение (инвентаризация) меток
Синхронная инвентаризация означает следующее:
- «1С:Предприятие» дало считывателю команду «считай окружающие метки в течение N секунд» и замерло в ожидании ответа.
- Считыватель читает метки, «1С:Предприятие» ждет, все формочки замерли. Считыватель закончил через указанное время и вернул результат «1С:Предприятию».
- «1С:Предприятие» получило результат, обработало его, формочки «отвисли».
Таким образом, если при синхронной инвентаризации указать считывателю «считай 50 секунд», то окно 1С почти целую минуту не будет доступно для пользователя.
Пример кода для синхронной инвентаризации:
Синхронная инвентаризация не требует обрабатывания внешнего события «Чтение», и поэтому работает во всех конфигурациях «1С:Предприятия 8.2» и всех версиях операционной системы Windows.
Во время синхронной инвентаризации внешнее событие «Чтение» не приходит, т.к. это «убило» бы приложение 1С.
Асинхронное чтение (инвентаризация) меток
Асинхронная инвентаризация означает следующее:
- «1С:Предприятие» дало считывателю команду «считай окружающие метки в течение N секунд» и продолжило делать свои дела.
- По мере инвентаризации новых меток считыватель асинхронно посылает «1С:Предприятию» внешние события, в результате чего считанные метки могут интерактивно появляться в окнах и документах «1С:Предприятия».
- Считыватель либо закончил через указанное время, либо «1С:Предприятие» дало ему команду закончить инвентаризацию досрочно.
Таким образом, при асинхронной инвентаризации окно 1С всегда остается доступным для взаимодействия с пользователем, а найденные метки могут интерактивно появляться на экране.
Пример кода для асинхронной инвентаризации:
На одном и том же считывателе нельзя одновременно запускать две и более чтений меток!
Но при этом разрешается проводить несколько параллельных чтений, если они выполняются на разных считывателях.
Событие «Чтение»
При каждом удачном асинхронном чтении RFID-метки (в частности, при асинхронной инвентаризации) компонента посылает внешнее событие «Чтение».
Источник = "CleverenceRFID"
Событие = "Чтение"
Данные = Строка из номера задания (созвращается методом НачатьЧтение), url считывателя и Tag ID прочитанной метки, через символ ‘@’. Например, «F16828D7-A33D-4320-8D6F-4D8598BCB5EA@motorola:xr480:llrp://10.10.0.17@303000181CE257587E9CA77C».
Более подробную информацию о самой метке можно получить у конкретного считывателя или у самой компоненты через метод «ВыбратьМетку».
В качестве данных в событие приходит только Tag ID метки. Получить более подробные данные можно при помощи метода компоненты «ВыбратьМетку».
Пример кода обработки события:
либо, если подписать форму на событие «ВнешнееСобытие»:
Событие «ЧтениеОкончено»
При каждом окончании синхронного или асинхронного чтения RFID-меток (как штатном, так и по ошибке) компонента посылает внешнее событие «ЧтениеОкончено».
Источник="CleverenceRFID"
Событие="ЧтениеОкончено"
Данные=Строка причины остановки плюс URL того считывателя, который закончил чтение.
Причины остановки:
«ИстеклоВремя» – закончилось время, указанное при вызове метода чтения меток,
«Оборвано» – метод ОкончитьЧтение() был вызван до того, как истекло время,
«Исключение» – при попытке чтения произошло исключение. Подробности исключения можно посмотреть, вызвав метод ПолучитьОшибку().
Пример данных для события ЧтениеОкончено:
«ИстеклоВремя@motorola:fx9500:llrp://10.10.0.121:5084»
«Оборвано@motorola:fx9500:llrp://10.10.0.121:5084»
В качестве данных в событие приходит специальная строка, в которой через символ «@» указаны причина остановки чтения и URL считывателя, на котором остановлено чтение.
Пример кода обработки события:
либо, если подписать форму на событие «ВнешнееСобытие»:
Чтение банка EPC/UII
Чтение банка EPC/UII происходит во время инвентаризации меток (которая не требует паролей), а также при чтении любых других банков, поэтому отдельно чтением банка EPC/UII озадачиваться необязательно.
Чтение банка USER
Банк USER хранит любую дополнительную информацию в формате ISO 15961 (конкретные упакованные поля со строковыми значениями) либо просто байтами. В зависимости от используемого в метке чипа, банк USER может быть размером от нуля бит до нескольких килобайт.
Пример №1:
Пример №2:
Чтение банка TID (запись в него невозможна)
Банк TID хранит уникальный номер чипа. Перепрошить этот номер чипа никак нельзя. Если при маркировке объектов вести реестр всех использованных чипов, то банк TID можно использовать для проверки того, что метка не была «заменена злоумышленником».
Пример №1:
Пример №2:
Чтение банка RESERVED
Банк RESERVED хранит пароли на доступ и блокирование метки. Если метки используются только внутри организации и никуда не передаются, то в целях защиты от несанкционированного перепрошивания меток сторонними лицами всегда имеет смысл установить единый секретный пароль хотя бы на доступ к чтению/записи.
Поскольку на чтение банка RESERVED нужно знать пароль доступа, то большого смысла в операции чтения содержимого банка RESERVED ради пароля доступа нет. Однако, некоторые производители включают в банк RESERVED дополнительную информацию, например альтернативный пароль доступа с которым читается второй «приватный» набор банков (что позволяет организовать «публичную» и «внутреннюю» версии данных одной и той же метки), антикражный флаг и т.п.
Пример: