ControlDTCSetting就是控制诊断故障码设置服务,简单说客户端可以利用此服务让服务端停止或恢复DTC状态位更新。
服务 | 描述 |
ControlDTCSetting | 客户端请求服务端停止或恢复DTC状态位的更新。 |
目录
1.英文术语
英文术语 | 翻译 |
ControlDTCSetting | 控制DTC设置 |
ControlDTCSetting Request SID | 控制DTC设置请求SID |
sub-function | 子功能 |
DTCSettingType | DTC设置类型 |
DTCSettingControlOptionRecord | DTC设置控制选项记录 |
ControlDTCSetting Response SID | 控制DTC设置响应SID |
2.缩写表
缩写 | 翻译 |
DTC | 诊断故障码 |
SID | 服务标识符 |
Cvt | 约定值 M 强制的 C 有条件的 U 用户选项 |
NRC | 否定响应码 |
3.服务描述
控制诊断故障码设置服务就是让服务端停止或恢复DTC状态位更新。当我们用读取DTC信息(0x19)服务的特定子功能去读取DTC信息,这时候在该服务的肯定响应在DTC参数状态中会记录所有DTC状态位,我们可以看到这些DTC信息相较于上次读取是被冻结了或还在记录。
控制诊断故障码设置服务重点知识:
- 该服务可设置支持功能寻址,可控制单个服务端或多个服务端的DTC状态位更新。
- 该服务是改变ECU功能的服务,要设置在非默认会话模式下执行,当ECU重新回到默认会话模式时,该服务功能就会恢复到默认,即恢复DTC状态位更新。
- 如果之前已经让服务端停止DTC状态位更新,而且并没有重新恢复更新,此时客户端再去请求停止,服务端仍应发送肯定响应;如果之前已经让服务端恢复DTC状态位更新或者没进行服务请求,此时客户端再去请求开启,服务端仍应发送肯定响应。
- 如果客户端发送清除诊断信息(0x14)服务,此优先级比停止更新要高,则控制DTC设置不应禁止重置服务端的DTC状态位,所以可以重置DTC状态位。
- 在停止DTC状态位更新之后,恢复DTC状态位更新的方式有:
1、在非默认会话模式下超时,重新回到默认模式下;
2、ECU复位,如:进行实际复位操作或者请求ECU复位服务;
3、使用控制DTC设置服务重新恢复DTC状态位更新。
服务白话解读:正常情况下,服务端的故障检测功能模块会根据故障检测结果实时更新每个DTC的状态(记录在对应的DTC状态位中) 。而我们此服务就可以用来停止DTC状态位更新,简单来说就是停止故障检测功能,不再继续记录DTC状态,原来记录的DTC状态冻结,保持不变。
4.请求消息定义
请求消息定义 | ||||
A_Data字节 | 参数名称 | Cvt | 字节值 | 助记符 |
#1 | 控制DTC设置请求SID | M | 0x85 | CDTCS |
#2 | 子功能=[DTC设置类型] | M | 0x00-0xFF | LEV_DTCSTP_ |
#3 : #3+(m-1) |
DTC设置控制选项记录[] = [ 参数#1 : 参数#m] |
U : U |
0x00-0xFF : 0x00-0xFF |
DTCSCOR_ PARA1 : PARAm |
4.1.请求消息子功能定义
该服务使用子功能参数选择,也就是DTC设置类型(此字节的bit7表示抑制肯定响应位,下表并没有介绍此位)。
请求消息子功能定义 | |||
位6-0 | 描述 | Cvt | 助记符 |
0x00 | ISOSAEReserved 该值为本文件为未来定义预留。 |
M | ISOSAERESRVD |
0x01 | 恢复 根据正常的操作条件,服务端应恢复诊断故障码状态位的更新。 |
M | ON |
0x02 | 停止 服务端应停止诊断故障码状态位的更新。 |
M | OFF |
0x03-0x3F | ISOSAEReserved 此值范围为本文件为未来定义预留。 |
M | ISOSAERESRVD |
0x40-0x5F | 车辆制造商特定 此值范围保留供车辆制造商特定使用。 |
U | VMS |
0x60-0x7E | 系统供应商特定 此值范围保留供系统供应商特定使用。 |
U | SSS |
0x7F | ISOSAEReserved 该值为本文件为未来定义预留。 |
M | ISOSAERESRVD |
4.2.请求消息数据参数定义
请求消息数据参数定义 |
定义 |
DTC设置控制选项记录 当控制DTC状态位的更新时(目前定义的子功能关于控制DTC状态位的更新有恢复(0x01)和停止(0x02)两个子功能),该参数记录才被选择使用,也可以不使用。 此参数记录通常是不用的。 注:当控制DTC状态位更新时,如果不使用参数记录,那么我们控制的就是所有DTC状态位的更新; 当控制DTC状态位更新时,如果使用参数记录,这个记录我们可以自行定义,只要有道理有实用价值都可以 的,譬如:控制某个DTC状态位的更新、限制更新次数啥的等等。 |
5.肯定响应消息定义
肯定响应消息定义 | ||||
A_Data字节 | 参数名称 | Cvt | 字节值 | 助记符 |
#1 | 控制DTC设置请求SID | M | 0xC5 | CDTCSPR |
#2 | 子功能=[DTC设置类型] | M | 0x00 - 0x7F | DTCSTP |
5.1.肯定响应消息数据参数定义
肯定响应消息数据参数定义 |
定义 |
DTC设置类型 此参数与请求消息的子功能参数的位6~0相同。 |
6.否定响应消息定义
否定响应消息定义 | ||||
A_Data字节 | 参数名称 | 字节值 | Cvt | 助记符 |
#1 | 否定响应SID | 0x7F | M | SIDNR |
#2 | 控制DTC设置请求SID | 0x85 | M | SIDRQ |
#3 | 否定响应码 | 0xXX | M | NRC_ |
6.1.否定响应码
此服务支持的否定响应码 | ||
否定响应码 | 描述 | 助记符 |
0x12 | 子功能不支持 如果不支持子功能参数,则应发送此否定响应码。 |
SFNS |
0x13 | 消息长度错误或格式无效 如果消息的长度错误,则应发送此否定响应码。 |
IMLOIF |
0x22 | 条件错误 如果未满足控制DTC设置请求的条件,因此无法执行DTC设置,则应发送此否定响应码。 |
CNC |
0x31 | 请求超出范围 如果服务端检测到DTC设置控制选项记录(自己定义的格式)中有错误,则应使用此响应码。 |
ROOR |
7.服务使用示例
7.1.示例#1-控制DTC设置(DTC设置类型=停止)
7.1.1.步骤1:控制DTC设置请求
该示例不使用DTC设置控制选项记录参数,客户端通过将抑制肯定响应位设置为假(即“0”),以请求有机会得到肯定响应消息。
控制DTC设置请求消息 | ||||
消息方向 |
客户端→服务端 |
|||
消息类型 |
请求 |
|||
A_Data字节 |
描述(所以值为16进制) |
字节值 |
助记符 |
|
#1 |
控制DTC设置请求SID |
0x85 |
RDTCS |
|
#2 |
子功能 = 停止 抑制肯定响应位 = 假 |
0x02 |
DTCSTP_OFF |
控制DTC设置响应消息 | ||||
消息方向 |
服务端→客户端 |
|||
消息类型 |
响应 |
|||
A_Data字节 |
描述(所以值为16进制) |
字节值 |
助记符 |
|
#1 |
控制DTC设置响应SID |
0xC5 |
RDTCSPR |
|
#2 |
子功能 = 停止 |
0x02 |
DTCSTP_OFF |
7.1.2.操作汇总
步骤1:控制DTC设置请求-停止
图解:
操作 | CAN报文 | 实体 | |||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ||
控制DTC设置请求 | 0x02 | 0x85 | 0x02 | 客户端 | |||||
肯定响应 | 0x02 | 0xC5 | 0x02 | 服务端 |
7.2.示例#2-控制DTC设置(DTC设置类型=恢复)
7.2.1.步骤1:控制DTC设置请求
该示例不使用DTC设置控制选项记录参数,客户端通过将抑制肯定响应位设置为假(即“0”),以请求有机会得到肯定响应消息。
控制DTC设置请求消息 | ||||
消息方向 |
客户端→服务端 |
|||
消息类型 |
请求 |
|||
A_Data字节 |
描述(所以值为16进制) |
字节值 |
助记符 |
|
#1 |
控制DTC设置请求SID |
0x85 |
RDTCS |
|
#2 |
子功能 = 恢复 抑制肯定响应位 = 假 |
0x01 |
DTCSTP_ON |
控制DTC设置响应消息 | ||||
消息方向 |
服务端→客户端 |
|||
消息类型 |
响应 |
|||
A_Data字节 |
描述(所以值为16进制) |
字节值 |
助记符 |
|
#1 |
控制DTC设置响应SID |
0xC5 |
RDTCSPR |
|
#2 |
子功能 = 恢复 |
0x01 |
DTCSTP_ON |
7.2.2.操作汇总
步骤1:控制DTC设置请求-恢复
图解:
操作 | CAN报文 | 实体 | |||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ||
控制DTC设置请求 | 0x02 | 0x85 | 0x01 | 客户端 | |||||
肯定响应 | 0x02 | 0xC5 | 0x01 | 服务端 |
到这里我们的0x85服务基本学完了。
以上解释有没有解决大家的疑惑,如果还是觉得有疑惑的地方,欢迎大家踊跃提出,一起分享,共同进步!!!
有CSDN号的也可以帮忙点个关注,我会陆续更新其它UDS服务。