11.2.1 服务描述
来自:ISO 14229-1-2020.pdf
ReadDataByIdentifier服务允许客户端从由一个或多个dataidentifier标识的服务器请求数据记录值。
客户端请求消息包含一个或多个两个字节的dataIdentifier值,用于标识由服务器维护的数据记录(关于允许的dataIdentifier值,请参阅C.1)。数据记录的格式和定义应针对车辆制造商或系统供应商,可以包括模拟输入和输出信号、数字输入和输出信号、内部数据以及服务器支持的系统状态信息。
服务器可以根据车辆制造商和系统供应商的协议,限制可以同时请求的数据标识符的数量。
在接收到ReadDataByIdentifier请求时,服务器应该访问由dataIdentifier参数指定的记录的数据元素,并在包含相关dataRecord参数的单个ReadDataByIdentifier积极响应中传输它们的值。请求消息可以多次包含相同的dataIdentifier。服务器应将每个dataIdentifier视为单独的参数,并根据请求频繁地为每个dataIdentifier响应数据。
重要:服务器和客户端必须满足8.7中规定的请求和响应消息行为。
11.2.2 请求消息
11.2.2.1 请求消息定义
表186指定了请求消息。
注:
- #1:ReadDataByIdentifier请求SID,值为[22]
- #2/#3:dataIdentifier[]#1=[字节#1(MSB) 字节#2],值为[00到FF 00到FF]
- #n-1/n#:dataIdentifier[]#m=[字节#1(MSB) 字节#2],值为[00到FF 00到FF]
11.2.2.2 请求消息子函数参数$Level (LEV_)定义
此服务不使用SubFunction参数。
11.2.2.3 请求消息数据参数定义
表187指定请求消息的数据参数。
注:
- dataIdentifier(#1到#m):这个参数标识客户端正在请求的服务器数据记录(详细参数定义见C.1)。
11.2.3 积极响应信息
11.2.3.1 积极响应消息定义
表188指定了积极响应信息。
注:
- #1:按标识符读取数据响应服务标识符(RDBIPR),值为[62]
- #2,#3:数据标识符[]#1 =[字节#1(MSB),字节#2](DID_HB DID_LB),值为[00到FF 00到FF]
- #4,…,#(k-1)+4:数据记录[]#1 = [数据#1,…,数据#k](DREC_DATA_1,…,DREC_DATA_k),值为[00到FF,…,00到FF]
- #n-(o-1)-2,…,#n-(o-1)-1:数据标识符[]#m =[字节#1(MSB),…,字节#2](DID_HB DID_LB),值为[00到FF,…,00到FF]
- #n-(o-1),…,#n:数据记录[]#m = [数据#1: 数据#o](DREC_DATA_1,…,DREC_DATA_o),值为[00到FF,…,00到FF]
11.2.3.2 积极响应消息数据参数定义
表189指定了积极响应消息的数据参数。
注:
- dataIdentifier(#1到#m):该参数是请求消息中的数据参数dataIdentifier的回显。
- 数据记录(#1到#k/o):ReadDataByIdentifier正向响应消息使用此参数向客户端提供所请求的数据记录值。数据记录的内容在本文档中没有定义,是特定于车辆制造商的。
11.2.4 支持的消极响应码(NRC_)
本服务应实施以下否定响应代码。表190记录了每个响应代码发生的情况。如果错误场景适用于服务器,则列出的否定响应应使用。
注:
- 13:incorrectMessageLengthOrInvalidFormat(IMLOIF):如果请求消息的长度无效或客户端超过了一次允许请求的最大数据标识数,则将发送此NRC。
- 14:responseTooLong(RTL):如果响应消息的总长度超过了底层传输协议的限制(例如,当单个请求中请求多个did时),将发送此NRC。
- 22:conditionsNotCorrect(CNC):如果服务器的运行条件不满足执行所要求的操作,则应发送此NRC。
- 31:requestOutOfRange(ROOR):NRC应在以下情况下发送:
a. 设备不支持所请求的dataIdentifier值;
b. 当前会话不支持所请求的dataIdentifiers;
c. 请求的dynamicDefinedDataIdentifier还没有被分配。 - 33:securityAccessDenied(SAD):如果至少有一个数据标识符是安全的,并且服务器没有处于解锁状态,则应发送此NRC。
图20记录了评估序列。
11.2.5 消息流示例:ReadDataByIdentifier
11.2.5.1 假设
该子句指定示例执行ReadDataByIdentifier服务需要满足的条件。客户端可以在任何时候请求dataIdentifier数据,这与服务器的状态无关。
下面的dataIdentifier示例是特定于动力总成设备的(例如发动机控制模块)。有关排放相关系统的公认术语/定义/首字母缩写的进一步详细信息,请参阅ISO°15031-2[16]。
第一个示例读取一个包含单个信息的两个字节dataIdentifier(其中dataIdentifier F190包含VIN号)。
第二个示例演示了通过单个请求请求多个dataIdentifier(其中dataIdentifier 010A包含发动机冷却剂温度、油门位置、发动机转速、流管绝对压力、质量空气流量、车辆速度传感器、气压、计算负载值、怠速空气控制和油门踏板位置,dataIdentifier 0110包含电池正电压)。
11.2.5.2 示例#1: 读取单个数据标识符F19016 (VIN号)
表191指定了ReadDataByIdentifier请求消息流示例#1。
表192指定ReadDataByIdentifier积极响应消息流示例#1。
11.2.5.3 例2:读取多个dataIdentifiers 010A和0110
表193指定了ReadDataByIdentifier请求消息流示例#2。
表194指定了ReadDataByIdentifier积极响应消息流示例#2。