Интегрирование GPS-адаптеров с использованием решений WebSphere RFID

Используйте RFID Device Developer Kit и инфраструктуру WebSphere RFID для подключения

В этой первой части серии из двух статей вы узнаете, как реализовать GPS-адаптер на оконечном контроллере IBM® RFID, используя WebSphere® Studio Device Developer RFID Device Development Kit, и как проверить его в наборе программ IBM RFID промежуточного уровня, используя GPS-эмулятор.

Ребекка Чен, главный инженер-программист, IBM

Rebecca Chen photoРебекка Чен (Rebecca Chen) работает главным инженером-программистом в IBM China Software Development Lab в Taipei, Тайвань. Она пришла в IBM в 2000 году. Ребекка имеет опыт проектирования программного обеспечения, разработки и тестирования. Она получила степень магистра по компьютерным наукам и информатике в National Dong Hwa University. Областью ее интересов являются Global Security Toolkit, WebSphere Application Server, WebSphere Everyplace Access, WebSphere Everyplace Deployment, всепроникающие вычисления и RFID. В настоящее время она занимается решениями IBM IMS (IP Multimedia Subsystem). Имеет сертификаты Cisco Certified Network Associate (CCNA) и Project Management Professional.



Рик Ву, менеджер по разработке программного обеспечения, IBM

Rick Wu photoРик Ву (Rick Wu) работает менеджером по разработке программного обеспечения в IBM China Software Development в Taipei, Тайвань. Он пришел в IBM в 1998. Рик имеет опыт в проектировании программного обеспечения, разработке и тестировании. Получил степень магистра по компьютерным наукам и информатике в National Taiwan University. Областью его интересов являются всепроникающие вычисления, телекоммуникационные решения и RFID. В настоящее время он занимается разработкой и тестированием WebSphere Everyplace Deployment.



13.09.2006

Обзор

IBM RFID Device Development Kit (здесь и далее называемый RFID DDK) является мощным набором инструментальных средств для разработки адаптеров RFID-считывателей на решениях программного обеспечения промежуточного уровня IBM RFID. В него входят примеры проектов и новый эмулятор устройства, позволяющий вам выполнять агенты, основанные на шаблонах, не требуя наличия аппаратуры. В данной статье вы познакомитесь с программным обеспечением IBM RFID промежуточного уровня, в которое входят WebSphere RFID Device Infrastructure и WebSphere Premises Server. Также вы узнаете о RFID DDK и в пошаговом режиме разработаете GPS-адаптер и запустите его в наборе инструментальных программ промежуточного уровня IBM RFID. Во второй части этой серии статей вы узнаете о том, как развернуть код в IBM RFID, WebSphere RFID Device Infrastructure и WebSphere Premises Server с реальным GPS-устройством на PDA.

Что вы будете изучать

После прочтения статьи вы:

  1. Разберетесь в промежуточном программном обеспечении IBM RFID, включая WebSphere RFID Device Infrastructure и WebSphere Premises Server.
  2. Больше узнаете о IBM датчиках и преобразователях (actuator) (RFID).
  3. Узнаете, как использовать RFID DDK для разработки адаптеров для датчиков.
  4. Узнаете, как реализовать сбор данных на встраиваемых устройствах, таких как PDA или On Board Units (OBU) (оконечные модули), используя промежуточное программное обеспечение IBM RFID.

WebSphere RFID Device Infrastructure и IBM WebSphere Premises Server

RFID-решение состоит из нескольких типов датчиков и устройств преобразования, таких как RFID-теги и считыватели, визуальные индикаторы, выключатели и датчики. В данной статье мы будем работать с GPS-устройствами, типом датчика, который может предоставить информацию о месторасположении. Для подключения и обмена данными с GPS-устройствами необходим контроллер для управления ими. В данной статье мы будем использовать оконечный контроллер RFID. IBM использует технологию Workplace Client Technology Micro Edition, основанную на технологии Open Service Gateway initiative (OSGi) для реализации оконечного контроллера RFID, которая также называется WebSphere RFID Device Infrastructure. WebSphere RFID Device Infrastructure (или оконечный контроллер) может подключаться, обмениваться данными и управлять датчиками и устройствами преобразования, получать от них необработанные данные, собирать необработанные данные, фильтровать нежелательные данные и посылать данные на WebSphere RFID Premises Server (здесь и далее называемый Premises Server) с гарантией надежности и согласованности, даже если сеть между оконечным контроллером RFID и Premises Server является не стабильной. Используемая технология для передачи данных - WebSphere Connection Server Micro Edition.

Оконечный контроллер RFID передает данные в Premises Server, который выступает в роли посредника между оконечными устройствами и корпоративными серверами. Premises Server обрабатывает данные и преобразовывает их в значимые бизнес-события, определенные пользователями. Затем бизнес-события посылаются на сервер бизнес-интеграции через WebSphere Enterprise Service Bus. WebSphere Premises Server - это J2EE-приложение (Java™2, Extended Edition), которое использует такое программное обеспечение IBM как WebSphere Application Server, DB2 Universal Database Workgroup Server (или Oracle), WebSphere MQSeries, WebSphere Connection Server Micro Edition, Services Management Framework и Web-приложение для консоли администратора.

Premises Server посылает бизнес-события на сервер бизнес-интеграции, который координирует используемые серверы (Enterprise Resource Planning (ERP), Warehouse Management System (WMS), Supply Chain Management (SCM) и Manufacturing Execution System (MES)). Сервер бизнес-интеграции в решении RFID аналогичен серверам интеграции в других решениях, поэтому вы можете использовать сервер интеграции любого типа, с которым уже знакомы. Например, вы можете использовать IBM WebSphere Business Integration для интеграции используемых серверов.

Между оконечным контролером RFID и используемыми серверами имеется шина сообщений, состоящая из WebSphere Connection Server Micro Edition и Enterprise Service Bus. Благодаря такой архитектуре, данные и бизнес-события передаются из оконечного контроллера RFID на серверы надежно и согласованно.

