UDS 诊断 - ReadDataByPeriodicIdentifier(按周期性标识符读取数据)(0x2A)服务

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)服务


一、服务说明

0x2A 服务允许客户端请求对服务器中通过一个或多个 periodicDataIdentifiers(周期性数据标识符)所识别的数据记录值进行周期性传输。

客户端请求消息包含一个或多个识别服务器所维护的数据记录的单字节 periodicDataIdentifier(周期性数据标识符)值。periodicDataIdentifier(周期性数据标识符)表示为此服务所保留的 DID 范围之外的数据标识符的低字节(0xF2XX)。

例如,此服务中所使用的 periodicDataIdentifier(周期性数据标识符)0xE3 为 DID 0xF2E3。

dataRecord(数据记录)的格式和定义应由车辆制造商规定,并且可包含模拟输入和输出信号、数字输入和输出信号、内部数据,以及系统状态信息(若服务器支持)。

接收到 0x2A 的请求而非 stopSending(停止发送)后,服务器应检查是否满足执行服务的适当条件。

给定时间内应仅支持单一 transmissionMode(传输模式)的 periodicDataIdentifier(周期性数据标识符)。应在接收到请求消息之后更改 periodicDataIdentifier(周期性数据标识符)的调度,并按照相同 periodicDataIdentifier(周期性数据标识符)的新调度安排设置 transmissionMode 参数。若车辆制造商要求,则应支持不同 periodicDataIdentifier(周期性数据标识符)的多个调度安排。

若满足适当的条件,则服务器应传输仅包括服务器标识符的肯定响应消息。一旦通过肯定响应接受了初始请求消息,服务器就不得传输否定响应消息。

接受初始肯定响应消息后,服务器应访问 periodicDataIdentifier(周期性数据标识符)参数所指定的记录的数据元素,并就包含管理 dataRecord 参数的每个 periodicDataIdentifier(周期性数据标识符)在单独的周期性数据响应消息中传输这些数据元素的值。

接受初始肯定响应消息后,为了向客户端传输 periodicDataIdentifier(周期性数据标识符)数据二定义的单独周期性数据响应消息应包括 periodicDataIdentifier(周期性数据标识符)及其数据,但不包括肯定相应服务标识符。

特定 transmissionMode 的已编档周期性速率被定义为具有相同 periodicDataIdentifier(周期性数据标识符)的任意两次连续响应消息的间隔时间,再次时间内,仅调度单一 periodicDataIdentifier(周期性数据标识符)。若同事调度多个 periodicDataIdentifier(周期性数据标识符),则相同 periodicDataIdentifier(周期性数据标识符)的有效期将随一下设计参数二变化:

  • 周期性调度器的调用率;
  • 按照调度器调用所分配的可用协议特定周期性数据响应消息地址信息标识符(例如,CAN 的 CAN 标识符)的数目;
  • 可以并行定义待同事传输的 periodicDataIdentifier(周期性数据标识符)的数目。

若同事传输多个 periodicDataIdentifier(周期性数据标识符),则这些参数值将影响相同 periodicDataIdentifier(周期性数据标识符)的有效期的增加范围。因此,前文提及的所有设计参数应均由车辆制造商指定。每次调用周期性调度器时,应确定所有 periodicDataIdentifier(周期性数据标识符)是否准备好传输。

周期性速率是周期性调度器调用率的整数倍数。

例如,两个独特的 ECU 实现过程可支持周期性速率为 10ms 的快速 transmissionMode 和单个具有唯一性的周期性数据响应消息的地址信息标识符。若第一个实现过程每 10ms 调用周期性调度器,则相同 periodicDataIdentifier(周期性数据标识符)的间隔时间将可能增至 20ms(调度两个 periodicDataIdentifier(周期性数据标识符)的情况下)和 40ms (调度四个 periodicDataIdentifier(周期性数据标识符)的情况下)。若第二个实现过程每 5ms 调用周期性调度器,则相同 periodicDataIdentifier(周期性数据标识符)的间隔时间可能保持为 10ms(调用两个)和增至 20ms(调用四个)。

