高海韬,李丹宁
(1.贵州大学 大数据与信息工程学院,贵州 贵阳 550025;2.贵州科学院,贵州 贵阳 550001)
射频识别(radio frequency identification,RFID)是实现物联网概念的关键无线技术之一,能够成功地保证物体的可追溯性和物品监控[1-2]。作为一种潜力巨大的自动识别技术,RFID被广泛用于食品安全、仓储物流、商品防伪、交通等领域[3-5],对改善人们的生活质量、提高产业经济效益和社会信息化水平有着重要影响。
国内对于RFID终端读写器的研究设计大部分是基于单片机芯片开发,针对不同的应用场景需求进行功能设计。如桑海伟等人[6]通过RFID技术和STM32芯片联动控制摄像头,采用自修复机制改进的RFID定位算法自动定位牲畜活动区域,采集牲畜活动信息,并将采集的数据上传至服务器,从而降低畜产品溯源系统的实际应用成本。洪琪璐[7]同样将STM32作为系统的主控芯片,设计了一种面向文物管理的超高频RFID阅读器系统。将标签与文物绑定,通过RFID技术实现文物的信息输入、信息查询、信息修改等功能,快速、准确地获取博物馆中的文物信息。
RFID技术最早可以追溯到第二次世界大战时无线雷达的出现,20世纪60年代至90年代是RFID发展史上最为重要的时期。RFID技术在国外发展较早也较快,尤其是在发达国家,如美国、德国、日本等国都较早地开始推进RFID应用,具有较为先进而且成熟的RFID系统。美国的Symbol、TI公司,德国的西门子等国外厂商基本垄断了RFID芯片市场,占据了RFID系统集成研究的有利位置。相比于国外,国内在行业发展核心的前期阶段没有掌握技术和产权优势,在很长的一段时间里RFID行业发展主要依靠引入国外集成产品和解决方案。近几年,随着国内RFID产品市场需求的不断增大,RFID技术的发展速度越来越快,RFID产品逐渐“国产化”。国内众多芯片厂商研制出了自己的UHF RFID芯片,读写设备的集成度也变得越来越高。另一方面,随着RFID识读算法的改进,RFID读写器芯片和RFID标签的有效识读距离也在逐步提高[8]。
虽然射频识别技术的不断突破让RFID读写设备的性能得到进一步提升,并且降低了RFID产品的开发成本和技术门槛,但由于国内RFID技术起步晚,目前市场上的UHF RFID读写设备主要还是以传统的手持读写器为主,这种读写器由繁多的硬件堆叠而成,开发成本高、体积偏大,不利于使用人员操作。这些问题对RFID技术在食品溯源等普通民用领域的快速普及和应用造成了极大阻碍。目前市场上的RFID读写终端机价格大多在3 000元至10 000元区间,产品单价长期居高不下,市面上价格适中且能和手机搭配使用的RFID读写器只占极少数。
食品安全一直是国家公共安全防控管理的重点。此次新冠肺炎疫情中病毒随食品冷链供应流通至消费者导致多起病例,更是凸显出食品安全保障措施的重要性。互联互通、快速流动的食品供应网络带来的不只是经济效益的提高,同时也意味着食品安全问题风险进一步加大。错综复杂的食品流通环节使得食品流通时的各种相关信息呈爆炸式增长,食品管理链对于RFID产品的需求量已经十分庞大。
Fu等人[9]应用博弈论分析了零售商、制造商和供应商组成的生鲜食品供应链的RFID投资决策。他们的研究结果证明了RFID技术在食品行业管理应用中的高效性。RFID的应用可为管理者及时提供食品供应链中的关键信息,包括转运、存储及销售情况,管理者可由此快速识别并纠正低效率运作情况,因而从财务、运营效率及食品安全方面都能提供最佳回报的解决方案,实现快速供货并最大限度地减少储存成本,这对于鲜果蔬菜和肉类等存储成本高的食品尤为重要。
从农田到餐桌,食品在整个供应网络流通过程中步骤繁多,情况复杂,传统的食品供应链管理模式很难掌握食品在生产、加工、运输等各个步骤中的信息,包括原材料来源是否安全,食物的储存状态,供应链中是否有潜在危险食品在流通等,而RFID技术正是解决这一问题的关键[10]。如图1所示,在食品出产地给食品植入电子标签建立身份信息。食品供应过程中,工作人员通过RFID终端机扫描食品上的标签进行身份识别,完成信息的读取和录入,实时掌握每一件食品的流通情况。在食品安全问题发生后也能通过RFID电子标签中的信息,快速找到问题的源头,保障食品安全。
图1 RFID在食品供应链中的应用
食品供应链管理所需的RFID产品数量庞大,但是传统读写器用于食品供应链管理不仅笨重难用而且价格昂贵,市场的需求决定了未来RFID产品的发展趋势朝向必然是轻量化、小型化和低成本化。因此,文中设计了一种便携式UHF RFID读写器,将传统RFID技术和当前正飞速发展的智能手机技术相结合,以小型RFID读写芯片和智能手机为硬件基础,设计开发手机应用程序下发指令控制RFID模块进行信息读取和写入。
系统的总体设计如图2所示,工作人员的手机与RFID读写模块建立无线通信后可以使用手机上的APP远程控制RFID读写模块和一个或多个电子标签进行数据读写,手机APP读取到的数据通过互联网自动上传至后台云服务器。利用这些数据信息进行数据分析有利于管理人员做出合理的运输销售决策,实现智慧化、信息化供应链管理。
图2 RFID系统总体设计框图
通用的RFID系统由固定在其识别对象上的RFID阅读器、电子标签和软件应用组成。RFID阅读器向标签发送一个无线电信号,标签在接收到信号后响应一个包含标签标识符和其他有关识别对象数据的信号[11]。阅读器是RFID系统中的核心元素,每个RFID标签包含一个集成电路和一个射频天线。电子标签的数据存储区中的用户区专用于保存用户自定义的数据,食品在供应链流通过程中,用户将食品的产地、存储状态、物流等信息存储在用户区,需要时再读取。RFID系统这种可以识别某一类实体元素和归属大量身份类别的能力共同构成了它的概念优势。
根据标签是否含有电源的不同,标签可以分为无源电子标签和有源电子标签。无源标签没有电源,而是通过将接收到的读写器信号功率转换为电流进行工作。无源标签成本低且使用周期长,所以在产品供应链管理中一般选用无源标签。无源RFID标签内部电路见图3。
图3 无源RFID标签内部电路
文中采用RFID R200模块作为读写器的核心超高频读写模块,它的工作频率在840 MHz~960 MHz,多功率可调,读写距离最远达20 m,具有低功耗、小尺寸、远距离的特点,满足本次系统开发低成本、小体积的设计理念。同时支持C/C++、JAVA等多种开发语言。
目前RFID主要的工作频段有四种:分别为低频(125~135 kHz)、高频(13.56 MHz)、超高频(860 M~928 MHz)和微波(2.4~5.8 GHz)。无线通信系统在不同频段上的读取范围和特点都有所不同,不同频段的RFID应用领域自然也大不相同。文中设计的读卡器频段为超高频(UHF),超高频频段可以在10米左右的距离内进行高速通信,常用于对各种物品进行跟踪、定位和控制[12-13],如智能卡、供应链管理等应用领域。
R200模块本身不含无线通信模块,但可以通过接口上的TTL管脚用串口线外接蓝牙(WIFI)无线模块,十分简便。R200读写模块和蓝牙模块的电路见图4,其中ANT为天线管脚,模块的射频输出端。可以根据不同的应用场景的读卡距离需求匹配不同增益、不同接口的超高频天线,控制读写器和标签的识读距离;TTL_RXD、TTL_TXD分别为模块串口接收和发送管脚,与无线通信模块的UART接口连接,RFID读写模块可以通过蓝牙模块与手机建立通信连接。文中选用国产的DX-BT04-E蓝牙模块作为RFID读写模块的拓展无线通信模块,该模块成本低、体积小、收发灵敏度高,契合读写器设计需求。
图4 UHF RFID读写模块电路
R200模块支持EPCglobal UHF Class 1 Gen 2 / ISO 18000-6C协议,在进行应用程序设计前先对核心读写模块的通信协议进行分析,掌握其固件指令格式。根据官方手册介绍,R200读写模块的指令帧格式如表1所示。其中指令帧类型有三种:
表1 指令帧格式
(1)0x00 命令帧:由上位机发送给RFID芯片。读写器与标签通信的关键步骤有三步,分别对应三个核心操作命令: 选择(Select)命令、盘存(Inventory)命令和访问(Access)命令。
(2)0x01 响应帧:由RFID芯片发回给上位机。每一条指令帧都有对应的响应帧,响应帧表示指令是否已经被执行了。
(3)0x02 通知帧:由RFID芯片发回给上位机。读写器向标签发送轮询指令时有对应的通知帧,通知帧的个数由MCU根据读取到的标签数决定。
指令帧发送后会有对应的响应帧,发送通知帧的个数由读写器读取标签的情况决定。如果指令帧被正常接收且CRC校验码准确就会返回响应的通知帧,否则返回错误代码。
表2为本次系统开发中超高频模块和标签通信时主要的几个基本指令代码和指令的具体功能描述。
表2 RFID通信操作命令
设计的UHF RFID读写器配套手机对象为安卓操作系统手机,使用的Android开发工具为Android Studio(以下简称AS),AS版本为Android sudioV3.5.2, SDK版本为Android 7.0,APP开发环境变量配置参考文献[14]。手机APP主程序设计流程见图5,判断手机与RFID读写模块建立连接后进入主程序流程,监听事件的按键响应[15]。当用户在APP上进行操作时,触发对应编码,手机按照标准协议与RFID模块进行通信,完成一次通信后循环,直至手机和RFID读写模块断开连接。
图5 APP程序设计流程
按照RFID读写模块的通信协议进行程序设计[15],以读取单个标签的数据存储区为例(其他操作指令的程序设计与此相近),通过APP下发“读取标签中的数据存储区”指令在AS中的JAVA代码[16]实现见图6。
图6 JAVA程序段:“读取标签中的数据存储区”
新建一个“readID MemBank”按钮,用于读取标签数据存储区,将该按键设置为一个事件,监听该事件。根据表1和表2,定义一个数组data3,写入协议规定的字符数据:“0xBB 0x00 0x39 0x00 0x09 0x03 0x45 0x7E”。当检测到“读取标签中的数据存储区”事件时,该数组传入至writeDataToSerial函数。RFID模块读取到标签后将返回响应消息,经过TTL 串口转蓝牙模块将该消息通知传入手机,显示至APP操作页面。
如果命令帧执行失败,则R200芯片向上位机发送执行失败的响应帧。执行失败的响应帧共用指令代码:0xFF。如果在执行失败之前没有得到标签的EPC,则指令参数固定为1个byte的错误代码。如果在执行失败前得到了标签的EPC,则响应帧参数为1个byte 的错误代码再加上标签的PC+EPC数据。
如果命令帧执行成功,R200正确读到指定区域数据,标签会返回如下响应帧:
0xBB,0x01,0x39,0x0013,0x0E,0x3400,0x30751FEB70, 0x12345678,0xB0
其中,“0x0E”表示标签的PC和EPC码总长度为14,“0x3400”为标签PC码,“0x30751FEB70”为标签的EPC码,“0x12345678”表示返回的标签存储数据,“0xB0”为校验位,是从帧类型(Type)到最后一个指令参数(Parameter)的最低一个字节的累加和。
将编译成功的AS项目打包为APK文件,发送至安卓手机上进行功能测试。首先,系统程序进行判断:安卓手机是否已经正常连接读写卡器,即RFID读写模块是否已经通过外接蓝牙模块与手机建立连接。点击“蓝牙扫描”按钮扫描蓝牙,打开蓝牙功能后点击名称进行连接,设备连接成功后才能在APP页面进行相关操作,控制RFID读写模块与标签通信。程序开始监听APP页面上各个控制按键的事件,在用户触发按键后根据所触发的按键对应的编码向底层硬件发送特定的字符串,从而完成与超高频RFID芯片通信的功能。如图7所示,可以在“标签”页面点击“EPC”按钮识别标签的EPC区域,识别到的数据显示为“24位的EPC号”同时显示总读取次数和标签识别的个数。
图7 Android手机应用程序界面
标签读写操作功能可以在“访问”页进行,以识别到标签号为:“E211 3343 5565 7789 9722 1133”的标签为例,对标签的EPC区进行写入操作:长按需要写入的标签号进行选择,程序自动切换到“访问”界面。点击“访问”按钮,数据框显示出选择的标签号。然后可以对标签进行读取或写入操作。选择对标签号进行“写”操作,选择需要写入的区域:EPC,写入:“E211 3343 5565 7789 9722 6666”,写入成功后系统显示“写入成功”消息提示,再次访问写入后的标签,标签EPC已经变为写入的数据,见图8。
图8 RFID读写器系统功能测试
R200模块支持功率可调,因此在应用程序中加入了配置RFID通信频率、功率等参数的功能选项。安卓应用程序的真机测试结果表明,设计的UHF RIFD读写器系统达到了预期的设计目标,基本满足食品供应链管理的功能需求。
食品供应链管理所需的RFID产品数量庞大,但是传统读写器不满足食品供应链的实际应用需求。设计了一种便携式超高频RFID读写器,并在安卓手机上完成了功能测试实验。这种读写器采用UFH RFID R200模块作为核心读写模块,外接无线蓝牙模块DX-BT04-E。食品在供应链流通时,用户可以通过手机应用程序控制RFID读写模块对食品上的电子标签信息进行读写,完成信息交换,实时掌握食品在供应链中的流通状况,智慧化、信息化食品供应链,提高管理效率,保障食品安全。在接下来的设计工作中,可以根据R200芯片的硬件底层驱动接口库扩展超高频RFID读写器功能,和手机进行交互测试,从系统架构和应用需求方面进一步完善读写器功能设计,优化手机APP的UI设计,使得操作界面更加美观、易用。