24 февр. 2014 - Дмитрий Виноградов

Управление RFID считывателями из 1С:Предприятие

  1. Подключение из 1С
  2. Работа с RFID модулем считывателя
  3. Управление пользовательским интерфейсом мобильного ТСД

Введение

В статье демонстрируется применение общей программной платформы Шина RFID для управления RFID считывателями из 1С:Предприятие. Для полноты обзора, будет рассмотрена работа с мобильным терминалом сбора данных (ТСД).

Для работы понадобится установить следующие компоненты из дистрибутива Шины RFID:

1. Шина RFID — основной сервис, обеспечивающий управление RFID устройствами.

2. Проксирующий сервис RFID устройств — сервис работы с независимыми RFID устройствами (мобильные ТСД, стационарные компьютеры, эмуляторы и др.).

3. Мобильный клиент ТСД — приложение для мобильных терминалов сбора данных, обеспечивает сбор, передачу и визуализацию информации с устройств ввода/вывода мобильного терминала.

4. Внешняя компонента 1С — специализированный COM/ActiveX компонент, обеспечивающий взаимодействие 1С:Предприятие с Шиной RFID.

Подключение из 1С:Предприятие

Работа с Шиной RFID из 1С:Предприятие осуществляется через внешнюю компоненту AddIn.RfidBus1cClient.

После поключения к Шине RFID:

ПодключитьВнешнююКомпоненту("AddIn.RfidBus1cClient");
КлиентШиныРФИД = Новый COMОбъект("AddIn.RfidBus1cClient");

// УстановитьСоединение(Адрес, Порт, Логин, Пароль) к Шине RFID
КлиентШиныРФИД.УстановитьСоединение("127.1", 7266, "admin", "admin");

можно осуществлять управление подключенными к ней RFID считывателями:

  • получить список считывателей;
  • подписаться на события считывателя;
  • послать команды RFID считывателю.

Штатно закрыть соединение с шиной можно через сответствующий метод:

КлиентШиныРФИД.ЗакрытьСоединение();

При разрыве соединения с Шиной RFID, у клиента автоматически аннулируется подписка на события считывателей, а у RFID считывателей, не имеющих иных подписчиков, деактивируется RFID модуль. 

Работа с RFID модулем считывателя

Для поиска RFID меток, необходимо подписаться на события RFID считывателя и перевести радиочастотный модуль устройства в режим поиска:

// Получить список созданных в Шине RFID считывателей
Считыватели = КлиентШиныРФИД.ПолучитьСчитыватели();

// Подписываемся на события всех доступных считывателей
Для Каждого Считыватель Из Считыватели Цикл

    // Подписаться на получение общих событий от считывателя (найдена/потеряна метка/GPI)
    КлиентШиныРФИД.ПодписатьсяНаСчитыватель(Считыватель.Id);

    // Начать считывание меток
    КлиентШиныРФИД.ЗапуститьЧтение(Считыватель.Id);

КонецЦикла;

Теперь, если у формы зарегистрировать внешнее событие, то в него будет передаваться информация о найденных и потеренных RFID считывателем метках:

&НаКлиенте
Процедура ОбработчикСобытий(Источник, Событие, Данные)
    ДеталиСобытия = КлиентШиныРФИД.ПолучитьДеталиСобытия(Данные);
    
    Если Событие = "TransponderFoundEvent" Тогда
        Для Каждого Метка Из ДеталиСобытия.Метки Цикл
            Сообщить(ДеталиСобытия.Считыватель.Id + ". Найдена метка: " +  Метка);
        КонецЦикла; 
    КонецЕсли;
КонецПроцедуры

Управление пользовательским интерфейсом мобильного ТСД

Создание приложений для мобильных RFID считывателей осуществляется через Мобильный клиент ТСД. Сформированное в информационной системе XML-описание интерфейса, отправляется через специализированную команду Шины RFID на Мобильный клиент ТСД. Мобильный клиент ТСД, на основе XML, создает графический пользовательский интерфейс и передает на Шину RFID, через механизм специализированных событий, информацию о манипуляции с графическими элементами.

Пример, формирующий интерфейс главного окна приложения мобильного RFID считывателя демонстрационного стенда RFID центра в GS1/UNISCAN:

<Window>

<Button 
      Id="CloseButton" Left="300" Top="0" Width="20" Height="20" 
      IsEnabled="True" RaiseEvents="False" 
      Text="X" 
      StandartCommand="CloseApplication" 
/>

<Label Id="HeaderLabel" ... RaiseEvents="False" Text="Инвентаризация">
   <Font Family="Arial" Size="16" Style="Bold" />
</Label>

<Table Id="List" ... RaiseEvents="False"> 
   <Columns> 
      <Column Name="ArticulColumn" Header="Артикул"/> 
      <Column Name="FoundColumn" Width="30" Header="Найдено"/>
      <Column Name="CountColumn" Width="30" Header="Всего"/>
   </Columns> 
   <Rows>
      ...
      <Row>
         <Field Column="ArticulColumn" Value="Футболка(Белая, L)"/> 
         <Field Column="FoundColumn" Value="0"/> 
         <Field Column="CountColumn" Value="21"/> </Row>
      </Row>
      ...
   </Rows>
</Table>

<Label Id="StatLabel" ... RaiseEvents="False" Text="Найдено 0 из 264."/>
<Button Id="ModeButton" ... RaiseEvents="True" Text="Поиск"/>
<Button Id="ProcessButton" ... RaiseEvents="True" Text="Старт"/>
<Button Id="ClearButton" ... RaiseEvents="True" Text="Очистить"/>

</Window>
Интерфейс мобильного считывателя созданный через 1С

Convergence CS101

Интерфейс мобильного считывателя созданный через 1С

Motorola MC9090

Объекты имеют следующие общие атрибуты:

  • идентификатор объекта Id, используется для обработки событий интерфейса: 
// Подписаться на события нажатия на кнопку
КлиентШиныРФИД.ПодписатьсяНаСпециализированноеСобытие(Считыватель.Id, "ButtonClick");

// Обработка события нажатия на кнопку
&НаКлиенте
Процедура ОбработчикСобытий(Источник, Событие, Данные)
    ...
    Если Событие = "ReaderSpecialEvent" Тогда
        Если ДеталиСобытия.СпециализированноеСобытие = "ButtonClick" Тогда
            ...
            ИдентификаторКнопки = ДеталиСобытия.Параметры.ПолучитьЗначение("Id");
            Если ИдентификаторКнопки = "ClearButton" Тогда
                // Создать и отослать интерфейс
            КонецЕсли;
            ...
        КонецЕсли;
    КонецЕсли;
    ...
КонецПроцедуры;
  • положение и размер элемента (Left, Top, Width, Height), могут задаваться динамически, в зависимости от разрешения экрана считывателя:
ПараметрыСпецКоманды = Новый COMОбъект("RfidBus.ParametersValues");

// Получить разрешение экрана мобильного терминала сбора данных
Результат = КлиентШиныРФИД.ВыполнитьСпециализированнуюКоманду(Считыватель.Id, 
		"GetWorkareaSize", ПараметрыСпецКоманды);

Ширина = Результат.ПолучитьЗначение("Width");
Высота = Результат.ПолучитьЗначение("Height");
  • активность элемента IsEnabled: True — активен, False — не активен.
  • интерактивность RaiseEvents: True — передавать события взаимодействия на Шину RFID, False — не передавать.