На рисунке 1 показана типичная архитектура высокого уровня для RFID-решений.

Рисунок 1. Типичная архитектура для RFID-решения
Рисунок 1. Типичная архитектура для RFID-решения

Более подробная информация по датчикам и преобразователям IBM RFID приведена в разделе "Ресурсы".


RFID Device Development Kit

Многие устройства и машины определяют запросы и ответы, позволяющие пользователям контролировать и управлять ими. Эти запросы и ответы используют формат потоков данных, разработанный производителем. Если вы хотите писать программы, взаимодействующие с этими устройствами, то должны написать код для выполнения следующих действий:

  1. Установить каналы обмена информацией, например, TCP/IP или COM-порт RS232.
  2. Послать запросы (или команды) устройствам.
  3. Прослушивать поступление потоков ответных данных от устройства.
  4. Собрать и синтаксически проанализировать полученные потоки данных и активизировать соответствующие триггеры для определенной реакции.

Большая часть такого кода может повторно использоваться для других устройств. Следовательно, полезно использовать средства моделирования для генерирования повторно используемого кода и упрощения программирования управления устройством. Для этой цели вы можете использовать IBM RFID DDK (либо в составе WebSphere Studio Device Developer (здесь и далее называемого Device Developer), либо доступный для бесплатной загрузки).

RFID DDK является хорошим набором инструментальных средств для моделирования коммуникационных каналов (уровень соединения и транспортный уровень), потоков данных запроса и ответа (уровень потоков данных устройства) и триггеров, соответствующих потокам ответных данных, в XML-формате. Мы называем такой тип XML управляющим языком разметки (Control Markup Language - CML). В CML вы можете определить параметры коммуникационных каналов с устройствами, команды для управления устройствами и ответы устройств.

При использовании RFID DDK вам не нужно беспокоиться о том, как написать код для установки коммуникационных каналов, для передачи команд в устройства, для получения и анализа потока ответных данных и активизации триггеров, соответствующих потоку ответных данных. Вы просто должны сконцентрироваться на изучении и освоении спецификаций программирования того, как контролировать и управлять устройствами путем передачи запросов в устройства и получения и анализа ответов от них. Как только вы освоите спецификации, сразу можете начать определять CML-файл. После этого вы можете использовать RFID DDK, подключаемый модуль Eclipse WebSphere Studio Device Developer, для генерирования необходимого кода.

На рисунке 2 показано, как это работает:

Рисунок 2. Поток данных RFID DDK Device Adapter
Рисунок 2. Поток данных RFID DDK Device Adapter
  1. Приложение получает команду и сигнал от устройства и регистрирует заинтересованность в сигнале.
  2. Приложение указывает команде выполниться.
  3. Команда записывает сообщение в транспортный уровень.
  4. Транспортный уровень преобразовывает сообщение в формат, который может понять аппаратное устройство, а также записывает преобразованное сообщение в уровень соединения.
  5. Уровень соединения записывает байты в уровень библиотеки классов и OS.
  6. Уровень библиотеки классов и операционной системы записывает байты в аппаратное устройство.
  7. Уровень библиотеки классов и операционной системы читает данные из аппаратного устройства.
  8. Уровень соединения читает байты из уровня библиотеки классов и операционной системы.
  9. Транспортный уровень проверяет поток байтов, переданный уровнем соединения, и распределяет байты обратно в сообщения, которые понимает транспортный уровень.
  10. Транспортный уровень уведомляет устройства, которые прослушивают принимаемые сообщения.
  11. Если сигнал соответствует принимаемому из транспортного уровня сообщению, измерение уведомляется о принятом сигнале.
  12. Если сигнал соответствует принимаемому из транспортного уровня сообщению, приложение уведомляется о принятом сигнале.

В данной статье мы будем использовать GPS-устройство в качестве датчика, который генерирует информацию о месторасположении. Мы определим CML-файл для GPS-устройства в соответствии со спецификациями GPS National Marine Electronics Association (NMEA), а затем будем использовать RFID DDK для генерирования Java-кода, взаимодействующего с GPS-устройством. Вы увидите, насколько легко написать программу для взаимодействия с GPS-устройством. Вам не нужно писать много Java-кода; нужно только научиться писать на CML, который содержит параметры коммуникационных каналов с устройствами и потоки данных запроса и ответа для взаимодействия с устройствами. DDK генерирует необходимые Java-программы за вас. На рисунке 3 показана высокоуровневая архитектура решения, которое вы создадите в этой статье. RFID DDK использует CML для генерирования GPS-адаптера, который взаимодействует с GPS-устройством. RFID DDK также генерирует GPS-агента, который взаимодействует с шиной сообщений в оконечном контроллере.

Рисунок 3. Архитектура решения примера сценария, который мы будем разрабатывать
Рисунок 3. Архитектура решения примера сценария, который мы будем разрабатывать

Настройка среды

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

Программное обеспечение

На машине, предназначенной для разработки (которая выступает также в роли RFID оконечного контроллера), вам нужно иметь:

  • WebSphere Studio Device Developer 5.7.1
  • RFID DDK

На машине Premises Server вам нужен IBM WebSphere Premises Server 1.0.2, который включает:

  • DB2 8.1.4 Workgroup edition
  • WebSphere MQSeries 5.3 + CSD8 или старше (CSD9, CSD10).
  • WebSphere Application Server 5.1 + fixpack 1

Либо, если вы не хотите устанавливать WebSphere Premises Server, можете запустить premises-эмулятор на другом настольном или переносном компьютере. Дополнительная информация по настройке premises-эмулятора приведена в разделе "Premises-эмулятор Start Kimono" или в разделе "Ресурсы". В данной статье мы будем использовать premises-эмулятор вместо WebSphere Premises Server.

