《基于嵌入式 RFID 中间件的标签数据处理_1.docx》由会员分享,可在线阅读,更多相关《基于嵌入式 RFID 中间件的标签数据处理_1.docx(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于嵌入式RFID中间件的标签数据处理1引言射频识别(RadioFrequencyIdentification,RFID)中间件介于RFID阅读器和上层应用之间,用来屏蔽不同型号的阅读器和各种协议标准的标签,为上层应用软件提供统一接口。另外,还负责整合和过滤数据,产生报表,减少应用层软件的处理负担,使海量标签数据的传输和应用成为可能。目前,国内外的RFID中间件体积庞大,只适用于PC机,不能移植到嵌入式阅读器中。本文提出一种可直接运行于各种嵌入式阅读器设备,基于EPCglobalALE标准的嵌入式RFID中间件,并详细研究其中的标签数据处理流程。2软件体系结构嵌入式RFID中间件体系结构如图1
2、所示。采用Linux2.4.18作为操作系统,操作系统自带有网络驱动和串口驱动。DSP驱动是为本阅读器DSP模块开发的驱动模块,相当于一个连接到中间件服务器的阅读器。中间层是GoAheadWeb服务器和嵌入式数据库SQLite,上层是阅读器管理,阅读器协议服务和ALE服务模块。620)this.style.width=620;border=0图1软件体系结构GoAheadWeb服务器是一款面向嵌入式系统的Web服务器,作为中间件的数据转发和模块承载平台。阅读器与客户端之间,阅读器与阅读器之间的数据通信都是由GoAheadWeb服务器完成。ALE服务模块,数据库管理模块,阅读器管理模块,阅读器协
3、议服务模块等的开发也是建立在GoAhead基础上。数据库采用SQLite3.3.9。SQLite是轻型,免费和开源的嵌入式数据库。提供绝大多数标准的SQL92语句,工作速度快,满足中间件数据处理的实时要求。在嵌人式系统中,数据库管理、执行、维护的简单化比企业数据库提供的复杂应用更重要。因此选用SQLite数据库在大小和功能方面是一个理想的折中。ALE协议服务模块是过滤和统计数据的基层部件与高层应用程序之间的接口。ALE协议服务模块采用EPCglobalALE标准,为高层软件提供了通用接口。3标签数据处理流程SQLite的应用开发是在GoAhead基础上对数据进行接收、过滤和分组处理。客户端将用
4、户填写的XML表单通过HTTP协议发送到GoAhead服务器端。GoAhead进程中的主线程接收XML文件,将文件内容通过命令消息通道传给ALE子进程。ALE子进程通过ezXML模块把XML文件解析出来,提取出数据存入ECSpec结构体中。DSP解调出二进制EPC数据,通过DSP驱动发送到接收模块。接收模块滤除重复EPC码,屏蔽阅读器数据格式差异,转换成统一数据格式后将数据送入到SQLite中,作为数据库操作的数据源。每个ECSpec对应创建一个线程。该线程根据ECSpec结构体执行数据库操作,将查询结果封装成XML数据报表通过数据消息通道发送给XML报告线程。XML报告线程通过TCP协议发送
5、给客户端。数据流程图如图2所示。下面以EPC标签数据的流动方向进行详细分析。620)this.style.width=620;border=0图2标签数据处理流程3.1EPC标签数据格式EPC(ElectronicProductCode)是本世纪初由美国麻省理工学院(MIT)的AUTO-ID中心提出的编码方式。EPC数据标准1.3版本5中,EPC由代表版本号的头部、过滤字段、制造商、物品种类以及物品序列号组成。是唯一存储在RFID标签中的信息。AUTO-ID中心将全球接受的EAN/UCC编码整合到新的EPC中,共8种格式:GID,SGTIN,SSCC,GLN,GRAI,GIAI,GDTI和GS
6、RN。后两种是数据标准1.4版本新增加的。为了在应用软件中更好地表示EPC码以及方便用户阅读和查询,AUTO-ID中心定义另一种表示方式:统一资源标识符(Uniform.ResourceIdentifier,URI)。嵌入式中间件中用到的URI格式如:urn:epc:pat:sgtin-96:0.*.*.*。“urn:epc:pat:部分为URI命令格式的固定内容,“sgtin-96即由EAN/UCC编码转化而来的96位二进制SGTIN编码头部分,其后四部分为具体编码内容。3.2EPC二进制数据转化成标准URI在数据转化标准6中,EPC有四种表示方式:二进制、URI、不带物品序列号的纯识别UR
7、I和EAN/UCC编码。在中间件中需要将阅读器发送过来的二进制EPC编码转换成标准URI形式,才能方便数据库的分组过滤操作。方法是首先将EPC二进制数据转换成一个字符一位的0和1字符串。选出代表版本号的头部,根据头部查询EPC格式表找到这种类型标签的分段结构,然后依据该分段结构分别提取出各个部分。例如96位标签数据300833B2DDD9014935050007(十六进制数表示)转换成URI格式为urn:epc:pat:sgtin-96:0.0867360217.005.39544225799。3.3标签数据插入SQLite数据库因为用户端的filter或group命令是以URI命令格式发送,
8、查询结果也是以URI格式返回,所以在二进制EPC码到达数据库时,立即转化为URI格式存储到SQLite中,方便查询操作。tableURI就是用来保存URI形式标签数据的信息表。tableURI分成七个字段存贮URI标签数据:Header,Filter,Company,Class,Serial,ReaderID,Time。前五个字段都是EPC码URI格式的组成部分,ReaderID为阅读器ID号,表明EPC码来自哪个物理阅读器。Time为DSP上交标签数据的时间,是控制产生报表的边界条件。EPC数据转化成标准URI后提取各个数据段,使用sqlite3_mprintf函数将数据段的值添加到SQL语
9、句中,然后通过sqlite3_exec函数执行该SQL语句把标签数据插入到数据库中。3.4过滤和分组标签数据用户定义的ECSpec中包含一个或多个Report,每个Report由一个或多个filterSpec或groupSpec组成,每个filterSpec有一个或多个includePattern和excludePattern组成,每个groupSpec也包含一个或多个groupPattern命令。这些过滤和分组命令可以方便用户选择出所需标签数据。因此,需要实现两种数据库操作:filter和group。3.4.1过滤filter是根据所给规则对数据进行过滤筛选,找出符合过滤条件的标签数据。整个
10、filter命令包含若干includePattern和若干excludePattern,结果集为包含于任何一个或多个includePattern中但是不包含于任何一个excludePattern中的EPC码。用集合形式表示为:620)this.style.width=620;border=0其中,R为EPC数据源集合,Ii为EPC集中符合第i个includePattern的数据集,Ei为EPC集中的符合第i个excludePattern的数据集。过滤操作的URI命令中可出现:确定数值/部分值low-high/所有值*,如:urn:epc:pat:sgtin-96:0.0867360217.00
11、1-1000.*。查询时直接使用SELECT操作,对各个字段逐个判断格式类型生成SQL语句,将各部分生成的SQL语句汇总到一句中即可完成过滤操作。3.4.2分组group是根据用户所给规则对标签数据进行分组归类,不属于任何group命令条件的EPC码自动归为defaultgroup组中。分组操作的URI命令可出现:确定数值/部分值low-high/所有值*/分组X(即按该字段分组,有不同的值就分组,相同值的EPC码分到同一组中)。如:urn:epc:pat:sgtin-96:0.0867360217.X.*。当使用多个groupPattern命令时,为使EPC码只被归为一个groupPatte
12、rn组中,要求URI命令设置时,几个groupPattern不能有重叠区域。命令集:G= (Pat_1,Pat_2,.,Pat_N)。Pat_i和Pat_j为命令集G中任意两个URI命令。Pat_i=urn:epc:pat:type_i:field_i_1.field_i_2.field_i_3.Pat_j=urn:epc:pat:type_j:field_j_1.field_j_2.field_j_3.Pat_i和Pat_j满足下面任一规则时两个URI命令是无重叠区域的,允许使用。(1)type_i和type_j为不同编码方式;(2)type_i和type_j编码方式相同,但是字段field
13、_i_1和field_j_1取值不冲突;(3)type_i和type_j编码方式相同而且前面对应k-1个字段都是固定值且相等,但是field_i_k和field_j_k取值不冲突;对应字段field_i_k和field_j_k满足下面任一规则时不冲突。(1)field_i_k和field_j_k都为固定值且不相同;(2)field_i_k和field_j_k一个是固定值,另一个是区间low-high,固定值不包含在区间中;(3)field_i_k和field_j_k都是区间值而且没有重叠。groupPattern无重叠,即可进行分组操作。分组时URI命令明确指出头部分,查询时直接使用SELEC
14、T操作。其他4个字段,因为格式可选(确定的数值/部分值low-high/所有值*/分组X),所以要对各个字段逐个判断其格式类型,对不同格式分别生成SQL语句,将各部分生成的SQL语句汇总到一句中。例如分组命令urn:epc:pat:sgtin-96:0.X.*.20000-90000,最终产生SQL操作语句为:CREATEVIEWviewGroupASSELECT*FROMtableURIWHEREHeader=sgtin-96ANDFilter=0ANDSerialBETWEEN20000AND90000GROUPBYCompany。3.5提交数据报表每个EventCycle(中间件向客户端
15、提供报表的时间间隔,客户端定义ECSpec时设置)结束时根据Time字段,选取生成视图中当前EventCycle的数据封装成XML数据报表发送给客户端。相应操作语句为:/time2=当前时间,time1=time2-EventCyclesql=sqlite3_mprintf(“SELECT*FROMviewGroupWHERETimeBETWEEN%dAND%d,time1,time2);3.6删除过期数据为了使中间件能长期稳定工作,必须定期删除过期数据。过期数据包括多次插入数据库的重复URI以及过滤和分组产生的临时视图。对重复产生的URI标签数据,只保留最新记录。标签数据表tableURI总记录条数大于某个值时调用数据备份程序,将表中的数据存贮到另一个目录下,供用户进一步处理。EventCycle结束时删除相应视图。4结束语经编译运行测试,该系统体积非常小,除去SQLite动态库不足1MB。兼容不同类型阅读器,稳定可靠,标签数据处理速度高。客户端使用过滤和分组命令能非常方便地订阅所需数据。SQLite凭借轻型,易于移植,免费开源的优点,除了可以作为RFID中间件的数据库,还可广泛用于其它嵌入式领域,比如嵌入式家庭网关,POS终端、智能手机和远程监控系统等。1