时间:2024-05-04
杨 臻 张光会 李仁发
1(郑州师范学院信息科学与技术学院 河南 郑州 450044)
2(湖南大学信息科学与工程学院 湖南 长沙 410082 )
物联网中基于EPCglobal的RFID标签处理中间件的研究
杨臻1张光会2李仁发2
1(郑州师范学院信息科学与技术学院河南 郑州 450044)
2(湖南大学信息科学与工程学院湖南 长沙 410082 )
摘要为了解决物联网中EPCglobal框架中不同标签信息的处理问题,以及EPC标签和传统条码的数据兼容问题,提出一种基于EPCglobal框架的标签信息处理中间件。通过对标签存储结构和编码的研究,设计二进制EPC编码、EPC URI(Uniform Resource Identifier)和GS1条码的互相转换模块。采用对标签软硬件过滤的方法和对标签事件生成的研究,完善并实现EPCglobal标签处理中间件。测试结果表明,中间件很好地解决了从底层标签读取到标签事件生成上报整个流程的处理问题,在物联网中更全面、更兼容。
关键词物联网RFID标签EPCglobal中间件
STUDY ON RFID TAGS PROCESSING MIDDLEWARE BASED ON EPCGLOBAL IN INTERNET OF THINGS
Yang Zhen1Zhang Guanghui2Li Renfa2
1(School of Information Science and Technology,Zhengzhou Normal University,Zhengzhou 450044,Henan,China)2(School of Information Science and Engineering,Hunan University,Changsha 410082,Hunan,China)
AbstractIn order to solve the problems of different tags information processing in EPCglobal framework and data compatibility between EPC tags and traditional bar codes, a tag information processing mechanism based on the EPCglobal framework was proposed. Through the study on the structure and coding of tag storage structure, we designed an interchangeable coding module for binary EPC encoding, EPC URI (uniform resource identifier) and GS1 bar codes. By using the method of the hardware and software filtering on tags and studying the tag events generation, we improved and implemented the EPCglobal tag processing middleware. Test results showed that the middleware well solved the whole flow processing from the underlying tags reading to tag events generation and reporting. It was more comprehensive and compatible in favour of the development of Internet of things.
KeywordsIoTRFID tagEPCgloalMiddleware
0引言
近年来随着国家提出“感知中国”的理念,物联网技术得到飞速发展。RFID技术作为物联网技术的重要组成部分,其应用也越来越广泛[1]。目前,RFID技术在物流追踪、公司门禁、资产管理、商品零售、防伪识别、航空航天等多个领域得到应用。超高频(UHF)标签因其读写速度快、储存容量大、防冲突能力强等优点,其在市场上的占有率越来越高[2]。2004年,EPCglobal组织提出了UHF GEN2协议标准[3],该标准作为一个开放的标准,促进了标签尺寸减小与存储量扩展,推动了不同规格的标签和读写器的应用。
由于RFID技术的广泛应用,其带来的不同标签的信息处理问题逐渐显露。对此,EPCglobal组织提出了EPCglobal标准框架[4],并提出了标签编码转换标准TDS(Tag Data Standard)[5]和EPC信息处理模块ALE(Application Level Events)[6]。在实现标签信息处理功能时,如何完成从底层到应用层的标签信息处理,实现不同组别、不同类型的标签捕获,将成为EPCgloal框架更广泛应用的前提。同时,在各行业中存在EPC标签与传统GS1条码并存的情况,传统条形码应用者希望通过EPC信息的共享服务、域名服务乃至以后的云存储服务,加快产业的信息化。EPC标签的应用需要一个过渡的过程,EPCglobal框架实现了EPC和传统条形码在编码上的兼容,但在输入端并未实现条码体系的软硬件无缝过渡到EPC信息体系,这在一定程度上阻碍了EPCglobal框架的快速应用。
目前国内外相关研究也意识到了EPCglobal框架的局限性。Sun、IBM都开发了自有的RFID信息处理中间件,另外UCLAWINMEC RFID实验室、Bea Web Logic也都新设计了RFID中间件。但是IBM的RFID中间件设计大多基于自身所研发的产品,有太大的依赖性。其他几种中间件功能较为单薄,难处理多种类型标签和复杂的事件。国内相关研究也刚刚起步。文献[7,8]通过基于EPCglobal框架编写适配器的方式,能够整合目前各类RFID读写器,处理不同的RFID标签,但由于新读写器的不断涌现,硬件适配器很难含盖所有读写器,且EPCglobal的适配器不能兼容GS1条形码读写器。文献[9]提出了编码转换来兼容条形码,该方法不需要更改现有设备,但是其方法主要针对GTIN编码,具有局限性。
针对以上问题,考虑EPCglobal是目前最权威的EPC应用框架,本文对EPCglobal的标签处理中间件进行了研究,根据标签结构和编码的规则,完善编码转换机制,实现EPC标签信息与传统条码的兼容;同时,进一步完善标签过滤和上报机制,最终实现更全面、更兼容的标签处理机制。
1背景知识
1.1标签存储结构研究
标签的存储区分为EPC区、User区、TID区和Reserved区,如图1所示。
图1 标签存储结构
EPC区包含在00h至0Fh存储位置的CRC-16、在10h至1Fh存储地址的协议-控制(PC)位和在20h开始的EPC。EPC字段是该区最重要的部分,EPC码提供对实体对象的全球惟一标识。标签处理中间件主要处理标签的EPC数据,并根据EPC中不同位置的特定含义进行编码、转码、过滤。
1.2标签编码研究
EPCglobal框架的TDS模块规定了EPC标签的编码结构。EPC编码主要分为两种形式,即二进制EPC标签码和EPC URI编码。
二进制EPC编码是标签中EPC码的表示形式,以96位编码最为常见,96位EPC编码主要有头部、过滤码、分区码、厂商码、类别码、序列码这几个字段。头部指示编码的类型和长度,过滤码可以设置不同的值作为过滤条件。
EPC URI编码是TDS规定的EPCglobal上层应用的编码方式。常用的单个标签的EPC URI有EPC Tag URI和EPC Pure URI。它们都通过打点的形式来划分各个区段,这类似于传统IP网络中,IP地址的划分方式。两种EPC URI的区别在于,EPC Tag URI包含了过滤码这样的标签控制信息,其和EPC URI是可以互相转换的,在配置ALE时决定采用哪种EPC URI的形式。EPCglobal标准规定了二进制EPC和十进制EPC URI之间的映射关系,如图2所示。二进制EPC头部字段映射为EPC URI的编码类型字段;二进制的过滤码字段映射为EPC Tag URI的过滤码字段,而EPC Pure URI不包含该字段;分区码由于规定的是二进制标签内部的区段划分,故不用参与映射;厂商码、类别码、序列码在二进制EPC和EPC URI中都存在,故将每段映射到对应的区域即可。
图2 二进制EPC与EPC URI的映射关系
2标签信息处理中间件设计
2.1标签信息处理流程改进
图3 标签信息处理流程
为了使得EPC标签与传统条码信息兼容,让应用传统GS1条码的使用者,也能够参与到信息的共享,在原有EPCglobal框架的基础上,我们设计了如图3所示的标签信息处理流程。
根据EPCglobal框架,EPC标签信息由读写器读取后,将上传至ALE 模块,ALE模块过滤并选择符合条件的标签。过滤标签后,将标签信息组成为应用层需要的标签事件[10],供上层应用存储和使用。捕获应用将新生成的标签事件存储进EPCIS(EPC Information Services)数据库,EPCIS只存储EPC Pure URI。上层应用将从EPCIS里获取标签事件信息,并实现多种功能。
由于传统的GS1条码多用十进制表示,其读写设备和编码方式和EPC标签不同。所以,本文设计了两种方式对GS1条码兼容。一种方式是通过红外条码读写器,将读到的GS1条码信息转成EPC标签信息,并写入到EPC标签中。为此我们专门开发了GS1码转EPC码的转码模块。转码模块收录了目前常见的GS1条码和EPC码间的映射关系,自动根据条码信息进行无缝转换。另一种方式是将红外条码读写器读到的信息直接传给ALE模块。TDS模块规定了GS1条码和EPC URI之间的转换标准。我们可以对ALE模块进行修改,用于过滤和判别GS1条码。
2.2标签编码转换
由于GS1十进制条码和EPC编码方式不同,因此需要编码转换。由于EPC标签编码和GS1编码类型众多,为了说明问题,本节采用EPC编码中的Sgtin-96编码代表EPC码,相对应地采用GS1条码中的GTIN[11]码来对编码转换进行说明。
2.2.1GS1条码与EPC URI之间转换
TDS模块规定了GS1条码和EPC URI之间的转换关系。由于GS1条码的应用领域不同,其编码的风格和转换方式也不同,以GTIN编码为例的转换关系如图4所示。如果EPC URI对应的GS1码无序列号,则转换时需要去掉序列号。相应地,无序列号的GS1码转为EPC URI时需加上序列号。对于每个区段有长度要求的GS1码,不足长度的要在每段前补0。本文将该编码转换应用在红外读写器直接读取GS1条码上报给ALE模块的方式中,只需在ALE模块接收的标签信息中,增加对GS1条码的判断即可。
图4 GS1条码与EPC URI的映射关系
2.2.2GS1条码与二进制EPC之间转换
GS1码与二进制EPC 的转换并无标准规定。当GS1码转换为二进制EPC码时,可以先将其转换为EPC URI 再转换为二进制EPC码,也可以按照二进制EPC码和GS1码之间的关系,设计转码规则。本文根据二进制EPC和GS1码间的关系,开发了转码模块,实现了GS1码与二进制EPC的互相转换,如图5所示。无序列号的GS1码转成二进制EPC码前,要为其加上一个序列号,该序列号可以由转码模块根据实际转换的数目递增处理。
图5 GS1条码与二进制EPC的映射关系
2.3标签过滤
基于EPCglobal的规范,我们设计了硬件过滤和软件过滤结合的方式。硬件过滤即通过控制读写器读取符合条件的标签。软件过滤即在中间件处理过程中,通过编程对已读取的标签信息进行选择性地上报。
硬件过滤通过对标签的掩码(mask)、会话(session),已盘标记(target)三个参数的设置完成。
掩码是标签四个存储区的某一段编码。通过控制读写器调用API[12],可以设置掩码的区地址(四个存储区中的一个)、起始偏移地址(offset)和掩码长度(count)。对该段掩码设定固定值后,读命令只能读取和该区段位置掩码值一致的标签,而过滤掉不符合掩码的标签。
读写器对标签设置了四种会话,即session 0,1,2,3。会话用于对标签群进行分组,其可以用于大量标签盘点时的异步处理,防止多标签冲突;也可以用于过滤掉不处于操作会话的标签。每一张标签在一个盘点周期内,只能参加其中的一个会话。在每一个盘点会话中,标签为每个会话维持独立的已盘标记。每个已盘标记有两个值A和B,各盘存周期开始时,读写器选择盘点A或B标签,将其存入四个会话中的某一个会话。该会话结束后,已盘标记会自动从A切换到B,或从B切换到A。通过设定target参数,选择A或B开始盘点,并结合掩码与会话设定,完成多条件过滤。
软件过滤通过标签EPC区的过滤值来过滤。Epcglobal的TDS模块规定了每一种EPC编码的过滤码的编码。参照标准,在ALE模块中,用户可以设定特定的过滤值以选择符合条件的EPC码。每一个盘点周期内,在读写器读写范围内的标签可能会被多次读取,ALE模块对重复的EPC码进行了去重,保证了EPC事件的唯一性。由于软件过滤的灵活性,用户还可以在上层利用字符串函数进一步过滤。
2.4标签事件生成与上报
图6 标签事件生成与上报流程
一个标签事件包含了该标签的EPC号、收集的时间、地点、设备等信息。上层应用会对标签事件进行订阅,并定义标签事件的规则,以收集其想要的标签事件。过滤与选择服务器定义了标签事件周期Eventcycle[13],其规定了处理标签的周期。
上层应用可以从标签群报告中筛选标签,并以标签事件的形式将信息存入EPCIS中。标签事件生成与上报流程如图6所示。
3功能实现
3.1编码转换
根据2.2节中编码转换原则,编程实现编码转换。方法GS1ToPURI(String GS1)实现GS1码到EPC Pure URI的编码转换,方法GS1ToBin(String GS1)实现GS1码到二进制EPC码的转换。由于每种编码的编码规则不同,首先根据传入的GS1条码字符串的长度,通过switch结构进行分类,对于同样长度的GS1条码,再通过特征码逐一进行判断和转换,例如国内ISBN的前缀码是“978”或“979”,GTIN-13的国家码是“690”或“690”,这些都可以作为特征码判断特定的编码类型,从而分别进行处理。GS1码转EPC pure URI举例代码如下所示:
switch(size){
case 8: //GTIN-8
URI=″urn:epc:id:sgtin:00000″+GS1.substring(0,3)+″.0″+GS1.substring(3,7);
break;
case 12: //GTIN-12
URI=″urn:epc:id:sgtin:″+GS1.substring(0,6)+″.0″+GS1.substring(6,12);
break;
case17:
prefixcode=GS1.substring(0,3);
if((prefixcode.equals(″978″))||(prefixcode.equals(″979″)))
//ISBN
……
由于GS1条码和EPC URI是十进制字符串,而标签存储的是二进制EPC,并习惯以十六进制展示,所以编码转换中,存在十进制、十六进制、二进制之间的进制转换。作为公用的方法,我们在每次编码转换时,可以调用进制转换方法,以方便写入标签或展示。二进制转十进制代码如下所示:
private static String BinToDecimal(String binary) {
double d=0;
int length=binary.length();
for (int i = 0; i if((binary.substring(i,i+1)).equals(″1″)) { d+=Math.pow(2,(length-i-1)); } } return String.format(″%1.0f″,d); } 3.2标签过滤 硬件过滤通过调用RFID读写器的API来实现控制,以impinj的R2000模块为例,首先调用RFID_18K6CSet Post Match Criteria()方法对标签进行分组,该方法保证读写器应用在进行标签射频通信前,对标签进行过滤,再通过调用方法RFID_18K6CSetQueryTagGroup()实现对特定标签组的访问: (1) 掩码:RFID_18K6C_SINGULATION_MASK结构体规定了掩码的长度,起始位和mask数组。mask数组是字节数组,通过对数组每个单元的设定规定该数组单元的掩码值,如设mask[0]=0011.XXXX,即不关心首字节的低四位,而高四位为3。 (2) 会话:RFID_18K6C_TAG_GROUP结构体定义了会话, RFID_18K6C_INVENTORY_SESSION参数设定了标签的会话标记,从S0至S3,共四种。 (3) 已盘标记:RFID_18K6C_TAG_GROUP结构体定义了已盘标记,调用时设定为A或B即可。 掩码设置核心代码如下所示: singulationMsak.count=96; singulationMsak.offset=0; for(int i=0;i<62;i++) singulationMsak.mask[i]=mask[i]; singulationCriterion[0].match=1; singulationCriterion[0].mask=singulationMsak; singulationCriteria.countCriteria=1; singulationCriteria.pCriteria=singulationCriterion; status = RFID_18K6CSetPostMatchCriteria(hHandle, &singulationCriteria, 0); 掩码长度count可以设置范围为0至最大标签存储区长度,offset为掩码起始位。mask数组用来传入每个标签的掩码,本文将match参数设为1,表示功能操作要先符合掩码。最后调用RFID_18K6CSetPostMatchCriteria方法实现掩码过滤。 软件过滤通过设定fiter值或通过字符串过滤方法实现。 如利用String类的Startswith()方法通过过滤标签开头信息来区分不同标签类别;利用Substring()方法过滤特定位置特定特征的标签等。 3.3事件上报与捕获 读取到标签数据后,ALE模块对标签进行事件封装,供上层捕获应用。在生成事件和上报过程前,我们需要对ALE模块进行配置。 我们使用ALE模块中的fc-client配置逻辑读写器和事件周期,并通过XML注入[14]的方式,规定事件周期的具体内容,XML代码如下: …… urn:epc:id:sgtin:6910001.000000.*
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!