文字说明部分来源:https://blog.csdn.net/qq_40242571/article/details/120362135
ControlDTCSetting就是控制诊断故障码设置服务,简单说客户端可以利用此服务让服务端停止或恢复DTC状态位更新
控制诊断故障码设置服务就是让服务端停止或恢复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状态冻结,保持不变。
控制诊断故障码设置服务主要出现的场合:
当我们临时调整系统某些部件的状态,可能会造成服务端检测异常,导致服务端记录DTC,这时我们可以在调整之前让服务端停止DTC状态位的更新。
当某个ECU更新程序时,此ECU会在一段时间内会停止报文发送(程序被擦除了),等程序更新完成才能继续发送报文,而在停止报文发送这段时间里,与之相关的控制器就会报通信故障,这时我们在更新某个ECU程序之前,事先停止相关控制器DTC状态位的更新。

