译者:陈广
日期:2021-1-2
RFID标签,尤其是Gen 2 RFID标签,可以装载三种不同种类的数据:
商业数据:描述标签附加到物理对象上的信息。这些信息包括唯一标识物理对象的电子产品代码(EPC),还可以包括标签上携带的其它数据元素。这些信息是商业应用程序产生的,因此典型的执行体系中,这些数据通常在数据捕获级别用商业应用级别传输。RFID标签上的大多数标准数据与其他数据载体(如条形码)中找到的业务数据相同。
控制信息:数据捕获应用程序使用的信息用于帮助控制与标签交互的过程。控制信息:包括帮助捕获应用程序从大量标签中进行筛选,以提高读取效率的信息;影响捕获应用程序行为的特殊处理信息;控制标签安全特性的信息,等等。控制信息通常不会直接传递给商业应用程序,尽管控制信息可能会影响捕获应用程序如何将商业数据呈现给商业应用程序。与商业数据不同,控制信息在条形码或其它数据载体中没有等价数据。
标签出厂信息:描述标签本身的信息,而不是标签附加到物理对象上的信息。标签出厂信息包括生产ID和指示标签种类的代码。它还可以包括描述标签功能的信息,以及在制造时分配的唯一序列号。通常,标签出厂信息和控制信息一样,它被捕获应用程序使用,而不是直接传递给商业应用程序。在某些应用程序中,唯一序列号可能作为标签出厂信息的一部分附加到EPC中,所以行为类似于商业数据。与控制信息一样,标签出厂信息在条形码或其它数据载体中没有等价数据。
应当注意的是,这些评价有些主观,在某些应用中,观点可能是模糊的。尽管如此,它们对于理解标签数据标准的构造是非常有用,并且对于有效和正确地使用数据是有意义的。
下表对上述信息进行了总结:
信息类型 | 描述 | Gen 2 标签中的位置 | 典型应用 | 等价于条码 |
---|---|---|---|---|
商业数据 | 描述标签附着的物理对象 | EPC区(除EPC中的PC、XPCD位以及过滤值外) 用户内存区 |
数据捕获层和商业应用层 | 有:GS1键、应用标识符(AI) |
控制信息 | 促进有效的标签交互 | 保留区 EPC区:EPC中的PC、XPC位及过滤值 |
数据捕获层 | 无 |
标签出厂信息 | 描述标签本身,而不是标签附着的物理对象 | TID区 | 数据捕获层 唯一的标签出厂序列号可到达商业应用层 |
无 |
标签数据标准中定义的二进制数据结构用于RFID标签,尤其是UHF Class 1 Gen 2 标签(也称为ISO 18000-6C标签)。空中接口标准[UHFC1G2]规定了Gen 2标签内存的结构,尤其是,它规定了这些标签的内存由四个单独的寻址区组成,编号为:00、01、10和11。它还规定了每个区的用途,以及空中接口行为决定的对每个区的内容的限制。例如,保留区(00区)的布局和含义,其中包含了控制某些空中接口命令的密码,在[UHFC1G2]中完全指定。
对于那些对空中接口没有特殊含义的内存区和内存位置(即,就空中接口而言,只是“数据”),标签数据标准指定这些内存位置的内容和含义。
在[UHFC1G2]中建立约定之后,使用16-bit数据描述内存地址,每个区以$00_h$开始,并向上扩展到每个区包含的最多位,每个区的容量在某些方面受到[UHFC1G2]的限制,但最终可能随着每个标签的制作和模型而变化。位$00_h$被认为是每个区的最高位,当二进制字段被放置到标签内存中时,任何给定字段的最高位占据该字段所占用的最低编号位地址。然而,在描述单个字段时,最低位被编号为0。例如,访问密钥是由 $b_{31} b_{30} ... b_0$ 组成的32-bit无符号整数,其中,$b_{31}$为最高位,$b_0$为最低位。当访问密钥存储在Gen 2 标签的保留区地址$20_h - 3F_h$(包括)时,最高位$b_{31}$存储在标签地址$20_h$,最低位$b_0$存储在地址$3F_h$中。
下图显示了Gen 2标签的内存区,颜色指示图3-1中分类后数据类型。
下表描述了以上内存映射的各个区域信息。
区 | 位 | 区域 | 描述 | 种类 | 出处 |
---|---|---|---|---|---|
Bank 00 (保留) |
00h - 1Fh | 灭活密码 | 必须存在于标签的32-bit密码,用于完成Gen 2的“Kill”命令。 | 控制信息 | [UHFC1G2] |
20h - 2Fh | 访问密码 | 必须存在于标签的32-bit密码,用以执行特权操作。 | 控制信息 | [UHFC1G2] | |
Bank 01 (EPC) |
00h - 0Fh | CRC | 16-bit循环冗余校验码,根据EPC区内容进行计算 | 控制信息 | [UHFC1G2] |
10h - 1Fh | PC 位 | 协议控制位(见下文) | 控制信息 | (见下文) | |
20h - 结尾 | EPC | 电子产品代码加上过滤值,产品电子代码是标签所附着物理对象的全局唯一标识符。过滤值提供了一种通过选择感兴趣标签子集来提高标签读取效率的方法。 | 商业数据(除了过滤值,它是控制信息) | EPC在6、7和13节定义。过滤值在第10节定义。 | |
210h - 21Fh | XPC 位 | 扩展协议控制位。如果EPC区的16h位设置为1,则210h - 21Fh(包含)则包含了[UHFC1G2]中指定的附加协议控制位。 | 控制信息 | [UHFC1G2] | |
Bank 10 (TID) |
00h - 结尾 | TID 位 | 标签标识位,它提供标签本身的信息,而不是标签所附着物理对象的信息。 | 标签出厂信息 | 第16节 |
Bank 11 (User) |
00h - 结尾 | DSFID | 逻辑上,用户内存的内容是一系列名称-值对,名称部分是一个OID[ASN.1],值是一个字符串。物理上,前几位是[ISO15961] 和[ISO15962]中指定的数据存储格式标识符。DSFID指定了用户内存区其余部分的格式。DSFID通常长度为8位,但可以按照[ISO15961]中的规定进一步扩展。当DSFID指定访问方法 2 时,用户内存的其余部分的格式是第17节中指定的“打包对象”。此格式推荐用于EPC应用程序。打包对象数据格式中的物理编码是一个“打包对象”序列,其中每个打包对象包括一个或多个名称-值对,其值被压缩在一起。 | 商业数据 | [ISO15961],[ISO15962],第17节 |
下图更详细地说明了EPC区(Bank 01)的前几位,特别显示了协议控制位(位10h - 1Fh,包含)中的各个字段。
下表说明了PC位的含义:
位 | 字段 | 描述 | 出处 |
---|---|---|---|
10h-14h | 长度 | 表示包含PC字段和EPC字段的16-bit字的数量(见下文)。参考15.1.1节对此字段编码的讨论 | [UHFC1G2] |
15h | 用户内存指示(UMI) | 指示用户内存是否存在及包含数据 | [UHFC1G2] |
16h | XPC指示(XI) | 指示是否存在XPC | [UHFC1G2] |
17h | 切换位 | 如果为 0,指示一个EPCglobal应用;尤其,指示18h-1Fh位包含属性位,EPC区的其余部分包含二进制编码的EPC。 如果为 1,指示非EPCglobal应用;尤其指示18h-1Fh包含[ISO15961]定义的ISO应用类型识别码(AFI),并且EPC区剩余部分包含适合该AFI的唯一项目标识符(UII) |
[UHFC1G2] |
18h-1Fh(如果切换位=0) | 属性位 | 可以指导如何处理标签所贴物理对象。(仅适用于Gen2 v 1.x标签。) | 第11节 |
18h-1Fh(如果切换位=1) | AFI | 一个应用类型识别码,指示EPC区的剩余部分被编码为非EPCglobal应用 | [ISO15961] |
$17_h - 1F_h$(包含)统称为数字系统标识符(Numbering System Identifier,NSI)。然而,应该注意的是,当切换位($17_h$位)为零时,数字系统总是电子产品代码,位$18_h - 1F_h$所包含的属性位的作用与识别正在使用的数字系统完全无关。
过滤值是可能包含在Gen 2标签的EPC内存区中的附加控制信息。过滤值的预期用途是允许RFID读写器选择或取消选择与某些物理对象对应的标签,使得在可能存在其他标签的环境中更容易读取所需的标签。例如,如果目标是读取托盘上的单个标签,预计可能会有数百或数千个项目级别标签存在,通过使用Gen 2 空中接口选择托盘标签且不选择项目级别标签,可以提高捕获应用程序的性能。
过滤值可用于所有EPC类型,除了通用标识符(GID)。有一组不同的标准化过滤器值与每种类型的EPC相关联,见下文。
必须要理解过滤值是额外的“控制信息”,而不是电子产品代码的一部分。过滤值对于EPC的唯一标识没有作用。例如,不允许将两个具有相同EPC的RFID标签附着到不同的物理对象上,即使两个标签上的过滤值不同。
由于过滤值并非EPC的一部分,当EPC表示为纯标识URI时,过滤值不包含在内,也不应将过滤值视为商业应用EPC的一部分。然而,捕获应用程序可以读取过滤值,并将其部分数据字段而不是EPC向上传递到业务应用程序。然而,应该认识到,过滤值的目的是为数据捕获过程提供帮助,在大多数情况下,过滤值对业务应用程序是有限的或没有价值的。过滤值不打算为业务应用程序提供可靠的包装级别指示。
在以下面部分中,标记为“保留”(reserved)的过滤值保留给EPCglobal在本规范的未来版本中分配。此处指定的编码与解码规则的实现应接收过滤值的任何值,无论“保留”与否。然而,应用程序不应指示编码器将保留值写入标签,也不应依赖从标签解码的保留值,因为如果在今后对本规范的修订中分配了保留值,这样做可能会导致互操作性问题。
每个EPC scheme都包括一个被标记为“所有其他”(All Others)的过滤值。此过滤值意味着标签所贴对象与为该EPC scheme定义的任何其他过滤值的描述不匹配。在某些情况下,“所有其他”过滤值可能出现在被编码以符合本规范的早期版本的标签上,此时没有其他合适的过滤值可用。在对新标签进行编码时,应将过滤值设置为与标签所贴对象的描述相匹配,只有当本规范中没有为对象定义合适的过滤值时,才使用“所有其他”。
下面指定了SGTIN EPC标签过滤值的标准规范。
类型 | 过滤值 | 二进制值 |
---|---|---|
所有其他(参考10.1节) | 0 | 000 |
销售点(POS)贸易项目 | 1 | 001 |
运输满箱* | 2 | 010 |
保留(参考10.1节) | 3 | 011 |
内包装贸易项目分组处理 | 4 | 100 |
保留(参考10.1节) | 5 | 101 |
单元货物 | 6 | 110 |
单位内部贸易项目或组件内的产品,不打算单独销售 | 7 | 111 |
* 在为一个SGTIN使用EPC过滤值时,“运输满箱”表示一个箱子或纸箱,其多个POS贸易项目的组成通过主数据标准化,并可通过引用单个GTIN以使用相同配置(重新)订购。
** 在为一个SGTIN使用EPC过滤值时,“单元货物”指托盘或其他类型载货设备(例如手推车、手提包、衣架、袋子、麻袋等等)上包含的一个或多个贸易项目,其适合作为一个单元进行运输、堆放和储存,其组成通过主数据标准化,并可通过引用单个GTIN以使用相同配置(重新)订购。
下面指定了SSCC EPC标签过滤值的标准规范。
类型 | 过滤值 | 二进制值 |
---|---|---|
所有其他(参考10.1节) | 0 | 000 |
保留(参考10.1节) | 1 | 001 |
运输满箱* | 2 | 010 |
保留(参考10.1节) | 3 | 011 |
保留(参考10.1节) | 4 | 100 |
保留(参考10.1节) | 5 | 101 |
单元货物 | 6 | 110 |
保留(参考10.1节) | 7 | 111 |
类型 | 过滤值 | 二进制值 |
---|---|---|
所有其他(参考10.1节) | 0 | 000 |
保留(参考10.1节) | 1 | 001 |
保留(参考10.1节) | 2 | 010 |
保留(参考10.1节) | 3 | 011 |
保留(参考10.1节) | 4 | 100 |
保留(参考10.1节) | 5 | 101 |
保留(参考10.1节) | 1 | 110 |
保留(参考10.1节) | 7 | 111 |
类型 | 过滤值 | 二进制值 |
---|---|---|
所有其他(参考10.1节) | 0 | 000 |
保留(参考10.1节) | 1 | 001 |
保留(参考10.1节) | 2 | 010 |
保留(参考10.1节) | 3 | 011 |
保留(参考10.1节) | 4 | 100 |
保留(参考10.1节) | 5 | 101 |
保留(参考10.1节) | 1 | 110 |
保留(参考10.1节) | 7 | 111 |
类型 | 过滤值 | 二进制值 |
---|---|---|
所有其他(参考10.1节) | 0 | 000 |
铁路车辆 | 1 | 001 |
保留(参考10.1节) | 2 | 010 |
保留(参考10.1节) | 3 | 011 |
保留(参考10.1节) | 4 | 100 |
保留(参考10.1节) | 5 | 101 |
保留(参考10.1节) | 1 | 110 |
保留(参考10.1节) | 7 | 111 |
类型 | 过滤值 | 二进制值 |
---|---|---|
所有其他(参考10.1节) | 0 | 000 |
保留(参考10.1节) | 1 | 001 |
保留(参考10.1节) | 2 | 010 |
保留(参考10.1节) | 3 | 011 |
保留(参考10.1节) | 4 | 100 |
保留(参考10.1节) | 5 | 101 |
保留(参考10.1节) | 1 | 110 |
保留(参考10.1节) | 7 | 111 |
类型 | 过滤值 | 二进制值 |
---|---|---|
所有其他(参考10.1节) | 0 | 000 |
旅行证件* | 1 | 001 |
保留(参考10.1节) | 2 | 010 |
保留(参考10.1节) | 3 | 011 |
保留(参考10.1节) | 4 | 100 |
保留(参考10.1节) | 5 | 101 |
保留(参考10.1节) | 1 | 110 |
保留(参考10.1节) | 7 | 111 |
* 旅行证件是由政府或国际公约组织签发的身份证件,以便利个人跨越国际边界的流动。
类型 | 过滤值 | 二进制值 |
---|---|---|
所有其他(参考10.1节) | 0 | 000 |
保留(参考10.1节) | 1 | 001 |
保留(参考10.1节) | 2 | 010 |
保留(参考10.1节) | 3 | 011 |
保留(参考10.1节) | 4 | 100 |
保留(参考10.1节) | 5 | 101 |
保留(参考10.1节) | 1 | 110 |
保留(参考10.1节) | 7 | 111 |
类型 | 过滤值 | 二进制值 |
---|---|---|
所有其他(参考10.1节) | 0 | 000 |
保留(参考10.1节) | 1 | 001 |
保留(参考10.1节) | 2 | 010 |
保留(参考10.1节) | 3 | 011 |
保留(参考10.1节) | 4 | 100 |
保留(参考10.1节) | 5 | 101 |
保留(参考10.1节) | 1 | 110 |
保留(参考10.1节) | 7 | 111 |
类型 | 过滤值 | 二进制值 |
---|---|---|
所有其他(参考10.1节) | 0 | 000 |
保留(参考10.1节) | 1 | 001 |
保留(参考10.1节) | 2 | 010 |
保留(参考10.1节) | 3 | 011 |
保留(参考10.1节) | 4 | 100 |
保留(参考10.1节) | 5 | 101 |
保留(参考10.1节) | 1 | 110 |
保留(参考10.1节) | 7 | 111 |
GDI EPC scheme没有规定使用过滤值。
US DoD EPC标签的过滤值在[USDOD]中指定。
类型 | 过滤值 | 二进制值 |
---|---|---|
所有其他(参考10.1节) | 0 | 000000 |
项目,但过滤值8~63适用的值除外 | 1 | 000001 |
纸箱 | 2 | 000010 |
保留(参考10.1节) | 3~5 | 000011 ~ 000101 |
托盘 | 6 | 000110 |
保留(参考10.1节) | 7 | 000111 |
汽车坐垫 | 8 | 001000 |
座套 | 9 | 001001 |
座椅安全带 | 10 | 001010 |
厨房,厨房推车和其他厨房服务设备 | 11 | 001011 |
单位装载设备,货物集装箱 | 12 | 001100 |
飞机安全物品(救生衣盒,后厕所墙壁,厕所天花板通道舱口) | 13 | 001101 |
救生衣 | 14 | 001110 |
氧气发生器 | 15 | 001111 |
发动机部件 | 16 | 010000 |
航空电子设备 | 17 | 010001 |
实验(“飞行试验”)设备 | 18 | 010010 |
其他应急设备(烟雾面罩、PBE、碰撞轴、医疗包、烟雾探测器、手电筒、安全卡等) | 19 | 01011 |
其他可旋转设备; 例如:线路或可更换底座 | 20 | 010100 |
其他可修复的 | 21 | 010101 |
其他机舱内面 | 22 | 010110 |
其他修理(不包括部件);例如,结构项目修理 | 23 | 010111 |
乘客座位(结构) | 24 | 011000 |
飞行娱乐系统 | 25 | 011001 |
保留(参考10.1节) | 26~55 | 011010 ~ 110111 |
位置标识符(*) | 56 | 111000 |
文档 | 57 | 111001 |
工具 | 58 | 111010 |
地面保障设备 | 59 | 111011 |
其他不可飞行设备 | 60 | 111100 |
保留供公司内部使用 | 61~63 | 111101 ~ 111111 |
非标准提示:当将过滤值分配给标记部件时,选择的过滤值应该尽可能具体。例如,雷达黑匣子的过滤值更好的选择是17(航空电子设备),而不是更普遍的20类(其他可旋转设备)。另一方面,由于17(航空电子设备)不准确,因此20(其他可旋转部件)的过滤值适用于飞机前锥中的雷达天线。
* 位置标识符的作用可能不同于项目“标识”标签,因为它标识了可能被其他物品引用的位置。因此,一个物品可能有一个标识标签,但也有一个位置标签。一个例子可能是飞机的一个特定部分,甚至是整个飞机。
非标准提示:“位置”的一个例子可以是一个特定的飞机“尾号”。例如,XYZ航空公司有一个拥有200架737的机队,内部配置相同,一旦你进入其中,你就无法分辨你在哪一架737。这家航空公司想放置带有编码尾号的RFID“位置标记”,并将其放置在乘客门或货舱门内。门可能有两个标签,一个是门本身的,例如它有门的零件号,序列号,和其他东西,另一个标签用于“位置”。
本节仅适用于 Gen2 v 1.x 标签。
属性位是8-bit的“控制信息”,被捕获应用程序用于指导捕获过程。属性位可用于决定标签所附着的物理对象是否需要任何形式的特殊处理。
属性位对于所有的EPC类型可用。无论使用哪种EPC scheme,下面指定的属性位定义都适用。
必须理解,属性位是附加的“控制信息”,不属于电子产品代码的一部分。属性位不构成EPC的唯一标识。例如,不允许将两个包含相同EPC的RFID标签附加到两个不同的物理对象,即使两个标签上的属性位不同。
因为属性位不是EPC的一部分,当EPC表现为纯标识URI时,属性位不包含在内,业务应用程序也不应将属性位视为EPC的一部分。然而,捕获应用程序可能读取属性位,并将它们向上传递给商业应用程序的某些数据字段而不是EPC。但是,应该认识到,属性位的目的是协助数据捕获和物理处理过程,在大多数情况下,属性位对业务应用程序的价值有限或没有价值。属性位的目的不是为业务应用程序提供可靠的主数据或产品描述属性。
当前分配的属性位如下所示:
位地址 | 分配为TDS版本 | 含义 |
---|---|---|
18h | 未分配 | |
19h | 未分配 | |
1Ah | 未分配 | |
1Bh | 未分配 | |
1Ch | 未分配 | |
1Dh | 未分配 | |
1Eh | 未分配 | |
1Fh | 1.5 | 置1表示标签附着于危险物料;置0表示未提供这样的指示 |
上表中,属性位标记为“未分配”表示保留给EPCglobal未来在此规范中进行分配。本文规定的编码和解码规则的实现应接受属性位的任何值,无论是否未分配。然而,应用程序应该指示编码器为每个未分配的位写一个零,并且不应该依赖从标签解码的未分配位的值,因为如果在本规范的未来版本中分配了“未分配”值,这样做可能会导致互操作性问题。
Gen 2 标签的EPC内存区包含了二进制编码的EPC以及其它控制信息。应用程序通常不直接处理二进制数据。应用程序希望读取的可能是第6节定义的Pure Identity EPC URI形式的EPC。然而,在其它情况下,捕获应用程序可能对标签上的控制信息以及EPC感兴趣。另外,写EPC内存区的应用程序需要指定与EPC一起写入的控制信息的值。在这两种情况下,可以使用EPC Tag URI和EPC Raw URI。
EPC Tag URI指定EPC内存区中EPC和控制信息的值。它还指定要使用几种变体二进制编码方案中的哪一种(例如:在SGTIN-96和SGTIN-198中选择)。因此,EPC Tag URI完全并唯一地指定了EPC内存区中的内容。EPC Raw URI也指定EPC内存区的完整内容,但将内存内容表示为单个十进制或十六进制数字。
EPC Tag URI以urn:epc:tag:
开始,当EPC内存区包含有效的EPC时使用。EPC Tag URI类似于Pure Identity EPC URI,但增加了控制信息。EPC Raw URI以urn:epc:raw:
开始,在EPC内存区未包含有效EPC时使用。这包括切换位(位$17_h$)设置为1的情况,以及切换位设置为0但EPC区的其余部分不符合第14节中规定的编码规则的情况,要么是因为首部位未分配,要么是二进制编码的剩余部分违反了对该首部的有效性检查。
下图演示了这些URI的形式:
图中的第一种形式,EPC Tag URI,用于有效的EPC。它类似于Pure Identity EPC URI,添加了第12.2.2节中指定的可选控制信息字段和(非可选)过滤值。EPC scheme名称(上图为sgtin-96
)指定了特定的二进制编码结构,因此它包括编码的长度。这与Pure Identity EPC URI相反,后者标识EPC scheme,而不是特定的二进制编码(例如sgtin
,但不是特定的`sgtin-96)。
图中的第二种形式为EPC Raw URI,可以在切换位(位$17_h$)为零时使用,但通常仅当第一种形式不可用时使用(也就是,如果EPC区中的内容无法按照14.3.9节进行解码时)。它将第$20_h$位之后的内容指定为单个十六进制数字。这个数字中的位的数量是由标签的EPC区中的“长度”字段(位$10_h - 14_h$)决定的。(第12.4节中的语法包括这种形式的变体,其中内容被指定为十进制数字,此形式已弃用。)
图中的第三种形式为EPC Raw URI,当切换们(位$17_h$)为1时使用。它和第二种形式类似,但是在长度和有效负载之间有一个附加字段,它以十六进制数字的形式报告AFI字段的值(位$18_h – 1F_h$)。
每种形式均由14.5.13节指定的编码和解码过程完全定义。
EPC Tag URI 和 EPC Raw URI指定了Gen 2 EPC内存区的所有内容,包括过滤值、属性位等控制信息。本节指定如何在这些URI中包含控制信息。
过滤值仅在EPC区包含一个有效EPC,且EPC是除GID之外的EPC scheme时可用。在EPC Tag URI中,过滤值表示为 scheme 名称之后、EPC其余部分之前的附加字段,如下图所示:
过滤值是一个十进制整数。过滤值的可用值在第10章指定。
除了过滤器之外,EPC区中的控制信息与EPC分开存储。使用下面描述的名称-值对语法,这些信息可以在EPC Tag URI 和 EPC Raw URI中表示。
在这两种URI形式中,控制字段名-值对可能出现在urn:epc:tag:
或urn:epc:raw:
之后,如下图所示:
urn:epc:tag:[att=x01][xpc=x0004]:sgtin-96:3.0614141.112345.400
urn:epc:raw:[att=x01][xpc=x0004]:96.x012345689ABCDEF01234567
方括号中的每个元素指定一个控制信息字段的值。省略的字段相当于指定值为零。作为一种限制性的情况,如果URI中没有指定控制信息字段,则相当于为所有字段指定一个0值。这提供了与早期版本的标签数据标准的向后兼容性。
可用控制信息字段在下表中指定:
字段 | 语法 | 描述 | 读/写 |
---|---|---|---|
属性位 | [att=xNN] |
属性位(位18h-1Fh)的值是一个2-bit十六进制数字NN 。此字段仅在切换位(位17h)为0时可用。 |
读/写 |
用户内存指示 | [umi=B] |
用户内存指示位(位15h)的值B 为0或1。 |
读/写 注意,某些Gen 2标签可能忽略写入此位的值,而是通过用户内存中的内容计算此位的值。参考[USHC1G2]。 |
扩展PC位 | [xpc=xNNNN] |
XPC位(位210h ~ 21Fh)的值是一个四位十六进制数字NNNN 。 |
只读 |
用户内存指示和扩展PC位由标签计算而来,此计算函数使用标签上的其他信息或基于对标签执行的操作(例如重新校验)。因此这个字段不能直接写入。当从标签读取时,任何控制信息字段都可能出现在解码EPC内存区的URI中。写入标签时,将URI编码到标签中时,将忽略umi
和xpc
字段。
为了帮助解码,URI中出现的任何控制信息字段必须按字母顺序出现(与上表中的顺序相同)。
非标准提示:示例:下例演示了EPC Tag URI 和 EPC Raw URI中控制信息字段的使用。
urn:epc:tag:sgtin-96:3.0614141.112345.400
这是一个携带SGTIN EPC的标签,过滤位 = 3,危险材料属性位设置为0,无用户内存(用户内存指示 = 0),并且无重新校验(扩展PC = 0)。这说明了与标签数据标准的早期版本的反向兼容性。
urn:epc:tag:[att=x01]:sgtin-96:3.0614141.112345.400
这是一个携带SGTIN EPC的标签,过滤位 = 3,危险材料属性位设置为0,无用户内存(用户内存指示 = 0),并且无重新校验(扩展PC = 0)。该URI可以由希望调试标签的应用程序指定,其中有害物质位设置为1,过滤位和EPC如上所示。
urn:epc:raw:[att=x01][umi=1][xpc=x0004]:96.x1234567890ABCDEF01234567
这是一个切换位 = 0的标签,位$20_h$是随机数(不能解码为EPC),危险品属性位设置为1,用户内存中的内容为非零,并已重新校验(如扩展PC所示)。
urn:epc:raw:[xpc=x0001]:96.xC1.x1234567890ABCDEF01234567
这是一个切换位 = 1的标签,应用类型识别码 = C1(十六进制),并且用户内存被删除(如扩展PC所指示的)。
第6章中定义的Pure Identity EPC URI是用于信息系统的EPC的表示。Pure Identity EPC URI唯一的信息是EPC本身。相比之下,EPC Tag URI则包含了附加信息:它指定了EPC内存区中的所有控制信息字段的内容,还指定了使用何种编码结构将EPC编码为二进制数据。因此,将Pure Identity EPC URI转换为EPC Tag URI时,必须提供附加信息。相反,从EPC Tag URI中提取Pure Identity EPC URI则需要将这些信息移除。本节将讲述这些转换完成的过程。
对于第6章中描述的每个EPC scheme,都有一个或多个对应的EPC二进制编码方案,用于确定如何将EPC编码成二进制表示以在RFID标签中使用。当给定EPC scheme存在多于一个EPC二进制编码方案时,用户必须选择使用哪种二进制编码方案。一般来说,较短的二进制编码方案产生较少的位,因此允许使用包含较少内存的较便宜的RFID标签,但限制在允许的序列号范围内。较长的二进制编码方案允许GS1通用规范允许的完整序列号范围,但需要更多的位,因此需要更昂贵的RFID标签。
需要注意的是,当且仅当Pure Identity EPC URI是字符对字符完全相同时,两个EPC才是相同的。如果GS1公司前缀、项目参考指示和序列号相同,长二进制编码(例如SGTIN-198)与短二进制编码(例如SGTIN-96)没有区别。
下表列举了可用的EPC二进制编码方案,并指出了对序列号施加的限制。
EPC Scheme | EPC二进制编码方案 | EPC + 过滤位数 | 包含过滤值 | 序列号限制 |
---|---|---|---|---|
sgtin | sgtin-96 | 96 | Yes | 仅数字,无前导零,十进制数,必须小于238(例如,十进制值必须小于或等于274,877,906,943)。 |
sgtin-198 | 198 | Yes | 所有GS1通用规范允许的值(最多20个字母数字字符) | |
sscc | sscc-96 | 96 | Yes | 所有GS1通用规范允许的值(包括扩展位在内的11-5位十进制数字,取决于GS1公司前缀长度) |
sgln | sgln-96 | 96 | Yes | 仅数字,无前导零,十进制数,必须小于241(例如,十进制值必须小于或等于2,199,023,255,551)。 |
sgln-195 | 195 | Yes | 所有GS1通用规范允许的值(最多20个字母数字字符) | |
grai | grai-96 | 96 | Yes | 仅数字,无前导零,十进制数必须小于238(例如,十进制值必须小于或等于274,877,906,943)。 |
grai-1170 | 170 | Yes | 所有GS1通用规范允许的值(最多16个字母数字字符) | |
giai | giai-96 | 96 | Yes | 仅数字,无前导零,十进制数,必须小于根据GS1公司前缀的长度而变化的限制。 见第14.5.5.1节。 |
giai-202 | 202 | Yes | 所有GS1通用规范允许的值(最多18-24个字母数字字符,取决于公司前缀长度) | |
gsrn | gsrn-96 | 96 | Yes | 所有GS1通用规范允许的值(11-5位小数,取决于GS1公司前缀长度) |
gsrnp | gsrnp-96 | 96 | Yes | 所有GS1通用规范允许的值(11-5位小数,取决于GS1公司前缀长度) |
gdti | giai-96 | 96 | Yes | 仅数字,无前导零,十进制数必须小于241(例如,十进制值必须小于或等于2,199,023,255,551)。 |
gdti-113(不推荐作为TDS1.9) | 113 | Yes | GS1通用规范[GS1GS12.0]之前允许的所有值(最多17位十进制数字,有或没有前导零) | |
gdti-174 | 174 | Yes | GS1通用规范允许的所有值(最多17位十进制字母数字字符) | |
sgcn | sgcn-96 | 96 | Yes | 仅数字,最多12位有或无前导零十进制数字 |
itip | itip-110 | 110 | Yes | 仅数字,无前导零,十进制数必须小于238(例如,十进制值必须小于或等于274,877,906,943)。 |
itip-212 | 212 | Yes | GS1通用规范允许的所有值(最多20位字母数字字符) | |
gid | gid-96 | 96 | No | 仅数字,无前导零,十进制数必须小于2 |
usdod | usdod-96 | 96 | 参考“美国国防部供应商被动RFID信息指南”,可在美国国防部网站上获得([http://www.dodrfid.org/supplierguide.htm](http://www.dodrfid.org/supplierguide.htm)) | |
adi | adi-var | 可变 | Yes | 参考14.5.13.1节 |
cpi | cpi-96 | 96 | Yes | 系列号:仅数字,无前导零,十进制数必须小于2 组件/部件参考也仅限于数值值,没有前导零,其长度小于或等于15减去GS1公司前缀的长度 |
cpi-var | 可变 | Yes | GS1通用规范允许的所有值(最多12位数字,无前导零) |
非标提示:解释:对于SGTIN、SGLN、GRAI和GIAI EPC scheme来说,根据GS1通用规范的序列号是可变长度、字母数字字符串。这意味着
34
、034
和0034
都是不同的系列号,就如P34
、34P
、0P34
和P034
等。为了提供多达20个字母数字字符,需要140位来编码序列号。这就是为什么“长”二进制编码都需要如此多的比特。 类似的考虑也适用于GDTI EPC scheme,除了GDTI只允许数字字符(但仍然允许前导零)。
为了适应非常常见的96-bit RFID标签,引入了额外的二进制编码方案,只需要96位。为了适应96位以内,必须排除一些序列号。SGTIN、SGLN、GRAI、GIAI和GDTI的96位编码仅限于只由数字组成的序列号,这些数字没有前导零(除非序列号由单个0
数字组成),并且当被视为十进制数字时,其值小于$2^B$,其中B是二进制编码方案中可用的位数。排除带前导零系列号的选择在最初定义96-bit编码时是一种任意的设计选择;例如,另一种选择是允许前导零,而不排除其他序列号。但无法回避的事实是,在B位中,不同的序列号不能超过$2^B$。
当解码“长”二进制编码时,当二进制编码包含前导零字符时,不允许去掉前导零。在将EPC编码为“短”或“长”的形式时,编码前不允许去掉前导零。这意味着序列号有前导零的EPC只能以“长”形式编码。
在某些应用中,希望序列号始终包含特定数量的字符。其原因可能包括需要EPC URI字符串的可预测长度,或者对于相同标识符的相应条形码编码具有可预测的大小。在某些条形码应用程序中,这是通过使用前导零来实现的。但是,如果使用96-bit标签,则不存在使用前导零的选项。
因此,在既需要96位标签又要求序列号为固定字符数的应用中,建议使用范围为 $10^D ≤ serial < 10^{D+1}$ 的数字序列号,其中D是数字所需的位数。例如,如果需要11位序列号,则应用程序可以使用10,000,000,000到99,999,999,999之间的序列号。此类应用程序必须注意使用符合96-bit标签限制的序列号。例如,如果SGTIN-96编码需要12位序列号,则序列号必须在100,000,000,000到274,877,906,943之间。
但是,应该记住,许多应用程序不需要序列号中的固定字符数,因此从0到最大值(不带前导零)的所有序列号都可以与96-bit标签一起使用。
假设:
校验:
过程:
urn:epc:id:
替换为urn:epc:tag:
。sgtin
替换为sgtin-96
或sgtin-198
。[att=xNN]
,其中NN
是属性位值的2位十六进制数字表示。[umi=1]
。假设:
TagURI
产品语法的字符串。过程:
urn:epc:tag:
替换为urn:epc:id:
。sgtin-96
或sgtin-198
替换为sgtin
。下列语法描述了EPC Tag URI和EPC Raw URI的句法。语法参考了第5节和第6.3节中定义的语法元素。
TagOrRawURI ::= TagURI | RawURI
TagURI ::= “urn:epc:tag:” TagURIControlBody
TagURIControlBody ::= ( ControlField+ “:” )? TagURIBody
TagURIBody ::= SGTINTagURIBody | SSCCTagURIBody | SGLNTagURIBody |
GRAITagURIBody | GIAITagURIBody | GDTITagURIBody | GSRNTagURIBody |
GSRNPTagURIBody | ITIPTagURIBody | GIDTagURIBody | SGCNTagURIBody |
DODTagURIBody | ADITagUriBody | CPITagURIBody
SGTINTagURIBody ::= SGTINEncName “:” NumericComponent “.” SGTINURIBody
SGTINEncName ::= “sgtin-96” | “sgtin-198”
SSCCTagURIBody ::= SSCCEncName “:” NumericComponent “.” SSCCURIBody
SSCCEncName ::= “sscc-96”
SGLNTagURIBody ::= SGLNEncName “:” NumericComponent “.” SGLNURIBody
SGLNEncName ::= “sgln-96” | “sgln-195”
GRAITagURIBody ::= GRAIEncName “:” NumericComponent “.” GRAIURIBody
GRAIEncName ::= “grai-96” | “grai-170”
GIAITagURIBody ::= GIAIEncName “:” NumericComponent “.” GIAIURIBody
GIAIEncName ::= “giai-96” | “giai-202”
GSRNTagURIBody ::= GSRNEncName “:” NumericComponent “.” GSRNURIBody
GSRNEncName ::= “gsrn- 96”
GSRNPEncName ::= “gsrnp-96”
GDTITagURIBody ::= GDTIEncName “:” NumericComponent “.” GDTIURIBody
GDTIEncName ::= “gdti-96” | “gdti-113” | “gdti-174”
CPITagURIBody ::= CPIEncName “:” NumericComponent “.” CPIURIBody
CPIEncName ::= “cpi-96” | “cpi-var”
SGCNTagURIBody ::= SGCNEncName “:” NumericComponent “.” SGCNURIBody
SGCNEncName ::= “sgcn-96”
ITIPTagURIBody ::= ITIPEncName “:” NumericComponent “.” ITIPURIBody
ITIPEncName ::= “itip-110” | “itip-212”
GIDTagURIBody ::= GIDEncName “:” GIDURIBody
GIDEncName ::= “gid-96”
DODTagURIBody ::= DODEncName “:” NumericComponent “.” DODURIBody
DODEncName ::= “usdod-96”
ADITagURIBody ::= ADIEncName “:” NumericComponent “.” ADIURIBody
ADIEncName ::= “adi-var”
RawURI ::= “urn:epc:raw:” RawURIControlBody
RawURIControlBody ::= ( ControlField+ “:”)? RawURIBody
RawURIBody ::= DecimalRawURIBody | HexRawURIBody | AFIRawURIBody
DecimalRawURIBody ::= NonZeroComponent “.” NumericComponent
HexRawURIBody ::= NonZeroComponent “.x” HexComponentOrEmpty
AFIRawURIBody ::= NonZeroComponent “.x” HexComponent “.x”
HexComponentOrEmpty
ControlField ::= “[” ControlName “=” ControlValue “]”
ControlName ::= “att” | “umi” | “xpc”
ControlValue ::= BinaryControlValue | HexControlValue
BinaryControlValue ::= “0” | “1”
HexControlValue ::= “x” HexComponent
某些软件应用程序需要根据各种条件指定标签过滤列表的规则。本规范为此提供了一个EPC Tag Pattern URI。EPC Tag Pattern URI并不表示单个标签编码,而是指一组标签编码。典型的模式如下所示:
urn:epc:pat:sgtin-96:3.0652642.[102400-204700].*
此模式指包含96-bit SGTIN EPC二进制编码的任何标签,其过滤器字段为3,其GS1公司前缀为0652642,其项目参考范围为$102400 ≤ itemReference ≤ 204700$,并且其序列号可以是任何数字。
通常,存在与每个EPC二进制编码方案相对应的EPC Tag Pattern URI方案,其句法基本上相同,除了在每个字段中可以使用范围或星号(*
)字符。
对于本SGTIN、SSCC、SGLN、GRAI、GIAI、GSRN、GDTI、SGCN以及ITIP模式,模式句法稍微限制了通配符和范围如何组合。CompanyPrefix
字段只允许两种可能性。第一,它可以是一个星号(*),这种情况下,其后的字段( ItemReference
, SerialReference
, LocationReference
, AssetType
,IndividualAssetReference
, ServiceReference
, DocumentType
,CouponReference
, Piece
或Total
)也必须是星号。第二,它可以是特定的公司前缀,在这种情况下,下面的字段可以是数字、范围或星号。不能为CompanyPrefix
指定范围。
非标提示:解释:由于公司前缀为可变长度,所以不能指定范围,因为范围可能跨越不同的长度。但是,如果指定了特定的公司前缀,则可以匹配之后字段的范围或所有值,因为给定公司前缀的长度是固定的。允许的另一种情况是两个字段都是星形,这适用于所有标签编码,因为只会忽略相应的标签字段(包括分区字段,如果存在的话)。
DoD结构的模式URI如下:
urn:epc:pat:usdod-96:filterPat.CAGECodeOrDODAACPat.serialNumberPat
其中,filterPat
是一个过滤值,一个[lo-hi]
形式的范围,或是一个*
字符;CAGECodeOrDODAACPat
是一个 CAGE Code/DODAAC 或是一个*
字符;serialNumberPat
是一个系列号、一个[lo-hi]
形式的范围或一个*
字符。
航空航天和国防(ADI)标识符的模式URI如下:
urn:epc:pat:adi-
var:filterPat.CAGECodeOrDODAACPat.partNumberPat.serialNumberPat
其中,filterPat
是一个过滤值、一个[lo-hi]
形式的范围,或一个*
字符;CAGECodeOrDODAACPat
是一个 CAGE Code/DODAAC 或是一个*
字符;partNumberPat
是一个空字符串、一个零件号码,或是一个*
字符;serialNumberPat
是一个系列号或一个*
号。
组件/部件(CPI)标识符的模式URI如下:
urn:epc:pat:cpi-96:filterPat.CPI96PatBody.serialNumberPat
或
urn:epc:pat:cpi-var:filterPat.CPIVarPatBody
其中,filterPat
是一个过滤值,或一个[lo-hi]
形式的范围,或是一个*
字符;CPI96PatBody
可以是*.*
或一个GS1公司前缀跟着点(.
)字符,或者数字组件/部件编号、一个[lo-hi]
形式的范围、或一个*
字符;serialNumberPat
是一个系列号或一个*
字符或一个[lo-hi]
形式的范围;CPIVarPatBody
是*.*.*
或一个GS1公司前缀跟着点(.
)字符,然后跟着一个组件/部件参考,跟着一个点(.
)字符,跟着组件、部件系列号,一个[lo-hi]
形式的范围或一个*
字符。
EPC Tag Pattern URI通过如下语法定义。
PatURI ::= “urn:epc:pat:” PatBody
PatBody ::= GIDPatURIBody | SGTINPatURIBody | SGTINAlphaPatURIBody |
SGLNGRAI96PatURIBody | SGLNGRAIAlphaPatURIBody | SSCCPatURIBody |
GIAI96PatURIBody | GIAIAlphaPatURIBody | GSRNPatURIBody | GSRNPPatURIBody
|GDTIPatURIBody | CPIVarPatURIBody | SGCNPatURIBody | ITIPPatURIBody |
USDOD96PatURIBody ITIP212PatURIBody | ADIVarPatURIBody |CPI96PatURIBody |
GIDPatURIBody ::= “gid-96:” 2*(PatComponent “.”) PatComponent
SGTIN96PatURIBody ::= “sgtin-96:” PatComponent “.” GS1PatBody “.” PatComponent
SGTINAlphaPatURIBody ::= “sgtin-198:” PatComponent “.” GS1PatBody “.” GS3A3PatComponent
SGLNGRAI96PatURIBody ::= SGLNGRAI96TagEncName “:” PatComponent “.” GS1EPatBody “.” PatComponent
SGLNGRAI96TagEncName ::= “sgln-96” | “grai-96”
SGLNGRAIAlphaPatURIBody ::= SGLNGRAIAlphaTagEncName “:” PatComponent “.” GS1EPatBody “.” GS3A3PatComponent
SGLNGRAIAlphaTagEncName ::= “sgln-195” | “grai-170”
SSCCPatURIBody ::= “sscc-96:” PatComponent “.” GS1PatBody
GIAI96PatURIBody ::= “giai-96:” PatComponent “.” GS1PatBody
GIAIAlphaPatURIBody ::= “giai-202:” PatComponent “.” GS1GS3A3PatBody
GSRNPatURIBody ::= “gsrn- 96:” PatComponent “.” GS1PatBody
GSRNPPatURIBody ::= “gsrnp-96:” PatComponent “.” GS1PatBody
GDTIPatURIBody ::= GDTI96PatURIBody | GDTI113PatURIBody| GDTI174PatURIBody
GDTI96PatURIBody ::= “gdti-96:” PatComponent “.” GS1EPatBody “.” PatComponent
GDTI113PatURIBody ::= “gdti-113:” PatComponent “.” GS1EPatBody “.” PaddedNumericOrStarComponent
GDTI174PatURIBody ::= “gdti-174:” PatComponent “.” GS1EPatBody “.” GS1GS3A3PatBody
CPI96PatURIBody ::= “cpi-96:” PatComponent “.” GS1PatBody “.” PatComponent
CPIVarPatURIBody ::= “cpi-var:” PatComponent “.” CPIVarPatBody
CPIVarPatBody ::= “*.*.*” | PaddedNumericComponent “.” CPRefComponent “.” PatComponent
SGCNPatURIBody ::= SGCN96PatURIBody
SGCN96PatURIBody ::= “sgcn-96:” PatComponent “.” GS1EPatBody “.” PaddedNumericOrStarComponent
USDOD96PatURIBody ::= “usdod-96:” PatComponent “.” CAGECodeOrDODAACPat “.” PatComponent
ADIVarPatURIBody ::= “adi-var:” PatComponent “.” CAGECodeOrDODAACPat “.” ADIPatComponent “.” ADIExtendedPatComponent
PaddedNumericOrStarComponent ::= PaddedNumericComponent | StarComponent
GS1PatBody ::= “*.*” | ( PaddedNumericComponent “.” PaddedPatComponent )
GS1EPatBody ::= “*.*” | ( PaddedNumericComponent “.” PaddedOrEmptyPatComponent )
GS1GS3A3PatBody ::= “*.*” | ( PaddedNumericComponent “.” GS3A3PatComponent )
PatComponent ::= NumericComponent | StarComponent | RangeComponent
PaddedPatComponent ::= PaddedNumericComponent | StarComponent | RangeComponent
PaddedOrEmptyPatComponent ::= PaddedNumericComponentOrEmpty | StarComponent | RangeComponent
GS3A3PatComponent ::= GS3A3Component | StarComponent
CAGECodeOrDODAACPat ::= CAGECodeOrDODAAC | StarComponent
ADIPatComponent::= ADIComponent | StarComponent
ADIExtendedPatComponent ::= ADIExtendedComponent | StarComponent
StarComponent ::= “*”
RangeComponent ::= “[” NumericComponent “-”
NumericComponent “]”
要使RangeComponent
合法,第一个NumericComponent
的数值必须小于或等于第二个NumericComponent
的数值。
EPC Tag Pattern URI(urn:epc:pat:
)的含义被正式定义为表示一组EPC Tag URI。
由特定EPC Tag Pattern URI表示的EPC集合由以下决策过程定义,该决策过程表示给定的EPC Tag URI是否属于由EPC Tag Pattern URI表示的集合。
让urn:epc:pat:EncName:P1.P2...Pn
为EPC Tag Pattern URI。让urn:epc:tag:EncName:C1.C2...Cn
为EPC Tag URI,其中两个URI的EncName
字段相同。组件(n
)的数量取决于EncName
的值。
首先,任何EPC Tag URI组件Ci
都被认为与相应的EPC Tag Pattern URI组件Pi
相匹配,如果:
Pi
是一个NumericComponent
,Ci
等于Pi
;或Pi
是一个PaddedNumericComponent
,并且Ci
无论是数值还是长度都等于Pi
;或Pi
是一个GS3A3Component
、ADIExtendedComponent
、ADIComponent
或CPRefComponent
,并且Ci
字符对字符等于Pi
;或Pi
是一个CAGECodeOrDODAAC
,并且Ci
等于Pi
;或Pi
是一个RangeComponent [lo-hi]
,并且$lo ≤ Ci ≤ hi$;或Pi
是一个StarComponent
(Ci
为任何值)那么EPC Tag URI是由EPC Pattern URI表示的集合的一个成员,当且仅当Ci
匹配所有$1 ≤ i ≤ n$的Pi
时。