发明内容
本发明的目的在于提供一种超高频RFID防碰撞方法,其能够通过较为简单的运算,在不影响芯片功耗的情况下,实现非常高的防碰撞效率。
为实现上述目的,本发明提供了一种超高频RFID防碰撞方法,用于在读写器同时读取多个电子标签时提高防碰撞效率,所述超高频RFID防碰撞方法包括:所述读写器向每个所述电子标签发送特殊约定选择命令和查询命令,其中,所述查询命令中包括参数Q;所述读写器接收时隙计数器的数值为0的电子标签中的数据并发送应答命令,其中,所述时隙计数器的数值是所述电子标签的唯一电子产品编码中流水号的Q位低地址数据,并且所述时隙计数器的数值是所述电子标签在收到所述特殊约定选择命令和所述查询命令后赋值至所述时隙计数器的;所述读写器向所述电子标签发送查询重复命令,接收所述时隙计数器的数值为0的电子标签返回的数据并向所述电子标签发送应答命令,其中,所述查询重复命令连续执行多次,且最多不超过2^Q-1次。
在本发明的一实施方式中,所述特殊约定选择命令中的标签存储区参数为一定值且所述特殊约定命令中的指针参数为另一定值。
在本发明的一实施方式中,所述读写器同时读取的电子标签个数为2的整数幂个。
在本发明的一实施方式中,所述读写器同时读取的所有电子标签的唯一电子产品编码的流水号是连续的。
本发明还提供了一种超高频RFID防碰撞方法,用于在读写器同时读取多个电子标签时提高防碰撞效率,所述超高频RFID防碰撞方法包括:所述电子标签接收到所述读写器发送的特殊约定选择命令和查询命令后,将自身的唯一电子产品编码中流水号的Q位低地址数据赋值给自身的时隙计数器,所述时隙计数器的数值为0的电子标签向所述读写器返回数据,其中,所述查询命令中包括参数Q;所述电子标签接收到所述读写器发送的查询重复命令后将自身的电子标签的时隙计数器的数值均进行减1操作,减1后的时隙计数器的数值为0的电子标签向所述读写器返回数据,所述读写器发送响应指令,其中,所述查询重复命令连续执行多次,且最多不超过2^Q-1次。
在本发明的一实施方式中,所述特殊约定选择命令中的标签存储区参数为一定值且所述特殊约定命令中的指针参数为另一定值。
在本发明的一实施方式中,所述读写器同时读取的电子标签个数为2的整数幂个。
在本发明的一实施方式中,所述读写器同时读取的所有电子标签的唯一电子产品编码的流水号是连续的。
本发明还提供了一种超高频RFID防碰撞方法,用于在读写器同时读取多个电子标签时提高防碰撞效率,在第一帧执行上述的超高频RFID防碰撞方法,当所述多个电子标签在所述第一帧内没有被所述读写器读取完,则在后续的每帧中所述电子标签执行基于动态帧时隙ALOHA算法的RFID防碰撞方法。与现有技术相比,根据本发明的超高频RFID防碰撞方法,不需要估算标签数量,不需要进行求模分组运行,不需要得到只有一位相同的临时ID,也不需要得到随机数,本发明的超高频RFID防碰撞方法能够通过较为简单的运算,在不影响芯片功耗的情况下,即可实现非常高的防碰撞效率,另外该超高频RFID防碰撞方法兼容ISO18000-6C协议,可以适用于通用的读写器进行标签盘点。
具体实施方式
下面结合附图,对本发明的具体实施方式进行详细描述,但应当理解本发明的保护范围并不受具体实施方式的限制。
除非另有其它明确表示,否则在整个说明书和权利要求书中,术语“包括”或其变换如“包含”或“包括有”等等将被理解为包括所陈述的元件或组成部分,而并未排除其它元件或其它组成部分。
为了克服现有技术的问题,本发明提供了一种超高频RFID防碰撞方法,不需要估算标签数量,不需要进行求模分组运行,不需要得到只有一位相同的临时ID,也不需要得到随机数,本发明的超高频RFID防碰撞方法能够通过较为简单的运算,在不影响芯片功耗的情况下,即可实现非常高的防碰撞效率,另外该超高频RFID防碰撞方法兼容ISO18000-6C协议,可以适用于通用的读写器进行标签盘点。
如图1所示,在一实施方式中,超高频RFID防碰撞方法包括:步骤S1~步骤S3。
在步骤S1中,读写器发送特殊约定选择命令Select*和查询命令Query。其中,查询命令Query中包括参数Q。
具体地,特殊约定选择命令Select*中的参数进行了特殊的约定,例如当特殊约定选择命令Select*中的标签存储区参数MemBank=0b00且所述特殊约定命令中的指针参数Pointer为特定值(如0b01111010),按照协议标签收到MemBank=0b00后将忽略该条选择命令,下一条查询命令Query按照特殊方法执行,即当电子标签收到读写器的查询命令Query后将Q位的EPC值赋值给时隙计数器。
在步骤S2中电子标签借助唯一电子产品编码对时隙计数器进行赋值。具体而言,每个电子标签接收到该特殊约定选择命令Select*和该查询命令Query后,将EPC(唯一电子产品编码)中的流水号的Q位低地址数据赋值给自身的时隙计数器。所述时隙计数器的数值为0的电子标签向所述读写器返回数据,且所述读写器发送响应指令。
在步骤S3中所述读写器执行查询重复命令,其中,所述查询重复命令连续执行多次,且最多不超过2^Q-1次。具体而言,读写器发送查询重复命令,每个所述电子标签的时隙计数器的数值均进行减1操作,当减1后的时隙计数器的数值为0的电子标签向所述读写器返回数据,所述读写器发送响应指令,该过程最多执行2^Q-1次。
在一优选的实施方式中,所述读写器同时读取的电子标签个数为2的整数幂个,可以进一步提高防碰撞效率。
在一优选的实施方式中,所述读写器同时读取的所有电子标签的唯一电子产品编码的流水号是连续的,不出现断号以及重复号,防碰撞效率可达100%。
在一优选的实施方式中,上述超高频RFID防碰撞方法只在第一帧执行,当电子标签在所述第一帧内没有被所述读写器读取完,则在后续的每帧中执行基于动态帧时隙ALOHA算法的RFID防碰撞方法。因为本实施方式假设标签的EPC号码基本是连续的,例如总共需要盘点100万枚标签,每次测试128个,号码从1到128。第一种情况,如果EPC完全连续,则放入时隙计数器后,标签在第一帧的效率为100%,则第一帧读到的标签有128*100%=128个,剩余0个。第一帧完成全部盘点,没有第二帧。第二种情况,假设出现了少量的断号重号,那么效率就低于100%。比如号码3有两个,号码4不存在。则第一帧盘点后,读到了128-2=126个,剩余2个。第二帧如果仍然采用流水号赋值时隙计数器的方法,那么3号和4号标签仍然会碰撞,无法解决问题,所以第二帧应该回到传统DFSA方式,将随机数放入时隙计数器。并且第二帧只剩下了2个标签,整个防碰撞的效率大大提高了。还有一种特别极端的情况,假设在大规模生产的某一个号段,出现了非常严重的问题,比如这128个标签的号码全是1,那么第一帧将EPC放入时隙计数器,将导致第一帧读到的标签数目为0,效率0%。这种特殊情况下,应当在第一帧盘点到特定的时隙数目,比如50个时隙的时候,做一次判断,若发现防碰撞效率为0或低于设定阈值,就跳出第一帧,采用普通的DFSA方式来进行盘点。
为了更加清楚地了解上述实施方式的效果,以下对现有技术的DFSA方案和上述实施方式的两种电子标签盘点方式进行对比。首先,应用场景为每次盘点的电子标签数目已知,并且每个电子标签的EPC存在流水号,且流水号是基本连续的。
如表1所示:假设有四个电子标签Tag0~3,其EPC号码为连续值,比如0b11111100~0b11111111。在DFSA方案中,需要将Q位随机数赋值给电子标签内部的时隙计数器SLOT。在本方案中,将EPC连续号码低Q位赋值给SLOT。在DFSA方案中,因为标签之间无法相互通信,所以可能会出现相同的随机数结果,导致出现无效的碰撞时隙和空闲时隙。而在本实施方式中,标签的EPC号码互不相同,从而可以保证每个时隙都可以是有效时隙,使得防碰撞效率达到理想值100%。
表1
在DFSA方案的第一帧流程如图2所示,时隙用虚线隔开。假设读写器(Reader)设定的初始值Q=2,则上电后第一个时隙,发送选择命令Select和查询命令Query(Q=2),电子标签对时隙计数器SLOT的操作为Tag0的SLOT=0b01,Tag1的SLOT=0b11,Tag2的SLOT=0b10,Tag3的SLOT=0b10。很显然,第一个时隙中标签无返回,为空闲时隙。第二个时隙,读写器发送查询重复命令QueryRep,电子标签收到命令后,Slot减去1,Tag0的SLOT=0b00,Tag1的SLOT=0b10,Tag2的SLOT=0b01,Tag3的SLOT=0b01,这个时隙中SLOT为0的标签只有Tag0,所以Tag0返回RN16(16位随机数),读写器收到RN16后,发送应答命令ACK,标签返回PC(存储协议控制位)+EPC+CRC(校验位)。在第三个时隙,读写器发送查询重复命令QueryRep,标签收到命令后,Slot减去1。根据协议SLOT为0的标签收到QueryRep,SLOT=0x7FFF。所以,Tag0的SLOT=0x7FFF,Tag1的SLOT=0b01,Tag2的SLOT=0b00,Tag3的SLOT=0b00。在这个时隙里Tag2和Tag3同时返回数据,发生了碰撞,所以是碰撞时隙。第四个时隙,读写器发送QueryRep命令,标签收到命令后,Slot减去1,Tag0的SLOT为0x7FFE,Tag1的SLOT=0b00,Tag2的SLOT=0x7FFF,Tag3的SLOT=0x7FFF。标签Tag2返回数据,读写器发送ACK,Tag2返回PC+EPC+CRC。完成第一帧盘点后,Tag0和Tag1被盘点到,总共有四个时隙,其中两个有效时隙,本轮盘点防碰撞效率为50%。多次进行以上盘点,第一个时隙标签SLOT值将会随机,第一帧盘点的防碰撞效率平均值,将接近理论值36.8%。在标签数量较少时,比如有四个标签,误差一个标签,防碰撞效率差了25%。在标签数量较多时,比如有256个标签,则误差一个标签,误差一个标签,防碰撞效率差了3.9%。所以标签越多,则防碰撞效率单次测试值波动越小。
本实施方式的第一帧流程如图3所示,时隙用虚线隔开:上电后第一个时隙,发送特殊约定选择命令Select*,这里特殊约定选择命令Select*的格式和常用的选择命令Select相同,只是命令的参数做出了特殊的约定。比如Select*参数中MemBank(标签存储区)=0b00,Pointer(指针)=特定值(比如0b01111010),按照协议标签收到MemBank=0b00应当忽略这条Select。而在本实施方式的特殊约定中,标签收到特殊约定选择命令Select*,参数为MemBank=0b00,Pointer=特定值(比如0b01111010)后,下一条查询命令Query按本实施方式的特殊方法执行。本实施方式的特殊方法是电子标签收到读写器的命令Query(Q=2)后,开启特殊执行方式,将Q位的EPC值赋值给了SLOT。在这里Tag0的SLOT=0b00,Tag1的SLOT=0b01,Tag2的SLOT=0b10,Tag3的SLOT=0b11。很显然,第一个时隙中标签Tag0返回,读写器发送ACK,得到标签EPC,为有效时隙。第二个时隙,读写器发送QueryRep,执行正常操作SLOT减去1,Tag0的SLOT=0b0x7FFF,Tag1的SLOT=0b00,Tag2的SLOT=0b01,Tag3的SLOT=0b10,标签Tag1的SLOT为0有数据返回,读写器发送ACK,得到标签Tag1的EPC,为有效时隙。第三个时隙,读写器发送QueryRep,执行正常操作SLOT减去1,Tag0的SLOT=0b0x7FFE,Tag1的SLOT=0x7FFF,Tag2的SLOT=0b00,Tag3的SLOT=0b01,这个时隙中标签Tag2返回,读写器发送ACK,得到标签EPC,为有效时隙。第四个时隙,读写器发送QueryRep,执行正常操作SLOT减去1,Tag0的SLOT=0b0x7FFD,Tag1的SLOT=0x7FFE,Tag2的SLOT=0x7FFF,Tag3的SLOT=0b00,这个时隙中标签Tag3返回,读写器发送ACK,得到标签EPC,为有效时隙。完成第一帧盘点后,Tag0~3都被盘点到,总共有四个时隙,其中四个有效时隙,本轮盘点防碰撞效率为100%。
从上述对比结果可知,本实施方式的盘点防碰撞效率可达100%,远远高于DFSA方案的防碰撞效率。
上述实施方式的条件是EPC的流水号连续且一次盘点的电子标签的数目是2的整数幂个,且数目只有4个。
在实际的盘点过程中,面对的情况可能会比较复杂,例如一次盘点所需盘点的数量更多、电子标签的EPC可能出现不连续的情况、一次盘点的电子标签数目不是2的整数幂个、有些情况可能会使得防碰撞效率不能达到100%,但是仍然远远高于现有技术方案的防碰撞效率。
对一次所需盘点的数量更多的情况分析如下:假设一次需要盘点16个标签,标签连续的EPC为0b11010000、0b11010001、0b11010010、0b11010011、0b11010100、0b11010101、0b11010110、0b11010111、0b11011000、0b11011001、0b11011010、0b11011011、0b11011100、0b11011101、0b11011110、0b11011111。读写器发送特殊约定选择命令Select*和查询命令Query(Q=4)开启特殊功能,将EPC的后4位赋值给SLOT,则SLOT值分别为0b0000~0b1111,然后连续发送15条QueryRep,很显然,每条命令有且仅有一个标签返回数据。盘点标签的防碰撞效率为100%。可见,标签数量为2的整数幂如2,4,8,16,32,64,128,256,512等,采用本实施方式的防碰撞效率可达100%。
对电子标签的时隙计数器SLOT的不同初值的情况分析如下:假设10万张电子标签,其号码连续,那么任意从其中任取连续的8个电子标签。其初值将不会为0,而是0-7的任意数值,全部的情况为8种,如表2所示。
表2
从表2中可以看到,无论是哪一种情况,标签的SLOT都包含了0-7七个数。在8个时隙中,标签的SLOT做8次减1操作,每个时隙将只有1个标签的SLOT为0。所以标签的初值影响标签返回的顺序,而不会影响本实施方式的防碰撞效率,本实施方式的防碰撞效率仍然为100%。
对每次盘点的标签数量不为2的整数幂的情况分析如下:假设每次盘点的标签有n个,查询命令Query后帧长度为L=2^Q。则读写器发送特殊约定命令Select*后,电子标签将Q位的EPC号码,赋值给了SLOT。这里如果n不等于L,比如Q=3,L=8,而标签数量n=7,则帧内的时隙数将不等于标签数量。七个连续号码标签不同初值下的SLOT如表3所示。
表3
Tag0 |
Tag1 |
Tag2 |
Tag3 |
Tag4 |
Tag5 |
Tag6 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
从表3中可以看出,不管初值是什么,第一帧会有八个时隙,将会在上表的基础上做八次减1操作。显然八个时隙过后,每种初值的情况都会盘点到7个标签,7个标签全部被盘点到。但是八个时隙中,有7个有效时隙,1个空闲时隙,所以效率下降到87.5%。同理,标签数量为6,Q为3,则会出现两个空闲时隙。推广情况为标签数量8-m,Q为3,则会出现m个空闲时隙。其中m为自然数。如果标签数量为9,则会出现情况如表4所示。每帧的盘点会多出一个碰撞的时隙。同理标签数量为10,则会多出两个碰撞的时隙。推广情况为,标签数量8+m,Q为3,则会出现m个碰撞时隙。其中m为自然数。
表4
Tag0 |
Tag1 |
Tag2 |
Tag3 |
Tag4 |
Tag5 |
Tag6 |
Tag7 |
Tag8 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
0 |
7 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
6 |
7 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
5 |
6 |
7 |
0 |
1 |
2 |
3 |
4 |
5 |
4 |
5 |
6 |
7 |
0 |
1 |
2 |
3 |
4 |
3 |
4 |
5 |
6 |
7 |
0 |
1 |
2 |
3 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
0 |
7 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
总结以上规律,当每次盘点的标签数量n小于帧长度L的时候,出现L-n个空闲时隙;当每次盘点的标签数量n大于帧长度L的时候,出现n-L个碰撞时隙。
该种情况中,即当标签数量不为2的整数幂时,当盘点的标签数量n小于帧长度L的时候,出现L-n个空闲时隙,最多的空闲时隙出现在n=3*L/4的时候,因为如果n<3*L/4,则更接近L/2,可以选择Q=Q-1。n=3*L/4的时候,出现了L-3*L/4=L/4的空闲时隙,最低效率为3*L/4/L=3/4=75%。所以这种情况下,效率为75%到100%,仍旧远大于现有技术方案的36.8%。
当标签数量n大于帧长度L的时候,出现n-L个碰撞时隙,最严重的情况出现在n=L+4/L的时候,因为如果n>L+4/L,则n更接近于2*L,可以取Q=Q+1。n=L+4/L的时候,碰撞时隙有4/L个,效率为3/4=75%,所以这种情况下,效率为75%到100%,仍旧远大于现有技术方案的36.8%。
对标签EPC出现缺号情况分析如下:当标签的EPC出现了不连续情况,比如在连续号码中,缺少了一个号码。那么出现的情况如表5所示,假设缺少了SLOT为3的标签。可以看到一帧8个时隙后,会出现一个碰撞时隙,一个空闲时隙,五个有效时隙。
表5
再如表6所示,当在连续号码中缺少了两个号码后,假设缺少3和4,可以看到,一帧8个时隙后,会出现两个碰撞时隙,两个空闲时隙,四个有效时隙。
表6
Tag0 |
Tag1 |
Tag2 |
Tag3 |
Tag4 |
Tag5 |
Tag6 |
Tag7 |
0 |
1 |
2 |
5 |
6 |
7 |
0 |
1 |
7 |
0 |
1 |
2 |
5 |
6 |
7 |
0 |
6 |
7 |
0 |
1 |
2 |
5 |
6 |
7 |
5 |
6 |
7 |
0 |
1 |
2 |
5 |
6 |
2 |
5 |
6 |
7 |
0 |
1 |
2 |
5 |
1 |
2 |
5 |
6 |
7 |
0 |
1 |
2 |
总结规律如下:当缺号k个后,单次盘点标签数量为n=2^Q情况下,一帧盘点后会出现k个碰撞时隙,k个空闲时隙,n-2*k个有效时隙。在实际应用场景中流水号基本连续的情况下,缺号数量会远小于一次盘点的电子标签的数量,因此防碰撞效率仍然会好于现有技术的盘点方法。
另外,在实际应用场景中,当出现标签EPC低位不是流水号情况时,读写器发命令至电子标签,从哪一位开始是有效的流水号。此处仍旧是在Select*里找到参数。比如如果设置Select*的参数Length=0b00000000,则从最低位开始计算流水号;如果设置Select*的参数Length=0b00000100,则从EPC最四位开始计算流水号。还有一种极端情况就是当标签EPC同号过多时,则采用帧内调节的DFSA算法。在每次执行查询重复命令QueryRep后,都对当前盘点效率进行统计,当发现当前盘点效率低于阈值,则跳出当前帧,并在下一帧开启普通的DFSA盘点流程。采用帧内调整算法的目的是如果标签的某一号段发生严重问题,则第一帧的效率可能非常低,为了减轻这种特殊情况的影响,应当在第一帧没有完全完成的时候,就结束第一帧。
综上分析说明,采用上述实施方式的盘点方法,能够在EPC流水号完全连续且每次盘点的电子标签数目是2的整数幂的情况下实现防碰撞效率100%,当实际场合中,遇到EPC流水号出现了断号、同号等不连续的情况或者每次盘点的电子标签数目不为2的整数幂时,防碰撞效率不能达到100%,但是仍然比现有方法的防碰撞效率要高。另外本实施方式只要求电子标签在收到特殊约定选择命令Select*和查询命令Query后,将Q位EPC赋值给时隙计数器。而不使用本实施方式方法的标签,在收到Select和Query命令后,将Q位随机数赋值给时隙计数器。这两个操作对电子标签来说区别不大,所以本实施方式算法简单,不影响芯片功耗。并且本实施方式只要求读写器能够支持特殊约定选择命令Select。特殊约定选择命令Select*指令和普通的选择命令Select的格式一致,仅是Select*指令对参数做了特殊的说明,所以本实施方式兼容ISO18000-6C协议,可以使用通用读写器进行标签盘点。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
前述对本发明的具体示例性实施方案的描述是为了说明和例证的目的。这些描述并非想将本发明限定为所公开的精确形式,并且很显然,根据上述教导,可以进行很多改变和变化。对示例性实施例进行选择和描述的目的在于解释本发明的特定原理及其实际应用,从而使得本领域的技术人员能够实现并利用本发明的各种不同的示例性实施方案以及各种不同的选择和改变。本发明的范围意在由权利要求书及其等同形式所限定。