RAIN_RFID

RAIN RFID指南:RAIN阅读器通信接口(RCI)

1.概述

本文档描述了应用程序与RAIN RFID阅读器之间的接口,该接口旨在容纳所有RAIN RFID读取设备。

在这里插入图片描述

如图所示为整体体系,该图描述了一个网络体系中RCI兼容的阅读器。

RCI被设计为具有多个级别的功能:

  • 一个阅读器可以像一个设备一样实现所有的RCI功能。
  • 本地应用程序可以添加RCI功能(例如数据解释)。这样的本地应用程序通常会在其接口中嵌入RCI来添加自己的功能。
  • 一个RCI适配器,可以将其他阅读器接口转换为RCI兼容。
  • RCI适配器可以用来将多个RCI阅读器组合成一个受控的多天线阅读器。
  • 标签数据的解码和解释是RCI的关键部分,这些代码模块的接口将与此接口协调开发。(协议转换)

符合RAIN读写器通信接口的读写器的配置和激活方式如下:

  • 阅读器配置:配置阅读器的一般参数
  • ReadZone配置:配置单个天线参数,并将其组合成逻辑读区(ReadZone)。
  • 配置ReadZone激活:配置每个ReadZone轮询标签的条件。激活可以通过基于时间的算法或外部传感器触发。
  • 配置SpotProfile:创建SpotProfile配置,该配置将包括感兴趣的标签、何时以及如何访问标签以及预期的报告参数。
  • ReadZone激活:一旦所有的设置都配置好了,ReadZone就会被激活。标签点报告将在每次标签点事件后返回。

2.术语

术语说明
访问或询问与标签通信的命令和响应动作,以便在打开或安全状态下选择、读取、写入和配置标签。
binary用HexString或Base64String表示。
已知标签或期望标签该接口使用的原理是设计RAIN读写器系统来识别特定的RAIN标签项目。可以通过标签数据结构和数据结构中的类数据来识别这些标签。标签的例子包括GS1 GTIN标签和ISO/20248防伪零件标签。特定标签级别的识别是使用标签中的特定项目信息来实现的。未知标签可能是需要的标签,例如生产环境中的未编程标签。SpotProfiles提供了检测此类标签的规定。
RAIN读写器通信接口(RCI)指导原则
read从标签获取数据的命令/响应操作。
reader (Rdr)访问标签的设备
ReadZone (RZ)标签将被访问的期望区域。一个或多个天线可以组合起来创建一个ReadZone;在这种情况下,读写器会将来自所有ReadZone天线的数据合并为Spot报告。
Spot在ReadZone内记录的标签交互事件的报告。由SpotProfile定义的Spot可能是读取器实现的多个读、写、访问和其他命令的结果。
SpotProfile (Prof)指示读写器应报告哪些标签的一组参数;它还包括指示时间,方法和指示应应用的强度的说明。SpotProfiles列表是为读者提供的“待办事项”列表
tuple元组是元素/值的有序列表。每个元素/值都有特定的含义。列表末尾的值可以省略。在RCI中,省略的值应采用指定的默认值。
write用于记录或更改标签上的数据的命令和响应操作。
repetition表示重复前一个元素一次或多次。
defined terms为了防止混淆,在文本中使用本指南定义的术语时使用粗体。

3.接口描述

3.1 原则

作为RCI的基本原则,假设应用程序知道阅读器期望哪些标签,以及如何对这些标签执行访问,并根据特定用例和场景在访问之后获得期望的结果。应用程序使用这些知识来配置和指示阅读器独立选择,库存和访问标签。这些操作的结果是由读者单方面报告的(事件驱动的)。

空口协议包含在阅读器中,而接口被设计为使用直观的应用程序开发语言。这是通过使用字段(<field name>:<field value>)在应用程序和阅读器之间进行通信来实现的。相同的字段对于读取器参数的配置和读取器报告命令响应和事件。供应商可以自由选择支持哪些RCI字段。通过为所有字段指定默认值来确保一致性。

如果应用程序遇到不知道或不支持的字段值,则会采取以下操作:

  • 未设置的“字段值”:将使用本指南中指定的默认值。
  • 不支持或已知的“字段值”:它将被报告为不支持。

接口提供如下功能:

  1. Reader
    • 读写器信息和状态
    • 读写器的配置
    • 天线配置和 read zones 分组
    • 空口协议配置
    • 读写器心跳
    • 通用IO;简单的二进制开关和多值
      • 输出值设置
      • 输入值报告
      • 输入触发天线激活
  2. Tag access
    • 此次发布的RCI指南:
      • 清单 (PC, XPC, UII/EPC和二进制简单传感器)可选选择
      • SpotProfile定向标签访问
      • 使用ThisTag命令的命令驱动访问
      • 清单解释(ISO AFI UII 认证及GS1 EPC)
      • 编写支持ISO AFI UII和GS1 EPC
      • 数据解释(外部协议):标签使用标志和ISO/IEC 20248
      • 标签内存锁定
      • 密码
    • 对未来RCI指南发布的考虑:
      • 数据解释(外部协议):ISO/IEC 15961和15962,传感器和GS1 TDS
      • 加密
      • 密码多样化
      • 支持BAP和全功能传感器

3.2 数据交互

以下适用:

  • 应用程序用命令指示阅读器;阅读器应当根据命令发出报告。
  • 阅读器单方面报道事件。

注意:有可能在阅读器处理事件的时候发出指令,事件的完成具有优先级可能会忽略命令。应用程序应当设计成弹性情况。

接口命令

  1. GetInfo
  2. SaveFields, ReadFields, DefaultFields, Reboot, ActivateUpdateMode
  3. GetCfg, SetCfg
  4. GetRZ, SetRZ, AddRZ, DelRZ
  5. GetGPIOs, SetGPIOs
  6. GetProf, SetProf, AddProf, DelProf
  7. StartRZ, GetActRZ, StopRZ
  8. ThisTag, ThisTagStop

接口回应

  1. Command responses
  2. Error
  3. Heartbeat
  4. Event – reader event
  5. Spot – tag access report

3.3 标签询问(盘存和存取)方法

3.3.1描述

标签在供应商读写器配置、应用程序读写器配置、SpotProfiles的指导下被选择、访问、查询。

