UDS 诊断 - ReadDataByIdentifier(按标识符读取数据)(0x22)服务

UDS 诊断服务系列文章目录

诊断和通信管理功能单元
UDS 诊断 - DiagnosticSessionControl(诊断会话控制)(0x10)服务
UDS 诊断 - ECUReset(ECU重置)(0x11)服务
UDS 诊断 - SecurityAccess(安全访问)(0x27)服务
UDS 诊断 - CommunicationControl(通信控制)(0x28)服务
UDS 诊断 - TesterPresent(测试仪保活)(0x3E)服务
UDS 诊断 - AccessTimingParameter(访问计时参数)(0x83)服务
UDS 诊断 - SecuredDataTransmission(受保护的数据传输)(0x84)服务
UDS 诊断 - ControlDTCSetting(控制DTC设置)(0x85)服务
UDS 诊断 - ResponseOnEvent(基于事件响应)(0x86)服务
UDS 诊断 - LinkControl(链路控制)(0x87)服务
数据传输功能单元
UDS 诊断 - ReadDataByIdentifier(按标识符读取数据)(0x22)服务
UDS 诊断 - ReadMemoryByAddress(按地址读取内存)(0x23)服务
UDS 诊断 - ReadScalingDataByIdentifier(按标识符读取换算数据)(0x24)服务
UDS 诊断 - ReadDataByPeriodicIdentifier(按周期性标识符读取数据)(0x2A)服务
UDS 诊断 - DynamicallyDefineDataIdentifier(动态定义数据标识符)(0x2C)服务
UDS 诊断 - WriteDataByIdentifier(按标识符写数据)(0x2E)服务
UDS 诊断 - WriteMemoryByAddress(按地址写内存)(0x3D)服务
存储数据传输功能单元
UDS 诊断 - ClearDiagnosticInformation(清除诊断信息)(0x14)服务
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(1) - 服务说明
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(2) - 请求消息
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(3) - 响应消息
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(4) - 示例
输入输出控制功能单元
UDS 诊断 - InputOutputControlByIdentifier(按标识符的输入输出控制)(0x2F)服务
例程功能单元
UDS 诊断 - RoutineControl(例程控制)(0x31)服务
上传下载功能单元
UDS 诊断 - RequestDownload(请求下载)(0x34)服务
UDS 诊断 - RequestUpload(请求上传)(0x35)服务
UDS 诊断 - TransferData(传输数据)(0x36)服务
UDS 诊断 - RequestTransferExit(请求传输终止)(0x37)服务
UDS 诊断 - RequestFileTransfer(请求文件传输)(0x38)服务


一、服务说明

ReadDataByIdentifier(按标识符读取数据)服务允许客户端请求读取服务器中通过一个或多个 dataIdentifiers(DID)(数据标识符)所识别的数据记录值。

客户端请求信息包含一个或多个识别服务器所维护的数据记录的双字节 DID 值(参考数据标识符代码 DID 参数的定义)。dataRecord(数据记录)的格式和定义应由车辆制造商或系统供应商规定,并且可包含模拟输入和输出信号、数字输入和输出信号、内部数据,以及系统状态信息(若服务支持)。

如车辆制造商和系统供应商所商定的,服务器可限制同时请求的 DID 数目。

接收到 0x22 服务请求后,服务器应访问 DID 参数所指定的记录的的数据元素,并以包含关联 dataRecord 参数的单一 0x22 服务的肯定响应传输这些数据元素的值。请求消息可多次包含相同的 DID。服务器应将每个 DID 视作单独的参数,并按照经常请求的方式对每个 DID 做出响应。

二、请求消息

1.请求消息定义

字节参数名称字节值
#1ReadDataByIdentifier(按标识符读取数据)请求SID0x22

#2
#3
dataIdentifier[]#1 = [
byte #1(MSB)
byte #2]

0x00 - 0xFF
0x00 - 0xFF
.
.
.
.
.
.

#n-1
#n
dataIdentifier[]#m = [
byte #1(MSB)
byte #2]

0x00 - 0xFF
0x00 - 0xFF

2. 请求消息数据参数定义

定义
dataIdentifier(数据标识符)(第 1 个至第 m 个)
此参数识别客户端当前所请求的服务器数据记录。

三、肯定响应消息

1. 肯定响应消息定义

字节参数名称字节值
#1ReadDataByIdentifier(按标识符读取数据)响应SID0x62