Аппаратное обеспечение

  • GPS-устройство, поддерживающее формат NMEA-сообщения. Вы можете использовать GPS-эмулятор для отладки. Для загрузки доступно несколько пробных эмуляторов. Дополнительная информация приведена в разделе "Ресурсы".
  • Настольный или переносной компьютер для запуска RFID DDK. Мы рекомендуем иметь 512K RAM (как минимум), при этом необходимо проверить, что на нем можно запустить WebSphere Studio Device Developer 5.7.1.
  • Настольный или переносной компьютер для запуска WebSphere Premises Server. Мы рекомендуем иметь как минимум 2 GB RAM. Однако в данной статье мы будем использовать premises-эмулятор вместо WebSphere Premises Server. Если вы сделаете так же, то вам понадобится только один настольный или переносной компьютер с 512K RAM (как минимум).

Шаг 1: Создать новую рабочую область

Запустите WebSphere Studio Device Developer и создайте новую рабочую область, например, C:\IBM\wsdd571\workspace\gps, как показано на рисунке 4:

Рисунок 4. Создание рабочей области
Рисунок 4. Создание рабочей области

Шаг 2: Разработайте GPS-адаптер

Используйте IBM RFID DDK для разработки GPS-адаптера.

Создайте новый проект RFID Device Agent

Для создания проекта RFID Device Agent выполните следующие действия:

  1. В рабочей области выберите File => New => Other.
  2. В диалоговом окне Select a wizard выберите RFID Device Development Kit слева и Device Agent Project справа, затем нажмите кнопку Next, как показано на рисунке 5:
    Рисунок 5. Диалоговое окно New Project
    Рисунок 5. Диалоговое окно New Project
  3. В диалоговом окне Create a New Device Agent project выполните следующие действия:
    1. Для Name введите GpsNmea.
    2. Для Package Base введите com.ibm.gps.nmea.
    3. Для Agent Type введите Reader Agent (мы будем рассматривать GPS как RFID-считыватель, а данные о месторасположении - как RFID-теги).
    4. Device Kit Device, выберите New Device Template.
    5. Device Kit Transport, выберите New Transport Template.
    6. Нажмите кнопку Next.
    Рисунок 6. Диалоговое окно New Device Agent Project
    Рисунок 6. Диалоговое окно New Device Agent Project
  4. Появится запрос на создание примеров проектов Kimono, требуемых сгенерированным кодом. Нажмите кнопку Yes.
  5. Появляется диалоговое окно Kimono Projects, как показано на рисунке 7. Нажмите кнопку Finish.
    Рисунок 7. Список примеров Kimono-проектов
    Рисунок 7. Список примеров Kimono-проектов

После установки примеров Kimono-проектов генерируется остальной код. Это займет некоторое время, будьте терпеливы. После завершения мастера вы увидите новый проект GpsNmeaReaderAgent, как показано на рисунке 8.

Рисунок 8. Новый проект GpsNmeaReaderAgent и проекты Sample Kimono
Рисунок 8. Новый проект GpsNmeaReaderAgent и проекты Sample Kimono

GpsNmeaReaderAgent - это новый настроенный Reader Agent, сгенерированный мастером. Вы должны изменить этот проект, для того чтобы он мог функционировать в архитектуре оконечного контроллера или в среде эмулятора. Вы узнаете, как это сделать, в разделе "Изменение GpsNmeaReaderAgent и ControllerAgent".

Создание CML-файла для уровня устройства GPS Nmea

Проект RfidIbmTutorialReaderDevice генерируется RFID DDK при выборе вами New Adapter Template в мастере New Device Agent. Поскольку это всего лишь шаблон, вы должны изменить содержимое этого CML-файла для нашего GPS-адаптера, выполнив следующие действия:

  1. Разверните проект RfidIbmTutorialReaderDevice, а затем RfidIbmTutorialReaderDeviceDevelopment, как показано на рисунке 9.
    Рисунок 9. Сгенерированный файл RfidIbmTutorialReaderDevice.cml
    Рисунок 9. Сгенерированный файл RfidIbmTutorialReaderDevice.cml
  2. Откройте RfidIbmTutorialReaderDevice.cml в текстовом редакторе. Пример CML для GPS-адаптера показан во фрагменте кода ниже, который является фрагментом NMEA GPSCML. Как видите, содержимое для GPRMC разделяется символами "," или "*".
    $GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70
    220516Время
    AИстинность - A-правильно, V-неправильно
    5133.82Широта
    NNorth (север)/South (юг)
    00042.24Долгота
    WEast (восток)/West (запад)
    173.8Скорость в узлах
    231.8Курс
    130694Дата
    004.2Отклонение
    WEast (восток)/West (запад)
    70Контрольная сумма
    <signal id="GPRMC">
    	<rate>1000</rate>
    	<message id="GPRMCMessage">
    		<ascii>$GPRMC</ascii>
    		<tokens>,*\n</tokens>
    		<parameters type="Map"> 
    			<parameter type="numericstring">
    				<key>Time</key>
    				<field>1</field>
    			</parameter>
    			<parameter>
    				<key>Status</key>
    				<field>2</field>
    			</parameter>
    			<parameter type="numericstring">
    				<key>Latitude</key>
    				<field>3</field>
    			</parameter>
    			<parameter>
    				<key>HemisphereNorthSouth</key>
    				<field>4</field>
    			</parameter>
    			<parameter type="numericstring">
    				<key>Longitude</key>
    				<field>5</field>
    			</parameter>
    			<parameter>
    				<key>HemisphereEastWest</key>
    				<field>6</field>
    			</parameter>
    			<parameter type="numericstring">
    				<key>SpeedKnots</key>
    				<field>7</field>
    			</parameter>
    			<parameter type="numericstring">
    				<key>TrueCourse</key>
    				<field>8</field>
    			</parameter>
    			<parameter>
    				<key>Date</key>
    				<field>9</field>
    			</parameter>
    			<parameter type="numericstring">
    				<key>Variation</key>
    				<field>9</field>
    			</parameter>
    		</parameters> 
    		<filter idref="Filter0"/>
    	</message>
    </signal>
  3. В Device Developer выберите RfidIbmTutorialReaderDevice.cml, а затем выберите Device Kit => Generate, как показано на рисунке 10. RFID DDK генерирует необходимый Java-код уровня устройства в проекте RfidIbmTutorialReaderDevice. Вам не нужно писать какой-либо Java-код самостоятельно.
    Рисунок 10. Генерирование Java-кодов уровня устройства с RfidIbmTutorialReaderDevice.cml
    Рисунок 10. Генерирование Java-кодов уровня устройства с RfidIbmTutorialReaderDevice.cml

