目录
1、0x22服务(ReadDataByIdentifier,按数据标识符读取数据服务)
Service description:
0x22服务(ReadDataByIdentifier,按数据标识符读取数据服务)允许客户端从服务端中定义的一个或者多个数据标识符中请求数据记录值。
客户端请求消息包含了一个或者多个两个字节的数据标识符值,其表示服务端所维持的数据记录值。数据记录值的格式和定义应该由车辆制造厂商或者系统供应商所指定,这些数据记录值可能会包含模拟量输入和输出信号,数字输入和输出信号,内部数据和系统状态信息。
服务端可能会限制同时请求的数据标识符数量,首先需要由车辆制造厂商和系统供应商商讨决定。
一旦接收到0x22服务(ReadDataByIdentifier,按数据标识符读取数据服务)的请求消息,服务端应该访问由数据标识符参数指定数据元素记录值,并且在单个0x22服务肯定应答报文中去传输他们的值。请求报文中可能会多次包含同一个DID值,服务端应该将这些重复的DID看作独立的DID并答复。
2、请求报文格式
2.1 请求报文定义
下表定义了请求报文的格式:
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | ReadDataByIdentifier Request SID | M | 0x22 |
#2 #3 | dataIdentifier[] = [ byte#1 (MSB) byte#2] | M M | 0x00 – 0xFF 0x00 – 0xFF |
. . | . . | . . | . . |
#n-1 #n | dataRecord[] = [ byte#1 byte#2] | U U | 0x00 – 0xFF 0x00 – 0xFF |
2.2 请求报文中子函数参数定义
该服务未使用子函数参数。
2.3 请求报文中数据参数定义
该服务在请求报文中的数据参数定义如下表所示:
定义 |
---|
dataIdentifier(#1 to #m) 该参数表示客户端请求读取数据记录的标识符。 |
3、肯定应答报文
3.1 肯定应答报文格式定义
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | ReadDataByIdentifier Response SID | M | 0x62 |
#2 #3 | dataIdentifier[]#1 = [ byte#1 (MSB) byte#2] | M M | 0x00 – 0xFF 0x00 – 0xFF |
#4 . . #(k-1)+4 | dataIdentifier[]#1 = [ data#1 . . data#k ] | M . . U | 0x00 – 0xFF . . 0x00 – 0xFF |
. . | . . | . . | . . |
#n-(o-1)-2 #n-(o-1)-1 | dataIdentifier[]#m = [ byte#1 (MSB) byte#2] | M M | 0x00 – 0xFF 0x00 – 0xFF |
#n-(o-1) . . #n | dataIdentifier[]#m = [ data#1 . . data#o ] | U . . U | 0x00 – 0xFF . . 0x00 – 0xFF |
3.2 肯定应答报文数据参数定义
Definition |
---|
dataIdentifier (#1 to #m) 请求报文中的数据参数标识符(DID)。 |
dataRecord (#1 to #k/o) 0x22服务(ReadDataByIdentifier)肯定应答报文中提供客户端数据记录的值,数据具体内容由车辆制造厂商制定。 |
4、支持的否定应答码(NRC_)
本服务实施了如下否定响应代码,下表记录了每个应答代码发生的情况,如果服务端在错误场景使用了该服务,则应使用如下列出的否定响应代码。
NRC | 描述 |
---|---|
0x13 | incorrectMessageLengthOrInvalidFormat 请求报文长度不正确时,会发送该NRC |
0x14 | responseTooLong 响应报文的总长度超出了底层传输协议层的限制时(如单条请求消息中出现了多个DID组合),会发送该NRC |
0x22 | conditionsNotCorrect 服务端的运行条件不满足去执行对应动作时,会发送该NRC |
0x31 | requestOutOfRange 设备不支持所请求的DID、当前会话层不支持所请求的DID、请求的动态DID还没有被分配,会发送该NRC |
0x31 | securityAccessDenied 至少有一个DID是保密的并且服务端处于未解锁状态,会发送该NRC |
0x22服务(ReadDataByIdentifier)的否定应答码(NRC)具体处理过程。
5、0x22服务(根据标识符读取数据服务)案例说明
Assumptions:
如下案例中,运行0x22服务(ReadDataByIdentifier)的条件都满足。
案例1中读取了2字节大小的DID(F190),其包含了车架号(VIN)信息。
案例2中示例了单条请求包含了多个DID的情况(0x10A包含了发动机冷却液温度,节气门位置,发动机转速,歧管绝对压力,空气流量,车速,大气压,计算负载值,怠速空气控制,加速踏板位置以及电池电压)。
例1:read single dataIdentifier 0xF190 (VIN number)
案例1 0x22服务(根据标识符读取数据服务)的请求报文使用如下,由客户端发向服务端(ECU):
字节顺序 | Description | 字节值 |
---|---|---|
#1 | ReadDataByIdentifier Request SID | 0x22 |
#2 | dataIdentifier [ byte#1 ] (MSB) | 0xF1 |
#3 | dataIdentifier [ byte#2 ] | 0x90 |
案例1 0x22服务(根据标识符读取数据服务)的肯定应答报文见下表,由服务端(ECU)发往客户端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | ReadDataByIdentifier Response SID | 0x62 |
#2 | dataIdentifier [ byte#1 ] (MSB) | 0xF1 |
#3 | dataIdentifier [ byte#2 ] | 0x90 |
#4 | dataRecord [ data#1 ] = VIN Digit 1 = “W” | 0x57 |
#5 | dataRecord [ data#2 ] = VIN Digit 2 = “0” | 0x30 |
#6 | dataRecord [ data#3 ] = VIN Digit 3 = “L” | 0x4C |
#7 | dataRecord [ data#4 ] = VIN Digit 4 = “0” | 0x30 |
#8 | dataRecord [ data#4 ] = VIN Digit 5 = “0” | 0x30 |
#9 | dataRecord [ data#4 ] = VIN Digit 6 = “0” | 0x30 |
#10 | dataRecord [ data#4 ] = VIN Digit 7 = “0” | 0x30 |
#11 | dataRecord [ data#8 ] = VIN Digit 8 = “4” | 0x34 |
#12 | dataRecord [ data#9 ] = VIN Digit 9 = “3” | 0x33 |
#13 | dataRecord [ data#10 ] = VIN Digit 10 = “M” | 0x4D |
#14 | dataRecord [ data#11 ] = VIN Digit 11 = “B” | 0x42 |
#15 | dataRecord [ data#12 ] = VIN Digit 12 = “5” | 0x35 |
#16 | dataRecord [ data#13 ] = VIN Digit 13 = “4” | 0x34 |
#17 | dataRecord [ data#14 ] = VIN Digit 14 = “1” | 0x31 |
#18 | dataRecord [ data#15 ] = VIN Digit 15 = “3” | 0x33 |
#19 | dataRecord [ data#16 ] = VIN Digit 16 = “2” | 0x32 |
#20 | dataRecord [ data#17 ] = VIN Digit 17 = “6” | 0x36 |
例2:Read multiple dataIdentifiers 0x010A and 0x0110
案例2 0x22服务(根据标识符读取数据服务)的请求报文使用如下,由客户端发向服务端(ECU):
字节顺序 | Description | 字节值 |
---|---|---|
#1 | ReadDataByIdentifier Request SID | 0x22 |
#2 | dataIdentifier#1 [ byte#1 ] (MSB) | 0x01 |
#3 | dataIdentifier#1 [ byte#2 ] | 0x0A |
#4 | dataIdentifier#2 [ byte#1 ] (MSB) | 0x01 |
#5 | dataIdentifier#2 [ byte#2 ] | 0x10 |
案例2 0x22服务(根据标识符读取数据服务)的肯定应答报文见下表,由服务端(ECU)发往客户端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | ReadDataByIdentifier Response SID | 0x62 |
#2 | dataIdentifier [ byte#1 ] (MSB) | 0x01 |
#3 | dataIdentifier [ byte#2 ] (LSB) | 0x0A |
#4 | dataRecord [ data#1 ] = ECT | 0x57 |
#5 | dataRecord [ data#2 ] = TP | 0x30 |
#6 | dataRecord [ data#3 ] = RPM | 0x4C |
#7 | dataRecord [ data#4 ] = RPM | 0x30 |
#8 | dataRecord [ data#4 ] = MAP | 0x30 |
#9 | dataRecord [ data#4 ] = MAF | 0x30 |
#10 | dataRecord [ data#4 ] = VSS | 0x30 |
#11 | dataRecord [ data#8 ] = BARO | 0x34 |
#12 | dataRecord [ data#9 ] = LOAD | 0x33 |
#13 | dataRecord [ data#10 ] = IAC | 0x4D |
#14 | dataRecord [ data#11 ] = APP | 0x42 |
#15 | dataIdentifier [ byte#1 ] (MSB) | 0x01 |
#16 | dataIdentifier [ byte#2 ] (LSB) | 0x10 |
#17 | dataRecord [ data#1 ] = B+ | 0x8C |