底层读写器协议浅析
0 引言
射频识别(Radio Frequency Identification,RFID)是一种非接触式的自动识别技术,它利用无线射频方式进行双向通信并交换数据,以达到识别目标的目的。由于其具有标签容量大、数据保密性好、传输可靠性高,以及非可视识别、移动识别、多目标识别、定位及长期跟踪管理等特点,RFID技术在2005年入选“建议企业引入的十大策略技术”,并被公认为本世纪十大重要技术之一[1]。
目前,RFID技术被广泛应用于生产、防伪、产品跟踪、交通、物流、资产管理等众多领域,射频识别技术已经成为企业提高供应链管理水平,降低生产成本,实现企业信息化管理,增强企业竞争能力的有力技术手段和工具。
但是,在传统的RFID应用与开发中,RFID读写器与其控制器的客户端之间的通信协议并没有统一,它们之间的连接需要适配读写器厂商私有的接口。因此,当RFID读写器在硬件或软件上稍有变动,则客户端的软件就必须随之一起改动。当用户采用不同供应商提供的产品时,其维护成本也随之提高,这就造成了开发工作的重复性以及系统之间的不兼容性和维护的复杂性,同时也影响了RFID技术的发展和普及。
为了解决RFID技术在相关领域缺乏统一标准的问题,全球电子产品编码协会(Electronic Product Code global,EPCglobal)于2007年发布了底层读写器协议(LLRP)[2]。该协议定义了RFID读写器与其控制器客户端的接口规范,使得软件开发者能够更加专注于客户的需求,极大地提高了RFID应用系统的构建效率。本文将通过Fosstrak平台对LLRP进行分析,以深入理解LLRP的数据结构、工作流程及实现方式等,更好地掌握LLRP的使用方法。
1 Fosstrak平台简介
Fosstrak是一个实现了EPC网络规范的开源的RFID软件平台。它提供了软件的核心组件,旨在为应用程序开发人员和集成商提供一些支持。Fosstrak由EPCIS Repository、Tag Data Translation(TDT)Library、Filtering& Collection Middleware with ALE and LLRP Support和LLRP Commander四个模块组成。本文中主要使用到Fosstrak的LLRP Commander模块。
LLRP Commander是Fosstrak以Eclipse插件的形式对LLRP读写器控制器(客户端)的实现。通过它可以对兼容LLRP协议的RFID读写器进行配置与管理操作。
LLRP Commander提供了XML、binary、graphical三种不同的编辑视图,使开发者可以方便地检查和修改LLRP消息。图1展示了LLRP Commander的XML编辑视图。
2 LLRP标准的分析
LLRP应用于RFID读写器与控制器之间,它负责读写器与控制器之间的连接,且可与读写器与标签通信的空中接口协议进行互动[3-4],如图2所示。它将低层读写器的射频协议屏蔽掉,而暴露给客户端的是统一的协议接口,使得客户端可以无差别地对低层的读写器进行控制和管理。
LLRP协议为客户端与读写器之间提供了通信的格式和过程。这些交互过程以LLRP消息为基本的数据单元进行通信,主要包括客户端-读写器消息和读写器-客户端消息。
2.1 LLRP的基本数据类型
LLRP的基本数据类型包括消息(Messages)、参数(Parameters)和域(Fields)[2]。其中消息可以包含一个或多个参数或域,而一个参数也可以包含一个或多个参数(子参数)或域。
从客户端到读写器的消息包括:获取和设置读写器的配置信息;读写器的能力发现(包括读写器的天线数、通用输入/输出端口数等);管理读写器的清点和访问操作。从读写器到客户端的信息包括:读写器的状态报告、射频监测的信息、清点和访问操作的结果报告。
LLRP消息中定义了两个基本的操作规格即读写器操作规格(Reader Operations Specification,ROSpec)和访问规格(Access Specification)。
ROSpec负责处理读写器的操作(Reader Operation,RO)。在一个RO中至少包含了一个规格AISpec或者RFSurveySpec。其中AISpec负责标签的盘点作业,RFSurveySpec负责获取读写器操作天线的射频功率的信息。除此之外,在ROSpec中还可以根据实际情况加入其他的规格,比如ROReportSpec(它描述了一个报告的发送时机以及报告中包含的内容等信息),或者一些自定义的规格(LLRP灵活的可扩展性允许供应商按照一定的规则对其进行扩展,有利于产品的创新与竞争)。
Access Specification描述了对标签内存中非EPC信息的操作。
2.2 LLRP的工作流程
典型的LLRP客户端与读写器之间的交互过程如图3所示。
从图3可以看出,LLRP的工作流程主要包括以下几个阶段[5]:
(1)客户端将向读写器发送配置命令。这些配置可以包括读写器的能力发现、配置和查询读写器的设置。读写器能力发现包括读写器的天线数、天线接收灵敏度、天线支持的空中协议、通用输入输出端口(GPIO)数等。在配置读写器设置时,除了可以设置天线的模式、GPIO的状态等,还可以设置ROReportSpec、AccessReportSpec等作为默认的报告规格。在客户端发送配置消息后,读写器在完成了相关的设置之后会向客户端发送相应的响应消息。
(2)读写器配置阶段执行完毕后,客户端向读写器发送LLRP所定义的ROSpec和AccessSpec等操作命令集,对读写器标签的存取操作进行设置与更新。在该阶段,如果在ROSpec规格中没有设置相关的报告规格(如ROReportSpec),则会使用在读写器配置阶段所设置的默认报告规格;如果在ROSpec中设置了相关的报告规格,则将覆盖默认的报告规格。
(3)在相关配置工作完成之后,对发生的符合条件的事件,将开始执行读写器操作并向客户端返回相应的信息报告。读写器操作包括标签的盘点、存取和对读写器的射频监测等。
3 LLRP消息的实现
LLRP的两个端点(客户端与读写器端)之间是通过TCP/IP进行通信的[2],同时LLRP消息以二进制编码的格式在它们之间进行传输。这种方式是高效、快速的。LLRP规范中定义了LLRP消息的二进制编码格式,如图4所示。如果开发者直接以二进制的形式实现LLRP消息的话,将是困难的、低效的。因此,根据以上对LLRP的分析,以及LLRP Commander中的实现方式,并考虑到编程语言的效率,一般采用“面向文档”和“面向对象”两种方式对LLRP消息进行实现。
面向文档的实现方式是基于XML的方式[6]。由于LLRP消息是嵌套的,即消息可以包含一个或多个参数或域,而一个参数也可以包含一个或多个参数或域,因此XML标签的可嵌套性和可扩展性的特点非常适合于LLRP消息的实现。利用官方提供的llrp.xsd文档,开发人员可以方便地构造出一个面向文档的LLRP消息。在LLRP Commander中提供了一些LLRP消息的例子,其中ADD_ROSPEC消息的XML描述见图1。
在图1中,根节点ADD_ROSPEC是LLRP中的消息,子节点ROSpec、ROBoundarySpec、OSpecStartTrigger、ROSpecStopTrigger、AISpec、AISpecStopTrigger、InventoryParameterSpec是LLRP中的参数,而ROSpecID、Priority、CurrentState、ROSpecStartTriggerType等其他的子节点则为LLRP中的域。
面向对象的实现方式就是将特定的消息和面向对象中定义的对象一一对应[7]。在以面向对象的方式实现LLRP消息时,LLRP规范中每一个特定的消息都对应一个类,每一个特定的参数也都对应一个类,而域则是作为消息类与参数类的成员变量。如果在LLRP的定义中某个消息包含某个参数,则此参数也将作为该消息的一个成员变量。该消息类与其所包含的参数类之间构成了一种组合关系。这里,同样以ADD_ROSPEC消息的面向对象实现方式的UML类图为例来进行说明,如图5所示。
在图5中,ADD_ROSPEC就是一个消息类,它对应于LLRP中的一个消息,而该消息类的一个成员变量ROSpec则是ROSPEC参数类的对象,它对应于LLRP中的一个参数。同时,在参数类ROSPEC中也包含参数类ROBoundarySpec等。
4 结论
LLRP作为读写器与客户端之间的一个接口标准,它不需要去适配各个读写器厂商私有的接口,而是提供了标准的接口来接入不同厂商的读写器,极大地提高了RFID应用系统的构建效率。通过对LLRP数据结构、工作流程的分析,以及对其实现方式的比较,使开发者能够对其有更深入的认知,提高应用效率,为实现相关应用系统奠定了坚实的基础。
参考文献
[1] 武君胜,李瑞贤.射频识别系统底层协议开发工具包设计[J].计算机测量与控制,2010,18(1):179-182.
[2] EPCglobal Inc. llrp_1_1-standard-20101013 [EB/OL]. http://www.gs1.org/gsmp/kc/epcglobal/llrp/llrp_1_1-standard-20101013.pdf.
[3] 宋林.构建基于LLRP的可扩展的RFID中间件[D].北京:北京邮电大学,2011.
[4] 林强,赵辰,罗艳.底层识读器协议规范与测试浅析[J].条码与信息系统,2009(6):21-23.
[5] 张益,杨国.基于低级别读写器协议的无线射频识别中间件系统[J].中兴通讯技术,2010,16(2):42-45.
[6] POULOPOULOS D. A generalized binding framework for the low level reader protocol(LLRP)[D]. Cambridge: Massachusetts Institute of Technology, 2008.
[7] CONSTANTINOU F. An object-oriented implementation of a low level reader protocol(LLRP) library[D]. Cambridge: Massachusetts Institute of Technology, 2008.