用于RFID系统的多标签动态比特仲裁防碰撞方法
技术领域
本发明涉及一种动态比特仲裁防碰撞方法,具体涉及一种应用于RFID系统的多标签动态比特仲裁防碰撞方法。
背景技术
无线射频识别系统(RFID)是从上世纪80年代走向成熟的一项自动识别技术,近年来发展十分迅速。射频识别技术可以用来识别和跟踪几乎所有物理对象,并由此可以构建一个容纳和连结世界上所有物品的广泛的智能网络。RFID是一种非接触式的自动识别技术,其基本原理是利用射频信号和空间耦合(电感或电磁耦合)的传输特性,实现对被特定物体的自动识别。
目前RFID技术还没有形成一个统一的国际标准。RFID的标准化包括标识编码规范、操作协议及应用系统接口规范等多个部分的标准化。当前主要的RFID相关规范有欧美的EPC(Electronic Product Code)规范、日本的UID(Ubiquitous ID)规范和国际标准化组织ISO基于物品管理的射频识别标准ISO18000系列规范。其中,欧美的EPC标准和ISO 18000标准,由于应用较广泛,成为当前主流的RFID标准。
RFID系统一般由阅读器和标签两个部分组成,阅读器具有同时读取多个标签的功能。在多个标签对一个阅读器的RFID系统中,多个标签经常会同时向阅读器传输数据,这就要求RFID系统建立一种仲裁机制来避免数据发生碰撞。考虑到标签本身尺寸、能耗的限制等,防碰撞机制在保障功能的同时还要求简单易行。
对RFID冲撞问题的解决一般有4种方式:空分多路法、时分多路法、码多路法、频分多路法。其中,时分多路方式由于应用简单,容易实现大量标签的读写,所以被多数防冲撞算法采用。现有防冲撞算法主要包括ALOHA算法和二进制树搜索算法两种。其中,ALOHA算法随机性大,当大量标签并存时,帧碰撞严重,引起性能急剧恶化,不适宜大规模标签读取。所以主要采用二进制搜索算法。
发明内容
针对现有技术中存在的问题,本发明提供一种适用于RFID系统的多标签动态比特仲裁防碰撞方法。该方法有效避免数据发生碰撞,并较大程度的降低了能耗和简化了电路的复杂度。
本发明的目的通过如下技术方案实现:
用于RFID系统的多标签动态比特仲裁防碰撞方法,包括如下步骤:
(1)阅读器初始化标签,使所有标签处于活动状态,然后阅读器请求所有标签发送整个标识码,发生碰撞的位置用X表示,没有碰撞的位置记录该位的数据,并将信息记录在阅读器的寄存器中;
(2)从步骤(1)所述阅读器的寄存器中读取发生碰撞的第一个位置序号数k0,令标签标识码中该位数据为‘1’的标签进入等待状态,并把该标签中的寄存器的值改为k0;把数据‘1’压入前缀堆栈中,把k0压入碰撞位堆栈;使标签标识码第k0位为‘0’的标签继续处于活动状态;
(3)阅读器从下一个碰撞位k开始按位查询处于活动状态的标签,若未发生碰撞,阅读器把该位数据写入临时寄存器第k位中;若发生碰撞,则阅读器使标签标识码第k位为‘0’的标签继续处于活动状态,而标签标识码第k位为‘1’的标签进入等待状态,并将k写入标签的寄存器中,以及将k压入阅读器碰撞位堆栈中;
(4)当阅读器查询最后一个碰撞位时,如果发生碰撞,阅读器可识别两个标签;
(5)当识别完一个或两个标签后,阅读器从碰撞位堆栈中弹出最新进入堆栈的碰撞位位置数值k,使处于等待状态的标签中寄存器为k的标签进入活动状态,随后清除该标签寄存器的内容,并从下一碰撞位开始按位查询,回到步骤(3),至识别所有标签。
所述步骤(3)还包括阅读器查询第k位时,若发生碰撞,把临时寄存器第k位的值改为‘0’;同时将临时寄存器1至k-1位的数据加上数据‘1’一起压入前缀堆栈中。步骤(3)的临时寄存器中不是碰撞位的数据可从阅读器的寄存器中取得。
所述步骤(4)阅读器可识别两个标签是指:设步骤(1)阅读器的寄存器中记录的最后一个碰撞位为K,则从临时寄存器中取得两个标签的1至K一1位数据,阅读器标记两个标签的第K位的数据分别为‘0’和‘1’,从步骤(1)阅读器的寄存器中取得两个标签的第K位后面的数据,把两个标签标识码写入阅读器的存储器中。
所述步骤(5)在弹出碰撞位位置数值的同时,也弹出前缀堆栈中的最新数据并写入临时寄存器1至k位中。步骤(5)阅读器识别了某个标签后,从临时寄存器中取得标识码,写入阅读器的存储器中并清除临时寄存器中的数据,该标签直接进入确认状态。
与现有技术相比,本发明具有如下优点和有益效果:
(1)本发明充分利用阅读器本身的内存和计算能力,所述RFID系统只需在标签中设置一个8比特的寄存器;在阅读器中设置一个碰撞位堆栈、一个前缀堆栈、一个临时寄存器,结构简单、实行难度低。
(2)降低能耗、速度快:本发明借助标签中的寄存器,可获得最小的请求数和接收比特数,快速的将多个标签分批识别,降低能耗,节省识别时间。
(3)本技术方案简单易行,可识别标签数目庞大,理论上可以识别的标签数目为2(128-1),而且对于连续或者同公司、同组织的标签标识码系统的执行速度更快。
总体来说,本发明充分发挥了二进制树搜索算法的优点,并利用标签和阅读器中的寄存器,减少查询次数和接收比特数,分批识别标签;结构简单易行,速度快,能耗低,非常适合在RFID系统中应用。
附图说明
图1是本发明用于RFID系统的多标签动态比特仲裁防碰撞方法流程框图。图中,TR表示标签中的8位寄存器;B表示阅读器中的位堆栈;Mc表示阅读器请求标签发送其标识码的所有位的数据之后阅读器收到的数据;K表示Mc中最后一个碰撞位的位置(从高位起算)。
具体实施方式
下面结合附图和实施例对本发明作进一步的说明,但本发明要求保护的范围并不局限于实施例表述的范围。
RFID系统一般由阅读器和标签两个部分组成,阅读器具有同时读取多个标签的功能。在RFID系统工作时,经常有一个以上的标签处于阅读器的作用范围内。这些标签的数据同时传送到阅读器时出现冲突即数据碰撞,致阅读器的接收器不能读出数据。本发明采用时分多路法,按比特查询仲裁方式,使阅读器有效的识别多个标签。
在RFID系统的标签中设置一个8比特的寄存器(记为TR);在阅读器中设置一个碰撞位堆栈(记为B)、一个前缀堆栈(记为S)、一个临时寄存器(记为TM)。下述实施方式中,等待态是未被识别的标签等待阅读器识别的状态;活动态是标签正在被阅读器识别的状态;确认态是标签已被阅读器识别的状态。
标签状态转移规则如下:初始化使得所有标签都进入活动状态;处于等待态的标签可以进入活动态;处于活动态的标签可以返回等待态;处于活动态的标签可以进入确认态;处于确认态的标签不能返回活动态;确认态和等待态不能直接转移。
如图1所示,本发明适用于RFID系统的多标签动态比特仲裁防碰撞方法,包括步骤:
(1)阅读器初始化,使B、S、TM为空;阅读器使所有标签进入活动状态,同时,使TR为空(步骤00)。
(2)阅读器请求标签发送整个ID(步骤10),ID是指标签的唯一标识(ID是每个标签都有,ID长度、定义等必须根据标准来设置)。阅读器将收到的ID信息记录在阅读器的寄存器中,记为Mc;发生碰撞的位置用X标识(碰撞是指该位置同时收到数据‘0’和‘1’),没有碰撞的位置则记录该位的数据。阅读器接下来的步骤中所有查询都只查询Mc中发生碰撞的位置,而且查询是从标识码的高位到低位(步骤11)。
(3)阅读器读取Mc中第一个碰撞位k0(从高位起算),令标签ID中该位数据为‘1’(或‘0’)(括号内是另一种执行方案,两种方案的效果一样)的标签进入等待状态,并把该标签中的寄存器TR改为k0。同时,阅读器把数据‘1’(或‘0’)压入前缀堆栈S中,把k0压入碰撞位堆栈B。继而从下一个碰撞位开始查询(步骤12~14)。
(4)阅读器按位查询标签ID中的数据。阅读器查询标签ID的第k位,若未发生碰撞,阅读器把该数据写入临时寄存器的第k位中;若发生碰撞,则阅读器进行如下操作:对标签,阅读器使发送数据为‘1’(或‘0’)的标签进入等待状态,并将k写进该标签的寄存器TR中,而发送数据为‘0’(或‘1’)的标签继续处于活动状态;对阅读器本身,阅读器将k压入阅读器碰撞位堆栈B中,把临时寄存器TM第k位置‘0’(或置‘1’),同时将临时寄存器TM中1至k-1位的数据加上数据‘1’(或‘0’)一起压入前缀堆栈S中。阅读器保存了碰撞位信息,而且确立了标签重新进入活动状态的条件(步骤16~19)。
(5)在识别过程中,阅读器查询最后一个碰撞位,若发生碰撞,阅读器可同时识别两个标签。设最后一个碰撞位为K,则从临时寄存器中取得1至K—1位数据,第K位分别为‘0’、‘1’,从Mc中取得第K位后面的数据,把两个标签标识码写入阅读器的存储器中,也使这两个标签进入确认状态,接着进入步骤23(步骤15、20~22)。
(6)阅读器识别完一个(或两个)标签,从碰撞位堆栈B中弹出最新进入堆栈的碰撞位位置数据k,继而弹出前缀堆栈S中的最新数据并写入临时存储器TM的1至k位中。若k值为空,则表示已经识别了所有标签,结束本次执行。若k值不为空,则阅读器使处于等待状态的标签中,寄存器TR为k的标签进入活动状态,随后清除该标签寄存器TR中的数据;而处于等待状态的标签中寄存器TR不为k的标签保持等待状态,返回步骤14。根据所设条件,使某些标签进入活动状态便于阅读器继续识别其它标签,同时也减少了阅读器的查询次数和收到的比特数(步骤21、22、23~27、30)。
下面,将参照一个具体实例和表1来更详尽的说明本发明的执行步骤。本实例中,RFID系统包含一个阅读器和四个标签。四个标签分别是Tag1(‘0001’)、Tag2(‘0010’)、Tag3(‘1010’)、Tag4(‘1011’)。其中,括号内是各个标签的ID。
一、阅读器请求标签发送整个ID。阅读器收到‘X0XX’,并将其存入Mc中。阅读器随后进行如下操作:初始碰撞位k0=1;TM=00;B=1;S=1;使Tag3和Tag4进入等待状态并将它们的寄存器TR的值都改为1。
二、阅读器请求标签发送下一碰撞位,收到X,发生碰撞。阅读器操作:TM=000;k=3;B=1,3;S=1,001;使Tag2进入等待状态并将其寄存器TR的值改为3。
三、阅读器请求标签发送下一碰撞位,阅读器收到1。阅读器操作:TM=0001,k=4,已是最后一位,识别Tag1,同时使Tag1进入确认状态,并将‘0001’保存在存储器(记为M)中;清除TM,并从堆栈S中弹出数据‘001’,则TM=001;从堆栈B中弹出数据3,则k=3;使Tag2进入活动状态(它的TR=3,随即清除该值);B=1;S=1;
四、阅读器请求标签发送下一碰撞位,阅读器收到0。阅读器操作:TM=0010,k=4(同理,已是最后一位),识别Tag2,使Tag2进入识别状态,并将‘0010’保存在存储器M中。清除TM,并从堆栈S中弹出数据1,则TM=1;从堆栈B中弹出数值1,则k=1;使Tag3和Tag4进入活动状态(它们的TR都为1,随即清除该值)。
五、阅读器请求标签发送下一碰撞位的数据,阅读器收到1,阅读器操作:TM=101;k=3。
六、阅读器请求标签发送下一碰撞位的数据,阅读器收到X,发生碰撞。阅读器操作:k=4,已是最后一个碰撞位,可同时识别两个标签,将‘1010’和‘1010’保存在存储器M中,识别Tag3和Tag4,并使它们进入确认状态;由于B、S已为空,不能弹出数据,识别了全部标签,执行完毕。
本实例中,阅读器只需要6次查询,接收9比特的数据,就可识别全部4个标签。说明本发明由于利用标签的存储器,简化了电路,减少了阅读器的查非常适合在RFID系统中应用。
表1
TR:标签寄存器 TA:标签应答