<!-- 提取技术文章 -->
接下来的文章会介绍如何安装、配置和部署BEA的RFID产品,包括BEA Edge Server, BEA Enterprise Server和 BEA Compliance Express。默认的,每个步骤都是接下来步骤的基础。并且该配置是基于WebLogic Server 9.1的,本篇首先介绍BEA Edge Server。
一. 安装及使用
1. 产品安装(以windows为例)
2. 打开阅读器模拟器、Edge Server和管理控制台
- 打开资源管理器,浏览到<edge_home>in 目录
- 打开阅读器模拟器:双击RunReaderSim.bat.
- 修改<edge_home>/etc/edge.props文件,修改后如下:
com.connecterra.ale.servicePort = 6060
com.connecterra.ale.savantID = SAVANT_ID
com.connecterra.ale.siteID = SITE_ID
com.connecterra.ale.telemetryPeriod = 5000
或者可以使用Edge Server Configuration Wizard来进行配置,配置过程如下:
- 从windows菜单选择运行Configuration Wizard 或者直接运行<edge_home>/common/bin/config.cmd命令:
- Configuration Wizard打开后,首先进入欢迎页面,选择其中的下一步。
- 在出现的页面中配置各参数如下:
- 选择下一步,在确认页面中选择“创建”,最后确认。
- 打开Edge Server:浏览到<edge_home>in 目录,双击 RunEdgeServer.bat.
- 修改<edge_home>/etc/admin-console.props,修改后如下:
com.connecterra.ualegui.edgeServerURLs=http://localhost:6060
- 打开管理控制台: 浏览到<edge_home>in 目录,双击 RunAdminConsole.bat.
3. 使用管理控制台和ECSpecs来验证操作
安装BEA Edge Server是相对比较容易的,但是需要验证它的工作是否正确就需要我们进一步学习了。使用管理控制台和阅读器模拟器,我们可以快速的配置一个“事件周期”(“Event Cycle Specification”, or “ECSpec”)来模拟读取标签。下面就是创建一个简单的ECSpec并且使用管理控制台的测试特性。
在开始配置前,首先需要理解的一点是RFID应用程序其实就是BEA Edge Server的一个客户端。BEA Edge Server实现了ALE(Application Level Events)规范,ALE客户端需要定义一个ECSpec,然后提交给ALE接口(即Edge Server)。Edge Server使用ECSpec的内容来控制阅读器的限制条件、使用哪个逻辑阅读器、报告返回等等。其中限制条件可能是例如何时开始读卡、何时停止读卡;一个逻辑阅读器是一个任意的RFID阅读点,通常是具有统一命名的一组天线;报告指Edge Server返回给应用程序的信息。
具体操作如下:
- 在管理控制台里面左边的设备浏览器中,选中ECSpecs
- 在右边选择“NEW”,这样会打开ECSpec Editor
- 使用“>>”按钮将ConnecTerra1 和ConnecTerra2两个逻辑阅读器到选择窗口。
- 在“Stop”区,选中“Duration”,输入5000,这个域以毫秒为单位。配置好地ECSpec如下:
- 在左边选择“Reports”
- 在右边选择“New Report”,就按默认设置创建名为“Report_0”的报告,配置后的窗口如下:
- 在菜单中选择ToolsàTest,看到如下窗口:
- 在管理控制台可以通过选择设备浏览器中的RFID Devices下面的SimReadr来查看设备统计信息。有两组图,每个逻辑阅读器或者天线,每个逻辑阅读器都可以看到如下信息:
- 读周期时间—一个完整的读周期所用的时间,一个读周期是Edge Server和阅读器之间的最小交易单位,它被三个因素影响:(1) Edge Server和阅读器之间协议交互所用的时间,这和驱动设计和实现有关;(2)网络延迟;(3)阅读器内部读卡机制、设计等等。
- 读周期数-- Edge Server执行的总读周期数
- 标签数:Edge Server所能读到的标签数
4. 配置多个阅读器模拟器
在本节配置完成后,我们从逻辑上将实现如下的部署图:
首先,创建第二个阅读器,并且配置Edge Server来使用它
- Make a copy of, and put the copy in the bin directory.
- 复制RunReaderSim.bat,放在bin目录下,重命名为RunReaderSim2.bat
- 打开RunReaderSim2.bat,将READER_PORT修改为5051,保存,关闭文件
- 运行新的模拟器(RunReaderSim2.bat).
- 在管理控制台配置Edge Server使用新的阅读器:选择设备管理器里面的RFID设备,在右边窗口选择SimReadr,并且Clone
- 将新阅读器的名字改为“SimReadr2”,Reader Port 改为5051.两个逻辑天线的名字修改为“ConnecTerra3” 和“ConnecTerra4”.
- 为了测试,需要在ECSpec中添加新的逻辑阅读器,首先导出已经存在的ECSpec,然后再导入并且添加新的逻辑阅读器。
二. 读取标签信息
1. 运行Immediate示例
Immediate示例使用ALE“Immediate”方式来演示同步报告发布。
- 打开阅读器模拟器、Edge Sever和管理控制台
- 打开资源管理器,浏览目录 <edge_home>samplesImmediateSample.
- 修改run.bat
set EDGEHOST=localhost
set EDGEPORT=6060
- 点击run.bat,观察输出,注意报告有7个标签
- 使用管理控制台ECSpec editor导入示例的ECSpec,ECSpec文件也在该目录中
测试导入的ECSpec:
2. 程序分析
/**
* ImmediateSample 是使用ALE api 从指定的逻辑读卡器读取一个EPC 列表的小
* 程序
* ECSpec 将从一个XML文件中读取,周期报告也将以XML格式打印出来
*/
public class ImmediateSample
{
//程序的使用说明,其中的命令行参数ecSpecFilename 应该是ECSpec.xml,//aleServiceURL 形如:http://localhost:6060/axis/services/EPCglobalALEService。
private static void usage()
{
System.out.println(
"usage: ImmediateSample <aleserviceurl></aleserviceurl><ecspecfilename></ecspecfilename>");
System.exit(1);
}
public static void main(String[] args)
{
System.out.println( "Immediate Sample, XML-based" );
//分析命名行参数
if ( args.length != 2 )
usage();
String aleServiceURL = args[0];
String ecSpecFilename = args[1];
try
{
// 创建一个ALE客户端实例
ALE aleClient = new SOAPALEClient(new URL(aleServiceURL));
// 从XML文件读取ECSpec (Event Cycle Specification)
// ECSpec 包括定义事件周期的所有参数,也可以在程序中指定
ECSpec myECSpec = readECSpec(ecSpecFilename);
// 使用 ALE.immediate()方法,发出事件请求
// immediate() 在一个事件周期完成后会阻塞,并且返回报告
System.out.println( " sending request to Edge Server...");
ECReports myECReports = aleClient.immediate(myECSpec);
System.out.println( " ...received response.
");
printECReports(myECReports);
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* 从XML文件读取ECSpec的辅助方法
*/
private static ECSpec readECSpec(String ecSpecFilename)
throws IOException,
XMLDeserializerException
{
// ECSpec 和ECReports等对象可以转换为XML 表现形式
// XMLSerializationFactory是一个单态的工厂,从中可以通过转换完成XML
// 的序列化和反序列化
// 下面,使用XML反序列化将XML 中的内容转换为一个ECSpec 对象实例
XMLSerializationFactory factory =
XMLSerializationFactory.getInstance(
XMLSerializationSyntax.EPCGLOBAL_ALE_1_0);
XMLDeserializer deserializer = factory.createDeserializer();
FileReader fileReader = new FileReader(ecSpecFilename);
ECSpec ecSpec = deserializer.deserializeECSpec(fileReader);
return ecSpec;
}
/**
* 将XML形式的ECReports输出到控制台
*/
private static void printECReports(ECReports ecReports)
throws XMLSerializerException,
IOException
{
System.out.println("Received the following ECReports:
");
// XMLSerializationFactory是一个单态的工厂,获取实例
XMLSerializationFactory factory =
XMLSerializationFactory.getInstance(
XMLSerializationSyntax.EPCGLOBAL_ALE_1_0);
XMLSerializer serializer = factory.createSerializer();
//使用XML序列化将ecReports对象实例转化为XML形式,并输出.
Writer w = new OutputStreamWriter(System.out);
serializer.serialize(ecReports, w, true);
w.flush();
}
}
三. 写入标签信息
1. 运行 ImmediateProgram 示例
- 确保只打开一个阅读器模拟器,并且只选中其中一个天线的一个标签:
- 打开命令行窗口,浏览到<edge_home>samplesImmediateProgramSample
- 执行如下命令:
>run.bat urn:epc:tag:gid-64-i:1.4.10
- 运行结果应该是XML格式的PCWriteReport,表示写入TAG程序运行的结果,如下:
Received the following PCWriteReport:
<PCWriteReport date="2005-12-16T16:10:44.265Z" savantID="EdgeServerID" specName=
"=0" totalMilliseconds="531" totalTrials="1" xmlns="http://schemas.con
necterra.com/alepc">
<applicationData>application specific data can go here</applicationData>
<wasSuccessful>true</wasSuccessful>
<status>SUCCESSFUL</status>
<physicalReaders>
<physicalReader>SimReadr</physicalReader>
</physicalReaders>
<failedLogicalReaders/>
<cacheSize>0</cacheSize>
<epc>urn:epc:tag:gid-64-i:1.4.10</epc>
<successfulLogicalReader>ConnecTerra1</successfulLogicalReader>
</PCWriteReport>Press any key to continue . . .
- <wasSuccessful> 元素表示写入程序成功,<status>元素相应的也设置为SUCCESSFUL ;如果写入出现问题,<status> 将会提供诊断用的信息,例如CACHE_EMPTY, READER_ERROR等等
- <physicalReaders> 元素表示那个物理阅读器参与了标签写操作,我们的操作中可以看到是SimReadr
- <failedLogicalReaders> 为空,表示写操作周期中没有失败的阅读器
- <cacheSize> 被设置为零,可以在程序中设置该值,该值也与ECSpec中的设置相关。
- <epc> 显示写入标签的值: urn:epc:tag:gid-64-i:1.4.10
- Finally, <successfulLogicalReader> indicates that the logical reader ConnecTerra1 was the logical reader that wrote this tag.
程序分析
/**
* ImmediateProgramSample 是使用ALEPC api来通过逻辑读卡器将EPC值写入标
* 签的一个简单程序
*/
public class ImmediateProgramSample
{
//程序使用说明
private static void usage()
{
System.out.println("usage: ImmediateProgramSample <epcval></epcval>");
System.exit(1);
}
public static void main(String[] args)
{
System.out.println( "Immediate Program Sample, XML-based" );
//分析命名行参数
if ( args.length != 3 )
usage();
//程序的使用说明,其中的命令行参数pcSpecFilename 应该是PCSpec.xml,//aleServiceURL 形如:http://localhost:6060/axis/services/EPCglobalALEService。
// epcVal是EPC值
String aleServiceURL = args[0];
String pcSpecFilename = args[1];
String epcVal = args[2];
try
{
// 创建一个ALEPC客户端实例.
ALEPC aleClient = new AxisALEPCClient(new URL(aleServiceURL));
// 从XML文件读取PCSpec (Programming Cycle Specification)
// PCSpec包括定义写入周期的所有参数,也可以在程序中指定
PCSpec pcSpec = readPCSpec(pcSpecFilename);
// 使用ALEPC.immediate()方法,发出事件请求
// immediate() 在一个事件周期完成后会阻塞,并且返回报告
System.out.println( " sending request to Edge Server...");
PCWriteReport writeReport = aleClient.immediate(pcSpec, new URI(epcVal));
System.out.println( " ...received response.
");
printWriteReport(writeReport);
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
*从XML文件读取PCSpec的辅助方法
*/
private static PCSpec readPCSpec(String pcSpecFilename)
throws IOException,
PCXMLDeserializerException
{
// PCSpec和PCWriteReport等对象可以转换为XML 表现形式
// PCXMLSerializationFactory是单态工厂类,从中可以通过转换完成XML
// 的序列化和反序列化
// 下面,使用XML反序列化将XML 中的内容转换为一个PCSpec对象实例
PCXMLSerializationFactory factory = PCXMLSerializationFactory.getInstance();
PCXMLDeserializer deserializer = factory.createDeserializer();
FileReader fileReader = new FileReader(pcSpecFilename);
PCSpec pcSpec = deserializer.deserializePCSpec(fileReader);
return pcSpec;
}
/**
* 将XML形式的PCWriteReport输出到控制台
*/
private static void printWriteReport(PCWriteReport writeReport)
throws PCXMLSerializerException,
IOException
{
System.out.println("Received the following PCWriteReport:
");
//获取PCXMLSerializationFactory的实例,序列化PCWriteReport
PCXMLSerializationFactory factory = PCXMLSerializationFactory.getInstance();
PCXMLSerializer serializer = factory.createSerializer();
//使用XML序列化将writeReport对象实例转化为XML形式,并输出
Writer w = new OutputStreamWriter(System.out);
serializer.serialize(writeReport, w, true);
w.flush();
}
}
本篇我们简单介绍了BEA Edge Server的安装、使用和简单的标签读、写过程,大家可以根据实际情况,在此基础上开发自己的应用。后面我们还会介绍Edge Server中的一些其他读写方式和工作流模块。
<!--文章其他信息-->
作者简介
|
孟和 |
孟和(dev2dev id: menghe),BEA系统中国有限公司实习工程师,天津大学博士研究生,研究方向为数据库和计算机网络。在无线内容下载应用系统方面有丰富的经验,熟悉J2EE中间件领域,对Derby、Beehive等开源项目感兴趣。 |
分享到:
相关推荐
Rifidi edge开发文档,包括:Rifidi Edge Server User;Rifidi Edge Server Quick Start Guide;Rifidi Edge Server Developer
介绍Rifidi Edge Server的SDK用法. Rifidi Edge Server 是开源的EPC RFID过滤和采集层中间件.
介绍Rifidi Edge Server的SDK用法. Rifidi Edge Server 是开源的EPC RFID过滤和采集层中间件.
RFID开发介绍—概述.pdf
RFID开发的DLL函数说明,附带大量实例!实用!
介绍Rifidi Edge Server的SDK用法. Rifidi Edge Server 是开源的EPC RFID过滤和采集层中间件.
关于Edge Server SDK部署,网上资源很少,希望对大家有帮助
介绍Rifidi Edge Server的使用和配置方法. Rifidi Edge Server 是开源的EPC RFID过滤和采集层中间件.
关于RFID的仿真应用开发,在rifidi平台上的开发,非常详细
android系统开发RFID读写功能的SDK
RFID技术介绍 1. 什么是RFID? 2. RFID系统构成 3. RFID系统工作流程示例 4. RFID 的历史 5. RFID国外现状 6. RFID国内现状 7. RFID的未来 8. RFID的特点 9. RFID的优势 10.RFID应用方案概览 11.RFID技术导入步骤
RFID读写器开发包,包括技术文档,C#,C++,VB等多种不同语言编写的RFID界面,以及相关使用说明。
根据不同读卡器类型我们定义了读卡器驱动...文档将总体介绍RFIDLIB的组成结构,各开发包之间的联系还有调用流程等,同时需要参考各读卡器的用户手册文档(包含在读卡器驱动目录里) ,该文档有详细介绍读卡器的功能开发。.
RFID开发 WinCE开发 移动设备开发
rfid文件 系统开发
RFID开发包,读写RFID标签的技术,可以完成RFID标签的读取操作
android系统开发RFID读写功能的SDK,绝对可用,一般比较难找
1.前言41.1. 概述41.2. 适用设备41.3. 版权说明41.4. 读写基本流程53. 快速上手64. 连接说明84.1. RS232 连接 84.2.
RFID读写器的二次开发 文件内含DLL以
详细介绍java 在 RFID应用开发中的使用。