SpotProfile告诉阅读器在盘点期间读取ui /EPC后需要采取哪些额外的询问行动;它还描述了如何将审讯报告给应用程序。SpotProfile指示读写器必须尝试完成SpotProfile操作的动作。

标签使用SpotProfile选择掩码匹配SpotProfile。已清点但与SpotProfile不匹配的标签将被计数并忽略。

  • FirstSeen:标签第一次被阅读器看到。FirstSeen报告了由相关SpotProfile指导的完整审讯。
  • LastSeen -可选:标签在指定的时间内没有被阅读器看到(LastSeen timeout - LastSeenTO)。阅读器会“忘记“具有LastSeen标志的标签。当阅读器被迫移除标签以便在其内存中为最近清点的标签腾出空间时,阅读器应报告该标签为LastSeen。
  • Seen -可选:如果标签仍然被阅读器看到,或者自上次报告以来任何标签易失性数据发生了变化,则应在一个周期间隔(Seen间隔)后报告标签。
3.3.2事件驱动

所有SpotProfiles都组合成一个ToDo列表,正是这个列表决定了何时以及如何盘点和访问标签。

每个SpotProfile都包含一个强制性的标签选择掩码和一个优先级值。阅读器应以最高优先级使用SpotProfile来完成盘点标签询问,并将此类询问报告为spot。

当指定掩码的所有MaskValues与指定标签内容与指定掩码的逻辑与运算所得到的值相同,标签匹配SpotProfile。

应用程序管理阅读器的待办事项列表的SpotProfiles;然而,ToDo列表是可选的。

当不支持待办事项列表时,应适用以下其中一项:

  • 如果不支持SpotProfile函数,则应使用默认的SpotProfile值来清点和访问标签并报告标签位置。
  • 如果只支持一个SpotProfile,请参考本文档进行配置。

注意:支持的SpotProfiles数量是一个关键的读取器性能参数,应该由读取器报告,作为读取器规范的一部分。

3.3.3命令驱动

应用程序可能需要立即访问一个或一组特定的标签。这可以通过使用ThisTag命令来实现,该命令包含在ThisTag超时期间内立即执行的spotprofile列表。

3.4标签询问(库存和访问)细节

3.4.1清单 (PC, XPC, UII/EPC in binary)

标签清单流程以二进制形式提供UII/EPC,这是读取RAIN标签的最简单形式。

盘点标签、区分ISO和GS1并将其报告为FirstSeen的能力是一项强制性功能。阅读器解码PC字段,判断数据是ISO编码还是GS1编码,ISO编码报告UII, GS1编码报告EPC。

阅读器应解读AFI (ISO表示)和EPC报头(GS1表示),以报告具有适当AFI、ui字段名(UII, UII-NOT-CONFIGURED和UII-PROPRIETARY)和GS1方案(GS1 TDS指定方案、UNPROGRAMMED和TID)的标签。

3.4.2增加标签访问

通过在活动ReadZone中使用SpotProfiles或使用ThisTag命令可以实现额外的标签访问。

3.4.3将数据写入标签

接口允许两种写场景:

  • 一个标签或一组标签在被发现后由应用程序编写。这是通过ThisTag命令实现的。
  • 应用程序期望一个或一组标签被发现;它用一个SpotProfile将写操作流水线化。

一组标签是用SpotProfile中的DwnCnt字段处理的,这有利于SpotProfile的多次使用。写操作的结果应作为FirstSeen报告。

3.4.4数据翻译

数据翻译被配置为SpotProfile的一部分。

RCI数据解释层次:

  • 清单解释处理在标签清查期间提供的数据。该数据由ISO/IEC 18000-63和GS1 UHF Gen2空中接口指定。
  • 根据ISO/IEC 15961和15962、ISO/IEC 20248和GS1 TDS等数据标准指定的高级数据解释。在所有情况下,应适用最新的规范。

当InterpretData被设置为它支持的值时,读取器将尝试解释从标签读取的数据。解释特定的配置应使用解释标识符作为SpotProfile的一部分来提供。格式如下:

<interpreted data identifier>:<data interpretation configuration>

例如:“20248”:{“DDDdataTagged”:true,“Timezone”:“+1000”,“Language”:“en”}

如果阅读器不支持请求的解释,那么阅读器应该用一个字段值错误消息来响应应用程序,列出它支持的解释。解释信息和错误应在ResponseCode值对象中提供。响应代码数字零(0)应表示数据解释成功。

标识符规格说明
“TAGUSE”ISO/IEC 18000-63See Annex E.2
“20248”ISO/IEC 20248See Annex F

解释后的数据应以以下格式插入报告中:

<interpreted data identifier>:{“ResponseCode”:<response code>, <interpreted data>}
“ResponseCode”:{“Code”:<Error code - Number>, “Desc”:<Error description - String>}

例如:“20248”:{“ResponseCode”:{“Code”:0,“Desc”:“OK”},“DDDdataTagged”:{…}}

各解释机构应按照其标准规范执行具体的规范错误码。未指定错误码的,采用下列错误码

CodeDesc
0“OK”
1“Failed”

当解释模块失效或不可用时,解释值应设置为空。

例如:“20248”:null

4. 接口方法

4.1 消息格式

指南使用ISO/IEC 21778 JSON作为接口语言。JSON是区分大小写的,因此RCI应该区分大小写

所有数据都表示为JSON对象对,称为“字段”,由字符串和由冒号“:”分隔的对应值以以下方式描述:

<field name>:<field value>

接口消息是一个JSON对象,包含一组以EOL结尾的字段。默认情况下,接口消息是未格式化的JSON。

{<message>}EOL

4.2 命令信息格式

命令信息的格式如下:

{“Cmd”:<command name>,“CmdID”:<number>,<command parameter field>…}

  • CmdID是可选的,该值是唯一标识命令实例的数字。
  • 在消息相应回应中应该重复CmdID及其值。

注意

  • 不能从<command parameter field>字段顺序派生或插入任何事情。字段顺序可能会发生变化。
  • 消息只能包含一个命令。

4.3 命令响应消息格式

阅读器应以命令特定的形式来响应每个命令:

