UDS 诊断 - InputOutputControlByIdentifier(按标识符的输入输出控制)(0x2F)服务

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

本文章可能会涉及到的文章
UDS诊断 - 数据标识符代码 DID 参数的定义


一、服务说明

客户端使用 InputOutputControlByIdentifier(按标识符的输入输出控制)服务代替输入信号值,以及电子系统输出(执行机构)的内部服务器功能和/或力控制值。总之,该服务用于相对简单的(如静态)输入替换/输出控制,但若必须使用较为复杂的输入替换/输出控制时,则使用 routineControl(例程控制)。

客户端请求消息包括服务器引用输入信号、内部服务器功能和/或输出信号(执行机构)的 dataIdentifier(访问设备控制时可能引用一组信号)。controlOptionRecord(控制选项记录)参数须包括服务器输入信号、内部功能和/或输出信号的所有信息。若控制的 dataIdentifier 引用了多个参数(即打包或位映射数据标识符),则车辆制造商可要求请求消息中包含 controlEnableMask(控制启用掩码)。若车辆制造商选择支持 EnableMask(启用掩码)概念,则该服务的所有类型 InputOutputControlByIdentifier(按标识符的输入输出控制)请求必须有 controlEnableMask(控制启用掩码)参数。若对引用输出测量值或反馈值的 dataIdentifier 请求 InputOutputControlByIdentifier(按标识符的输入输出控制),则服务器须负责在服务器控制策略内替换正确的目标值,以使从客户端请求消息的正常服务器控制策略能够尝试达到所需状态。

若请求控制成功启动或已达到所需状态,则服务器须发送肯定响应消息。即使 dataldentifier 当前不受测试仪的控制,服务器也须向 returnControIToECU(将控制权返还给 ECU)的 inputOutputControlParameter(输入输出控制参数)的请求消息发送肯定响应消息。此外,服务器在接收到 retumControIToECU(将控制权返还给ECU)请求时,务必将客户端的所有 controlMask(控制掩码)(若支持)位设置为 ‘1’,以便打包或位映射的 dataldentifier会完全返回至 ECU。符合请求消息 controlOptionRecord(控制选项记录)参数的 inputOutputControlParameter(输入输出控制参数)的 controlState(控制状态)字节的格式和长度,须完全匹配正在被请求的 dataldentifier 的 dataRecord 的长度和格式。此种方式须确保用带相同 DID 的 ReadDatabyldentifier(按标识符读取数据)能够获取实际输出或输入状态。

使用 InputOutputContolByldentifier(按标识符的输入输出控制)服务执行输入替换或输出控制时,ECU 在接收到请求时会有两个基本要求。第一个是从所有的上流控制策略上断开 dataldentifier 内参数引用的对应数据对象,否则将更新数据对象值。第二个是替换控制策略所有下流活动所使用的对应数据对象值。例如,直接强制点亮前大灯的测试仪请求会需要防止前大灯开关位置受前大灯输出的影响,并将所需的 “点亮” 状态替换为最终决定前大灯状态所需输出的功能所使用的数据对象。

该服务允许控制单个 dataldentifier 及其单个请求消息的相应参数。这样的话,服务器会响应包括请求消息数据标识符以及控制状态信息在内的单个响应消息。

二、请求消息

1. 请求消息定义

字节参数名称字节值Cvt
#1 InputOutputControlByIdentifier(按标识符的输入输出控制)请求SID0x2FM

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

0x00 - 0xFF
0x00 - 0xFF

M
M