接收到包括 transmissionMode stopSending 的 0x2A 请求后,服务器应停止请求消息中所含的 periodicDataIdentifier(周期性数据标识符)的周期性传输,或者停止传输任何 periodicDataIdentifier(周期性数据标识符)(请求消息中未指定特定标识符的情况下)。此 transmissionMode 的响应消息仅包含服务器标识符。

如车辆制造商和系统供应商所商定的,服务器可限制同时支持的 periodicDataIdentifier(周期性数据标识符)的数目。超过可以同时支持的 periodicDataIdentifier(周期性数据标识符)的最大数目应导致单一否定响应,并且,应不调度该请求中的任何 periodicDataIdentifier(周期性数据标识符)。不允许在单一请求消息中重复相同的 periodicDataIdentifier(周期性数据标识符),并且,服务器应忽略所有这些标识符,客户端另行指定的 periodicDataIdentifier(周期性数据标识符)除外。

二、请求消息

1.请求消息定义

字节参数名称字节值Cvt
#1 ReadDataByPeriodicIdentifier(按周期性标识符读取数据)请求SID0x2AM
#2transmissionMode(传输模式)0x00 - 0xFFM
#3periodicDataIdentifier(周期性数据标识符)[] 第 1 个0x00 - 0xFFC
. .. .. .. .
#m+2periodicDataIdentifier(周期性数据标识符)[] 第 m 个0x00 - 0xFFU

C:若 transmissionMode 等同于 sendAtSlowRate(慢速发送)、sendAtMediumRate(中速发送)或 sendAtFastRate(快速发送),则请求消息中必须存在 periodicDataIdentifier(周期性数据标识符)。若 transmissionMode 等同于 stopSending,则要不不存在 periodicDataIdentifier(周期性数据标识符)以便停止所有已调度的 periodicDataIdentifier(周期性数据标识符),要么客户端可以明确指定一个或多个待停止的 periodicDataIdentifier(周期性数据标识符)。

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

定义
transmissionMode(传输模式)
此参数确定了服务器待使用的请求 periodicDataIdentifier(周期性数据标识符)的传输速率。
dataIdentifier(数据标识符)(第 1 个至第 m 个)
此参数识别客户端当前所请求的服务器数据记录。应可在单一请求中请求多个 periodicDataIdentifier(周期性数据标识符)。

1. 下表为 transmissionMode 参数的定义

字节值说明
0x00保留
0x01sendAtSlowRate(慢速发送)
本参数规定服务器须以较慢速度传输请求 dataRecord 信息以响应请求信息(其中,待发送响应数量 = 待发送响应最大数量)。各车辆制造商采用 transmissionMode 慢速发送参数重复率不同,且服务器应提前确定。
0x02sendAtMediumRate(中速发送)
本参数规定服务器须以中等速度传输请求 dataRecord 信息以响应请求信息(其中,待发送响应数量 = 待发送响应最大数量)。各车辆制造商采用 transmissionMode 中速发送参数重复率不同,且服务器应提前确定。
0x03sendAtFastRate(快速发送)
本参数规定服务器须以较快速度传输请求 dataRecord 信息以响应请求信息(其中,待发送响应数量 = 待发送响应最大数量)。各车辆制造商采用 transmissionMode 快速发送参数重复率不同,且服务器应提前确定。
0x04stopSending(停止发送)
服务器停止定期 / 重复传输肯定响应消息。注意:如果 transmissionMode = stopSending,将参数待发送响应最大数量设为 0x01,否则,可能无法服务器操作。
0x05 - 0xFF保留

三、肯定响应消息

1. 肯定响应消息定义

必须区分表明服务器接受服务的初始肯定响应消息及包括 periodicDataIdentifier(周期性数据标识符)数据的和后续周期性数据响应消息。