{"Report":<command name>, 
 "CmdID":<number>, 
 "ErrID":<error number>, 
 "ErrDesc":<error description>, 
 "ErrInfo":<additional error information> 
 <command response field>} 

其中CmdID和ErrInfo字段是可选的

4.4 事件报告消息格式

事件报告消息格式:

{"Report":<report name>, 
 <event field>,} 

4.5 二进制数据

JSON本身不支持二进制数据。因此,在这个接口中,二进制数据需要用JSON字符串表示,格式为以下两种之一:

  • HexString:字符0到9和A到F(不区分大小写)应用于表示二进制值0000到1111。HexString是一个16位字的连续体,以冒号(“:”)前面的4个字符的字符串表示。

    例如:“:0123:4567:89AB:CDEF:0123:4567:89AB:CDEF”

  • Base64String:IETF RFC 4648 Base 64 URL使用。Base64包括小写字母a-z、大写字母A-Z、数字0-9、符号"+“、”/"一共64个字符的字符集,还有一个等号

    二进制序列按每6个二进制位为一组,分成若干组,如果不足6位,则低位补0。每6位组成一个新的字节,高位补00,构成一个新的二进制序列,最后根据base64索引表中的值找到对应的字符。

    例如:“ASNFZ4mrze8BI0VniavN7w==”

二进制数据应以16位字的大端位数表示。使用大端序时,最高有效字节(MSB)值位于最低地址。其他字节按重要性递减的顺序紧随其后。

应用程序和阅读器应该通过在JSON字符串中使用冒号(“:”)字符来自动区分HexString和Base64String

5 接口媒介

5.1 通用

接口通过点对点串行流载体媒体进行通信,例如RS-232,蓝牙,TCP/IP连接或类似连接。

该接口适合在web sockets上使用。

5.2 串口阅读器

默认串口设置为:

  • 115,200 bits
  • 8 bits, no parity,
  • 1 stop bit
  • no flow controls.

由于串口连接有时候不可靠,所以可以选择在消息中增加CRC或Len字段来进行校验。可以通过SetCfg命令将UseCRC和UseLen字段设为true来完成。

{<message>[,"CRC":<CRC as a JSON integer number>] 
          [,"Len":<CRC as a JSON integer number>]} 

