当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于嵌入式 RFID 中间件的标签数据处理


    1 引言

 射频识别(Radio Frequency Identification, RFID中间件介于RFID 阅读器和上层应用之间,用来屏蔽不同型号的阅读器和各种协议标准的标签,为上层应用软件提供统一接口。另外,还负责整合和过滤数据,产生报表,减少应用层软件的处理负担,使海量标签数据的传输和应用成为可能。目前,国内外的RFID 中间件体积庞大,只适用于PC 机,不能移植到嵌入式阅读器中。本文提出一种可直接运行于各种嵌入式阅读器设备,基于EPCglobal ALE 标准的嵌入式 RFID 中间件,并详细研究其中的标签数据处理流程。

 2 软件体系结构

 嵌入式 RFID 中间件体系结构如图1 所示。采用Linux 2.4.18 作为操作系统,操作系统自带有网络驱动和串口驱动。DSP 驱动是为本阅读器DSP 模块开发的驱动模块,相当于一个连接到中间件服务器的阅读器。中间层是GoAhead Web 服务器和嵌入式数据库SQLite,上层是阅读器管理,阅读器协议服务和ALE 服务模块。

 

图 1 软件体系结构

     GoAhead Web 服务器是一款面向嵌入式系统的Web 服务器,作为中间件的数据转发和模块承载平台。阅读器与客户端之间,阅读器与阅读器之间的数据通信都是由GoAhead Web服务器完成。ALE 服务模块,数据库管理模块,阅读器管理模块,阅读器协议服务模块等的开发也是建立在GoAhead 基础上。

 数据库采用 SQLite 3.3.9。SQLite 是轻型,免费和开源的嵌入式数据库。提供绝大多数标准的SQL92 语句,工作速度快,满足中间件数据处理的实时要求。在嵌人式系统中,数据库管理、执行、维护的简单化比企业数据库提供的复杂应用更重要。因此选用SQLite数据库在大小和功能方面是一个理想的折中。

 ALE 协议服务模块是过滤和统计数据的基层部件与高层应用程序之间的接口。ALE 协议服务模块采用EPCglobal ALE 标准,为高层软件提供了通用接口。[!--empirenews.page--]

 3 标签数据处理流程

 SQLite 的应用开发是在GoAhead 基础上对数据进行接收、过滤和分组处理。客户端将用户填写的XML 表单通过HTTP 协议发送到GoAhead 服务器端。GoAhead 进程中的主线程接收XML文件,将文件内容通过命令消息通道传给ALE子进程。ALE子进程通过ezXML模块把XML 文件解析出来,提取出数据存入ECSpec 结构体中。

 DSP 解调出二进制EPC 数据,通过DSP 驱动发送到接收模块。接收模块滤除重复EPC码,屏蔽阅读器数据格式差异,转换成统一数据格式后将数据送入到SQLite 中,作为数据库操作的数据源。每个 ECSpec 对应创建一个线程。该线程根据ECSpec 结构体执行数据库操作,将查询结果封装成XML 数据报表通过数据消息通道发送给XML 报告线程。XML 报告线程通过TCP 协议发送给客户端。数据流程图如图2 所示。下面以EPC 标签数据的流动方向进行详细分析。

图2 标签数据处理流程

    3.1 EPC 标签数据格式

 EPC(Electronic Product Code)是本世纪初由美国麻省理工学院(MIT)的AUTO-ID 中心提出的编码方式。EPC 数据标准1.3 版本[5]中,EPC 由代表版本号的头部、过滤字段、制造商、物品种类以及物品序列号组成。是唯一存储在RFID 标签中的信息。AUTO-ID 中心将全球接受的EAN/UCC 编码整合到新的EPC 中,共8 种格式:GID,SGTIN,SSCC,GLN,GRAI,GIAI,GDTI 和GSRN。后两种是数据标准1.4 版本新增加的。为了在应用软件中更好地表示EPC 码以及方便用户阅读和查询,AUTO-ID 中心定义另一种表示方式:统一资源标识符(Uniform. Resource Identifier,URI)。嵌入式中间件中用到的URI 格式如:urn:epc:pat:sgtin-96:0.*.*.*。“urn:epc:pat:”部分为URI 命令格式的固定内容,“sgtin-96”即由EAN/UCC 编码转化而来的96 位二进制SGTIN 编码头部分,其后四部分为具体编码内容。

 3.2 EPC 二进制数据转化成标准URI

 在数据转化标准[6]中,EPC 有四种表示方式:二进制、URI、不带物品序列号的纯识别URI 和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 命令格式发送,查询结果也是以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 语句中,然后通过sqlite3_exec 函数执行该SQL 语句把标签数据插入到数据库中。[!--empirenews.page--]

 3.4 过滤和分组标签数据

 用户定义的 ECSpec 中包含一个或多个Report,每个Report 由一个或多个filterSpec 或groupSpec 组成,每个filterSpec 有一个或多个includePattern 和excludePattern 组成,每个groupSpec 也包含一个或多个groupPattern 命令。这些过滤和分组命令可以方便用户选择出所需标签数据。因此,需要实现两种数据库操作:filter 和group。

 3.4.1 过滤

 filter 是根据所给规则对数据进行过滤筛选,找出符合过滤条件的标签数据。整个filter命令包含若干includePattern 和若干excludePattern,结果集为包含于任何一个或多个includePattern 中但是不包含于任何一个excludePattern 中的EPC 码。用集合形式表示为:


 其中,R 为EPC 数据源集合,Ii 为EPC 集中符合第i 个includePattern 的数据集,Ei 为EPC集中的符合第i 个excludePattern 的数据集。

 过滤操作的 URI 命令中可出现:确定数值/部分值[low-high]/所有值*,如:urn:epc:pat:sgtin-96:0.0867360217.[001-1000].*。查询时直接使用SELECT 操作,对各个字段逐个判断格式类型生成SQL 语句,将各部分生成的SQL 语句汇总到一句中即可完成过滤操作。

 3.4.2 分组

 group 是根据用户所给规则对标签数据进行分组归类,不属于任何group 命令条件的EPC 码自动归为default group 组中。分组操作的URI 命令可出现:确定数值/部分值[low-high]/所有值*/分组X(即按该字段分组,有不同的值就分组,相同值的EPC 码分到同一组中)。如:urn:epc:pat:sgtin-96:0.0867360217.X.*。

 当使用多个 groupPattern 命令时,为使EPC 码只被归为一个groupPattern 组中,要求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 命令是无重叠区域的,允许使用。[!--empirenews.page--]

 (1) type_i 和type_j 为不同编码方式;

 (2) type_i 和type_j 编码方式相同,但是字段field_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 命令明确指出头部分,查询时直接使用SELECT 操作。其他4 个字段,因为格式可选(确定的数值/部分值[low-high]/所有值*/分组X),所以要对各个字段逐个判断其格式类型,对不同格式分别生成SQL 语句,将各部分生成的SQL 语句汇总到一句中。例如分组命令urn:epc:pat:sgtin-96:0.X.*.[20000-90000],最终产生SQL 操作语句为:

 CREATE VIEW viewGroup AS SELECT * FROM tableURI WHERE Header=’sgtin-96’AND

 Filter = 0 AND Serial BETWEEN 20000 AND 90000 GROUP BY Company。

 3.5 提交数据报表

 每个 EventCycle(中间件向客户端提供报表的时间间隔,客户端定义ECSpec 时设置)结束时根据Time 字段,选取生成视图中当前EventCycle 的数据封装成XML 数据报表发送给客户端。相应操作语句为:

 //time2 = 当前时间,time1 = time2 - EventCycle

 sql = sqlite3_mprintf(“SELECT * FROM viewGroup WHERE Time BETWEEN %d AND %d”,

 time1, time2);

 3.6 删除过期数据

 为了使中间件能长期稳定工作,必须定期删除过期数据。过期数据包括多次插入数据库的重复URI 以及过滤和分组产生的临时视图。对重复产生的URI 标签数据,只保留最新记录。标签数据表table URI 总记录条数大于某个值时调用数据备份程序,将表中的数据存贮到另一个目录下,供用户进一步处理。EventCycle 结束时删除相应视图。

 4 结束语

 经编译运行测试,该系统体积非常小,除去 SQLite 动态库不足1MB。兼容不同类型阅读器,稳定可靠,标签数据处理速度高。客户端使用过滤和分组命令能非常方便地订阅所需数据。SQLite 凭借轻型,易于移植,免费开源的优点,除了可以作为RFID 中间件的数据库,还可广泛用于其它嵌入式领域,比如嵌入式家庭网关,POS 终端、智能手机和远程监控系统等。

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