Создание CML-файла для транспортного уровня GPS NMEA

Проект RfidIbmTutorialReaderTransport - это сгенерированный DDK адаптер транспортного уровня, который является посредником между DDK-адаптером и физическим или эмулированным считывателем или устройством. Это только шаблон, поэтому вы должны изменить содержимое CML-файла для вашего GPS-адаптера.

  1. Разверните проект RfidIbmTutorialReaderTransport, затем выберите RfidIbmTutorialReaderTransportDevelopment, как показано на рисунке 11.
    Рисунок 11. Сгенерированный файл RfidIbmTutorialReaderTransporte.cml
    Рисунок 11. Сгенерированный файл RfidIbmTutorialReaderTransporte.cml
  2. Откройте RfidIbmTutorialReaderTransport.cml в текстовом редакторе. Ниже показан пример CML-файла транспортного уровня для GPS-адаптера. Значения для TCP/IP host и remoteport установлены по умолчанию и используются GPS-адаптером для обмена информацией с GPS-эмулятором. Эти значения заменяются значениями, определенными в конфигурационном XML (edge-configuration-E1.xml), загруженном из Premises Server или premises-эмулятора, поэтому вам здесь не нужно заполнять реальный IP и порт GPS-эмулятора.
    <?xml version="1.0"?>
    <cml packagebase="com.ibm.esc"
    	 format="hex">
    	<version>3.2.0</version>
    	<vendor>IBM</vendor>
    	<transport id="RfidIbmTutorialReaderTransport"
    		 bundle="RfidIbmTutorialReaderTransport"
    		 implementation="RfidIbmTutorialReaderTransport"
    		 abstract="false">
    		<description>Rfid Ibm Tutorial Reader Transport</description>
    		<spec id="Specification">
    			<specdate>2005-08-25</specdate>
    			<spectitle>IBM Tutorial</spectitle>
    			<specvendor>IBM</specvendor>
    			<specversion>Version 3.2.0</specversion>
    		</spec>	
    		<tcpip>
    			<host>localhost</host>
    			<remoteport>2323</remoteport>
    		</tcpip>
    	</transport>
    </cml>
  3. Нажмите правой кнопкой мыши на RfidIbmTutorialReaderTransport.cml и выберите Device Kit => Generate как показано на рисунке 13. RFID DDK генерирует Java-код транспортного уровня в проекте RfidIbmTutorialReaderTransport. На следующем шаге вы должны реализовать код для обработки данных из GPS-устройства. Код накапливает данные от устройства. Когда накопится достаточный объем данных для анализа, они передаются в уровень устройства. При использовании NMEA GPS в качестве примера, передавать накопленные данные на уровень устройства можно тогда, когда он выдает символ новой строки (\n). Подробности в следующем шаге.
    Рисунок 12. Генерирование кода RfidIbmTutorialReaderTransport.cml
    Рисунок 12. Генерирование кода RfidIbmTutorialReaderTransport.cml
  4. Измените сгенерированный файл RfidIbmTutorialReaderTransport.java, как показано ниже. Обратите внимание на комментарии.
    Пример файла RfidIbmTutorialReaderTransport.java для GPS-адаптера
    protected int processInput(final byte[] bytes, final int length) throws Exception {
    	Object timestamp = null;
    	int i;
    	nt index=0;
    	
    //Поскольку NMEA GPS-устройство не имеет строки приветствия, мы
    //устанавливаем состояние transport в "STARTED" в первый раз.
    	if (this.getState()<TransportService.STARTED){
    startupMessageReceived(this, getCurrentTimestamp(),
    RfidIbmTutorialReaderTransportMessages.
    getVersionReportMessage());
    	}
    //Просмотреть данные, полученные из устройства, 
    и проверить, достаточно ли их 
    	//анализа на уровне устройства. 
    	Согласно спецификации NMEA GPS,  
    	//символ новой строки ("\n") является маркером. 
    	for (i=0;i<length;i++) {
    		if ((bytes[i]=='\n')&& (i>1)){
    			byte[] rfidBytes = new byte[i - index + 1];
    			System.arraycopy(bytes,index,rfidBytes,0,rfidBytes.length);
    			final RfidIbmTutorialReaderMessage message = 
    				new RfidIbmTutorialReaderMessage(rfidBytes);
    			if (timestamp == null) {
    				timestamp = getCurrentTimestamp(); /* 
    				set the timestamp */
    			}
    			//передать данные на уровень устройства
    			fireMessageReceived(timestamp, message); 
    				/* notify message received */
    			index=i+1;
    		} else {
    //Ничего не делать здесь. Вы должны ждать, пока 
    не придет следующий символ "\n" из
    //устройства. Данные будут накапливаться до следующего раза.
    		}
    	}
    	return index;
    }
  5. Теперь вы должны заново вычислить необходимые пакеты, которые нужно импортировать в файле MANIFEST.MF. Откройте файл MANIFEST.MF и разверните Import Packages, затем нажмите кнопку Compute. Добавляются пакеты com.ibm.esc.data, как показано на рисунке 13.
    Рисунок 13. Повторное вычисление файла MANIFEST.MF для проекта RfidIbmTutorialReaderTransport
    Рисунок 13. Повторное вычисление файла MANIFEST.MF для проекта RfidIbmTutorialReaderTransport

Изменение GpsNmeaReaderAgent и ControllerAgent

