夏晓雨,冯思玲
(1.桂林电子科技大学国防生学院,桂林 541000;2.海南大学信息与通信工程学院,海口 570100)
近年来物联网作为继计算机、互联网与移动通信网络之后的又一次世界信息产业革命而得到了快速的发展,越来越多的物联网设备应用于我们的日常生活中,给人们带来了极大的便利,各式各样的传感器渗入已经我们生活的各个角落,但是在一些传统行业里物联网的发展却有些缓慢,例如在图书馆内,目前的图书馆内图书的清点与错架整理都需要人工来完成[1]。在智能社会的今天,我们所做的工作就是将需要多次重复劳动交给机器,以减少人工的使用,将劳动者从枯燥的重复劳动解放出来,使劳动者有更多的精力去投入到人的身心健康发展中。但目前对图书定位的研究并不丰富,其中有一部分是基于条形码∕二维码的图像识别图书定位系统,条形码∕二维码是一种应用十分广泛的自动识别技术,但是目前图像识别技术发展仍然不够完善并且图像识别技术无法对那些识别部分污损或破损的书籍进行识别,并且如果有读者挡在识别用的摄像头前极易造成识别误差,而RFID 与之相比优势十分明显:不需要光源,甚至可以透过外部材料读取数据;使用寿命长,能在恶劣环境下工作;能够轻易嵌入或附着在不同形状、类型的产品[2]。使用RFID 技术的一些研究使用的是高频和低频RFID 进行定位,高频和低频RFID 由于频率不高导致在多标签环境下,识别速度较慢,识别的错误率过高,而且识别距离较短,且大多数图书馆都设置有基于特高频RFID 的自助图书借阅系统和电子防窃围栏,在应用时并不需要进行更换,能够在现有硬件基础上改造来达到目的,经济上具有较强的可行性。
无线电的射频可以根据频率和它的波长分成不同的波段,而特高频(Ultra High Frequency)。处于波长为1m~1mm 的微波频段,其频率范围为 300MHz 到3GHz。在中国其工作频率被定义为 800MHz~900MHz。ISO 18000-6C∕EPC C1G2 是国际标准化组织为特高频RFID 制定的标准细则,其中详细规定了特高频RFID 的防碰撞算法。标签与阅读器经过无线信道进行数据信息交互啊,多个信号会在信道中交叠互相影响,导致标签信息无法正确读取,即发生碰撞。特高频相比于高频与低频RFID 的最大优势就是其规定了多标签时的防碰撞算法使其具有在短时间内多标签识别的能力。这对于图书的识别与定位是极为重要的。
天线在标签和阅读器间传递射频信号。它一方面给无源的电子标签提供电能,另一方面也通过它接收电子标签,上发出的信息,它也可向电子标签发射写入的信息[3]。这个天线有两个个属性首先它是线极化天线,再者它是定向天线。
天线的线极化(Omnidirectional Antenna)方式简单来说,像太阳光形成的影子一样,当收信天线和极化方向一样的时候,这个影子最大感应出的信号最强,而圆极化,无论收信天线的极化方向怎样改变,电磁波在任何方向上形成的影子都是一样的,所感应出的信号也都是相同的。
全向天线(Omnidirectional Antenna)其发射电磁波在空间中可以看成一个球面,可以向各个方向发送。
定向天线(Directional Antenna)顾名思义,它向特定的方向发射和接收的电磁波,并且发送的是圆锥型电磁波,因为电磁波都集中起来,增益比较高,而对于本设计来讲能够防止旁边的书架产生的影响。
ISO∕IEC 18000-6C 通信协议定义了 RFID 系统操作的物理要求和逻辑要求,RFID 的防碰撞有硬件和软件两种方法,其中在硬件中共有四种分别是:空分多址(SDMA)、频分多址(FDMA)、时分多址(TDMA)、码分多址(CDMA),这些技术的优点是时间延迟小,但是会大大增加系统的成本和复杂程度,另一种软件的方法,一是使用根据曼彻斯特编码的二进制算法和它的改进后的算法,二是通过随机数产生器产生随机数的随机时隙算法和它的改进算法,这虽然会带来时间延迟的增加,但是由于成本低,便于修改,实现起来系统的复杂程度较低。故我们所用的基于ISO 18000-6C 标准的阅读器和标签是通过随机数产生器产生随机数的随机时隙算法来实现防碰撞。
如果将整个系统进行抽象,整个系统可以分为三个部分:部署在书架上的超高频RFID 传感器、上位机和相关程序,数据库和网页服务器。工作流程如图1所示:
(1)上位机程序通过轮询部署在书架上的超高频RFID 传感器将书架信息缓存在上位机临时数据表中,等待处理。
(2)上位机程序将临时数据表中的数据写入数据库,并操作数据库对其进行处理。
(3)基于数据库数据向管理员或读者通过上位机程序或Web 网页展示图书信息和状态。
图1 系统工作流程
(1)传感器连接情况模块
本模块使用传感器商家配套的动态链接库制作,分 别 名 为 RFID_Reader_Cmds.dll 和 RFID_Reader_Com.dll,根据说明文档,取得从串口发送回上位机的信息的方法由 SP 类 GetInstance().GetPortNames()方法实现,配合WinForm 模板内的ListView 控件能够提供传感器的连接情况如图2-图3 所示。
图2 传感器列表初始状态
图3 已连接传感器时状态
代码如下所示:
(2)循环识别模块
在系统运行过程中需要进行轮询传感器并将数据与初始数据对比,但配套程序给的轮询指令并不合适,问题主要有两点,第一,多次轮询的次数有限制,只能由0-65535 次中选择。第二,多次轮询指令只能设置轮询次数,并不能改变轮询的时间间隔,传感器中内置的MCU 只关心收到的命令次数并不关心时间间隔。且MCU 中的固件是闭源的,并不能更改它内部的程序逻辑,需要使用WinForm 里面 System.Windows.Form.Timer 方法,这个方法本质上是一个定时器,在用户规定的时间间隔重复的执行某个命令,代码如下:
(3)数据消抖模块
在系统测试时经常出现标签误识别的状况,这是由于传感器产生了抖动,根据多次测试,当连续识别5次后,只会得到1-2 次错误标签,根据测试结果用代码构建了数据消抖程序,它的工作流程如图4 所示。在消抖程序中使用了一个临时表,轮询传感器五次并记录接收到标签的次数,将次数小于3 的数据保留。其余删去,主要代码如下:
图4 数据消抖工作流程
(1)数据库设计
本设计的数据库共有五个表,分别为Read_First、Read_noton、Read_Refresh、Read_Wrong、Read_stable,其中Read_stable 表储存图书馆内所有登记在册的图书,表Read_First 表作为图书离架定位基础表,基础表将在每次开始运行时重新写入,与从传感器传来的目前的在架图书信息进行比对,来获得错架图书和离架图书的信息。
表Read_Refresh 临时储存这一次阅读器查询的结果,表内的数据与Read_First 表比对得到错架图书,和离架图书的信息,并在获得的信息储存完毕后,于下一次读取之前清空,防止下一次写入时发生数据错误。
表 Read_noton 通 过 比 对 表 Read_First 和 表Read_Refresh 的EPC 列的不同获得离架图书并将EPC存入数据库。
表 Read_Wrong 通过比对表 Read_First 和表Read_Refresh 中PORT 列不同而EPC 相同这两个约束条件找出错架图书并将EPC 存入数据库。
(2)数据处理
为了将数据库中的数据处理,在上位机程序中嵌入SQL 语句在获取信息的同时进行处理。部分代码如下:
(3)网页服务器设计
本设计选择使用MVC 模式作为Web 的架构模式,MVC 由模型、视图、控制器的英文的第一个字母的缩写构成。不同于以往的其他模式,MCV 将元素按照模型、视图、控制器分开,它把原来混在一起的各个元素分开把复杂的程序简化,而且对于大型的项目能够更好地将开发人员专注与一个组件,而不需要太多关注其他的部分。本文仅展示模型与控制器的初始化
(1)模型的初始化
在本设计生成了一个MVC 的模板以后,为了更清楚的分开各个元素,在它的模型的基础上又分出了WebModel 模型并且作为类库添加到解决方案中,并且由于要和数据库交换数据所以按照数据库的结构来构建模板中的模型,在这里使用System.Data.Sqlclient 的库访问数据库,在初始化完WebModel 后也要在项目里初始化一个Model 与它对应。
(2)控制器的初始化
同模型一样将控制器的操作逻辑作为类库写在项目的外部,由于模型只是与数据库交流,只获得数据,并不对数据进行处理,而处理的工作就交给了控制器来完成,并且它和数据的实体没有关系。部分代码如下:
固定在书架上的天线与传感器如图5 所示,图中三本书作为测试之用,图6 为上位机程序主界面,其可用操作
为:
图5 固定在书架上的天线
图6 上位机程序初始化界面
(1)定位书籍将目前在架图书写入Read_First 表
(2)开始轮询传感器并将数据存入数据库处理
(3)进行快速盘点,并在上位机程序中展示,可选择删除或者导入数据库
(4)向读者展示图书情况如图7 所示
(5)进行错架识别如图8 所示
图7 Web网页
图8 错架识别模块
本文给出了一种基于超高频RFID 的图书定位系统,该系统可用于解决图书馆内存在的对图书在架与错架信息识别的低效的问题,具有一定的实际意义。用C#语言实现上位程序使得其兼容性有效提高并由利于图书馆根据自身情况进行二次开发,进一步提高图书使馆的信息化水平。