基于RFID的植物识别研究与实现

2017-10-18 07:03黎志庭龙田养徐庆华刘创新吴振彪沈德才
现代计算机 2017年25期
关键词:读卡器调用线程

黎志庭,龙田养,徐庆华,刘创新,吴振彪,沈德才

(1.广东省东莞市大岭山森林公园,东莞 523100;2.广东省东莞市林业科学研究所,东莞 523106)

基于RFID的植物识别研究与实现

黎志庭1,龙田养2,徐庆华1,刘创新2,吴振彪1,沈德才2

(1.广东省东莞市大岭山森林公园,东莞 523100;2.广东省东莞市林业科学研究所,东莞 523106)

基于RFID的植物识别能够有效提高植物管理的工作效率。介绍一种基于Java平台,使用JNA调用本地驱动程序的RFID开发方法,使用工厂方法模式解决读卡器类型多样化的问题,并对防碰撞和循环读取中数据传输问题进行解决。该方法在乡土植物管理系统中应用效果较好。

无线射频识别;JNA;植物识别

0 引言

无线射频识别(Radio Frequency Identification,RFID)是一种非接触式的自动识别技术,它利用无线射频方式进行非接触式双向通信,能够进行目标识别并交换数据[1]。随着RFID技术的不断发展,其应用领域涉及零售业、服务业、制造业、物流业、信息产业、医疗和国防等[2-4]。在植物识别领域,RFID技术在名树古木和苗木花卉栽培管理有较好的应用[5-6]。本文主要解决在乡土植物保护管理系统中应用RFID技术对植物个体进行识别的问题。

1 实现背景

1.1 乡土植物保护管理系统简介

乡土植物管理系统的主要目标是首先对乡土植物的个体详细数据进行采集,建立植物档案数据库;在进行现场巡检和养护工作时,携带便携式设备如平板电脑等进行相关工作数据的采集并与云服务器进行数据同步,其工作原理如图1所示。RFID主要用于植物个体的识别,并与系统其他功能模块进行数据通信,以实现对植物数据的管理。

1.2 RFID设备

乡土植物管理系统需要通过USB接口或者蓝牙接口连接读卡器硬件,识别RFID标签并实现植物数据的读取和写入。选取的硬件设备包括采用有线方式连接的USB读卡器(MR915读卡器)和无线试连接的蓝牙读卡器(UHF高频读卡器),如图2和图3所示。

图1 乡土植物管理系统工作原理

图2 有线读卡器实物图

图3 无线读卡器实物图

1.3 需要解决的关键问题

为了提高系统的可移植性,使其可以应用于不同类型的平板电脑,系统使用Java平台开发,开发过程需要解决的关键问题包括:

(1)设备驱动的调用

系统使用Java平台进行开发,而两种读卡器的底层驱动程序均是动态链接库形式的DLL函数库,因此需要决Java与底层驱动之间的调用问题。

(2)设备的可扩展性

目前系统选用两种不同型号的读卡器,并且根据需求,未来还会其它型号的读卡器。因此,需要解决更换不同类型读卡器时的问题,提高系统的可扩展性和可维护性。

(3)提高读卡操作的抗干扰性

系统主要应用于野外环境的植物管理,在使用时会有很多外来干扰,系统应用时会出现同一个区域内会有较多标签或者有多个用户在附近使用读卡器。因此需要考虑系统数据传输过程的抗干扰性和可靠性问题。

2 系统实现

2.1 植物标签的数据结构

系统的整体设计方案中,RFID标签中需要存储的数据包括两项:标签的唯一识别标志和植物个体的唯一识别标志。在数据的读取和写入操作中,数据是以二进制数据流的形式进行数据传输,因此数据结构中设计了数据长度。具体见表1。

根据EPC(电子产品代码)标准协议,逻辑上RFID卡包括四个存储体:保留内存、EPC存储器、TID存储器和用户存储器。系统分别使用标签中的TID存储区和用户存储器存储上述数据。

表1 植物标签数据结构

2.2 设备驱动调用的实现

系统解决连接问题使用Java访问本地代码的JNA(Java Native Access)框架,它提供一组Java工具类在运行期动态访问系统本地库(如Windows的DLL)而不需要编写任何Native/JNI代码[7]。开发时需要在一个Java接口中描述目标系统本地库的函数与结构[8]。表2列出了部分调用读卡器驱动的函数映射。

图4 读卡器应用的类结构图

表2 JNA函数映射

2.3 读卡器扩展性实现

系统需求中提出需要解决两种类型读卡器应用并考虑扩展其他类型读卡器。为解决该问题,采用工厂方法设计模式,将不同的读卡器的共同特征进行抽取,实现统一接口Reader代表抽象读卡器,每种读卡器的具体操作由实现了该接口的子类完成,图4为类的结构关系。这样在更换读卡器设备时可以降低代码修改成本。

2.4 标签识别的实现

(1)防碰撞

系统运行过程中可能存在多个读卡器或多个标签同时工作,这些读卡器和标签之间可能会互相造成干扰,这就造成了碰撞。

本文采用的防碰撞处理策略是设置一个Q参数,其取值为0至15之间的整数。当读写器要对标签进行读写操作时,读写器首先向所有的标签发送查询指令,指令中包含一个参数Q,处于读写器射频场中的标签收到此命令后便会产生0~21Q之间的随机数作为其应答时隙,并将此随机数载入时隙计数器中。只有时隙计数器中的时隙为0的标签才会向读写器发送16位的随机数作为应答信息。

(2)标签识别

标签识别分为单步识别和循环识别两种方式。循环识别是RFID在需要多次识别时使用的功能,需要解决以下几个问题:

①采用线程机制循环读取数据

