欢迎光临散文网 会员登陆 & 注册

UDS 诊断教程(五)

2023-03-21 22:34 作者:一只开心的鸟  | 我要投稿

这篇文章介绍 Stored Data Transmission (存储数据传输,用于操作 DTC)这一类诊断服务,涉及到两条诊断命令,分别是:

0x14:ClearDiagnosticInformation

0x19:ReadDTCInformation

这两条服务用于操作存储在 ECU 中的 DTC,使用频率很高,而且它们比较好地体现了“诊断”两个字的含

义。

0x14:ClearDiagnosticInformation

这条诊断命令的格式比较简单,用法也很好理解,即删除存储在 ECU 中的 DTC。

0x14 诊断命令请求的格式

第一个字节就是 SID 了,后边的三个字节用于标识将要被删除的 DTC 种类,UDS 规定用 FF FF FF 表示

所有种类的 DTC,由厂家自定义代表 Powertrain、Chassis、、Body、Network Communication 等种类

DTC 的值。

比如,14 FF FF FF 这条指令表示的就是删除掉 ECU 中的所有 DTC。ECU 只需要返回一个 0x54 表示成

功执行即可。

0x19:ReadDTCInformation

这条指令用于读取存储在 ECU 中的 DTC,它的格式如下

0x19 诊断命令请求的格式 0x14 诊断命令请求的格式

0x19 服务的 sub-function 代表了各式各样读取 DTC 的方法,UDS 给 19 服务的 sub-function 从 0x00 到

0x19 进行了明确定义,我只使用过其中 4 种,下面对我用过的这些进行介绍,如果大家对其他的感兴趣,

可以查阅 ISO 14229 的定义。

sub-function = 0x01  (reportNumberOfDTCByStatusMask )

sub-function = 0x01 用于读取符合特定条件的 DTC 数量,此时 parameter 为一个 byte 的 Mask,用于与

DTC 的 Status 进行“与”运算,而 ECU 返回的则是"与"运算之后结果不为 0 的 DTC 的数量。DTC 的

Status 用一个 byte 表示,其中的 8 个 bit 分别代表 DTC 的不同状态,比如,bit 0 表示这个 DTC 是

active 的还是 passive 的,bit 4 表示这个 DTC 是否已经被 confirm 了,如果 DTC 的状态是 confirm,则

说明该 DTC 已经被 ECU 存储下来了。

比如:19 01 08 这个命令的用途,就是读取所有状态为 confirm 的 DTC 的数量。

sub-function = 0x02  (reportDTCByStatusMask )

sub-function = 0x02 用于读取符合特定条件的 DTC 列表,此时 parameter 仍然为一个 byte 的 Mask,用

于与 DTC 的 Status 进行“与”运算,而 ECU 返回的则是"与"运算之后结果不为 0 的 DTC 列表。

比如 19 02 01 这个命令的用途,就是读取所有状态为 active 的 DTC 的数量。此时 ECU 返回的格式应该

是 59 02 01 XX XX XX 01 YY YY YY 09......。返回的 DTC 列表中的每个条目为 4 个字节,前三个字节用

于标识 DTC,比如 XX XX XX,最后一个字节用于标识 DTC 状态,比如 01,表示 DTC 是 active 的,09

表示 DTC 是 active 且 confirm 的。

sub-function = 0x06  (reportDTCExtDataRecordByDTCNumber )

sub-function = 0x06 用于读取某个 DTC 及其相关的环境数据,此时 parameter 为 4 个 byte,前三个

byte 用于标识我们要读取的 DTC,第四个 byte 用于标识要读取的环境数据的范围,UDS 规定使用 FF 来

表示读取所有的环境数据,各厂家可以要根据自己的需求定义其他的值来代表要读取的环境数据的范围。

环境数据包括 DTC 状态,优先级,发生次数,老化计数器,时间戳,里程等,厂家还可以根据自己的需

求定义一些此 DTC 产生时的测量数据。

比如 19 06 XX XX XX FF 就表示读取 XX XX XX 这个 DTC 的所有环境数据,ECU 的返回值应该是 59

06 XX XX XX AA BB CC DD.....,其中 AA BB CC DD...代表的就是 XX XX XX 这个 DTC 产生时所一起

存储的环境数据。

sub-function = 0x0E (reportMostRecentConfirmedDTC )

sub-function = 0x0E 时,不需要 parameter。0x0E 表示,要求 ECU 上报最近的一条被置为 confirm 的

DTC。我在《统一诊断服务 (Unified diagnostic services , UDS) (三)》一文中介绍过 0x86 服务,

sub-function = 0x0E 的 19 服务通常被作为参数传递给 86 指令,要求 ECU 在发生 DTC 存储的时候进行

自动上报,即 19 0E 这两个字节的指令被嵌入到 86 服务的命令中。这条命令在开发阶段会用到,比如验

证某个故障路径是否生效。

关于处理 DTC 的 UDS 服务就介绍这么多,如有疑问欢迎留言交流指正。


UDS 诊断教程(五)的评论 (共 条)

分享到微博请遵守国家法律