Loading

本篇文章主要介绍在ISO 14229-1标准中定义的UDS服务——$85 ControlDTCSetting,其为Tester提供了控制目标ECU恢复/停止DTC记录的能力。

1 服务介绍

$85服务用于让ECU停止或恢复对DTC状态位的更新。当用$19 ReadDTCInformation服务的特定子功能读取ECU的DTC信息时,DTC状态位被记录于该服务的肯定响应的statusOfDTC参数中。

在正常情况下,ECU的故障检测功能模块会根据故障检测结果实时更新每个DTC的状态(记录在对应的DTC状态位中),而$85服务则可用来停止或恢复DTC状态位更新。

关键点

  1. 该服务支持功能寻址,可控制单个ECU或多个ECU的DTC状态位更新。
  2. 当ECU接受了子功能DTCSettingType = off的$85服务诊断请求时,ECU应暂停对DTC状态位的任何更新,即冻结DTC状态位。
  3. 该服务需要在非默认诊断会话下执行,若ECU因诊断会话超时或reset等原因重新回到了默认诊断会话,则该服务的功能也会恢复到默认值,即恢复对DTC状态位更新。
  4. 若client对ECU发送$85服务的停止DTC状态位更新的诊断请求时,ECU已处于停止DTC状态位更新状态,则其应回复肯定响应; 若client对ECU发送$85服务的恢复DTC状态位更新的诊断请求时,ECU已处于恢复DTC状态位更新状态,则其应回复肯定响应。
  5. 当ECU收到了$14 ClearDiagnosticInformation服务请求后,即使其处于停止DTC状态位更新状态,也需要重置ECU的DTC状态位。
  6. 当通过$85服务控制ECU停止DTC状态位更新时,ECU的故障检测功能模块应正常工作,其仅不在继续更新DTC状态。

该服务通常和$28 CommunicationControl服务一起使用。例如,在进行ECU刷写之前,为了获得更快的数据传输速度,可以用$28服务把该ECU的所有通信关闭,但此时因收不到相关报文,ECU和其对手件ECU会没必要地存储很多DTC,这时就可以使用$85服务停止ECU对DTC状态位更新,刷写完成之后再重新恢复ECU对DTC状态位更新即可。

2 服务数据格式

2.1 请求数据格式

以下是$85服务的请求数据格式:

字节序参数字节值说明
#Byte1ControlDTCSetting SID0x85必选
#Byte2sub-function = [DTCSettingType]0x00 – 0xFF必选
#Byte3 – #ByteNDTCSettingControlOptionRecord[] = [parameter#1 : parameter#n]0x00 – 0xFF可选

2.1.1 DTCSettingType

DTCSettingType是$85服务的sub-function参数,用于指示ECU应停止或恢复对DTC状态位的更新,其具体定义如下表所示:

DTCSettingTypeDescription
0x00ISOSAEReserved
0x01on
此参数用于指示ECU恢复对DTC状态位的更新
0x02off
此参数用于指示ECU停止对DTC状态位的更新
0x03 – 0x3FISOSAEReserved
0x40 – 0x5F车辆制造商规定
0x60 – 0x7E系统供应商规定
0x7FISOSAEReserved

2.1.2 DTCSettingControlOptionRecord

该record是用户可选的,当控制DTC状态位更新停止或恢复时,用于将数据传递给ECU,该数据可以指示要停止或恢复的DTC列表等其他有关信息。

2.2 肯定响应数据格式

以下是$85服务的肯定响应数据格式:

字节序参数字节值说明
#Byte1ControlDTCSetting SID + 0x400xC5必选
#Byte2sub-function = [DTCSettingType]0x00 – 0x7F必选

2.2.1 DTCSettingType

DTCSettingType是对应$85服务请求报文中的DTCSettingType参数回显。

2.3 否定响应数据格式

以下是$85服务的否定响应数据格式:

字节序参数字节值说明
#Byte1Negative Response SID0x7F必选
#Byte2ControlDTCSetting SID0x85必选
#Byte3NRCsupportedNRC必选

supportedNRC的可选值如下表所示:

supportedNRCNRC define描述
0x12sub-functionNotSupportedECU不支持该诊断请求服务的子功能
0x13incorrectMessageLengthOrInvalidFormat诊断请求指令的长度或格式不对
0x22conditionsNotCorrect执行诊断的条件不满足
0x31requestOutOfRange诊断请求参数超出范围或DID/RID不支持

3 服务通信示例

3.1 停止DTC状态位更新

本例展示了Tester如何通过$85服务停止ECU对DTC状态位的更新,其中,存在以下条件:

sub-function bit7: SPR = 0

3.1.1 请求报文

字节序参数字节值
#Byte1ControlDTCSetting SID0x85
#Byte2sub-function = [DTCSettingType = off]0x02

3.1.2 肯定响应报文

字节序参数字节值
#Byte1ControlDTCSetting SID + 0x400xC5
#Byte2sub-function = [DTCSettingType = off]0x02

3.2 恢复DTC状态位更新

本例展示了Tester如何通过$85服务恢复ECU对DTC状态位的更新,其中,存在以下条件:

sub-function bit7: SPR = 0

3.2.1 请求报文

字节序参数字节值
#Byte1ControlDTCSetting SID0x85
#Byte2sub-function = [DTCSettingType = on]0x01

3.2.2 肯定响应报文

字节序参数字节值
#Byte1ControlDTCSetting SID + 0x400xC5
#Byte2sub-function = [DTCSettingType = on]0x01

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

👤本站访客数: 👁️本站访问量: