1 范围 本标准规定了机动车电子标识读写设备与机动车电子标识各基础应用系统间数据通信的通信链路、数据帧结构、通信规程及数据消息。 本标准适用于机动车电子标识读写设备的设计和开发。 2 规范性引用文件 下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。 GB/T AAAAA-XXXX 机动车电子标识通用技术条件 第1部分:汽车 GB/T BBBBB-XXXX 机动车电子标识读写设备通用技术条件 GM/T 0024-2014 SSL VPN技术规范 RFC7231 Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content RFC2045 Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies 3 术语和定义 GB/T AAAAA-XXXX界定的以及下列术语和定义适用于本文件 3.1 字段 fields 消息中的最小数据单元。 3.2 参数 parameters 对某一特定对象的描述,由一个或多个字段组成的。参数可以嵌套,即由字段和参数可由组成更高级别的参数。 3.3 消息 message 读写设备应用接口在数据通信中传递的完整的数据帧。由字段和/或参数组成。 3.4 天线规则 antenna specification 读写设备通过指定的天线单元识读机动车电子标识需遵循的规则。 3.5 电子标识识读规则 tag select specification 读写设备对机动车电子标识进行识读操作时需遵循的规则。 3.6 电子标识操作规则 tag operation specification 读写设备对机动车电子标识进行读操作或写操作时需遵循的规则。 4 缩略语 TCP——传输控制协议(transmission control protocol/internet protocol); HTTP——超文本传输协议(hyper text transfer protocol); GPS——全球定位系统(global positioning system); NTP——网络时间协议(network time protocol); BDS——北斗卫星导航系统(beidou navigation satellite system); RTC——实时时钟(real-time clock); RSSI——接收信号强度值(received signal strength indication); UTC——世界协调时间(coordinated universaltime); CRC16——16位循环冗余校验码(cyclic redundancy check codes with 16-bit); SSL——安全套接层 (secure sockets layer); IPv4——第四代互联网协议(internet protocol version 4); IPv6——第六代互联网协议(internet protocol version 6); USB——通用串行总线(universal serial bus); SSB-ASK——单边带幅移键控(single-sideband amplitude shift keying); DSB-ASK——双边带幅移键控(double-sideband amplitude shift keying); FM0——双向间隔码(bi-phase space coding); GPI——通用输入端口(general purpose input); FTP——文件传输协议(file transfer protocol); TFTP——简单文件传输协议(trivial file transfer protocol); DNS——域名系统(domain name system); DHCP——动态主机配置协议(dynamic host configuration protocol)。 5 总体要求 5.1 一般要求 读写设备与上位机交互通信的基本单元为消息。消息按响应方式可分为异步消息和同步消息。在交互通信过程中,如服务端收到异步消息,无需将消息请求处理结果告知客户端;如服务端收到同步消息,则应在约定时间内将处理结果告知客户端。 5.2 通信协议 通信协议应符合以下要求: a) 应支持TCP/IP网络通信协议,端口号为5084; b) 应支持SSL应用层安全通信协议,密码算法应使用国家密码局认可的算法,协议应符合GM/T 0024-2014中第6章的要求; c) 应支持HTTP应用层通信协议。应使用RFC7231中4.3.3定义的POST方法发送消息,消息为文本或二进制格式,使用文本格式时编码方式应使用RFC2045中6.8定义的Base64格式。 5.3 典型交互流程 读写设备与上位机采用网络通信接口通信时,典型交互流程如下,流程图见图1。 a) 建立通信链路。读写设备与上位机按TCP/IP协议要求建立通信链路; b) 通信链路维护。读写设备应定时向上位机发送心跳请求消息(M_Keepalive),上位机收到后应发送心跳请求应答消息(M_KeepaliveAck),具体要求见5.4; c) 配置读写设备识读和操作规则。上位机向读写设备发送识读规则配置消息和操作规则配置消息,见6.2.1、6.2.2; d) 识读数据上报。读写设备按识读规则和操作规则要求盘点和读写电子标识,并将识读信息通过上报数据消息(M_TagSelectAccessReport)异步发送给上位机,见6.2.3。
图1 典型交互流程 5.4 链路维护 采用网络通信接口时,应按如下要求进行链路维护: a) 读写设备每隔一段时间(默认10s)向上位机发送心跳请求消息(M_Keepalive),上位机收到心跳请求消息后,发送心跳请求应答消息(M_KeepaliveAck); b) 如果读写设备连续两次发送心跳请求消息(M_Keepalive)后,均未收到上位机发送的心跳请求应答消息(M_KeepaliveAck),则认为链路中断; c) 如检测到链路中断,应重新建立链接。 5.5 错误处理 5.5.1 通信异常 通信异常处理机制如下: a) 读写设备定时发送心跳请求信息(M_Keepalive)给上位机; b) 读写设备检测到上位机未能正确响应心跳请求消息(M_Keepalive),应主动关闭通信链路,并根据配置参数要求等待上位机再次发起连接或重新发起连接; c) 上位机检测到读写设备未能及时发送心跳请求信息(M_Keepalive),应关闭通信链路,并根据配置参数要求等待读写设备再次发起连接或重新主动发起连接。 5.5.2 消息错误 上位机或读写设备在收到消息后,若消息无法正确解析,应丢弃消息并等待发送方重新发送消息。 5.5.3 超时处理 上位机或读写设备发送消息后在约定时间内(默认3秒)未收到接收方返回的应答消息,则认为应答超时,应重新发送该消息;消息累计发送3次仍未得到正确应答时则认为通信异常,进行通信异常处理流程。 6 消息 6.1 一般要求 6.1.1 消息组成 消息由设备序列号、版本号、消息类型、消息长度、消息序列号、消息体等6部分内容组成,见图2。消息应符合以下要求: a) 设备序列号:读写设备的唯一身份编号,64bits表示; b) 版本号:读写设备接口规范的版本号,8bits表示,本标准取固定值0x01; c) 消息类型:消息类型编码,16bits表示; d) 消息长度:消息体字节长度,32bits大端模式无符号整数表示; e) 消息序列号:消息唯一顺序编号,应答消息的序列号与请求消息应相同。32bits表示; f) 消息体:由一个或多个参数或字段组成。
图2 消息组成 6.1.2 参数 消息参数由参数类型、参数长度、参数值等3部分内容组成,见图3。参数应符合以下要求: a) 参数类型:用于唯一标识参数类型,16bits表示,见附录C; b) 参数长度:用于标识参数内容的字节数,16bits表示。; c) 参数内容:参数具体取值。参数内容可以由1个或多个字段或下级参数组成。
图3 参数组成 6.1.3 字段 字段有普通字段和数组字段两种类型。普通字段采用大端模式存储,字段类型及其长度、取值范围见附录B;数组字段由数组长度、数组内容2部分内容组成,见图4。数组字段应符合以下要求: a) 数组长度:字段内容字节数,16bits表示,大端模式存储; b) 字段内容:由一个或多个普通字段组成。
图4 数组字段组成 6.1.4 串口通信消息帧 使用串口通信时,使用消息帧进行通信。消息帧由帧头、消息、校验码及帧尾4个部分组成,见图5。消息帧应符合以下要求: a) 帧头、帧尾为十六进制数据0x7E; b) 消息应符合见6.1.1的要求。如消息出现十六进制数0x7E、0x7D时应转义,转义方法为:0x7E使用0x7D、0x5E替代,0x7D使用0x7D、0x5D替代; c) 校验码使用CRC16,生成多项式为X16+X15+X2+1,初始值为0xFFFF,计算范围为转义后消息数据。如校验码中出现十六进制数0x7E、0x7D应转义,转义方法见b)。
图5 串口消息格式 6.1.5 标识符 消息、参数和字段对应的英文标识符应符合以下要求: a) 标识符由大写字母、小写字母、连字符(_)和数字构成,不允许出现空格; b) 消息标识符以字符“M_”前缀开始; c) 参数标识符以字符串“P_”前缀开始; d) 字段标识符以字符串“D_” 前缀开始。 6.2 业务操作 6.2.1 识读规则配置 6.2.1.1 识读规则状态转换机制 识读规则有禁用、就绪、启用3种工作状态,状态转换图如图6,状态转换流程如下: a) 发送添加识读规则消息(M_ADDSelectSpec)生成识读规则,此时规则处于禁用状态; b) 处于禁用状态的识读规则,可通过发送启用识读规则消息(M_EnableSelectSpec)转换至就绪状态; c) 处于就绪状态的识读规则可通过下列3种方式进行转换状态: 1) 发送启用识读规则消息(M_StartSelectSpec)转换至启用状态 2) 满足识读规则启用触发参数(P_SelectSpecStartTrigger)时将自动转换至启用状态, 3) 发送禁用识读规则消息(M_DisableSelectSpec)转换至禁用状态。 d) 处于启用状态的识读规则可通过下列3种方式进行转换状态: 1) 发送停止识读规则消息(M_StopSelectSpec)转换至就绪状态; 2) 满足识读规则停止触发参数(P_SelectSpecStopTrigger)自动转换至就绪状态; 3) 发送禁用识读规则消息(M_DisableSelectSpec)转换至禁用状态。 e) 处于禁用状态、就绪状态、启用状态的识读规则,可通过发送删除识读规则消息(M_DeleteSelectSpec)将规则删除。