基于RFID的农产品生产线读写器设计
图4 软件系统工作流程
1、嵌入式数据库操作模块
在本项目中使用了Sqlite3 作为系统的嵌入式数据库。嵌入式数据库是整个系统的重要组成部分, 主要负担了采集基本数据的本地存储, 条码阅读信息的初步存储和快速查询, 工作日志的保存, 还能和网络通信模块配合实现网络主/ 从数据库的同步, 在主服务器崩溃的情况下, 依然可以通过整理所有嵌入式数据库的数据进行大部分数据的恢复, 增加了系统的可靠性, 此数据库采用了单数据文件设计, 能够支持大部分SQL 92标准的数据库操作语句, 支持事务功能, 通过扩展网络操作接口函数, 达到了和后台数据库进行通信和交换数据的目的。
2、网络通信模块
本系统的特色就是通过嵌入式Linux 操作系统的网络底层支持, 以多种网络传输途径, 将数据和后台数据服务器进行数据传输。在本系统的网络部分设计中, 在局域网内利用Linux 系统的提供的TCP/IP 协议支持, 在编程中采用了动态与服务器建立连接的方法, 在读取到标签信息并解码出有效信息的时候, 向服务器相应端口发送相应的Socket 请求信息, 服务器端接受到请求后建立连接并新建Socket 端口来和终端进行通信; 只有在读取数据的时候数据库和终端间才产生数据传输和占用服务器端资源, 从而降低了网络占有率和服务器端的负荷, 提高了网络通信的效率。
3、RFID 协议解析模块
协议解析模块负责将发送的命令参数加入包头等信息,并将收到的标签回传的信息进行解包, 通过对信息的解包, 能够得到盘存或读写的相关信息。MPR6000 支持的RFID Gen2命令包括Read, Write, Kill , Erase, Lock。命令都由一个字符串构成, 其结构如下:
SOF> Node> Length> Status> Payload> CRC>
分别由开始帧、节点、总长度、状态、标签信息、CRC 这几部分组成。
举例来说, Gen2 盘点命令的操作码为01h, 操作会返回在读写域内全部的符合读取条件的Gen2 标签, 而经过反碰撞模块处理后, 得到的数据帧由标签信息和盘存总结两部分组成:
即 回复信息>= [ 标签回复>] 盘存总结>
标签回复> = EPC> 访问回复>
EPC> = 标签ID 长度> 协议控制字> 标签ID>
举例, 当使用天线B 并且RF 的功率为22 时, 读取所有SL 为NOT SET, S3 flag 为A 的Gen2 标签, 此时的起始Q 为1( 即2 个时隙) 。
60 01 01 16 02 03 00 01
如果当前射频范围内的标签有一个64 位的Gen2 标签1的ID 为“ 0102 0304 0506 0708”。
而且有一个96 位Gen2 标签2 的ID 为“ 1211 1009 08070605 0403 0201”。
可能读写模块会收到这样一个包, 完整内容如下:
04 28 00 01 02 03 04 05 06 07 08 07 08 30 00 12 11 10 09 08 07 06 05 04 03 02 01 00 02 00 16 00 01 00 00 00 02 00 09
现在对这个包进行解析, 根据协议规定 接受包> = [标签回复>] 盘存总结>
= [04 28 00 01 02 03 04 05 06 07 08> 07 08 30 00 12 11 10 09 08 07 06 05 04 03 02 01>] 00 02 00 16 00 01 00 00 00 02 00 09>
标签1 回复> = 标签1 ID 长度> 协议控制字> 标签1 ID>
标签1 ID 长度> = 04> = 4- word = 64 Bit 标签ID
协议控制字> = 28 00>, 从而得出 标签1 ID> =0102 0304 0506 0708>
标签2 回复> = 标签2 ID 长度> 协议控制字> 标签2 ID>
标签1 ID 长度> = 06> = 6- word = 96 Bit 标签ID
协议控制字> = 30 00>, 得出 标签2 ID> = 1211 1009 0807 0605 0403 0201>
而又有 盘存总结>= 标签数> 时隙数>EPC CRC 错误> 回复CRC 错误> 冲突次数> 通信轮数>
所以得到 标签数> = 2, 时隙数> = 22, EPC CRC 错误> = 1, 回复CRC 错误> = 0, 冲突次数> = 2, 通信轮数> = 9
在提取标签信息后, 则可以将所获得的标签信息送到嵌入式数据库模块进行本地暂存, 同时通过网络模块上传至后台服务器做记录, 中间的接口函数部分就不详细给出了。
四、总结与展望
本文中描述的嵌入式RFID 终端读取器, 在农业产品包装生产线中进行了实用, 基本满足了生产线RFID 系统对前端RFID 标签数据采集、处理、通信方面的要求, 在功能上和稳定性方面已经能够替代专用RF 读写器, 因为采用了免费的开源Linux 操作系统和开源数据库Sqlite , 大大降低了总体成本, 特别适合在成本敏感系数高的农产品生产和监控中使用。
评论