Коды агента считывателя, сгенерированные RFID DDK, предназначены для RFID-считывателей, работающих с выключателями, датчиками движения, световыми стойками и IO-устройствами. Для GPS-устройств вам не нужны такие сложные функции, поэтому вы должны изменить GpsNmeaReaderAgent и ControllerAgent для удаления ненужного кода, как показано ниже.

Код GpsNmeaReader.java
private SignalService gprmc;
private SignalService gpgga;
private SignalService gpgsa;
public void autonomousModeOff() {
LogUtility.logInfo(this,"autonomousModeOff()");
//if (readerDevice.getState() == DeviceService.STARTED)
//	autonomousModeOff.execute();
gprmc.removeSignalListener(this);
gpgsa.removeSignalListener(this);
gpgga.removeSignalListener(this);
}
public void autonomousModeOn() {
LogUtility.logInfo(this,"autonomousModeOn()");
gprmc.addSignalListener(this);
gpgsa.addSignalListener(this);
gpgga.addSignalListener(this);
//if (readerDevice.getState() == DeviceService.STARTED)
//	autonomousModeOn.execute();
	}
private void getDeviceControls() {
LogUtility.logInfo(this,"getDeviceControls()");
gprmc = readerDevice.getSignal(RfidIbmTutorialReaderDeviceService.GPRMC);
gpgsa = readerDevice.getSignal(RfidIbmTutorialReaderDeviceService.GPGSA);
gpgga = readerDevice.getSignal(RfidIbmTutorialReaderDeviceService.GPGGA);
	}
	protected void readerCameUp() {
LogUtility.logInfo(this,"readerCameUp()");
turnOffAllOutputs();
//readerNameMeasurement.executeWrite(readerId);
//autonomousModeOff.execute();
autonomousModeOn();
notifyHealthy();
	}
Код GpsNmeaReader.java
	private void setOutputs() {
		LogUtility.logInfo(this,"setOutputs()");
//  if (readerDevice.getState() == DeviceService.STARTED)
//	digitalOutput.executeWrite("F" + Integer.toHexString(lightState)); //$NON-NLS-1$
//	digitalOutput.executeWrite(new Integer(lightState)); //$NON-NLS-1$
	}
	//Обработка полученных сигналов
	public void signalOccurred(SignalService source, Object timestamp, Object data) {
		LogUtility.logInfo(this, "Signal occurred: " + source + " = " + data); 
			//$NON-NLS-1$ //$NON-NLS-2$
		//Для простоты мы работаем только с сигналом GPRMC 
		if (source.equals(gprmc)) {
			System.out.println("Get GPS GPRMC Data" + data.toString());
			String tagString = data.toString();
			byte btag[] = tagString.getBytes();
			RfidService tag = Rfid.createRfid(btag);
			RfidMap tagMap = new RfidMap(7);
			int count = 1;
			int antenna = -1;
			long timestampLong = ((Number) timestamp).longValue();
			RfidRead rfidRead = new RfidRead(readerId, timestampLong, 
				antenna, count); //$NON-NLS-1$
			RfidReads rfidReads = new RfidReads();
			rfidReads.addRfidRead(rfidRead);
			tagMap.put(tag, rfidReads);
			notifyTagRead(tagMap);		
		} else {
			//Для остальных сигналов мы просто выводим их на консоль.
			System.out.println("Get None GPRMC Data" + data.toString());
		}
	}

	protected DeviceService createDevice() {
		LogUtility.logInfo(this,"createDevice()");
		ConnectionService connection;
		DeviceService readerDevice = new RfidIbmTutorialReaderDevice(); // Here
		RfidIbmTutorialReaderTransport tutorialTransport = new RfidIbmTutorialReaderTransport();
		//Получить тип соединения (TCPIP или COM) из файла  
		//edge-configuration-E1.xml, загруженного из
		//Premises Server или premises-эмулятора. Мы будем использовать TCPIP.
		String connectionType = getProperty
			(GpsNmeaReaderAgentConstants.GPSNMEA_CONNECTION_TYPE);
		//Хотя мы определяем host и remoteport в CML-файле транспортного уровня,  
		//мы будем использовать host и port, определенные в edge-configuration-E1.xml.
		tutorialTransport.setConnection(tutorialTransport.getDefaultConnection());
		readerDevice.setTransport(tutorialTransport);
		tutorialTransport.start();
		return readerDevice;
	}
ControllerAgent.java в проекте KimonoControllerAgent
ControllerAgent.java in KimonoControllerAgent project
	protected String[] getSubscriptions() {
		if (selfTestMode) {
			//пустая операция контроллера в режиме самотестирования
			return new String[] {};	
		} else {
			return new String[] {
				readerSignalTopic,
				//Закомментируйте тему подписки, поскольку мы
				//не хотим, чтобы агент контроллера получал
				//GPS-информацию о месторасположении и публиковал 
				//дополнительные данные в WebSphere Connection Server 
				//Micro Edition.
				//Для RFID-считывателя, когда агент контроллера 
				//получает tag id, он будет публиковать 
				//тему "BEEP" в WebSphere Connection 
				//Server Micro Edition для активизации I/O 
				//и выдачи звукового сигнала. 

				//Нам не нужна здесь функция.
				//readerTagsTopic,
				palletFeedbackTopic,
				switchSignalTopic,
				motionSensorSignalTopic,
				portalCommandTopic };
		}
	}

Преобразование GpsNmeaReaderAgent в объединенный проект