下表定义了服务器接受请求是需传输的初始肯定响应消息。

字节参数名称字节值
#1ReadDataByPeriodicIdentifier(按周期性标识符读取数据)响应SID0x6A

按照请求的 transmission 参数确定的速率周期性传输 periodicDataIdentifier(周期性数据标识符)数据。

接受初始肯定响应后,针对请求中所支持的每个 periodicDataIdentifier(周期性数据标识符),服务器应发送下文所定义的单一周期性数据响应消息。

下表确定了周期性数据响应消息数据的定义。

字节参数名称字节值
#1periodicDataIdentifier(周期性数据标识符)0x00 - 0xFF

#2
.
.
#k+2
dataRecord[] = [
data#1
.
.
data#k ]

0x00 - 0xFF
.
.
0x00 - 0xFF
## 2. 肯定响应消息数据参数定义
定义
periodicDataIdentifier(周期性数据标识符)
此参数引用请求消息中的 periodicDataIdentifier(周期性数据标识符)。
dataRecord(数据记录)
此参数用在 0x2A 服务的肯定响应消息中,用以向客户端提供所请求的数据记录值。

四、支持的NRC

NRC说明
0x13消息长度不正确或格式无效
0x22条件不正确
若不满足服务器的运行条件而无法执行所需的操作,则应发送此 NRC,例如,若客户端请求不同的 transmissionMode 的 periodicDataIdentifier(周期性数据标识符),但服务器不同时支持多个 transmissionMode,则会出现上述情况。
0x31请求超过限值
以下情况下,应发送此 NRC:
装置不支持所请求的任何 periodicDataIdentifier(周期性数据标识符)值;
当前会话不支持所请求的任何 periodicDataIdentifier(周期性数据标识符);
装置不支持所指定的 transmissionMode;
尚未分配所请求的 dynamicDefinedDataIdentifier(已动态定义的数据标识符);
客户端超过了允许同时调度的 periodicDataIdentifier(周期性数据标识符)的最大数目。
0x33安全访问被拒绝
若至少有一个 periodicDataIdentifier(周期性数据标识符)已受保护,并且服务器未处于解锁状态,则应发送此 NRC。

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

图例
1. 若 TM = stopSending(SI + TM),则最小长度为 2 个字节;若 TM <> stopSending,则最小长度为 3 个字节(SI + TM + pDID);最大长度为 1 个字节(SI)+ 1 个字节(TM)+ +n 个字节(pDID)。

五、示例

1. 假设

以下各示例展示了 0x2A 服务的运行方式。不论服务器处于何种状态,客户端可随时请求一个periodicDataIdentifier(周期性数据标识符)数据。

下文中的 periodicDataIdentifier(周期性数据标识符)示例因动力系统装置(如,发送机控制模块)而异。

2. 示例 1:以中等速率读取多个 periodicDataIdentifier(周期性数据标识符)0xE3 和 0x24

本示例展示了利用一个单一请求来请求多个 DID 的过程(其中 periodicDataIdentifier(周期性数据标识符)0xE3(= DID 0xF2E3))包含发送机冷却液温度、油门位置、发送机转速、车速传感器,而 periodicDataIdentifier(周期性数据标识符)0x24(= DID 0xF224)包含蓄电池正电压、进气歧管绝对压力、空气质量流量、车辆气压以及计算负载值)。

客户端请求以中等速率传输并在检索周期性数据一定时间后仅停止传输 periodicDataIdentifier(周期性数据标识符)0xE3。

step1:请求周期性传输 periodicDataIdentifier(周期性数据标识符)- 初始肯定响应消息 - 后续肯定响应消息1 - 后续肯定响应消息2