#4
..
#4+(m-1)
controlOptionRecord[] = [
inputOutputControlParameter
controlState#1
..
controlState#m ]

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

M1
C1
..
C1

#4+m
..
#4+m+(r-1)
controlEnableMaskRecord[] = [
controlMask#1
..
controlMask#r ]

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

C2
..
C2

C1:是否使用该参数取决于 dataIdentifier 和 inputOutputControlParameter(输入输出控制参数)
C2:若车辆制造商支持 controlEnableMask(控制启用掩码)概念,则 dataIdentifier 由多个参数组成时须包括该参数。

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

定义
dataIdentifier(数据标识符)
该参数定义了服务器本地输入信号、内部参数和/或输出信号。
controlOptionRecord(控制选项记录)
由一个或多个字节(inputOutputControlParameter 和 controlState#1 至 controlState#m)组成。
controlEnableMaskRecord(控制启用掩码记录)
由一个或多个字节(controlMask#1 至 controlMask#r)组成。仅在需控制的 dataIdentifier 由多个参数(即对数据标识符定义了位映射或打包)组成时支持 controlEnableMaskRecord。与 dataIdentifier 内定义的各个参数相对应的 controlEnableMaskRecord 中须有一位。需控制的 dataIdentifier 仅由单个参数组成时,不得支持 controlEnableMaskRecord。
注:dataIdentifier 的各参数可以是任何数目的位。
controlEnableMaskRecord 内各位的数值须确定 dataIdentifier 的对应参数是否请求的影响。controlEnableMaskRecord 的 ‘0’ 位值须表示相应参数不受该请求的影响,‘1’ 位值须表示相应参数受该请求的影响。controlMask#1 最高有效位须与 controlState#1 最高有效位 controlState 首个参数相对应,controlMask#1 的次高有效位须与 controlState 的第二个参数相对应,以此方式继续对所有参数采用所必须的多个 controlMask(控制掩码)字节。
例如,controlMask#2 最低有效位会与 controlState 的第 16 个参数相对应。对于位映射的数据标识符,不支持的位也须在 controlEnableMaskRecord 中有对应的位,以便 controlEnableMaskRecord 各参数的掩码位的位置与 controlState 对应参数的位置能够完全匹配。

三、肯定响应消息

1. 肯定响应消息定义

字节参数名称字节值Cvt
#1 InputOutputControlByIdentifier(按标识符的输入输出控制)响应SID0x6FM

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

0x00 - 0xFF
0x00 - 0xFF

M
M

#4
#5
..
#5+(m-1)
controlStatusRecord[] = [
inputOutputControlParameter
controlState#1
..
controlState#m ]

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

M
C1
..
C1

C1:是否使用该参数取决于 dataIdentifier 和 inputOutputControlParameter(输入输出控制参数)。

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

定义
dataIdentifier(数据标识符)
该参数是请求消息的 dataIdentifier 的回显。
controlStatusRecord(控制状态记录)
由多个字节(inputOutputControlParameter 和 controlState#1 至 controlState#m)组成,包括反馈数据等。

四、inputOutputControlParameter(输入输出控制参数)定义

字节值说明
0x00returnControlToECU(将控制权返还给 ECU)
该值向服务器表明客户端不再控制 dataIdentifier 引用的输入信号、内部参数和/或输出信号。
请求的 controlState 字节的详细信息:0 字节
肯定响应的 controlState 字节的详细信息:等于 dataIdentifier 的 dataRecord 的大小和格式。
0x01resetToDefault(重置为默认状态)
该值向服务器表明需要将 dataIdentifier 引用的输入信号、内部参数和/或输出信号重置为默认状态。
请求的 controlState 字节的详细信息:0 字节
肯定响应的 controlState 字节的详细信息:等于 dataIdentifier 的 dataRecord 的大小和格式。
0x02freezeCurrentState(冻结当前状态)
该值向服务器表明需要冻结 dataIdentifier 引用的输入信号、内部参数和/或输出信号的当前状态。
请求的 controlState 字节的详细信息:0 字节
肯定响应的 controlState 字节的详细信息:等于 dataIdentifier 的 dataRecord 的大小和格式。
0x03shortTermAdjustment(短期调整)
该值向服务器表明需要将RAM 中 dataIdentifier 引用的输入信号、内部参数和/或受控输出信号调整为 controlOption 参数中的值(例如,将怠速空气控制阀设置为特定步骤编号,将脉冲宽度值设置为特定值/占空比)。
请求的 controlState 字节的详细信息:等于 dataIdentifier 的 dataRecord 的大小和格式
肯定响应的 controlState 字节的详细信息:等于 dataIdentifier 的 dataRecord 的大小和格式。
0x04保留
Column 1Column 2
centered 文本居中right-aligned 文本居右

五、支持的NRC

NRC说明
0x13消息长度不正确或格式无效
0x22条件不正确
若不符合请求 inputOutputControl 的要求,则返回该 NRC。
0x31请求超过限值
下述情况下,应发送此 NRC:
- 装置不支持请求的 dataIdentifier 值;
- InputOutputControlByIdentifier(按标识符的输入输出控制)所含的数值失效;
controlOptionRecord 的一个或多个适用 controlState 数值失效;
装置不支持 controlEnableMaskRecord 的各启用控制的位组合。
0x33安全访问被拒绝
若客户端发送带有效、安全的 dataIdentifier 的请求且服务器安全功能当前是激活的,则须返回 NRC。

下图为 0x2F 服务 NRC 的处理。
0x2F 服务 NRC 的处理

图例
1. 至少 4(SI + DID + IOCP)
2. 若 IOCP = shortTermAdjustment,则 1 字节 SI + 2 字节 DID + 1 字节 IOCP + 第 n 个字节 controlState + 第 n 个字节 controlMask(若适用)
2. 若 IOCP <> shortTermAdjustment,则 1 字节 SI + 2 字节 DID + 1 字节 IOCP + 第 n 个字节 controlMask(若适用)。

六、示例

1. 假设

下述示例说明了如何与 HVAC 控制模块一起使用 inputOutputControlByIdentifier(按标识符的输入输出控制),并假定在单个服务器内执行物理通信。

2. 示例 1 - “进气门位置” shortTermAdjustment(短期调整)

正受控制的参数是与 dataIdentifier(0x9B00)相关的 “进气门位置”。换算:Air Inlet Door Position(进气门位置)[%] = 十进制(十六进制)* 1 [%]

step1:使用 ReadDataByIdentifier(按标识符读取数据)服务读取进气门位置的当前状态

req   22 9B 00
resp  62 9B 00 0A

step2:shortTermAdjustment(短期调整)

req   2F 9B 00 03 
	 3C - controlOptionRecord[controlState#1] = 60%
resp  6F 9B 00 03 3C

注:按上述规定,客户端已发送一条 InputOutputControlByIdentifier(按标识符的输入输出控制)请求消息。服务器已立即发送肯定响应消息,包括数值为 12% 的 controlState 参数 “进气门位置”。进气门需要一定的时间达到 60% 的请求值。

step3:使用 ReadDataByIdentifier(按标识符读取数据)服务读取进气门位置的当前状态

req   22 9B 00
resp  62 9B 00 3C

注:按上述规定,客户端在启用 InputOutputControlByIdentifier(按标识符的输入输出控制)时已发送一条 readDataByIdentifier 请求消息。服务器控制策略需要有限的时间最终达到所需的值。上述示例出现在服务器最终达到所需的目标值时。

step4:returnControlToECU(将控制权返还给 ECU)

req   2F 9B 00 00
resp  6F 9B 00 00 3A

step5:freezeCurrentState(冻结当前状态)

req   2F 9B 00 02
resp  6F 9B 00 02 3A

3. 示例 2 - EGR 和 IAC shortTermAdjustment(短期调整)

1)假定

本示例使用了打包的 dataIdentifier 0x0155 说明单个请求内的各个参数或多个参数。

本节规定了 shortTermAdjustment(短期调整)功能的测试条件和示例 dataIdentifier 0x0155 的相关消息流。

dataIdentifier 支持下表内的五个参数。

DID数据字节参数数据记录内容
数量大小
0x0155#1(所有位)#18 个位dataRecord[ data#1 ] = IAC Pintle Position(n = 次数)
#2 - #3(所有位)#216 个位dataRecord[ data#2 - #3 ] = RPM(0 = 0 U/min,65 535 = 65 535 U/min
#4(第 7 位至 4 位)#34 个位dataRecord[ data#4(bits 7-4) ] = Pedal Position A:Linear Scaling,0 = 0%,15 = 120%
#4(第 3 位至 0 位)#44 个位dataRecord[ data#4(bits 3-0) ] = Pedal Position B:Linear Scaling,0 = 0%,15 = 120%
#5(所有位)#58 个位dataRecord[ data#5 ] = EGR Duty Cycle:Linear Scaling,0 次 = 0%,255 次 = 100%

dataIdentifier 0x0155 由定义打包,并由五个基本参数组成。为实现单独控制,通过 ControlEnableMaskRecord(控制启用掩码记录)内的单一位选用这些各个基本参数。若指定的 dataIdentifier 有除了打包或位映射以外的定义,则请求消息中没有 ControlEnableMaskRecord。ControlMask#1 最高有效位务必与 ControlState#1 最高有效位 dataIdentifier 首个参数相对应。

dataIdentifier 0x0155 的 ControlEnableMaskRecord
总大小 = 1 字节(仅由 ControlEnableMask#1 组成)
位的位置ControlEnableMask#1 - 位含义(1 = 受影响,0 = 不受影响)
7(最高有效位)确定参数 1(IAC 枢纽位置)是否受请求的影响
6确定参数 2(RPM)是否受请求的影响
5确定参数 3(踏板位置 A)是否受请求的影响
4确定参数 4(踏板位置 B)是否受请求的影响
3确定参数 5(EGR 工作周期)是否受请求的影响
2未因响应参数产生影响
1未因响应参数产生影响
0(最低有效位)未因响应参数产生影响

2)案例 1:仅控制 IAC 枢纽位置

req  2F 01 55  03 
	 07 - controlOptionRecord[ controlState#1 ] = IAC 枢纽位置(7 次)
	 XX - controlOptionRecord[ controlState#2 ] = RPM(XX)
	 XX - controlOptionRecord[ controlState#3 ] = RPM(XX)
	 YZ - controlOptionRecord[ controlState#4 ] = 踏板位置 A(Y)和 B(Z)
	 XX - controlOptionRecord[ controlState#5 ] = EGR 工作周期(XX)
	 80 - controlEnableMask[ controlMask#1 ]  = 仅控制 IAC 枢轴位置
// 注:controlState#2 - #5 中的 RPM 值、踏板位置 A、B 和 EGR 工作周期均是各不相关的,因为 controlMask#1 参数规定了仅 dataIdentifier 的首个参数会受请求的影响。

resp 6F 01 55 03 
	 07 - controlOptionRecord[ controlState#1 ] = IAC 枢纽位置(7 次) 
	 02 - controlOptionRecord[ controlState#2 ] = RPM(750 U/min) 
	 EE - controlOptionRecord[ controlState#3 ] = RPM 
	 12 - controlOptionRecord[ controlState#4 ] = 踏板位置 A(8%)和 B(16%) 
	 59 - controlOptionRecord[ controlState#5 ] = EGR 工作周期(35%)
// 注:controlState#1 - controlState#5 中的做优参数传输值须反映系统当前状态。

3)案例 2:仅控制 RPM

req  2F 01 55 03
	 XX - controlOptionRecord[ controlState#1 ] = IAC 枢纽位置(XX 次)
	 03 - controlOptionRecord[ controlState#2 ] = RPM(0x03E8 = 1000 U/min)
	 E8 - controlOptionRecord[ controlState#3 ] = RPM
	 YZ - controlOptionRecord[ controlState#4 ] = 踏板位置 A(Y)和 B(Z)
	 XX - controlOptionRecord[ controlState#5 ] = EGR 工作周期(XX)
	 40 - controlEnableMask[ controlMask#1 ] = 仅控制 RPM
// 注:controlState#1 和 controlState#4 - #5 中的 IAC 枢轴位置、踏板位置 A、B 和 EGR 工作周期均是各不相关的,因为 controlMask#1 参数规定了仅 dataIdentifier 的第二个参数会受请求的影响。

resp 6F 01 55 03 
	 09 - controlOptionRecord[ controlState#1 ] = IAC 枢纽位置(9 次) 
	 03 - controlOptionRecord[ controlState#2 ] = RPM(950 U/min) 
	 B6 - controlOptionRecord[ controlState#3 ] = RPM 
	 12 - controlOptionRecord[ controlState#4 ] = 踏板位置 A(8%)和 B(16%) 
	 59 - controlOptionRecord[ controlState#5 ] = EGR 工作周期(35%)
// 注:controlState#1 - controlState#5 中的做优参数传输值须反映系统当前状态。

4)案例 3:控制踏板位置 A 和 EGR 工作周期

req  2F 01 55 03
	 XX - controlOptionRecord[ controlState#1 ] = IAC 枢纽位置(XX 次)
	 XX - controlOptionRecord[ controlState#2 ] = RPM(XX)
	 XX - controlOptionRecord[ controlState#3 ] = RPM(XX)
	 3Z - controlOptionRecord[ controlState#4 ] = 踏板位置 A(0x3 = 24%)和 B(Z)
	 72 - controlOptionRecord[ controlState#5 ] = EGR 工作周期(45%)
	 28 - controlEnableMask[ controlMask#1 ] = 控制踏板位置 A 和 EGR 工作周期
// 注:controlState#1 - #3 和 controlState#4(第 3 位至 0 位) 中的 IAC 枢轴位置、RPM 和踏板位置 B 的传输值均是各不相关的,因为 controlMask#1 参数规定了仅 dataIdentifier 的第三个和第五个参数会受请求的影响。

resp 6F 01 55 03 
	 07 - controlOptionRecord[ controlState#1 ] = IAC 枢纽位置(7 次) 
	 03 - controlOptionRecord[ controlState#2 ] = RPM(850 U/min) 
	 52 - controlOptionRecord[ controlState#3 ] = RPM 
	 32 - controlOptionRecord[ controlState#4 ] = 踏板位置 A(24%)和 B(16%) 
	 69 - controlOptionRecord[ controlState#5 ] = EGR 工作周期(41%)
// 注:controlState#1 - controlState#5 中的做优参数传输值须反映系统当前状态。

5)案例 4:将参数的控制权返还给 ECU

req  2F 01 55 00
	 FF - controlEnableMask[ controlMask#1 ] = 所有基本参数
resp 6F 01 55 00
	 09 - controlOptionRecord[ controlState#1 ] = IAC 枢纽位置(9 次) 
	 03 - controlOptionRecord[ controlState#2 ] = RPM(850 U/min) 
	 52 - controlOptionRecord[ controlState#3 ] = RPM 
	 12 - controlOptionRecord[ controlState#4 ] = 踏板位置 A(8%)和 B(16%) 
	 59 - controlOptionRecord[ controlState#5 ] = EGR 工作周期(35%)
// 注:controlState#1 - controlState#5 中的做优参数传输值须反映系统当前状态。
通过标识符读取数据服务是汽车UDS诊断协议中的一种功能,通过该功能可以从汽车的电子控制单元(ECU)中读取特定的数据。其中,标识符0x22表示读取数据服务。 该命令的结构是由一个请求帧和一个响应帧组成。请求帧中包含了要读取数据的标识符和数据记录编号等信息。响应帧中则包含了请求的数据。 在进行标识符读取数据服务时,首先需要确定要读取的数据的标识符标识符是通过制定的标准或者车辆制造商定义的,用于唯一标识某个特定的数据。例如,可以通过标识符来读取车速、发动机转速等信息。 一旦确定了要读取的数据的标识符,就可以构建请求帧发送给对应的ECU。ECU接收到请求后,会根据标识符来查找对应的数据,并将其封装在响应帧中返回给诊断设备。 标识符读取数据服务的深度剖析需要了解不同的车辆制造商和标准对于标识符和其对应数据的定义。在实际使用中,需要根据特定的车辆型号和诊断设备的要求来选择合适的标识符。此外,不同的ECU可能支持不同的标识符和数据,因此在使用过程中需要根据实际情况进行选择。 总之,通过标识符读取数据服务是汽车UDS诊断中的一个重要功能,它能够帮助用户获取车辆的各种数据信息,提供诊断和故障排除的参考依据。在实际应用中,需要根据具体情况选择合适的标识符来读取所需的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值