Компонента работы с RFID-считывателем (на примере Impinj R420)




Простенькая компонента 1С для работы с RFID-считывателем Impinj R420.
Тем, кто занимается темой RFID-зации, будет интересно как реальный пример работы.
Компонента успешно работает на одном подмосковном складе.

Принцип работы

Компонента генерирует два события при работе:

  1. IN — при попадании метки в поле видимости антенны;
  2. OUT — при выходе метки из поля видимости антенны.

При этом нужно помнить, что OUT сработает в том случае, если метка не будет видна антенне более времени, указанного в методе SetInOutTimeout (см. ниже). Т.е. физически метка может остаться на антенне, но антенна может ее не увидеть и сгенерировать событие OUT.

Таким образом, например, решается классическая задача проверки заказа/накладной, когда необходимо проверить правильность сборки заранее известного списка товаров. Так же на базе этих событий можно сделать инвентаризацию, поиск товара и т.д.

Компонента написана на C#. Использует .NET 3.5.


Описание интерфейса компоненты

Регистрация компоненты

Перед началом работы компоненты необходимо зарегистрировать ее с ключом tlb: 

RegAsm.exe «PATHRFIDConnector.dll» /tlb

Или запустить register.bat (см. вложение), указав в нем путь до файла RegAsm

Инициализация компоненты

Имя класса: AddIn.RFIDConnector

Пример работы:

 

// Инициализация класса...

ИмяКласса = "AddIn.RFIDConnector";
Попытка
ПодключитьВнешнююКомпоненту(ИмяКласса);
Объект = Новый COMОбъект (ИмяКласса);
Исключение
Сообщить("Ошибка загрузки внешней компоненты " + ИмяКласса + ". " + ОписаниеОшибки());
Закрыть();
КонецПопытки;


Подключение/отключение устройства

SetInOutTimeout(Timeout) — установка периода видимости метки, после которого генерируется событие OUT (в мс.);

SetInOutPeriod(Period) — установка периода таймера: с какой частотой опрашивать метки на антеннах (в мс.);

Connect(IP) — подключиться к устройству с указанием IP-адреса устройства.

Пример работы:

// Задаем таймаут исчезания меток...
Объект.SetInOutTimeout(500);
// Задаем период проверки меток...
Объект.SetInOutPeriod(150);
// Подключаемся к устройству...
Объект.Connect("192.168.3.89");


Disconnect() — отключиться от устройства

Пример работы:

// Отключаем устройство...
Объект.Disconnect();


Запуск/остановка таймера опроса антенны

Start() — запуск таймера: начало работы с устройством

Пример работы: 

Попытка
Объект.Start();
Сообщить("Сканирование запущено!");
Исключение
Сообщить("Ошибка запуска сканирования! Текст ошибки: " + ОписаниеОшибки());
КонецПопытки;


Stop() — остановка таймера

Пример работы: 

Попытка
Объект.Stop();
Сообщить("Сканирование остановлено!");
Исключение
Сообщить("Ошибка остановки сканирования! Текст ошибки: " + ОписаниеОшибки());
КонецПопытки;


Обработка внешнего события

ВнешнееСобытие(Источник, Событие, Данные) — стандартное событие 1С

Источник — всегда «RFIDConnector»

Событие — всегда «InOutEvent»

Данные — данные в формате: «In/Out:Tag:Antenna», например: IN:302DBB7711C0004000000034:1;


Пример работы (спсМетки — список значений, спсРазвернуть_ — функция, разбирающая строку на подстроки через разделитель — см. пример RFIDConnectorTest.epf во вложении):

// фрмВнешнееСобытие - внешнее событие...
Процедура фрмВнешнееСобытие(Источник, Событие, Данные)

// Для отладки...
Сообщить("Внешнее событие: " + Источник + ", " + Событие + ", " + Данные);

// Получаем данные в виде списка...
спсДанные = спсРазвернуть_(Данные, ";");
// Идем по элементам списка...
Для Каждого спсЭлемент Из спсДанные Цикл
// Получаем параметры из каждой строки...
спсПараметры = спсРазвернуть_(спсЭлемент.Значение, ":");
// Если количество параметров 3 - обрабатываем данные...
Если спсПараметры.Количество() = 3 Тогда
ТипСобытия = СокрЛП(спсПараметры[0]);
Метка = СокрЛП(спсПараметры[1]);
Антенна = СокрЛП(спсПараметры[2]);

прМетка = Метка + ":" + Антенна;

// В зависимости от типа события...
Если ВРег(ТипСобытия) = "IN" Тогда
спсМетки.Добавить(прМетка);
ИначеЕсли ВРег(ТипСобытия) = "OUT" Тогда
спсМетка = спсМетки.НайтиПоЗначению(прМетка);
Если спсМетка <> Неопределено Тогда
спсМетки.Удалить(спсМетка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры


Контакты:

Если у Вас возникли вопросы или пожелания по доработке/внедрению данной системы, а также любые другие вопросы, связанные с RFID (метки, считыватели, интеграция, разработка, внедрение, обслуживание, консультации и т.д.), Вы можете обратиться в компанию Кей-Софт (www.keysoft.su), Контактное лицо: Алексей Денисенко (доб. 102), .

4 Comments

  1. AlexSunS

    Автор а можно в личку, очень нужна помощь в проекте.

    Reply
  2. karpov

    Без проблем

    Можно на почту: karpov@keysoft.su

    Reply
  3. karpov

    Данная обработка только для RFID-считывателя Impinj R420.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *