4. Настраиваемая задержка обнаружения RFID меток
Основные задачи:
- Обеспечить управление таймаутом на обнаружение и потерю идентификатора метки.
Дополнительные условия:
- Передавать идентификатор метки в каждом сообщении.
Пример программы: https://disk.yandex.ru/d/KKFQRcMuW3nV9w
Реализация
Настраиваем интерфейс RS-232/RS-485 на работу со считывателем меток, выбираем "Считыватель меток RFID". На интерфейс подключаем считыватель меток.
При настройке работы со считывателем рекомендуется выбирать время удержания метки, превышающее интервал вещания самой метки. Например, если метка настроена на отправку своего кода каждые 60 сек, то время удержания нужно установить минимум на 70 сек.
Программа следит за текущим идентификатором, который получен от считывателя:
- Если идентификатор не меняется в течение времени, заданного переменной FIND_DELAY, то сохраняем код идентификатора в Пользовательском параметре CE №1 и формируем пользовательское событие CE_EVENT_1 (код события 41046).
- Если идентификатор был ранее сохранен, но отсутствует в течение времени LOST_DELAY, то записываем в Пользовательский параметр CE №1 значение "0" и формируем пользовательское событие CE_EVENT_1 (код события 41046).
В настройках протокола один из 4х-байтовых пользовательских параметров настраиваем для передачи Пользовательского параметра CE №1.
На сервере идентификатор метки следует брать из пользовательского параметра, в котором передается Пользовательский параметр CE №1.
Схема
Общая структура программы состоит из одного блока «Действие»:
«rfid_user_delay» - блок содержит основной алгоритм программы.
Действие "rfid_user_delay"
В самом начале обновляем старое значение метки
Обновляем текущее значение метки.
На этом этапе можно изменить источник получения кода метки (подробней об этом в конце статьи).
Определяем факт наличия кода в переменной rfid, если код есть, то переменная found равна "1"
Далее следует объемный блок, который в результате своей работы определяет статус фиксации нужной метки (переменная fix). Сначала кратко будут описаны отдельные части, а затем весь блок в целом.
Метка фиксируется, если ее код не пропадает и не меняется заданное время. За это отвечает функция задержка включения (т.е задержка перехода из состояния "0" в состояние "1")
Если метка была зафиксирована, но теперь пропала, то вступает в действие другая часть этого блока функций. Это функция задержка отключения (т.е. задержка перехода из состояния "1" в состояние "0")
Отдельно допускается ситуация, когда метка была зафиксирована, затем она пропала, но успела появиться вновь до истечения таймаута на пропадание. Чтобы метка при восстановлении могла обойти таймаут на появление добавлен блок условий
В итоге блок функций для определения статуса фиксации метки выглядит так
На завершающем этапе описывается алгоритм действий при установке или снятии статуса фиксации метки.
При установке статуса фиксации метки (обнаружена метка):
- обновляется внутренняя переменная last_rfid
- записываем значение переменной rfid в Пользовательский параметр CE №1
- формируем событие CE_EVENT_1 (код события 41046)
При снятии статуса фиксации метки (потеряна метка):
- записываем значение "0" в Пользовательский параметр CE №1
- формируем событие CE_EVENT_1 (код события 41046)
Дополнение
Программа составлена универсально и достаточно внести минимальные корректировки, чтобы изменить источник кода метки. Это очень полезно, т.к. источником кода метки могут являться совершенно разные параметры:
- RFID-считыватели дальнего радиуса
- Ключи TouchMemory, RFID-карты ближнего действия
- Считыватели, работающие по протоколу ДУТ LLS и передающие код в значении уровня
Чтобы изменить источник идентификатора, нужно в программе заменить вторую по счету функцию на ту, которая будет являться источником идентификатора.
- Если источник - RFID-метка дальнего радиуса
- Если источник - ключ TouchMemory или RFID-карта ближнего действия
- Если источника - ДУТ LLS №1