引 言
无线射频识别技术(Radio Frequency IdenTIficaTIon,以下简称RFID)是从20 世纪90 年代 兴起的一项自动识别技术,它利用无线射频方式进行非接触双向通信,以达到识别目的并交 换数据。随着RFID 技术和应用的发展,RFID 系统日趋复杂,RFID中间件的出现很好地解 决了将物理基础架构收集到的信息传递给企业应用程序的问题。中间件的主要任务是对读写 器传来的与标签相关的事件、数据进行过滤、汇集和计算,减少从读写器传往企业应用的巨 量原始数据、增加抽象出的有意义的信息量,并提供应用程序级别的接口来查询RFID事件 。
ALE是应用层事件简称,最初作为Savant 应用的一部分开发而成,如今归属于国际 标准组织EPCglobal,它是旨在把低层的电子产品代码(EPC)数据和高层的企业系统相互连 接的EPCglobal 网络计划的一部分,现在已成为标准。RFID中间件应该提供符合ALE 标 准的接口供企业系统或者第三方组件访问,扩大中间件的适用范围,因此设计和开发可重构 的、可靠的ALE 引擎对实现成熟的RFID中间具有重要意义。
1 相关研究
1.1 应用层事件(ALE)标准
RFID 读写器在工作时不停地读取标签,造成同一个标签在短时间内可能被读到很多次, 这些数据如果直接发送给应用程序将为通信网络带来很大的负担,所以需要RFID 中间件对 这些原始数据进行一层收集和过滤的处理。ALE的出现就是为了减少原始数据的冗余性,为 应用系统从大量数据中提炼出有效的业务逻辑。ALE 层介于应用业务逻辑和原始标签读取层 之间,它接收从数据源(一个或多个读写器)中读取的标签信息,而后按照时间间隔等条件 收集数据,将重复或不敢兴趣的EPC数据剔除过滤,同时可以进行计数及组合等 *** 作,最 后将这些信息对应用系统进行汇报。
在 ALE 中,应用系统可以定义这些内容:在什么地方(地点可以映射一个或多个读写 器及天线)读取标签,将在怎样的时间间隔内(决定时间、某个外部事件触发)收集数据, 如何过滤数据,如何整理数据报告内容(按照公司、商品还是标签分类),标签出现或消失 时是否对外报告,以及统计读取到的标签数目等。
ALE 标准定义的是一组接口,它不牵涉到具体实现。在EPCglobal 组织的规划中,支 持ALE 标准是RFID中间件的最基本的一个功能;这样,在统一的标准下,应用层上的调用 方式就可统一,应用系统也就可以快速部署。因此,实现ALE 引擎对RFID中间件具有重要意义。
1.2 OSGi
OSGi(Open Systems Gateway IniTIaTIve)[4]规范为网络服务定义了一个标准的、面向组件 的计算环境,在此环境中软件组件可以从运行中被安装、升级或者移除而不需要中断设备的 *** 作,还可以动态的发现和使用其他库或者应用程序。采用OSGi的一种考虑是因为中间件 的开发要依据组件概念来进行设计,这些组件被开发为软件包,通过引用的方式来进行互调。 在OSGi框架中,应用程序可以单独进行部署,以软件包的形式进行开发。正确的使用该模 型可以使软件包进行重用和快速替换,并且使第三方软件包重用成为可能。
2 引擎设计
如图1所示,ALE引擎由引擎内核、数据处理和事件处理三大模块组成,它们结合起来 满足ALE标准所要求的接口功能。
图1 ALE引擎架构
2.1 事件处理模块
事件处理模块分为四个字模块:应用层事件接口是符合 ALE 标准的程序接口,提供标 准的方法供应用程序调用以获取ALE标准的功能;事件请求模块分析应用程序的事件请求,即ALE 标准中定义的ECSpec ,并根据请求对事件报告组建模块、引擎内核、数据过滤模 块、数据分组模块和数据格式转换模块进行相应的配置;事件报告组建模块负责按照应用程 序的事件请求生成数据报告,数据报告有统一的格式,但是应用程序可以指定报告的种类(当 前读取标签/消失标签/新增标签)和数据分组的规则;根据ALE标准应用程序可以以异步 的方式请求数据报告,报告分发模块提供了以异步方式向事件报告订阅者发送报告的功能, 发送方式可以是HTTP, FTP, Web Service 等多种方式。
2.2 引擎内核
事件管理是 ALE 引擎中最核心的功能,引擎内核模块负责管理事件的生命周期,如图 2 所示。在ALE 模型中有几个最基本的概念:读周期(Read Cycle),事件周期(Event Cycle)和事件周期定义(ECSpec)。读周期是和读写器交互的最小时间单元,一个读周期的 结果是一组EPCs集合,读周期的时间长短和具体的天线、无线射频协议有关,读周期的输 出就是ALE 层的数据来源。事件周期可以是一个或多个读周期,它是从用户的角度来看待 读写器的,并可以将一个或多个读写器当作一个整体,是ALE 接口和用户交互的最小时间 单元。应用业务逻辑层的客户在ALE 中定义好ECSpec之后,就可接收相应的事件周期的 数据报告。
图2 事件周期定义(ECSpec)状态转移图
2.3 数据处理模块
数据处理模块分为四个子模块:数据队列模块负责缓存数据,当读写器读取到一个标签 时会把数据放入相应的队列,其他的数据处理模块会把数据从队列中取出然后进行处理,当 队列满了或者超时数据会从队列中删除;数据格式转换模块根据应用的要求对数据做出格式 转换;数据过滤模块根据ECSpec的定义对数据进行过滤,过滤规则包括‘包含模式’和‘排除模式’两种模式[3],最后出现在报告中的标签信息至少要与‘包含模式’列表中的一 个模式匹配,并且不能与任何出现在‘排除模式’中的模式匹配;数据分组模块根据ECSpec 的定义对过滤后的数据进行分组和统计。
3 引擎内核实现
引擎内核采用事件驱动的方式实现,见图 3。
图3 引擎内核实现
一个 ECSpec 在内核里对应着一个事件周期管理者,应用层对于ALE 读接口的调用会 映射到具体的事件周期管理者上,由事件周期管理者来完成接口提供的功能。当一个 ECSpec 被定义时(即调用define 或immediate方法),引擎就会为这个ECSpec 创建 对应的事件周期管理者,同时创建一个事件周期对象和各种触发器。当ALE 接口调用请求 者第一次对某个ECSpec发出调用请求时(例如调用subscribe, poll, immediate 方法)将激活对应的事件周期管理者,此时由这个事件周期管理者所控制的事件周期对象和各个触 发器也被激活,事件周期对象开始按照ECSpec中所定义的边界条件开始和结束激活状态, 并收集RFID 标签数据。当最后一个接口调用请求的调用方法返回时,事件周期管理者再次 进入休眠状态,对应的事件周期对象和各个触发器也停止运行,直到被再次唤醒或者随着该 ECSpec 的撤销被撤销。
ECSpec 会在未请求、已请求和活跃状态三种状态的之间迁移,状态策略模块根据状 态转换的规则转换ECSpec的状态。外部调用请求会导致状态的变迁,不同的状态下接收 到相同的调用请求除了执行不同的 *** 作外还可能使ECSpec 变迁为不同的后继状态,因此 这里使用了状态模式。每一时刻ECSpec 都会处于某一种状态中,事件周期管理者接收到 接口调用请求后都会把请求代理给状态策略模块,由当前状态策略决定对调用如何响应和确 定后继状态是什么。
ALE 标准中定义了事件周期触发器,并且具体定义了一个时间触发器。在引擎中,除了 这个时间触发器外,所有事件周期边界条件都被看作是一种触发器,因此抽象出一个触发器 接口Trigger 。事件周期中定义的各种的边界条件, 如duation, repeatPeriod, stableSetInterval 等等都是抽象Tigger 的具体实现。因此抽象Trigger 可以理解为影响事 件周期开始和结束的触发条件,而ALE 标准中所定义的ECTrigger 成为抽象Trigger 的其中 一种具体实现。在具体触发器的创建过程中使用了抽象工厂模式,事件周期管理者在初始化 的时候调用工厂方法创建各种具体的触发器。
4 结 论
使用事件驱动的方式设计和实现了 ALE 引擎,减低了各模块之间的耦合度,有利于引 擎的维护和扩展。抽象了事件周期触发器概念,令所有边界触发条件和触发器能够统一管理 和工作,简化了把用户自定义的触发器加入引擎的过程,令触发器系统有更好的扩展性。作 为RFID 中间件中重要的部分,该引擎为可重构的RFID中间件提供了很好的支持。而采用 OSGi 技术实现ALE 引擎得以实现诸如动态更新数据处理和事件处理组件的需求,对于中小 型企业应用RFID技术,可以动态地组合ALE 引擎的功能,不再需要一次性购买大量复杂 的RFID中间件产品,从而形成了一种快速的和可扩展的RFID 中间件解决方案,降低了RFID应用技术的成本。
责任编辑:ct
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)