req   2A 02 E3 24
resp  6A
resp E3 (periodicDataIdentifier#1)
	 A6 66 07 50 00 (dataRecord[data#--#5] = {ECT,TP,RPM,RPM,VSS})
resp 24 (periodicDataIdentifier#2)
 	 8C 20 1A 63 4A (dataRecord[data#--#5] = {B+,MAP,MAF,BARO,LOAD})

// 服务器以适用的中等速率传输上述后续响应消息。

step2:停止传输 periodicDataIdentifier(周期性数据标识符)

req   2A 04 E3
resp  6A

// 服务器仅停止传输 periodicDataIdentifier(周期性数据标识符)0xE3。服务器仍以中等速率传输 periodicDataIdentifier(周期性数据标识符)0x24。

3. 示例 2:0x2A 服务的周期性调度速率的图例和表例

1. 0x2A 服务示例概述

本分条款介绍了调度的周期性数据示例,该示例中包含了 0x2A 服务的一个图例和一个表例。

示例中图解了客户端和服务器应用程序之间传输的消息(请求 / 响应),并以表格的形式说明了服务器周期性调度器及其变量的可能的实现过程,以及每次执行用以校验周期性调度器的背景功能时这些变量是如何变化的。

下文示例中确定了如下实现过程:

— 较快周期性速率为 25ms,而中等周期性速率为 300ms。

— 每 12.5ms 校验一次周期性调度器,这意味着在此期间会调用(轮询)周期性调度器的背景功能。每次调用背景周期性调度器时,其会遍历调度器条目,直至发送了一个单一周期性标识符或调度器中的所有标识符均检验完毕且没有标识符已准备好传输。在示例实现过程中,表中的 “周期性调度器传输索引” 变量是遍历调度器以检查是否有标识符已准备好传输时所校验的第一个索引。

— 可并发调度的 periodicDataldentifier(周期性数据标识符)的最大数量为 4 个。

— 已分配一个独特的周期性数据响应消息的地址信息 ID。

由于周期性调度器轮询速率为 12.5ms,因此,每发送一个较快速率的 periodicDataldentifier(周期性数据标识符)时,较快速率循环计数器可能会设为 2(该值基于调度值(25ms)除以周期性调度器轮询速率(12.5 ms)或 25 / 12.5),而每发送一条中等速率的 periodicDataldentifier(周期性数据标识符)时,中等速率循环计数器可能会重置为 24(调度速率除以周期性调度器轮询速率或 300 / 12.5)。

2. 示例:以中等速率读取多个 periodicDataldentifier(周期性数据标识符)0xE3 和 0x24

当 t = 0.0ms 时,客户端开始发送请求以中等速率(300ms)调度 2 个 periodicDataldentifier(周期性数据标识符)(0xF2E3 和 0xF224)。在本示例中,服务器会接收该请求并在第一次 t = 25.0ms 时执行周期性调度器的背景功能。

以中等速率调度的 periodicDataldentifier(周期性数据标识符)

图例
1. 0x2A(0x2A、0x02、0xF2E3 以及 0xF224)的请求消息(sendAtMediumRate(以中等速率发送))
2. 0x2A 的肯定响应消息(0x6A,不包含数据)
3. 0x2A 的周期性数据响应消息(0xE3、0xXX、… 以及 0xXX)
4. 0x2A 的周期性数据响应消息(0x24、0xXX、… 以及 0xXX)

下表说明了服务器中周期性调度器可能的实现过程。该表中包含了周期性调度器变量,并说明了每次执行用以校验周期性调度器的背景功能时这些变量是如何变化的。

时间(ms)周期性调度器传输索引已发送的周期性标识符周期性调度器循环编号调度器[0]传输计数调度器[1]传输计数
25,000xE310 -> 240
37,510x242230 -> 24
50,0032223
62,5042122
75,0052021
87,5061920
100,0071819
112,5081718
125,0091617
137,50101516
150,00111415
162,50121314
175,00131213
187,50141112
200,00151011
212,5016910
225,001789
237,501878
250,001967
262,502056
270,002145
287,502234
300,002323
312,502412
325,000xE3250 -> 241
337,510x2426230 -> 24
350,00272223
362,50282122

4. 示例 3:0x2A 服务的周期性调度速率的图例和表例

1. 0x2A 服务示例概述

本分条款介绍了一个调度的周期性数据示例,该示例中包含了 0x2A 服务的一个图例和一个表例。

该示例基于 示例 2。示例中图解了客户端和服务器应用程序之间传输的消息(请求 / 响应),并以表格的形式说明了服务器周期性调度器及其变量的可能的实现过程,以及每次执行用以校验周期性调度器的背景功能时这些变量是如何变化的。

2. 以不同周期性速率读取多个 periodicDataldentifier(周期性数据标识符)

在本示例中,以较快周期性速率(25ms)调度了三个 periodicDataldentifier(周期性数据标识符)(简单而言为 0x01、0x02 以及 0x03),然后针对将以中等周期性速率(300ms)调度的一个单一 periodicDataldentifier(周期性数据标识符)(0x04)发送了另一个请求。在本示例中,服务器接收了第一条 0x2A 服务请求(1),发送了一条不含任何周期性数据的肯定响应(2),以及针对第一次 t = 25.0ms 执行了周期性调度器的背景功能(3)。当收到第二条 0x2A 服务请求(5)后,服务器会发送一条不含任何周期性数据的肯定响应(7)并开始以调度的中等速率(300ms)在 t = 62.5ms(8)时执行周期性调度器的背景功能。

以较快和中等速率调度的 periodicDataldentifier(周期性数据标识符)

图例
1. 0x2A(0x2A、0x03、0xF201、0xF202 以及 0xF203)的请求消息(sendAtFastRate(以较快速率发送))
2. 0x2A 的肯定响应消息(0x6A,不包含数据)
3. 0x2A 的周期性数据响应消息(0x01、0xXX、… 以及 0xXX)
4. 0x2A 的周期性数据响应消息(0x02、0xXX、… 以及 0xXX)
5. 0x2A(0x2A、0x02 以及 0xF204)的请求消息(sendAtMediumRate(以中等速率发送))
6. 0x2A 的周期性数据响应消息(0x03、0xXX、… 以及 0xXX)
7. 0x2A 的肯定响应消息(0x6A,不包含数据)
8. 0x2A 的周期性数据响应消息(0x04、0xXX、… 以及 0xXX)

下表说明了服务器中周期性调度器可能的实现过程。该表中包含了周期性调度器变量,并说明了每次执行用以校验周期性调度器的背景功能时这些变量是如何变化的。

时间(ms)周期性调度器传输索引已发送的周期性标识符周期性调度器循环编号调度器[0]传输计数调度器[1]传输计数调度器[2]传输计数调度器[3]传输计数
25,000x0110 -> 200不适用
37,510x02210 -> 20不适用
50,020x033010 -> 20
62,530x0440010 -> 24
75,000x0150 -> 20023
87,510x02610 -> 2022
100,020x037010 -> 221
112,530x0180 -> 20120
125,010x02910 -> 2019
137,520x0310010 -> 218
150,030x01110 -> 20117
162,510x021210 -> 2016
175,020x0313010 -> 215
187,530x01140 -> 20114
200,010x021510 -> 2013
212,520x0316010 -> 212
225,030x01170 -> 20111
237,510x021810 -> 2010
250,020x0319010 -> 29
262,530x01200 -> 2018
270,010x022110 -> 207
287,520x0322010 -> 26
300,030x01230 -> 2015
312,510x022410 -> 204
325,020x0325010 -> 23
337,530x01260 -> 2012
350,010x022710 -> 201
362,520x0328010 -> 20
375,030x04290010 -> 24
387,500x01300 -> 20023

5. 示例 4:0x2A 服务的周期性调度速率表例

1. 0x2A 服务示例概述

本分条款介绍了调度的周期性数据示例,该示例中包含了 0x2A 服务的一个表例。该示例包含一个表格,表中说明了服务器周期性调度器及其变量的可能的实现过程,以及每次执行用以校验周期性调度器的背景功能时这些变量是如何变化的。

下例中确定了以下信息:

— 较快周期性速率为 10ms。
— 每 10ms 校验一次周期性调度器,这意味着在此期间会调用(轮询)周期性调度器的背景功能。
— 可并发调度的 periodicDataldentifier(周期性数据标识符)的最大数量为16个。
— 已分配两个独特的周期性数据响应消息的地址信息 ID。

由于周期性调度器轮询速率为 10ms,因此每发送一个较快速率 periodicDataldentifier(周期性数据标识符)时,较快速率循环计数器可能会设为 1(该值基于调度速率(10ms)除以周期性调度器轮询速率(10ms))。

当 t = 0.0ms 时,客户端开始发送请求以较快周期性速率(10ms)调度2个 periodicDataldentifier(周期性数据标识符)(简单而言为 0x01 和 0x02)。在本示例中,服务器会接收该请求并在第一次 t = 10ms 时执行周期性调度器的背景功能。

下表为周期性调度器表。

时间(ms)响应消息 ID 数已发送的周期性标识符周期性调度器循环编号
1010x011
1020x021
2010x012
2020x022
3010x013
3020x023
4010x014
4020x024
5010x015
5020x025
6010x016
6020x026
7010x017
7020x027
8010x018
8020x028
9010x019
9020x029
10010x0110
10020x0210

6. 示例 5:0x2A 服务的周期性调度速率表例

1. 0x2A 服务示例概述

本分条款使用了与示例 4 中相同的假设。在本示例中,响应消息集中请求的 periodicDataldentifier(周期性数据标识符)比独特周期性数据响应消息地址信息 ID 多。

当 t = 0.0ms 时,客户端开始发送请求以较快周期性速率(10ms)调度3个 periodicDataldentifier(周期性数据标识符)(简单而言为 0x01、0x02 以及 0x03)。在本示例中,服务器会接收该请求并在第一次 t = 10ms 时执行周期性调度器的背景功能。

下表为周期性调度器表。

时间(ms)响应消息 ID 数已发送的周期性标识符周期性调度器循环编号
1010x011
1020x021
2010x032
2020x012
3010x023
3020x033
4010x014
4020x024
5010x035
5020x015
6010x026
6020x036
7010x017
7020x027
8010x038
8020x018
9010x029
9020x039
10010x0110
10020x0210
  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过标识符读取数据服务是汽车UDS诊断协议中的一种功能,通过该功能可以从汽车的电子控制单元(ECU)中读取特定的数据。其中,标识符0x22表示读取数据服务。 该命令的结构是由一个请求帧和一个响应帧组成。请求帧中包含了要读取数据标识符和数据记录编号等信息。响应帧中则包含了请求的数据。 在进行标识符读取数据服务时,首先需要确定要读取的数据的标识符标识符是通过制定的标准或者车辆制造商定义的,用于唯一标识某个特定的数据。例如,可以通过标识符来读取车速、发动机转速等信息。 一旦确定了要读取的数据的标识符,就可以构建请求帧发送给对应的ECU。ECU接收到请求后,会根据标识符来查找对应的数据,并将其封装在响应帧中返回给诊断设备。 标识符读取数据服务的深度剖析需要了解不同的车辆制造商和标准对于标识符和其对应数据的定义。在实际使用中,需要根据特定的车辆型号和诊断设备的要求来选择合适的标识符。此外,不同的ECU可能支持不同的标识符和数据,因此在使用过程中需要根据实际情况进行选择。 总之,通过标识符读取数据服务是汽车UDS诊断中的一个重要功能,它能够帮助用户获取车辆的各种数据信息,提供诊断和故障排除的参考依据。在实际应用中,需要根据具体情况选择合适的标识符来读取所需的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值