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 语句把标签数据插入到数据库中。