Перед тем, как вы сможете передать вашу сборку на сборочный сервер (bundle server), необходимо преобразовать проект GpsNmeaReaderAgent в объединенный проект (bundle project). Для этого выполните следующие действия:

  1. Переключитесь в перспективу SMF, как показано на рисунке 14.
    Рисунок 14. Переключение в перспективу SMF
    Рисунок 14. Переключение в перспективу SMF
  2. Нажмите правой кнопкой мыши на GpsNmeaReaderAgent, затем выберите New => Bundle Folder, как показано на рисунке 15.
    Рисунок 15. Создание Bundle Folder (1)
    Рисунок 15. Создание Bundle Folder (1)
  3. В диалоговом окне New Bundle Folder выберите GpsNmeaReaderAgent. Снимите отметку с флажков Create IVEATTRS.XML и Create IVERES.XML, как показано на рисунке 16, и нажмите кнопку Finish.
    Рисунок 16. Создание Bundle Folder (2)
    Рисунок 16. Создание Bundle Folder (2)
  4. Откройте файл MANIFEST.MF и разверните Import Packages. Нажмите кнопку Compute для добавления списка пакетов, которые нужны GPS Reader Agent для работы. Результаты показаны на рисунке 17.
    Рисунок 17. Вычисление пакетов, которые нужно импортировать
    Рисунок 17. Вычисление пакетов, которые нужно импортировать
  5. Разверните Import Services и нажмите кнопку Add, чтобы отобразить доступные для импорта службы. Выберите com.ibm.kimono.edge.configuration.service.EdgeConfigurationService, как показано на рисунке 18, и нажмите кнопку OK.
    Рисунок 18. Выбор службы для импорта
    Рисунок 18. Выбор службы для импорта
  6. Сохраните и закройте файл MANIFEST.MF.
  7. Перекомпонуйте проект вашего считывателя, выбирая его в Package Explorer, а затем выбирая Project => Rebuild Project, как показано на рисунке 19.
    Рисунок 19. Перекомпоновка проекта GpsNmeaReaderAgent
    Рисунок 19. Перекомпоновка проекта GpsNmeaReaderAgent

Подготовка загрузчика сборки

Загрузчики сборки - это специальные сборки, используемые для загрузки других сборок. Они делают это путем указания исполняющей системе SMF-сервера других сборок, которые нужно активизировать. Сразу после завершения выполнения своей задачи они деинсталлируют себя из исполняющей среды SMF. Вам нужен загрузчик для запуска необходимых частей, включая GPS Reader Agent. Для подготовки загрузчика сборки выполните следующие действия:

  1. Из окна Package Explorer откройте проект RfidIbmTutorialReaderSimulationLoader.
  2. Откройте папку RfidIbmTutorialSimulationLoader, а затем пакет com.ibm.esc.rfid.ibm.tutorial.reader.simulation.loader.bundle для поиска Activator.java.
  3. Откройте Activator.java и удалите записи из списка, как показано ниже:
    public class Activator extends BundleInstallerActivator {
    
    	protected String[] getBundleNames() {
    		return new String[] { "LogService", //$NON-NLS-1$
    
    			//добавленный мост, поскольку мы хотим запустить оконечный 
    			контроллер и premises-эмулятор
    			//на двух различных машинах
    			"MBAF_Bridge_Admin", 
    			//Следующие строки предназначены для premises-эмулятора. 
    			Закомментируйте их,  
    			//поскольку мы хотим запустить оконечный контроллер на этой машине
    			// "KimonoPremisesSimulatorAgent", //$NON-NLS-1$
    			// "KimonoPremisesSimulatorServlet", //$NON-NLS-1$
    			// "KimonoPremisesSimulatorHmi", //$NON-NLS-1$
    			//Закомментируйте сборки эмулятора считывателя, 
    			поскольку они нам не нужны.
    			// "RfidIbmTutorialReaderSimulatorTransport", //$NON-NLS-1$
    			// "RfidIbmTutorialReaderSimulatorDevice", //$NON-NLS-1$
    			// "RfidIbmTutorialReaderSimulator",
    			//Замените RfidIbmTutorialReaderAgent на GpsNmeaReaderAgent,  
    			//поскольку мы будем использовать 
    			GPS-устройство вместо RFID-считывателя.
    			//"RfidIbmTutorialReaderAgent",
    			"GpsNmeaReaderAgent",
    			//Мы не используем light tree, поэтому 
    			закомментируйте следующие строки.
    			//"KimonoLightTreeSimulatorHmi",
    			//"KimonoLightTreeAgent", //$NON-NLS-1$
    			//"KimonoLightTreeSimulator",
    			//Нам не нужен RFID tag filter
    			//"KimonoDuplicatesFilter", //$NON-NLS-1$
    			//"KimonoIoSimulatorAgent", //$NON-NLS-1$
    			}; //$NON-NLS-1$}; //$NON-NLS-1$
    	}
    }
  4. Перекомпонуйте проект RfidIbmTutorialReaderSimulationLoader, выбрав его в Package Explorer, а затем выбрав Project => Rebuild Project .

Шаг 3: Тестирование приложения

Выполните шаги, описанные в данном разделе, для тестирования вашего приложения.