如果使用CRC 应该使用ISO/IEC 18000-63规定的标准编码。这是16位的CRC-CCITT 国际标准,建议使用多项式x16 + x12 + x5 + 1。CRC应从第一个“{”开始计算,直到<message>末尾,不包括"“,”。

例如: {“Cmd”:“GetInfo”,“Fields”:[“ALL”],“CRC”:366},通过{“Cmd”:“GetInfo”,“Fields”:[“ALL”] 计算CRC

如果使用长度包含EOL的整个消息长度上计算,长度字段的长度及其值很容易相加。这将表示从串行端口接收到的字节数。

例如:

{"Report":"TagEvent","MB":[{"ID":2,"Start":0,"Data":":E280:1105:2000:
3693:E0D8:0012"},{"ID":3,"Start":0,"Data":":0531:57BA:5BDB:67B3:B28F:
7DA9:4944:FCD1:C509:FDA0:BBB7:D45A:1C49:C4B0:6A62:28A6"}],"UII":":0B4
F:7500:6B12:199D:39C7:4104:7800","Timestamp":1540208055.450914,"PC":"
:4592:C098","ErrID":0,"DT":"2018-10-22T11:34:15.450914","Len":303}

5.3 IP网络读写器

当连接到IP网络时,应使用TCP/IP。

6. 命令

6.1 GetInfo

应用程序无法设置阅读器信息和状态,信息可以通过以下命令获取,也可以通过在Heartbeat周期报表中添加所需的信息和状态字段获取。

{"Cmd":"GetInfo","Fields":<array of requested information fields>} 
例如: 
{"Cmd":"GetInfo","Fields":["RdrModel","Version"]}
保留字段名“ALL”请求所有信息字段及其各自的值:
{"Cmd":"GetInfo","Fields":["ALL"]}
如果成功返回:
{"Report":"GetInfo",<error fields>,<requested information field>}

如表所示为信息字段,可选字段用†所示:

字段名字段类型信息
AirProtSetString关于这个特定阅读器的空口协议设置的值和合法组合的描述
FreqRegSetAn Array of Strings该阅读器上可用的频率调节设置。
RdrBufSizeNumber阅读器接收缓冲区大小。太大而无法装入接收缓冲区的消息将被忽略。ReaderBufSize的值至少为256字节,值为0表示不限制大小。
RdrModelString特定于供应商的产品硬件版本。
RdrSNString供应商特定的产品序列号。
RdrTemp†Number阅读器温度,单位是摄氏度。
RdrTempPA†Number阅读器功率放大器温度以摄氏度为单位。
ReadErrors†Number自上次使用Config命令读取该值或使用Heartbeat报告该值以来的读取错误数。
Reads†Number自上次使用Config命令读取该值或使用Heartbeat报告该值以来执行的读取次数。
VersionString厂商特定的固件版本。
WriteErrors†Number自上次使用Config命令读取该值或使用Heartbeat报告该值以来的写错误数。
Writes†Number自上次使用Config命令读取该值或使用Heartbeat报告该值以来执行的写次数。

6.2 SaveFields, ReadFields, DefaultFields, Reboot, ActivateUpdateMode

建议阅读器将所有设置存储在非易失性存储器中。

SaveFields:将当前字段设置保存到非易失性存储器中,从而确保在关机和开机后设置可用,并且读取器将按配置启动。

{"Cmd":"SaveFields"} 
成功返回:
{"Report":"SaveFields",<error fields>} 

ReadFields:从非易失性存储器读取字段设置,从而确保所有字段都使用保存的设置进行设置。

{"Cmd":"ReadFields"} 
成功返回:
{"Report":"ReadFields",<error fields>} 

DefaultFields:将所有字段设置为默认值。这包括删除所有ReadZone和SpotProfile对象。

{"Cmd":"DefaultFields":""}
注意:这个命令不能改变非易失性内存,允许恢复保存的设置。
成功返回:
{"Report":"DefaultFields",<error fields>} 

Reboot:该命令重新启动读取器。结果应与阅读器断电后再上电时相同。

{"Cmd":"Reboot"}
成功返回:
{"Report":"Reboot",<error fields>} 
之后阅读器重新启动

ActivateUpdateMode:该命令将读取器置于固件更新模式。此命令的发布不会改变固件,而只是为阅读器准备固件更新。建议阅读器通过接收固件更新或超时(之后阅读器重新启动)来摆脱此状态。

注意:有些设备需要硬件干预才能切换到升级模式。在这些情况下,该命令将不起作用。

{"Cmd":"ActivateUpdateMode"} 
成功返回:
{"Report":"ActivateUpdateMode",<error fields>} 

6.3 GetCfg, SetCfg

6.3.1 消息格式

使用下表中的字段配置阅读器的一般功能。所有这些字段都是可选的。当该字段未在特定的RCI实现中使用或未由应用程序设置时,应应用默认值。

这些命令管理阅读器的全局设置。

GetCfg的格式和操作与GetInfo相同,SetCfg形式如下:

{"Cmd":"SetCfg",<configuration field (name and value) to be set>…} 
成功返回:
{"Report":"SetCfg",<error fields>} 
6.3.2 通用阅读器配置
字段名称值类型默认值说明
AppBufSizeNumber0读写器向应用程序发送信息的最大信息大小(以字节为单位)。AppBufSize 的值至少应为256字节。0表示无限制。
Binary“HEX” or “BASE64”“HEX”选择二进制格式。 注意:有些字段只使用 HEX 格式。使用二进制格式的字段会明确指出。
BootCntNumber重启计数值,每次重启时,这个整数都会递增。这个数字的大小由供应商决定(但长度至少应为 8 位);因此,一旦达到上限,计数器就会重新启动。
DateTimeString使用 ISO 8601 格式设置读写器日期和时间: YYYY-MM-DDThh:mm:ss.sssZ 无时区表示当地时间。 请注意,没有实时时钟的读写器将从零纪元开始。因此,不设置日期时间将表示读写器的 “正常运行时间”。分段设置日期时间可确保正确的时间同步。
FormatReportsBooleanFalse设置为 "true "时,将添加符合 JSON 标准的空格,以提高报告信息的可读性。
HBFieldsArray of strings[“RdrName”]此处列出的字段应包含在心跳中
HBGPIOArray of numbe[]在心跳中报告指定的 GPIO
HBPeriodNumber0以秒为单位设置心跳周期,如果设置为零,则只发送起始心跳。
RdrDescString“”对读写器的描述。 示例: “Mouse trap reader – configuration controlled by the mouse trap manufacturing system”
RdrLocalityString“”读写器位置描述。 例如:“Dock door 3”
RdrNameString<公司名称>- <六位十六进制随机数>为该读写器定义一个唯一的名称。RdrName 应与读写器发现时使用。联网读写器应使用 MAC 地址的后六位十六进制数字作为随机数。 示例: company-2FEF88
RdrStart“ACTIVE” or “NOTACTIVE”“NOTACTIVE”ACTIVE设置指示读取器在启动时执行相当于ReadFields和StartRZ(ALL)的操作。NONACTIVE设置指示读取器等待应用程序命令。
ReportErrDescBooleanFalse当可用时,这将把错误描述添加到报告。
6.3.3 串口读写器特殊配置
字段名称值类型默认值说明
UseCRCBooleanFalseSee 5.2.
UseLenBooleanFalseSee 5.2.
SerCfgA tuple[115200,8, “n”,1,“n”]串口通信设置:
BAUD
character bits
parity (“n”: none, “o”: odd and “n”: even)
stop bits
flow control (“n”: none, “r”: CTS/RTS and “x”: XON/XOFF).
6.3.4 IP阅读器特定配置

以下字段与IP阅读器一起使用:

字段名称值类型默认值说明
DHCPBooleanTrue如果未指定 IP,则应将 DHCP 设置为 “true”。
IPAddrStringConfigured by the vendor请参见 IP 配置。注意:代码对象可以区分 IPv4 和 Ipv6。 供应商应在读写器上标注默认值。
IPGatewayStringAs IPAddrAs IPAddr
IPMaskStringAs IPAddrAs IPAddr
IPPortNumberAs IPAddrAs IPAddr
6.3.5 Spot报告通用配置
字段名称值类型默认值说明
LastSeenTONumber0毫秒。当标签在此时间段内未被发现时,就会发送 LastSeen 报告。
SeenIntervalNumber1000毫秒。发送 Seen Spot 报告的时间间隔。
SpotAntBooleanfalse报告产生 Spot 的天线编号。
SpotDTBooleanfalse使用字段“DT”以人类可读的格式报告Spot的日期时间戳。
SpotInvCntBooleanfalse报告 Spot 的库存计数(自上次报告以来标签的库存次数)。
SpotPhaseBooleanfalse报告导致 Spot 的标签访问事件的阶段。
FirstSeen:清单的阶段。
Seen&LastSeen:最后一次标签访问的阶段。
SpotProfBooleanfalse报告产生该 Spot 的 SpotProfileID 编号。
SpotRangeBooleanfalse报告导致 Spot 的标签访问事件中读写器到标签的距离。 FirstSeen: 初始距离。
See:当前距离
LastSeen:最后距离。
SpotRSSIBooleanfalse报告导致 Spot 的标签访问事件的接收信号强度指标(RSSI)。
FirstSeen:库存的 RSSI。
Seen&LastSeen:上次标签访问的 RSSI。
SpotRZBooleanfalse报告导致 Spot 的读取区 ID。
SpotTSBooleanfalse使用字段 TimeStamp 将 Spot 的日期时间戳报告为epoch无符号整数。
ThisTagTONumber1000毫秒。ThisTag 的最长持续时间。
6.3.6 空口协议通用配置
字段名称值类型默认值说明
ChannelNumber0选择固定频率调节方式时选择通道。 0表示读写器应选择通道。
FreqNumber0在选择固定频率调节方式时设置中心频率。频率应以 kHz 为单位设置为整数。 0 表示由读写器选择频率。
FreqRegStringConfigured by the vendor参见 6.1 中的 FreqRegSet。
Mode“AUTO”, “DRM”, “HDR”,“MONITOR”“AUTO”AUTO 表示读写器使用默认操作模式。
DRM 指读写器使用符合 GS1 密集读写器模式光谱掩码要求的操作模式。当许多读写器在同一区域工作时,建议使用这种模式。
HDR是指读写器使用高数据速率工作模式,以便在标签数量较少和读写器较少的环境中获得更好的性能。
MONITOR(监控)是指读写器使用一种运行模式来监控缓慢变化的标签群。 注: 选择模式后,读写器将为Session、Target、Q、Tari、BLF、调制、数据编码和前言设置供应商定义的默认值。
TargetTagsArray of String containing “ALL” or a combination of: “SIMPLE”, “READ”, “WRITE”, “BAP”, “SIMPLESENSOR”, “SENSOR”, “CRYPTO”[“ALL”]该字段显示应用程序选择的标签类型。这有助于读取器的智能化,参见 C.1。
SIMPLE::只清点标签。
READ:盘点的标签也需要从中读取数据。
WRITE:已清点的标签也需要写入数据。
BAP: 读取区内可能有电池辅助标签。
SIMPLESENSOR:标签可提供简单的传感器数据。
SENSOR:标签可提供传感器数据。
CRYPTO: 读取区内可能有加密标签。
6.3.7 空口协议特定配置

注:以下某些设置组合可能违反当地法规。

这些设置通常由供应商根据Mode字段、TargetTags字段和ReadZone配置以及阅读器中的智能进行设置。

字段名称值类型默认值说明
BLFNumberSet by Mode用于覆盖由 Mode设置的读写器值。 该值范围为 40 至 640。读写器应设置并报告最接近的适当值。
DataEncoding“FM0”, “M2”, “M4”, “M8”, “M16”, “M32”, or “M64”按模式设置用于覆盖由 Mode设置的读写器值。读写器应设置并报告该值。 注:M16、M32 和 M64 表示使用 Flex Query 而不是 Query,仅适用于电池辅助供电标签。
Modulation“DSB-ASK”, “SSB- ASK” or “PR-ASK”按模式设置用于覆盖由 Mode设置的读写器值。 读写器应设置并报告该值
Preamble“SHORT” or “LONG”按模式设置用于覆盖由 Mode设置的读写器值。 读写器应设置并报告该值
TariNumber按模式设置用于覆盖由 Mode(模式)设置的读写器值。 该值范围为 6.25 至 25。读写器应设置并报告最接近的适当值。

6.4 GetRZ, SetRZ, AddRZ, DelRZ

6.4.1 概述

以下命令和字段用来配置读取区域。ReadZone是对标签进行访问的所需空间。被访问的标签被报告为ReadZone中的Spots。

ReadZones由一个或多个天线定义。ReadZone使用特定的功率设置和占空比来实现最有效的标签访问结果。这些设置可能适用于ReadZone内的单个天线。

天线和ReadZone识别号应为正整数。以下适用:

  • 天线应由供应商从一(1)开始编号。
  • ReadZones也应该从(1)开始编号。

读取区域的默认设置是一个ReadZone(编号1),包含读取器的所有天线。

GetRZ:获取ReadZone的字段和值。

{"Cmd":"GetRZ", "ID":<the id of the requested ReadZone>} 
成功返回:
{"Report":"GetRZ",<error fields>, <requested ReadZone fields, see 6.4.2 and 6.4.3>} 

SetRZ:设置ReadZone的字段值。不改变的字段可以省略。

{"Cmd":"SetRZ", "ID":<ReadZone ID - the default is 0 meaning all>, <ReadZone fields and values to be set>} 
成功返回:
{"Report":"SetRZ",<error fields>}

AddRZ:添加一条ReadZone记录。只需要包含非默认字段。ReadZone ID可以省略或设置为零,在这种情况下,阅读器应该分配一个数字。

{"Cmd":"AddRZ", <ReadZone to be added; fields and values>} 
成功返回:
{"Report":"AddRZ",<error fields>, "ID":<the ID of the added ReadZone>} 

DelRZ:删除ReadZone对象,默认ID不为0

{"Cmd":"DelRZ", "ID":[<list of the ReadZone IDs for deletion; 0 is not allowed>]} 
成功返回:
{"Report":"DelRZ",<error fields>} 
6.4.2 ReadZone fields

下表列出了定义的ReadZone字段:

字段名称值类型系统默认值注释
ID正数-read zone 标识号
Ants正数数组[0]天线可能在一个或多个ReadZone中。 [0]表示所有天线
ReadPwr0.0值以dBm为单位,精确到十分之一(0.1 dBm)。
WritePwr0.0值以dBm为单位,精确到十分之一(0.1 dBm)。
DutyCycle一个包含三个非负值的数组[0,0,0]数组的值指定:
开始延迟(ms)
ON持续时间(ms)
OFF持续时间(ms)。
注:供应商可以动态调整时间,以确保正确完成空口协议通信。
ReadPwrAnt一组数字数组中的所有值均为0.0该值的位置与天线列表相对应。 值以dBm为单位,精确到十分之一(0.1 dBm)。
WritePwrAnt一组数字数组中的所有值均为0.0该值的位置与天线列表相对应。 值以dBm为单位,精确到十分之一(0.1 dBm)。
DutyCycleAnt一个包含3个非负数的数组的数组[[0,0,0]]值的位置与天线列表相对应。
数组的值指定:
开始延迟(ms),
ON持续时间(ms),
OFF持续时间(ms)。
注:供应商可能会增加一个停留时间,以确保正确完成空口协议通信。
StartTrigger触发器元组的数组[[]]如果未定义StartTrigger,则ReadZone应在启动ReadZone时读取标签。
当指定了一个或多个StartTriggers时,ReadZone将在ReadZone启动并且检测到任何StartTriggers后开始读取标签。
StopTrigger触发器元组的数组[[]]当ReadZone停止时,ReadZone应停止读取标签。
如果指定了一个或多个停止触发器,则ReadZone应在检测到任何停止触发器时停止读取标签。ReadZone应保持在激活(启动)状态。
Q由特定模式的供应商值设置用于覆盖由Mode设置的读写器值。 整数值在0到15的范围内。
Session0定义要在此ReadZone中使用的会话。
Target“NONE”、“A”、“B”、“AB”“NONE”使用目标选择标签。
SelectFlag“NONE”、“SL”、“~SL”“NONE”使用选定的标志选择标签。
6.4.3 ReadZone triggers

触发器是一个GPIO输入开关,用于激活或禁用ReadZone内的标签标签,ReadZone字段指定标签将如何被发现(占空比、功率水平、天线等)。

每个触发器用一个包含4个值的元组指定:

字段名称值类型注释
InputIDNumber要用于触发器的GPIO输入的ID。InputID为0表示所有输入。
DelayNumber触发器执行延迟(以毫秒为单位)。
RisingEdgeBoolean上升沿为True, 下降沿为false。
TriggerState-1,0,1只有在以下情况下才会执行触发器,执行时:
1:触发器状态为SPOTTING-STARTED
-1:触发器状态是SPOTTING-STOPPED
0:执行的最后一个触发器

当定义了ReadZone触发器时,StartRZ命令将TriggerState设置为SPOTTING-STOPPED.

注意1:供应商应使用适当的驻留来确保完成空口协议命令

注意2:占空比在RZ规范中进行处理,RZ必须处于活动状态才能使触发器生效。

注意3:占空比(读取区和天线)同步和天线功率匹配留给供应商,必须封装在阅读器内。

1.按键触发或IR触发停止读标签
	"StartTrigger": [[1,0,true,0]] 
	"StopTrigger": [[1,0,false,0]] 
2.IR触发2秒后停止读标签
	"StartTrigger": [[1,0,true,0]] 
	"StopTrigger": [[1,2000,true,0]]
3.按一下按钮开始读标签,再按一下停止读标签
	"StartTrigger": [[1,0,true,-1]] 
	"StopTrigger": [[1,0,true,1]]
4.当IR1或者2触发时开始读标签,当IR3或4被除法1秒后停止读标签
    "StartTrigger": [[1,0,true,-1],[2,0,true,-1]] 
    "StopTrigger": [[3,1000,true,1],[4,1000,true,1]] 

6.5 GetGPIOs, SetGPIOs

GetGPIOs, SetGPIOs 和 RdrEvent 用于设置、获取和报告GPIOs。满足两种类型的输出:switches和values

switches可以设置为ON或OFF。ON表示信号触发。默认为OFF。

GPIO应通过供应商指定的唯一正整数来识别。输入和输出可配置的gpio应分别为输入和输出编号。接口不能提供配置GPIO方向的方法。

GetGPIOs:按照请求列表的顺序获取列出的GPIOs的值。GPIO标识符0 (ALL)将报告所有可用GPIOs的值。GetGPIOs还配置何时报告这些值。

{"Cmd":"GetGPIOs","ReportNow":[<GPIO ID>…], 
                  "ReportEvent":[<GPIO ID>…], 
                  "ReportHB":[<GPIO ID>…]} 
{"Cmd":"GetGPIOs","ReportNow":[1,3,4],"ReportEvent":[2]}  
成功返回:
{"Report":"GetGPIOs",<error fields>,"GPIOs":[[<GPIO ID>,<GPIO type>,<GPIO value>]…]} 
GPIOGPIO类型GPIO值
Input“IN”Boolean-false->(OFF),true->(ON)
Output“OUT”Boolean-false->(OFF),true->(ON)
Analogue 2 Digital“A2D”HexString
Digital 2 Analogue“D2A”HexString
Register“REG”HexString

例如:

{"Report":"GetGPIOs","ErrID":0, "GPIOs":[[1,"IN",true],[2,"A2D",":12"]]} 

SetGPIOs:设置GPIO值。该命令假定应用程序通过使用getgpio命令知道GPIO类型。GPIO是用3个值的元组来设置的;ID、新值和切换持续时间(以毫秒为单位)。默认的切换持续时间值为零(0),并被解释为无限期。当切换值非零时,GPIO切换到新值,持续时间后返回到旧值。如果当前值和新值相同,则会报告错误。

{"Cmd":"SetGPIOs","GPIOs":[<GPIO set tuple>]} 
假设GPIO 1是一个开关,5是一个寄存器:
{"Cmd":"SetGPIOs","GPIOs":[[1,true,500],[5,":A345",0]]} 
返回:
{"Report":"SetGPIOs",<error fields>} 

6.6 GetProf, SetProf, AddProf, DelProf

6.6.1 概述

GetProf, SetProf, AddProf 和 DelProf 命令管理 SpotProfile 列表。

SpotProfiles应以正整数编号。SpotProfiles为0意味着所有。

GetProf:获取SpotProfile的字段和值。

{"Cmd":"GetProf", "ID":<number of the requested SpotProfile>} 
成功返回:
{"Report":"GetProf",<error fields>, <requested SpotProfile fields>} 

SetProf:设置SpotProfile的字段值。不改变的字段可以省略。

{"Cmd":"SetProf", 
"ID":<SpotProfile ID - the default is 0 meaning all>, <SpotProfiles fields and values to be set}} 
成功返回:
{"Report":"SetProf",<error fields>} 

AddProf:向列表中添加新的SpotProfile。只需要包含非默认字段。可以省略SpotProfile编号或将其设置为零。

{"Cmd":"AddProf", <SpotProfiles fields and values to be added} 
成功返回:
{"Report":"AddProf",<error fields>, 
 "ID":<number of the added SpotProfile>}

DelProf:删除SpotProfiles列表。

{"Cmd":"DelProf", 
 "ID":[<list of the SpotProfile IDs for deletion>]}
成功返回:
{"Report":"DelProf",<error fields>} 
6.6.2 SpotProfile 字段

下表列出了SpotProfile字段:

字段名称值类型系统默认值注释
AccessPWD[<32位密码二进制>][“”]当值为null、空元组或密码二进制不是32位时,则不应尝试任何访问操作。
DwnCntNumber-1此SpotProfile用于识别唯一标签的次数:
如果DwnCnt<0(通常为-1),则此SpotProfile将被无限次使用。 |
如果DwnCnt为零,则不要使用此SpotProfile。
如果DwnCnt>0,则为SpotProfile已用于的每个唯一标签递减DwnCnt。
EncodingType“ALL”, “GS1”, “ISO”,
EPC Schemes: “SGTIN”, “SSCC”, “SGLN”, “GRAI”, “GIAI”, “GSRN”, “GSRNP”, “GDTI”, “CPI”, “SGCN”, “GID”, “USDOD”, “ADI”
EPC header values: “TID”, “RFU”, “UNPROGRAMMED” or AFIvalue
“ALL”EncodingType用于在库存期间选择标签。
ALL:忽略编码类型。
ISO:报告所有ISO编码标签,如PC位T=1所示。
GS1:报告所有GS1编码的标签,如PC位T=0所示。
EPC方案和标题值:GS1 TDS中规定的值。
0x00:UNPROGRAMMED
0x2C到0x41:指定的EPC方案注意:GS1 TDS可以扩展此列表。
0xE0,0xE2:TID,当MB10中的TID被复制到MB01起始位0x020时,为避免混淆而保留的值。
所有其他值:RFU
AFIvalue是一个8位HexString;当PC位T=1时,第二字节od为PC字。
FirstSeen布尔true如果为true,配置文件将报告第一次看到的标签。
ID正数-SpotProfile ID
InterpretData对象数组[]阵列应包含3.4.2中规定的解释对象。
KillPWD[<32位密码二进制>][“”]当值为null、空元组或密码二进制不是32位时,则不应尝试终止操作。
LastSeenBooleanfalse如果为true,配置文件将报告一个标签不再位于ReadZone中。报告之后,那个标签就被遗忘了。
当LastSeenTO=0时,不应报告LastSeen
MBMask掩码元组的数组[[]]掩码元组的数组,用于选择此配置文件适用于哪些点。值为:
内存组–数字(0到3)
StartBit–数字
掩码的位长度–数字
位掩码–用零位(头和尾)填充的HexString,以确保16位字对齐。
位掩码值–用零位(头和尾)填充的HexString,以确保16位字对齐。
示例(MB01和MB11中附加数据的掩码):[[1128,16,“:FFFF”,“:1234”],[3,0,8,“:FF”,“11”]]
Priority正数0配置文件的优先级。如果一个标签与多个配置文件匹配,则将使用优先级值最高的配置文件。
Read读取元组的数组[[]]读取访问指令元组的数组。值为:
内存组–数字(0到3)
StartWord–数字
要读取的单词–数字
重试限制–数字
示例(MB10-TID和MB11用户内存):[[2,0,6,3],[23,0,16,1]]
ReadZone数字数组[0]此SpotProfile适用的ReadZone。默认值零(0)表示SpotProfile应用于所有ReadZones。
ReportPC布尔false设置为true以报告PC位(包括XPC)
ReportSensor布尔false设置为true可根据传感器报警位报告标签传感器值。
Seen布尔false如果为true,配置文件将报告重复出现的标签。
当LastSeenTO=0时,不应报告Seen。
Write写入元组的数组[[]]详见6.6.3。
WriteEPC元组[]PC切换位应设置为t=0。
WriteUII元组[]PC切换位应设置为t=1。
WriteUM元组[]详见6.6.3。
WriteAccessPWD元组[]32位二进制值。
WriteKillPWD元组[]32位二进制值。
WriteRetries3最大写入重试次数。
6.6.3 SpotProfile写入字段定义

该指定写字段的值和默认值。SpotProfile可以包含这些写字段的任意组合。阅读器可以以任何顺序执行写字段。WriteAccessPWD应该最后执行。

在这里插入图片描述

二进制长度应该来自于Write, WriteEPC, WriteUII 和 WriteUM. WriteAccessPWD 和WriteKillPWD的二进制为32位。

写错误应以“Write error“消息表示。

下表定义了write方法的元组值:

元组值类型
AFI二进制8 bits
要写入的二进制位串二进制任何长度。读写器应该用0位填充二进制到16位的字边界。
check布尔检查失败时应报告错误。 注意:锁定为NO-ACCESS的密码不能被检查。
DSFID二进制8bits的倍数。
lockString数据锁|= NO-CHANGE, OPEN, SECURED, PERMALOCKED, PERMAUNLOCKED,默认NO-CHANGE
密码锁|= NO-CHANGE, OPEN, SECURED, PERMALOCKED, NO-ACCESS默认NO-CHANGE
MB0 ~ 3
start word-
Write method值元组写方法有以下三种取值:
method - string: “VAL”, “RND”, “COPY”, “DATE”, “DT”。
写方法参数如下表所示。

写方法的参数如下表所示:

方法写方法值(s)描述
COPY[<source MB number>,
<source 16-bit word start>]
从标签的另一部分复制数据。
默认值为[1,0]。
MB用0、1、2和3表示MBs 00、01、10和11。
示例(复制TID至UII/EPC): [" copy ",2,0]
DATEString写一个16位的字来指定日期。取值为正整数,0表示1970年1月1日。 它提供的日期直到2149-06-06。日期格式为“YYYY-MM-DD”。 例如:“2016-04-18”的结果为16909。
DTString写入ISO 8601指定的32位Unix时间(epoch)值。所使用的时间实例应在执行写命令时取。DT格式为:“YYYY-MM-DDThh:mm:ss.sssZ”。字符串可以按照ISO 8601的规定缩短,例如"YYYY-MM-DDThh:mm"。
RND-每次写入和更改指定大小的随机数。 例如:[" RND”]
VAL二进制要写入的二进制值。读写器应将具有零位的二进制填充到16位字边界。
示例:[“VAL”,“kfjhksay9832rfk=”][“VAL”,“:91F8:E192:C6B2:F7CD:F6AD:F900”]
例如:
"WriteEPC":[":3034:4567:abcd"]
"WriteUII":[":1234:4567:abcd"]
"WriteUII":[":1234:4567:abcd",[":92"]]

6.7 StartRZ, GetActRZ, StopRZ

6.7.1 概述

ReadZone天线配置、电源设置、占空比、触发器和SpotProfiles通过6.4和6.6中描述的命令进行设置。

阅读器功能默认为关闭状态。字段RdrStart(见6.3.2)配置读写器的默认启动状态。

当读写器处于活动状态时,ReadZones、Antennas和GPIO应符合6.4、6.5和6.6中的配置。

6.7.2 ReadZone激活

StartRZ:激活列出的ReadZone(s)

{"Cmd":"StartRZ","ID:[<list of ReadZone IDs to be activated>]} 
成功返回:
{"Report":"StartRZ",<error fields>} 

GetActRZ:列出活动的readzone。

{"Cmd":"GetActRZ"} 
成功返回:
{"Report":"GetActRZ","RZs":[<list of active ReadZones>]} 

StopRZ:停用列出的ReadZones。

{"Cmd":"StopRZ","ID":[<list of ReadZones to be deactivated>]} 
成功返回:
{"Report":"StopRZ",<error fields>} 

6.8 ThisTag, ThisTagStop

ThisTag命令如下:

{"Cmd":"ThisTag","Prof":[<SpotProfile numbers>]} 

ThisTag SpotProfile覆盖所有其他SpotProfile,直到ThisTag成功完成或ThisTagTimeout发生。

ThisTag命令可能包括Mode和TargetTags字段,这些字段将在ThisTag执行期间适用。

当ThisTag达到超时时,将报告错误事件,而没有完成标签上的清单或发现标签。

{"Report":"ThisTag",<error fields>}

ThisTag命令应按照ThisTag SpotProfile的规定激活ReadZone以执行ThisTag,并将所有ReadZone返回到其ThisTag之前的状态。在执行ThisTag命令期间,ThisTag应忽略ReadZones的所有触发器。

可以使用以下命令停止ThisTag的执行。

{"Cmd":"ThisTagStop"} 
成功返回:
{"Report":"ThisTagStop",<error fields>} 

7. 返回

7.1 错误事件返回

Error报告消息用于报告读取器事件错误。

错误信息的格式如下:

{"Report":"Error", 
 "ErrID":<error number>, 
 "ErrDesc":<description>, 
 "ErrInfo":<additional error information>}

7.2 心跳

Heartbeat报告提供了读取器的状态

一旦连接建立,应在连接上发送心跳。此后每隔HBPeriod发送一次心跳。如果HBPeriod设置为0,则不再发送心跳。

Heartbeat报告的格式如下:

{"Report":"HB","Seq":<sequence number>,<heartbeat field>} 

Seq的值是一个正整数,每次心跳增加1。这个数字的大小是供应商指定的(但应该至少8位长);一旦达到限制,计数器将重新启动。

Seq是可选的:
{"Report":"HB","RdrName":"RAIN-123DEF","BootCnt":123456,"TimeStamp":687652641.324}

适当的读取器信息和配置字段(第6条)的任何组合都可以包含在心跳中。HBFields字段用于指定包含哪些字段。

当ReportHB设置时,那么心跳中包含GPIO字段

7.3 阅读器事件报告

阅读器可以在任何时候主动报告事件。报告使用相关的命令响应格式,例如错误(见7.1)和GPIO更改(见6.5)。如果命令响应中没有指定此类事件,则应使用以下报告:

{"Report":"RdrEvent",<reader event field>} 
GPIO事件报告格式如下:
{"Report":"RdrEvent","GPIOs":[<GPIO tuple>]}

7.4 标签spot报告

阅读器报告一个标签点,并附带以下未经请求的信息:

{"Report":"TagEvent",<error fields>,<TagEvent field>}

标签点是根据匹配的SpotProfile设置标签访问任务和报告时间和格式的结果。执行SpotProfile任务的典型顺序是:

  1. 匹配到一个Spotprofile
  2. 额外的Spotprofile匹配
  3. 额外的访问支持(密码和/或加密)
  4. 可选的附加读访问(数据和传感器)
  5. 可选的kill及其结果报告
  6. 可选的读报告(FirstSeen, Seen和LastSeen指令)。
  7. 可选写及其结果报告
  8. 可选锁及其结果报告

下面的TagEvent字段提供了关于该点的信息。可选字段由†和††表示,默认情况下,这两个字段都被排除在外。这些字段可以通过使用6.3.5†(适用于所有TagEvent报告)和6.6.2††(适用于特定的SpotProfile)中的设置来包含。

FieldnameValue typeDefaultNotes
Ant†Number-标签上的天线ID。
DT†String-使用ISO 8601格式:
YYYY-MM-DDThh:mm:ss.sssZ
没有时区表示当地时间。
DwnCntNumber-1减数后报告。仅当DwnCnt≥0时报告
InvCnt†Number-自上次报告以来该标签被盘点的次数
Phase†Number-标签信号的相位
Prof†Number-用于读取标签的SpotProfile ID
Range†Number-标签到阅读器的距离,单位为毫米。
RSSI†Number-接收信号强度,单位为dBm。
RZ†Number-标签所在的ReadZone ID。
Spot“FirstSeen”, “Seen”,
“LastSeen”, “Killed”,
“Written”
“FirstSeen”第一次看到的Spot可以省略。
TimeStamp†Number-epoch日期-时间值。

下面的TagEvent字段指定标签数据。标签数据错误(读、写、写检查)应通过设置该字段值为空来表示。

FieldnameValue typeDefaultNotes
20248††Object-ISO/IEC 20248解释数据
AFI8-bit binary当PC位T=1时,包含此字段。
KilledBooleanfalse-
MB††Array of read
tuples
[]存储器数据读取应报告为对象数组。该对象应包含以下字段:
“ID”:<内存库编号:0 ~ 3>
“Start”:<数据的起始字-数字>
“数据”:<二进制数据>
当读取错误发生时,数据值应设置为空。
PC††HexString-PC, XPC_W1 & XPC_W2.
UII, EPC,
UII-NOT-CONFIGURED
or UII-PROPRIETARY
Binary-存储数据的字段名:
对于PC位T=1的标签:
UII for AFI>0x07.
UII-NOT-CONFIGURED for AFI=0x00.
UII-PROPRIETARY for AFI=0x01 to 0x07.
EPC for tags with PC bit T=0.
这些字段对于所有RCI实现都是必需的。
SchemeString-由GS1 TDS、RFU及TID指定的EPC编号方案。该字段在PC位T=0时包含。
TagIndicatorArray of StringsXPC标签指标解释值见附件E.2。
  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值