汽车控制器(ECU)中DTC的状态位

汽车ECU网络诊断技术

汽车控制器(ECU)中DTC的状态位:原文配图 1

交流汽车ECU技术,包括网络、诊断、软件等。目的在于,在普及基础知识的同时,为…

从汽车ECU中读取储存的DTC(故障码)时,除了故障码本身,还可以读出很多其他的信息,包括优先级、发生次数计数器、发生时的里程和时间,以及本文中所讲的状态位(DTC status )。

这个状态位包含1个byte,这里面的8个bit都有各自的含义,但是这8个 bit不一定都要使用,各个主机厂可以根据自己的需求使用其中的几个,当然也可以全部使用。下图是UDS对DTC status这8个bit的定义。

汽车控制器(ECU)中DTC的状态位:原文配图 2

DTC status中8个状态bit的定义

testFailed

通常来说,ECU内部以循环的方式不断地针对预先定义好的错误路径进行测试,如果在最近的一次测试中,在某个错误路径中发现了故障,则相应DTC的这一个状态位就要被置1,表征出错。此时DTC的testFailed位被置1,但是它不一定被ECU存储到non-volatile memory中,只有当pendingDTC或confirmedDTC被置1时DTC才会被存储。而pendingDTC或confirmedDTC被置1的条件应该是检测到错误出现的次数或时间满足某个预定义的门限。当错误消失或者诊断仪执行了清除DTC指令时,testFailed会再次被置为0。

testFailedThisOperationCycle

这个bit用于标识某个DTC在当前的operation cycle中是否出现过testFailed置1的情况,即是否出现过错误。operation cycle的起始点是ECU通过网络管理唤醒到ECU通过网络管理进入睡眠,对于没有网络管理的ECU,这个起始点就是KL15通断。通过bit 0我们无法判断某个DTC是否出现过,比如,当前testFailed = 0, 说明当前这个DTC没有出错,如果testFailedThisOperationCycle = 1的话,就说明这个DTC在当前这个operation cycle中出过错,但是当前错误又消失了。

pendingDTC

根据规范的解释,pendingDTC = 1表示某个DTC在当前或者上一个operation cycle中是否出现过。pendingDTC位其实是位于testFailed和confirmedDTC之间的一个状态,有的DTC被确认的判定条件比较严苛,需要在多个operation cycle中出现才可以被判定为confirmed的状态,此时就需要借助于pendingDTC位了。pendingDTC= 1的时候,DTC就要被存储下来了,如果接下来的两个operation cycle中这个DTC都还存在,那么confirmedDTC就要置1了。如果当前operation cycle中,故障发生 , pendingDTC = 1 , 但 是 在 下 一 个 operation cycle 中 , 故 障 没 有 了 ,pendingDTC 仍然为 1,再下一个operation cycle中,故障仍然不存在,那么pendingDTC 就可以置0了。

confirmedDTC

当 confirmedDTC = 1 时 , 则 说 明 某 个 DTC 已 经 被 存 储 到 ECU 的 non-volatile memory 中 , 说 明 这 个 DTC 曾 经 满 足 了 被 confirmed 的 条 件 。 但 是 请 注 意 ,confirmedDTC = 1时,并不意味着当前这个DTC仍然出错,如果confirmedDTC =1 , 但 testFailed = 0 , 则 说 明 这 个 DTC 表 示 的 故 障 目 前 已 经 消 失 了 。 将confirmedDTC 重新置0的方法只有删除DTC,UDS用0x14服务,OBD用0x04服务。

testNotCompletedSinceLastClear

这个bit用于标识,自从上次调用了清理DTC的服务(UDS用0x14服务,OBD用0x04服务)之后,是否成功地执行了对某个DTC的测试(不管测试结果是什么,只关心是否测了)。因为很多DTC的测试也是需要满足某些边界条件的,并不是ECU上电就一定会对DTC进行检测。

testNotCompletedSinceLastClear = 1 : 自从清理DTC之后还没有完成过针对该DTC的测试。

testNotCompletedSinceLastClear = 0 : 自从清理DTC之后已经完成过针对该DTC的测试。

testFailedSinceLastClear

这个位与bit 1 :testFailedThisOperationCycle有些类似,后者标识某个DTC在当前的 operation cycle 中 是 否 出 现 过 testFailed 置 1 的 情 况 , 而testFailedSinceLastClear标识的是在上次执行过清理DTC之后某个DTC是否出过错。

testFailedSinceLastClear = 0 , 自从清理DTC之后该DTC没有出过错。

testFailedSinceLastClear = 1, 自从清理DTC之后该DTC出过至少一次错。

testNotCompletedThisOperationCycle

这个位与bit 4 : testNotCompletedSinceLastClear类似,后者标识自从上次调用了 清 理 DTC 的 服 务 之 后 , 是 否 成 功 地 执 行 了 对 某 个 DTC 的 测 试 。 而testNotCompletedThisOperationCycle则标识在当前operation cycle中是否成功地执行了对某个DTC的测试。testNotCompletedThisOperationCycle = 1 :在当前operation cycle中还没在完成过针对该DTC的测试。

testNotCompletedThisOperationCycle = 0 : 在当前operation cycle中已经完成过针对该DTC的测试。

warningIndicatorRequested

某些比较严重的DTC会与用户可见的警告指示相关联,比如仪表上的报警灯,或者是文字,或者是声音。这个warningIndicatorRequested就用于此类DTC。

warningIndicatorRequested = 1 :ECU请求激活警告指示。

warningIndicatorRequested = 0:ECU不请求激活警告指示。

注意,如果这个DTC不支持警告指示,则这个位永远置0。

总结来说,这8个状态位只用文字描述的话会略显抽象,如果在工作中看到这些状态位的变化,那么就很好理解它了。

🌏 微 信:@氨气中的战斗机✍🏻 知 乎:@吃完饭后不刷牙👬 公众号:@汽车ECU设计

历史精华文章集合:

【汽车ECU设计】汽车总线文章合集

【汽车ECU设计】Autosar文章合集

【汽车ECU设计】工作思考合集

【汽车ECU设计】第101~150期目录

【汽车ECU设计】第51~100期目录

【汽车ECU设计】第1~50期目录

汽车ECU设计

汽车控制器(ECU)中DTC的状态位:原文配图 3

一个菜鸟程序猿的成长之路。116篇原创内容

公众号

← 返回文章列表