Запуск premises-эмулятора Kimono на машине, на которой выполняется premises-эмулятор

  1. Повторите шаги, указанные в разделе "Создание нового проекта RFID Device Agent" для создания примера проекта Kimono на машине с эмулятором Kimono premises server.
  2. Откройте проект KimonoAbstractReaderVersionTransitionSupport в окне Package Explorer.
  3. Разверните дерево, как показано на рисунке 20.
    Рисунок 20. Поиск файла исправлений (patch) и конфигурационного файла
    Рисунок 20. Поиск файла исправлений (patch) и конфигурационного файла
  4. Скопируйте PremisesSimulatorAgent.java и asnTags.dat из проекта KimonoAbstractReaderVersionTransitionsupport в проект KimonoPremisesSimulator, перезаписывая оригинальные файлы.
  5. В проекте KimonoAbstractReaderVersionTransitionsupport в каталоге KimonoVersion1.0.2Changes найдите файл edge-configuration-TUTORIAL.xml. Скопируйте его в проект KimonoPremisesSimulator в каталог com.ibm.kimono.premises.simulator.servlet, как показано на рисунке 21.
    Рисунок 21. Оконечная конфигурация для premises-эмулятора Kimono
    Рисунок 21. Оконечная конфигурация для premises-эмулятора Kimono
  6. Переименуйте файл edge-configuration-TUTORIAL.xml в edge-configuration-E1.xml и измените следующие строки:
    <propertyset id="MicroBrokerConfigurationAgent">
    …
    //Укажите здесь IP или имя хоста вашей машины с premises-эмулятором
    <property key="server.ip" value="pvc17.tw.ibm.comt"/>
    </propertyset>
    //Измените здесь RfidIbmTutorialReaderAgent на GpsNmeaReaderAgent 
    <propertyset id="GpsNmeaReaderAgent">
      <property key="portal.id" value="P1"/>
      <property key="reader.id" value="R1"/>
      <property key="transport.connection" value="com.ibm.esc.tcpip.connection.
    	  TcpipConnection"/>
    //Укажите здесь IP/имя хоста и порт вашего GPS-эмулятора
    <property key="transport.host" value="pvc18.tw.ibm.com"/> 
      <property key="transport.remoteport" value="2323"/> 
      ……
     </propertyset>
  7. Перекомпонуйте проект KimonoPremisesSimulator, выбрав его в Package Explorer, а затем выбрав Project => Rebuild Project.
  8. Выберите Run => Run, затем создайте новый сборочный сервер, выбрав SMF Bundle Server и нажав кнопку New, как показано на рисунке 22.
    Рисунок 22. Создание сборочного сервера SMF
    Рисунок 22. Создание сборочного сервера SMF
  9. В диалоговом окне SMF Bundle Server подтвердите значения по умолчанию и нажмите кнопку Run, как показано на рисунке 23.
    Рисунок 23. Запуск сборочного сервера SMF
    Рисунок 23. Запуск сборочного сервера SMF
  10. В Package Explorer выберите все пакеты Kimono. Нажмите правой кнопкой мыши на одном из выбранных пакетов и выберите SMF => Submit Bundle, как показано на рисунке 24.
    Рисунок 24. Передача сборок на SMF Bundle Server
    Рисунок 24. Передача сборок на SMF Bundle Server
  11. Для импорта сборок оконечного контроллера перейдите в перспективу SMF и выберите закладку SMF Bundle Servers.
  12. Нажмите правой кнопкой мыши на Bundles ниже Adminlocalhost:8080/smf и выберите Import Bundles, как показано на рисунке 25.
    Рисунок 25. Импорт сборок оконечного контроллера
    Рисунок 25. Импорт сборок оконечного контроллера
  13. В диалоговом окне Import bundles выберите необходимые для импорта сборки, отметьте флажок Replace Bundle и нажмите кнопку Finish, как показано на рисунке 26.
    Рисунок 26. Импорт сборок оконечного контроллера из файловой системы
    Рисунок 26. Импорт сборок оконечного контроллера из файловой системы
  14. Выберите Run => Run, затем создайте исполняющую систему SMF, как показано на рисунке 27.
    Рисунок 27. Создание исполняющей системы SMF (1)
    Рисунок 27. Создание исполняющей системы SMF (1)
  15. В диалоговом окне SMF Runtime оставьте значения по умолчанию и нажмите кнопку Run, как показано на рисунке 28.
    Рисунок 28. Создание исполняющей системы SMF (2)
    Рисунок 28. Создание исполняющей системы SMF (2)
  16. Перейдите в перспективу SMF и в закладку SMF Bundle Servers.
  17. Разверните дерево bundles, нажмите правой кнопкой мыши на kimonoConsoleLog и выберите Install.
  18. Нажмите правой кнопкой мыши на KIMONO_PREMISES_SUMILATOR_LOADER и выберите install, как показано на рисунке 29.
    Рисунок 29. Установка загрузчика premises-эмулятора Kimono
    Рисунок 29. Установка загрузчика premises-эмулятора Kimono

Запуск оконечного контроллера (с GPS-адаптером) на машине RFID DDK

  1. Выберите Run => Run. Затем создайте сборочный сервер SMF.
  2. В диалоговом окне SMF Bundle Server оставьте значения по умолчанию и нажмите кнопку Run.
  3. Выберите все пакеты Kimono, пакеты RfidIbmTutorialReader и проект GpsNmeaReaderAgent. Затем нажмите правой кнопкой мыши на одном из выбранных пакетов и выберите SMF => Submit Bundles, как показано на рисунке 30.
    Рисунок 30. Передача сборок на сборочный сервер SMF
    Рисунок 30. Передача сборок на сборочный сервер SMF
  4. Для импорта сборок оконечного контроллера перейдите в перспективу SMF и в закладку SMF Bundle Servers. Нажмите правой кнопкой мыши на Adminlocalhost:8080/smf bundle server и выберите Import Bundles, как показано на рисунке 31.
  5. В диалоговом окне Import Bundles выберите необходимые сборки для импорта и отметьте флажок Replace Bundle, затем нажмите кнопку Finish.
  6. Выберите Run => Run, затем создайте исполняющую систему SMF.
  7. После появления диалогового окна SMF Runtime оставьте значения по умолчанию и нажмите кнопку Run, как показано на рисунке 31.
    Рисунок 31. Создание исполняющей системы SMF
    Рисунок 31. Создание исполняющей системы SMF
  8. Перейдите в перспективу SMF и в закладку SMF Bundle Servers. Разверните дерево сборок, нажмите правой кнопкой мыши на RFID_IBM_TUTORIAL_READER_SIMULATION_LOADER и выберите Install, как показано на рисунке 32.
    Рисунок 32. Установка сборки RFID_IBM_TUTORIAL_READER_SIMULATION_LOADER
    Рисунок 32. Установка сборки RFID_IBM_TUTORIAL_READER_SIMULATION_LOADER
  9. Запустите ваш TCP/IP GPS-эмулятор.

Проверка результатов