#2
#3
dataIdentifier[]#1 = [
byte #1(MSB)
byte #2]

0x00 - 0xFF
0x00 - 0xFF

#4
.
.
#(k-1)+4
dataRecord[]#1 = [
data #1
.
.
data #k]

0x00 - 0xFF
.
.
0x00 - 0xFF
.
.
.
.
.
.

#n-(0-1)-2
#n-(o-1)-1
dataIdentifier[]#m = [
byte #1(MSB)
byte #2]

0x00 - 0xFF
0x00 - 0xFF

#n-(o-1)
.
.
#n
dataRecord[]#1 = [
data #1
.
.
data #k]

0x00 - 0xFF
.
.
0x00 - 0xFF

2. 肯定响应消息数据参数定义

定义
dataIdentifier(数据标识符)(第 1 个至第 m 个)
该参数是请求消息中 dataIdentifier(数据标识符)的回显。
dataRecord(数据记录)(第 1 个至第 k/o 个)
此参数用在 0x22 服务的肯定响应消息中,用以向客户端提供所请求的数据记录值。

四、支持的NRC

NRC说明
0x13消息长度不正确或格式无效
0x14响应过长
若响应消息总长度超过了底层传输协议的限值(例如,单一请求中请求了多个 DID 的情况),则应发送此 NRC。
0x22条件不正确
若不满足服务器的运行条件而无法执行所需的操作,则应发送此 NRC。
0x31请求超过限值
以下情况下,应发送此 NRC:
装置不支持所请求的任何 DID 值;
当前会话不支持所请求的任何 DID;
尚未分配所请求的 dynamicDefinedDataIdentifier(已动态定义的数据标识符);
0x33安全访问被拒绝
若至少有一个 DID 已受保护,并且服务器未处于解锁状态,则应发送此 NRC。

下图为 0x22 服务的否定响应码的处理。
0x22 服务的否定响应码的处理

图例
1 最小长度为 3 个字节(SI + DID)
2 最大长度为 1 个字节(SI)+ 2 * n 个字节(DID)

五、示例

1. 假设

本条规定了为执行 0x22 服务示例需满足的条件。不论服务器处于何种状态,客户端可随时请求 DID 数据。

以下 DID 示例因动力系统装置(如发送机控制模块)而异。

第一则示例描述了包含单条信息的单一双字节 DID(其中 DID 0xF190 包含 VIN 号)。

第二则示例演示了单个请求中多个 DID 的请求(其中 DID 0x010A 包含发动机冷却液温度、油门位置、发送机转速、进气歧管绝对压力、空气质量流量、车速传感器、大气压、负载计算值、怠速空气控制和油门踏板位置,DID 0x0110 包含蓄电池正电压)。

2. 示例 1:读取单一 DID 0xF190(VIN号)

req   22 F1 90
resp  62 F1 90 57 30 4C 30 30 30 30 34 33 4D 42 35 34 31 33 32 36
resp #4-#20:
dataRecord[data#1] = VIN Digit 1 = “W”
dataRecord[data#2] = VIN Digit 1 = “0”
dataRecord[data#3] = VIN Digit 1 = “L”
dataRecord[data#4] = VIN Digit 1 = “0”
dataRecord[data#5] = VIN Digit 1 = “0”
dataRecord[data#6] = VIN Digit 1 = “0”
dataRecord[data#7] = VIN Digit 1 = “0”
dataRecord[data#8] = VIN Digit 1 = “4”
dataRecord[data#9] = VIN Digit 1 = “3”
dataRecord[data#10] = VIN Digit 1 = “M”
dataRecord[data#11] = VIN Digit 1 = “B”
dataRecord[data#12] = VIN Digit 1 = “5”
dataRecord[data#13] = VIN Digit 1 = “4”
dataRecord[data#14] = VIN Digit 1 = “1”
dataRecord[data#15] = VIN Digit 1 = “3”
dataRecord[data#16] = VIN Digit 1 = “2”
dataRecord[data#17] = VIN Digit 1 = “6”

3. 示例 2:读取多个 DID 0x010A 和 0x0110

req   22 01 0A 01 10
resp  62 01 0A A6 66 07 50 20 1A 00 63 4A 82 7E 01 10 8C
resp #4-#14:DID 0x010A 对应 dataRecord[]
resp #17:DID 0x0110 对应 dataRecord[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值