通过继承Thread类实现一个线程类,其中定义一个图4中Reader接口类型的变量reader,根据工厂方法实例化该变量。线程的循环运行通过一个状态标志变量readFlag控制,当该变量为true时,通过reader读取并发送数据。识别结束后,设置readFlag变量为false。

②识别过程中的防碰撞

在循环识别的处理过程中,通过参数控制是否启用2.4.1中说明的防碰撞的功能。

③读取数据的处理

在循环识别标签过程中会不断有数据读出,为保证数据的完整性和一致性。系统读取数据的传输使用消息队列来实现。消息队列是作为一个缓冲数据区的工具类出现,其中定义了存储数据的线性表和入队及出队函数,通过范型定义允许系统各类数据对象在队列中存取。

解决了以上几个问题,在具体调用的时候只需要新建一个循环读的线程,并且调用循环读的方法传递相应的参数。同时在前台线程中定时检索消息队列并对消息队列中的数据进行处理。

单步识别每次只进行一次读操作,其实现相对简单。

2.5 数据读取的实现

读取功能是对标签卡数据进行读取,主要解决指定标签、不同存储区的读取、循环读和十进制读出等问题。

①存储区的指定

RFID标签卡的存储区逻辑上可以区分为四部分,系统实现时参数bank的取值确定读取的存储区位置,具体设置是:0表示保留区,1表表示CPC,2表示TID以及3表示USER。

②数据读取

数据读取也分为单步读取和循环读取,其实现方式与标签识别的类似。主要区别是在读取数据之前需要进行存储区选择的参数设置。在指定了标签、存储区、是否十进制读取等参数后,循环读取也需要进行新建线程进行读取和需要使用消息队列作为数据缓冲等。

2.6 数据写入和擦除的实现

系统设计为只能对USER区的数据进行写操作。数据写入的主要步骤包括:指定要写入的标签;将待写入数据转换为16进制;通过接口Reader和工厂实例化读卡器对象reader;调用reader对象的写入函数将数据写入标签卡。

数据擦除功能与写入功能实现基本一致,写入的为空白数据。

3 功能测试

进行测试前需要将RFID读卡器连接到平板电脑。无线读卡器通过蓝牙与电脑连接,在开启读卡器和电脑蓝牙后进行配对,配对成功后连接完成。有线读卡器连接的操作的过程比较简单,只需将读卡器通过USB线连接电脑即可。

图5是对标签识别功能测试的结果,从图中可以看出标签的单步识别和循环识别均能正常工作。

图5 标签识别测试结果图

图6是对标签各存储区数据进行读取的测试结果,从图中可以看出,对各存储区数据进行的单步读取和循环读取均能正常工作。

图6 读取数据测试结果图

以上列出为主要功能的测试。全部模块经过测试验证,功能实现均与预期一致,能够满足乡土植物管理系统的需要。

4 结语

本文在Java平台上使用JNA、线程、队列等技术开发的RFID植物识别模块,目前已经应用在东莞林科所的乡土植物管理系统开发中,与系统的其他功能模块,如数据采集、数据同步等协同工作正常。系统目前已经在实际工作环境运行了一年多时间,在现场工作中,基于RFID的植物识别极大地提高了工作效率,达到了预期的效果。

基于RFID的植物识别成功应用的经验将来可推广到珍稀植物、古树名木保护等系统的开发工作中。

[1]陈新河.无线射频识别(RFID)技术发展综述[J].信息技术与标准化,2005(7):20-24.

[2]吴欢欢,周建平,许燕等.RFID发展及其应用综述[J].计算机应用与软件,2013,30(12):203-206.

[3]肖潇雨.RFID技术在供应链管理中的应用研究述评[J].物流工程与管理,2015,37(12):48-50.

[4]潘媛媛.物联网技术在医疗护理系统中的应用[J].实用医院临床杂志,2011(2):196-198.

[5]周朝,庞雄斌,万勇.基于RFID的苗木识别管理系统的应用[J].农业网络信息,2013(12):33-42.

[6]陆研,张绍文.基于RFID技术的名木古树管理系统初探[J],2008(2):91-93.

[7]刘魁元,余凯鑫.基于JNA框架实现Java与读写器通信的研究[J].电子世界,2012(1):42-45.

[8]沈东良.使用JNA快速调用原生函数[J].程序员.2009(3):93-97.

Abstract:RFID based plant identification can effectively improve the efficiency of plant management.Introduces a development method for RFID,which uses JNA to call the local driver on Java platform,uses the factory method pattern to solve the problem of various types of card read⁃er,and the anti-collision and read data transmission problems were solved.The method is applied well in native plant management system.

Keywords:RFID;JNA;Plant Identification

Research and Implementation of Plant Identification Based on RFID

LI Zhi-ting1,LONG Tian-yang2,XU Qin-hua1,LIU Chuang-xin2,WU Zhen-biao1,SHEN DE-cai2
(1.Guangdong province Dongguan City Dalingshan Forest Park,Dongguan 523100;2.Dongguan Forestry Science Research Institute of Guangdong Province,Dongguan 523106)

1007-1423(2017)25-0077-05

10.3969/j.issn.1007-1423.2017.25.019

黎志庭(1981-),男,本科,助理工程师,从事领域为林业信息方面的研究

2017-06-27

2017-08-30

猜你喜欢
读卡器调用线程
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
与淘汰命运抗争 看懂笔记本的读卡器
核电项目物项调用管理的应用研究
系统虚拟化环境下客户机系统调用信息捕获与分析①
颜值与功能并重
基于EMV非接通信规范的非接触读卡器设计
多合一读卡器
计算机中的多线程问题
利用RFC技术实现SAP系统接口通信