Вы должны включить журналы трассировки для проверки результатов на premises-эмуляторе и оконечном контроллере. Для этого:

  1. Добавьте файл esc.properties в каталог <WSDD_HOME>, как показано на рисунке 33, на машинах premises-эмулятора и оконечного контроллера.
    Рисунок 33. Файл esc.properties и структура файла
    Рисунок 33. Файл esc.properties и структура файла
  2. В файле esc.properties укажите esc.tracelevel=10.
  3. Перезапустите Device Developer для активизации изменений в конфигурации.
  4. Повторите шаги из раздела "Запуск premises-эмулятора Kimono". Вы должны увидеть окно консоли Premises Simulator, как показано на рисунке 34.

    Вы можете увидеть, что оконечный контроллер загружает конфигурации (edge-configuration-E1.xml) из premises-эмулятора. Затем premises-эмулятор получает теги из считывателя R1. (На самом деле мы закодировали данные о месторасположении в виде длинной шестнадцатиричной строки и рассматриваем ее как RFID tag ID. Мы назвали GPS-устройство R1 в edge-configuration-E1.xml.). Наконец, premises-эмулятор посылает строку REJECTED назад в оконечный контроллер, поскольку закодированная строка с месторасположением не является одним из предопределенных RFID-тегов в asnTags.dat. Это только демонстрационный пример, предназначенный для того, чтобы показать вам, что premises-эмулятор может не только принимать данные из оконечного контроллера, но и передавать их обратно в оконечный контроллер.

    Рисунок 34. Трассировочная информация в окне консоли для premises-эмулятора Kimono
    Рисунок 34. Трассировочная информация в окне консоли для premises-эмулятора Kimono
    [INFO] 2006-08-09 10:33:16.796 - PremisesSim: Publish arrived: 
    	receiving/portal/P1/signal/tags
    [INFO] 2006-08-09 10:33:16.796 - PremisesSim: Got tags from reader: R1
    [DEBUG] 2006-08-09 10:33:16.796 - PremisesSim: Publishing: 
    	receiving/portal/P1/command/feedback = REJECTED
    [INFO] 2006-08-09 10:33:16.796 - PremisesSim: REJECTED{7b48656d6973706865726545617
    374576573743d452c20566172696174696f6e3d39303830362c205374617475733d412c2054
    696d653d32333334352c204c617469747564653d302c2053706565644b6e6f74733d302c204
    8656d697370686572654e6f727468536f7574683d4e2c204c6f6e6769747564653d302c20446
    174653d3039303830362c2054727565436f757
    273653d307d=[{R1:1155090825218:-1:1}]}
  5. Повторите шаги из раздела "Запуск оконечного контроллера". Вы должны увидеть окно консоли оконечного контроллера, как показано на рисунке 35.

    Оконечный контроллер анализирует GPGGA, GPGSA и GPRMC-данные из трассировочной информации. После этого, он кодирует GPRMC-данные в шестнадцатиричную строку и публикует ее на WebSphere Connection Server Micro Edition. Затем строка с месторасположением передается в модуль фильтрации RFID-тегов, CaseTagFilter. Наш случай - это не строковый формат тега, поэтому он не будет фильтроваться. Строка с месторасположением передается затем в premises-эмулятор. Поскольку premises-эмулятор передает обратно строку REJECTED, мы можем увидеть, что оконечный контроллер принимает строку REJECTED.

    Рисунок 35. Трассировочная информация в окне консоли для эмулятора GPS-адаптера
    Рисунок 35. Трассировочная информация в окне консоли для эмулятора GPS-адаптера
    GPRMC = {HemisphereEastWest=E, Variation=90806, 
    Status=A, Time=23345, Latitude=0,
    	SpeedKnots=0, HemisphereNorthSouth=N, 
    	Longitude=0, Date=090806, 
    	TrueCourse=0}
    [DEBUG] 2006-08-09 10:33:45.234 - GpsNmeaRead-P1: Publishing: 
    	device/reader/P1/signal/tags = {7b48656d69737068657265456173
    	74576573743d452c20566172
    	696174696f6e3d39303830362c205374617475733d412c2054696d
    	653d32333334352c204c6174
    	69747564653d302c2053706565644b6e6f74733d302c2048656d697
    	370686572654e6f727468536
    	f7574683d4e2c204c6f6e6769747564653d302c20446174653d3039
    	303830362c2054727565436f
    	757273653d307d=[{R1:1155090825218:-1:1}]}

Резюме

В будущем мир будет заполнен датчиками, которые могут использоваться для сбора полезной для бизнеса информации. Все эти датчики будут иметь различные программные и коммуникационные интерфейсы. Быстрая интеграция этих датчиков будет критична для принятия бизнес-решений. WebSphere RFID DDK - это мощные инструментальные средства, необходимые вам для легкой и эффективной разработки и тестирования связующего кода.

Один из примеров использования примера из данной статьи - управление автопарком. Вы можете запустить пример в On Board Units (OBUs) для взаимодействия с GPS-устройствами на автомобилях или грузовиках, а затем передать информацию о месторасположении обратно в центр обработки данных. Если на автомобилях имеются другие датчики, например, датчики температуры, RFID-считыватели, противоугонные устройства и т.д., вы можете использовать аналогичные концепции и процессы для разработки адаптеров устройств и агентов для этих датчиков. OBU становится накопителем данных, собирающим полезную информацию об автомобилях. После прочтения данной статьи вы сможете начать обдумывать даже еще более инновационные и интересные способы использования RFID-технологии в различных сферах бизнеса с RFID DDK и программным обеспечением промежуточного уровня IBM RFID.

Во второй части вы узнаете, как развернуть код в промежуточном программном обеспечении RFID, в WebSphere RFID Device Infrastructure и на WebSphere Premises Server с реальным GPS-устройством на PDA.


Загрузка

ОписаниеИмяРазмер
Код примера для данной статьиsource.zip11KB

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=WebSphere
ArticleID=169895
ArticleTitle=Интегрирование GPS-адаптеров с использованием решений WebSphere RFID
publish-date=09132006