粉丝532获赞4521


书接上回,今天我们来介绍存储数据传输功能单元,也叫读故障信息功能单元。这一类诊断服务涉及到两条诊断命令,分别是零 x 一四以及零 x 一九。这两条服务用于操作存储。在 e c u 中德 d t c 使用频率很高,而且他们比较好地体现了诊断这两个字的含义。在对一四和一九服务进行介绍之前,我们先来了解一下什么是 d t、 c 以及它的格式等信息。 d t c 是 diagnostic trouble code 的缩写,翻译为中文是故障码。 它是汽车电控系统中用来记录和诊断车辆故障的一种标准化编码方式。 u d s d t c i s o e 三二九 使用三个字节数据,其中 habit 和 middle rabbit 这两个字节表示故障内码。对应五位标准故障码包含指示符前缀和三个数字。指示符前缀用来区分故障来自的控制系统,是系统代码。 比如 b 零 b 三是用在车身控制系统, c 零 c 三是用在底盘控制系统。 p 零 p 三是用在发动机控制系统。 u 零 u 三则是用在通信故障及网络系统。 第三位是数字,表示故障所属的仔细统码。最后两位数字即 lobit, 提供故障的对象和类型。该部分内容遵循 iso 一五零三一六。对于不需要该字节信息的 d t c 可填充为零 x 零零。待会我们有个例子就 会涉及这个点。 dtc 故障类型由十六个不同的故障类别组成,其中每个类别与十六个词类型故障相关联。此类型故障按照逻辑分组,在 dtc 故障类型类别中, 每个数值代表一个特定的系统或故障类型,比如 p 零八零零八一,这个故障码中故障内码为 p 零八零零,其中 p 零八代表动力系统的传动系统控制故障,零零代表传感器,八一代表信号无效。 所以这个 d、 t、 c 代表动力系统的传动系统控制的传感器信号无效。接下来我们试着根据上面的故障分析来试着推断几个实际的故障码,比如幺零四一六零零,则我们可以从网络系统故障、通用故障码、排放系统要 六故障再到零零零零。前面讲过,属于是不需要该字节信息的情况,即表示无进一步信息,因此幽灵四一六已经能够确认故障组建。根据上述 dtc 的定义,我们知道了什么是故障, 但还不能清晰地支故障是什么时候发生的,什么原因导致发生的。因此还需要 dtc 的关键信息,比如 dtc 状态、 dtc 快照信息和 dtc 扩展数据信息。先看 dtc 状态,用一个字节来存储,如右侧图表所示, beat 零到 beat 七个字代表一种不同的状态。 test failed 用于表示最近一次测试的结果。零表示最近一次测试的结果为 pass。 一表示最近一次测试的结果为 failed。 test failed at the c operation 用于表示本操作循环中是否检测到费油的的情况。零表示本次操作循环没有检测到费油的,一表示本次操作循环检测到费油的。 堪封的 dtc 表示如果 dtc 的状态是 conform, 则说明该 dtc 已经被 ecu 存储下来了。判定 dtc 从字面意思上比较难理解,实际上可以理解为未确认验证 pass 的诊断故障吗?意思就是一旦故障发生后, 判定 dtc 标志位会置一,直至当前操作循环检测 pass 以及下一个操作循环的全程检测 pass, 该判定 dtc 才会被制零。 那么要知道 d、 t、 c 是什么时候发生的,我们首先要学会如何区分历史故障和当前故障。历史故障是过去发生,但当前还 没有清除的故障码。历史故障产生的原因有两种情况,一种是故障已排除,只是未清除故障码,此代码清除后,故障就不会再次发生。另一种是故障未排除,只是当前没有发生。 此故障码清除后,当故障再次发生时,故障还会出现。当前故障是正发生的故障产生的故障码。当前故障是确实存在的故障引起的, 它属于持续性故障产生的故障码,它不会被清除,比较容易判断。而历史故障比较难以判断, 因为它是曾经发生的故障。重现故障产生的状态可能需要很长时间来捕捉历史故障码的重现,或者需要人为的创造可重现故障的条件, 如加热、震动等,同时需要较好的设备来捕捉故障出现瞬间,各种数据参数的变化才行。 因此一般先解决当前故障,而对于历史故障,暂时作为故障诊断的参考。对应上表,当前故障为 beat 零为一的故障。历史故障指 beat 零为零蛋, beat 三为一的故障体现到 d、 t、 c status 中,极值为零 x 零九表示当前故障, 零 x 零八表示历史故障。接下来我们谈一谈快照信息。快照信息就类似照相机一样,在故障发生的时刻 对整车信息按下快门做个记录,以便后续分析问题。根据使用范围的不同,可分为全局快照和局部快照。 全局快照一般包括电压、里程等,局部快照则是可选的。扩展数据信息是一组提供相关扩展状态信息的数据组,包括故障出现技术器、故障待定技术器、以老去技术器和老化技术器等。 这些信息的具体内容一般都由客户来定义。介绍完 dtc 的基本信息后,我们开始对存储数据传输这一类诊断服务进行讲解。 零 x 一四服务这条诊断命令的格式比较简单,用法也很好理解,即删除存储在 e、 c、 u 中得 d t、 c 第一个字节就是 s i d 了,后面的三个字节用于标识将要被删除的 d、 t、 c 种类。 u d s 规定用三个 f、 f 表示所有种类的 d、 t、 c 由厂家自定义,代表 power、 train 叉、 c、 body、 network、 communication 等种类 d、 t、 c 的值。比如一、四三个 f、 f 这条指令表示的就是删除掉 e、 c、 u 中的所有 d t、 c e、 c、 u, 只需要返回一个零 x 五四,表示成功执行即可。零 x 一九服务这条指令用于读取存储在 e、 c、 u 中得 d t、 c。 一九服务的 sub function 代表了各式各样读取 d、 t、 c 的方法。 u d s 给幺九服务的 sub function 从零 x 零零到零 x 幺九进行了明确定义。常用的子服务有零幺零二、零四、零六、零 a 等。 sub function 等于零 x 零一,用于读取符合特定条件的 d t c 数量,此时 parameter 为一个 bit 的 mask, 用于与 d t c。 的 status 进行于运算,而 e c 又返回的则是与运算之后 结果不为零的 dtc 的数量。比如一九零一零八,这个命令的用途就是读取所有状态为 conform 的 dtc 的数量。 sub function 等于零 x 零二,用于读取符合特定条件的 dtc 列表。 此时 parameter 仍然为一个 bit 的 mask, 用于与 d t c。 的的 status 进行于运算,而 e c 又返回的则是与运算之后结果不为零的 d t c 列表。比如一九零二零一,这个命令的用途 就是读取所有状态为 active 的 d t c。 的数量。此时 e c 又返回的格式应该是五九零二零一, x x x x x x。 零一, y y y y y。 零九,返回的 d t c 列表中的每个条目为四个字节,前三个字节用于标识 d t c, 如 x x x x x x。 最后一个字节用于标识 d t c。 的状态,比如零一表示 d t c 是 active 的,零九,表示 d t c 是 active, 且 confirm 的 sub function 等于零 x 零四,用于读取快照信息, 内容是记录车载控制器发生故障时,记录当时车载控制器的运行环境信息。环境信息由 oem 在制定诊断需求规范时定义, 常见有 ecu 电压值、电流值、 ecu 温度里程表、发动机转速时间戳等等, 目的是简化技术人员的故障隔离过程。当工程师有需要时,发送 servers 一九零四来获取这些信息。 sub function 等于零 x 零六,用于读取某个 dtc 及其相关的环境数据。 此时 perimeter 为四个 bit, 前三个 bit 用于标示我们要读取的 d t c, 第四个 bit 用于标识要读取的环境数据的范围。 u d s。 规定使用 f f 来表示读取所有的环境数据。各厂家可以根据自己的需求定义其他的值来代表要读取的环境数据的范围。 环境数据包括 dtc 状态、优先级、发生次数、老化、计数器时间戳里程等。 厂家还可以根据自己的需求定义一些此 d t c 产生时的测量数据。比如一九零六 x x x x x x f f 就表示读取 x x x x x x 这个 d t c 的所有环境数据。 e c。 有的返回值应该是五九零六 x x x x x x a a b b c c d d 其中 a a b b c c d d 代表的 就是 x x x x x x 这个 d t c 产生时所一起存储的环境数据。 sub function 等于零 x 零一时不需要 parameter。 零 x 零一表示要求 e c。 也有上报。最近的一条被置为 conform 的 d t c。 在 uds 序列之前的视频中,我们讲到零 x 八六服务, sub function 为零 x 零一的一九服务通常被作为参数传递给八六指令,要求 ecu 在发生存储的时候进行自动上报,即一九零一。这两个字节的指令被嵌入到八六服务的命令中。 这条命令在开发阶段会用到,比如验证某个故障路径是否生效。好的,我们今天的讲述就到这里。

