车载ECU嵌入式设备的诊断测试 – DTC

news2024/11/15 19:41:16

作者 | 李伟 上海控安安全测评中心安全测评部总监

来源 | 鉴源实验室

01 DTC-Diagnostic Trouble Code(诊断故障代码)

车辆在运行的过程当中,控制器会监控状态,特定故障发生时控制器会记录这些故障。车辆送4S店进行维修保养时,工作人员会通过智能终端(实际就是诊断仪)来读取这些故障,以配合问题定位,方便维修和保养。这里工作人员读取的故障信息是一系列的字符代号,即DTC诊断故障代码。主机厂预先设定好故障跟代码的映射关系(类似于DID与数据内容间的映射),根据取得的代码号可以很快从故障代码表中定位到与之映射的实际故障内容(诊断仪程序中这些工作都是自动完成的,无需人工查找)。

在这里读取故障代码的服务不是我们之前介绍的$22服务,而是专用的$19服务。工程师根据各种信息完成车辆修复之后,确认DTC上报的故障消除,会使用智能终端清除ECU记录的故障信息,清除操作使用了$14服务来实现。 

1.1 DTC的分类

对于UDS DTC的详细分类在ISO14229的附录中有具体的描述,本篇的目的是为了方便初学者入门,就不做过于深入的分析,随着在相关领域内的工作深入,今后可以进一步学习,入门后的工程师会更加容易理解规范的定义。

通过上一章节的叙述我们可以理解,车辆零部件可以记录的故障很多,主机厂设计DTC有两种选择,分别按照ISO15031和ISO14229进行,在主流的乘用车和商用车上,主机厂使用ISO14229相对多一点。

无论按照哪种设计,主机厂通常将DTC的故障分为4类,通过PCBU来表示,P是powertrain动力系统,C是Chassis底盘,B是Body车身,U是network通信系统,这里我们又一次见到了车身、动力、底盘这三大件分类的强大,也证明了分类的经典和实用。

1.2 UDS DTC

对于各主机厂遵循的DTC Format Identifier具体定义在ISO14229标准附录部分有表格说明。我们举例了基于ISO14229的DTCFID-0x01格式的情况,这也是主机厂使用比较多的一种格式(如果这段内容不是很理解的话,继续往下看吧,后面会有对应的知识分享与这段进行呼应)。数据部分长度为3字节,格式如下图所示:

图 1

DTC的代码长度为7个字符,如:B1525_11实际在诊断中对应的16进制数显示为0x952511,各字符对应的bit位关系如下图所示:

图 2

实际上在主机厂设计DTC时具体的故障定义还会参考《SAE J2012DA:2013车辆诊断故障码定义》。在这个标准定义中将4个系统的故障码使用范围进行了划分,大体划分如下:0x0xxx-0x3xxx 划分P动力系统使用;0x4xxx-0x7xxx 划分C底盘系统使用;0x8xxx-0xBxxx 划分B车身系统使用;0xCxxx-0xFxxx 划分U网络系统使用。

将上文中0x952511,从16进制转换为2进制后,我们就可以发现,分类方式和第1位字符可以对应的系统,跟我们上文说的PCBU是一致的,通常对应关系为00:P、01:C、10:B、11:U。

第二位字符故障分类的定义大体如下:0XXX ISO/SAE控制定义、1XXX制造商自定义、2XXX制造商自定义、3XXX预留。对于DTC low byte如果主机厂未使用一般置零。

1.3 DTC状态

DTC status状态码是用来表明故障在指定时间上是否存在,以及故障测试状态情况的。总共1个字节表示8种不同的判断条件。ISO14229附录D有详细描述。

从bit0-bit7分别为:

· testFailed 当前时间点故障状态,0表示没有检测到故障,1表示检测故障。

· testFailedThisOperationCycle 当前操作周期故障状态,0表示本周期(从本次被唤醒,到进入休眠,一般情况下也可以用车辆上电启动,到熄火休眠为周期)未检测到故障,1表示本周期内检测到故障。

· pendingDTC 当前及上个操作周期故障状态,0表示上个周期或本周期没有故障,1表示有。

· confirmedDTC 确认存储故障状态,0表示没有达到存储触发条件故障,1表示有。

· testNotCompletedSinceLastClear 上次清除开始故障检测未完成,0表示完成检查,1表示未完成。

· testFailedSinceLastClear 上次清除以来检测已完成,且检测到故障失败。0表示未运行检测或检测完成但未发现故障。1表示检测已运行且发现失败。

· testNotCompletedThisOperationCycle 本操作周期测试未完成,0表示本周期测试完成,1表示本周期测试未完成。

· warningIndicatorRequested 警告指示请求,0表示没有警告指示,1表示有警告指示。

02 $19服务

本文开篇时提到过$19服务是专门用来配合DTC进行读取相关操作的。相对于其他服务,$19服务的结构要复杂得多。

2.1 $19服务发送报文

服务发送报文第1部分为SID即$19;第2部分为subfunction子功能段,ISO14229规范定义中$19服务是比较复杂的,其subfunction项有31种不同定义,包含了ISO组织预留字段,因此$19服务的发送报文帧结构比之前我们分享的其他服务要复杂的多;第3和第4段参数部分对应于报文第2段subfunction的不同而各不一样,发送报文总体结构如下图:

图 3

对应于标准规范定义发送报文第2字段子功能分类,配合第3和第4段,$19服务的发送报文从总体上在规范中有13种不同格式。在具体项目中均是根据实际需要选取几种进行设计,因此测试过程中对于项目诊断规范的熟悉非常重要。

我们前文讲述的DTCStatusMask即在参数字段中,还包括DTCMaskRecord、DTCSeverityMask,以及快照相关的其他参数项,规范大约定义了9种不同参数来配套不同的子功能项实现不同功能。

我们举例使用$19 01 01,第2字段子功能01,该subfunction功能为根据DTC掩码上报检测的DTC故障数量。对应于第2段子功能为01,第3段标准定义要求DTC状态和DTC掩码对应状态全为“1”时进行匹配,即当前周期的故障检测状态。综合上面的描述我们可以知道$19 01 01读取了当前周期内DTC故障的数量个数。

跟子功能01类似要求的需要DTC状态掩码配合使用的子功能还有0x02、0x0F、0x11等,其服务发送报文架构如下图所示:

图 4

其他子功能还有参数配合使用的情况,我们需要根据诊断规范定义具体情况具体分析。

2.2 $19服务响应报文

$19服务的响应报文格式总体与第三篇文档的描述一致。正响应报文的服务号为$59,第2字节对应请求报文的子功能号。第3字段开始跟其他服务有所区别,本段响应报文的参数跟请求报文的逻辑一样,字段参数跟第2字段的子功能是对应的。响应帧的总体结构图如下所示:

图 5

举例上文$19服务的响应报文为:$59 01 01 01 00 01,响应报文第1、2字段对应请求报文SID19和子功能01;对于第2字段子功能为01,响应报文第3字段为参数DTCStatusAvailabilityMask;第4字段为参数DTCFormatIdentifier,这个参数即前文我们提到的DTCFID;第5、6字段为请求报文要求的上报DTC本周期故障数量为1个。对于每个参数的预置值定义,产品诊断规范中在每个子功能的参数定义中均有详细描述。

对应于请求报文的不同子服务格式有十几种,也会有每种分类的响应报文进行对应。

$19服务的负响应跟第三篇文档的描述一致,这里不再重复。

03 $14服务

$14服务跟$19服务是配套进行使用的,本服务的作用是清除诊断信息。在进行DTC相关测试时,会使用本服务执行清除工作,确保DTC的状态不影响测试结果。

3.1 $14 服务请求报文

$14服务请求报文相对比较简单,本服务的请求报文无子功能,只有唯一参数为groupOfDTC,对于参数的定义,可以参考ISO14229的附录相关内容,对于项目中的实际定义大家一定要仔细阅读项目诊断规范。发送报文帧结构如下图:

图 6

在实际测试过程中我们用的比较多的是全部清除,举例$14服务的全部清除请求报文为:$14 FF FF FF。

3.2 $14 服务响应报文

$14服务的正响应报文格式非常简单,就一个字节SID服务自己$54。响应报文帧的结构图如下所示:

图 7

举例$14的正响应报文格式为:$54。

负响应的报文格式可以参考第三篇的相关章节,负响应NRC代码表一般在项目中是通用的。

04 总结

DTC是配合$19和$14服务来使用的,DTC故障代码表的所有故障代码我们要进行遍历测试,所以环境的搭建会花费大量的时间,需要准备其他的测试配合零部件。每个故障测试前都需要使用$14服务将已存储的DTC清除并确认已清除成功,才能制造DTC对应的故障,并通过$19服务来读取来确认制造的故障被设备识别,并遵循记录规则进行了对应的存储。

05 测试要点

在执行DTC的测试前必须和诊断设计系统工程师和DRE确认,DTC表中的所有故障如何在测试环境制造出来,且可以被设备检测出来。设备检测上报DTC有一定的过滤条件,即使是同一个故障,哪怕我们在试验环境下制造并观察到故障已出现,在触发条件没有达到时,设备也检测不到,读取不到对应的DTC。

在制造一些短路故障前一定要跟DRE或者硬件工程师确认,测试操作不会烧毁相关电路或电容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Numpy入门[4]——数组类型

Numpy入门[4]——数组类型 参考: https://ailearning.apachecn.org/ 使用Jupyter进行练习 import numpy as np之前已经看过整数数组和布尔数组,除此之外还有浮点数数组和复数数组。 复数数组 a np.array([1 1j , 2 , 3 , 4]) aarray([1.1.j, 2.0.j, …

Java基于PHP+MySQL干洗店管理系统的设计与实现

干洗店管理系统是信息时代的产物,它是干洗店管理的一个好帮手。有了它不再需要繁重的纸质登记,有了它干洗店管理员不在需要繁重的工作,一些收费标准和干洗业务等基本信息可以由管理人员及时的对信息进行查询、更新、修改和删除,方便简易,且时效性高。 干洗店管理系统是一个典型…

java 中使用BigDecimal 解决科学计数法问题

一 BigDecimal的Api 1.1 常用方法介绍 ROUND_CEILING 向正无穷方向舍入 ROUND_DOWN 向零方向舍入 ROUND_FLOOR 向负无穷方向舍入 ROUND_HALF_DOWN 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是…

在python 深度学习Keras中计算神经网络集成模型

神经网络的训练过程是一个挑战性的优化过程,通常无法收敛。最近我们被客户要求撰写关于深度学习的研究报告,包括一些图形和统计输出。 这可能意味着训练结束时的模型可能不是稳定的或表现最佳的权重集,无法用作最终模型。 解决此问题的一种…

MyBatis-Plus

MyBatis-Plus 1、简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 润物无声 只做增强不做改变,引入它不会对现有工程产生影响,…

数据结构学习笔记(Ⅷ):排序

目录 1 排序基础 1.1 排序的基本概念 2 排序算法 2.1 插入排序 1.思想 2.实现 3.效率分析 4.优化 2.2 希尔排序 1.定义 2.实现 3.效率分析 3 交换排序 3.1 冒泡排序 1.定义 2.实现 3.效率分析 3.2 快速排序 1.算法思想 2.实现 3.效率分析 4 选择排序 4.…

第4章 SpringBoot与Web应用

文章目录第4章 SpringBoot与Web应用4.1 配置Tomcat运行4.2 https安全访问4.3 数据验证4.4 配置错误页4.5 全局异常处理4.6 文件上传4.6.1 基础上传4.6.2 上传文件限制4.6.3 上传多个文件4.7 拦截器4.8 AOP拦截器4.9 本章小结4.9 本章小结第4章 SpringBoot与Web应…

[附源码]计算机毕业设计病人跟踪治疗信息管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Linux系统移植二:生成fsbl引导文件并制作BOOT.bin

前情提要 对于ZYNQ而言,在引导过程中,先运行FSBL来设置PS,然后运行U-Boot用于加载Linux内核映像并引导Linux Linux系统移植一:移植U-BOOT 添加自己的板子并编译(非petalinux版) 一文中已成功生成了u-boot…

基于MPPT的PV光伏发电simulink建模和仿真

目录 1.算法描述 2.matlab算法仿真效果 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 MPPT控制器的全称是“最大功率点跟踪”(Maximum Power Point Tracking)太阳能控制器,是传统太阳能充放电控制器的升级换代产品。MPPT控制器能够实时侦测…

ManiSkill 2022机器学习顶会ICLR上的世界顶尖机械臂大赛赛题解读,演示轨迹转换,点云查看

1.赛事相关信息 点击查看 2.赛题分析 软体对GPU要求较高,环境配置复杂,选择刚体环境先以模仿学习/强化学习的刚体环境为基础,后期再考虑无限制刚体环境部分任务(如将物块移动到指定位置),存在相机之外的…

Day818.电商系统的分布式事务调优 -Java 性能调优实战

电商系统的分布式事务调优 Hi,我是阿昌,今天学习记录的是关于电商系统的分布式事务调优。 一个线上事故,在一次 DBA 完成单台数据库线上补丁后,系统偶尔会出现异常报警,开发工程师很快就定位到了数据库异常问题。 具…

SQL通用语法与DDL操作

学习笔记 sql通用语法 1 sql语句可以单行或多行书写,以分号结尾; 2 sql语句可以使用空格/缩进来增强语句的可读性; 3 mysql数据库的sql语句不区分大小写 4 单行注释:-- 内容 或 # 内容 多行注释: /* 内容 */ sql语句…

【地图之vue-baidu-map】点击获取坐标(点Marker)、坐标集(多边形polygon)

点击获取坐标&#xff08;点Marker&#xff09; 官网链接&#xff1a;Vue Baidu Map 需求 1.点击某点设置该点为中心点 2.获取点的经纬度 3.确定选取成功&#xff0c;取消就不赋值。 实现步骤 第一步&#xff1a;设置打开弹窗的地方 <el-button click"clickAdd…

c# .net 树莓派/香橙派用到物联网包Iot.Device.bindings 支持设备说明文档

c# .net 树莓派&#xff08;进口&#xff0c;贵&#xff09;/香橙派&#xff08;国产&#xff0c;功能相同&#xff0c;性价比高&#xff09;用到物联网包Iot.Device.bindings 支持设备说明文档 我们c# .net 开发树莓派/香橙派都需要用到Iot.Device.bindings和System.Device.G…

阿里巴巴 Github 星标 57.9KJava 面试突击汇总(全彩版)首次公开

现在互联网大环境不好&#xff0c;互联网公司纷纷裁员并缩减 HC&#xff0c;更多程序员去竞争更少的就业岗位&#xff0c;整的 IT 行业越来越卷。身为 Java 程序员的我们就更不用说了&#xff0c;上班 8 小时需要做好本职工作&#xff0c;下班后还要不断提升技能、技术栈&#…

命令注入漏洞解析

漏洞简介 Atlassian Bitbucket Server 和 Data Center 是 Atlassian 推出的一款现代化代码协作平台&#xff0c;支持代码审查、分支权限管理、CICD 等功能。 受影响的Bitbucket Server 和 Data Center版本存在使用环境变量的命令注入漏洞&#xff0c;具有控制其用户名权限的攻…

代码随想录刷题记录day34 动态规划理论基础+斐波那契数+爬楼梯+使用最小花费爬楼梯

代码随想录刷题记录day34 动态规划理论基础斐波那契数爬楼梯使用最小花费爬楼梯 动态规划理论基础 解决的问题 由前一个状态决定了后一个的状态&#xff0c;可以用动态规划来解决。贪心是没有状态推导的。 解题步骤 确定dp数组&#xff08;dp table&#xff09;以及下标的…

一键集成 SQL 审核到你的 GitLab 和 GitHub CI/CD

本文以 GitLab 为例&#xff0c;GitHub 方式类似。 操作步骤 事先准备 开启 Bytebase 团队版&#xff08;从 v1.8.0 开始&#xff0c;你可以直接开启 14 天的团队版免费试用&#xff09;。 为你的 Bytebase workspace 和项目开启 VCS 工作流&#xff1a;https://www.bytebas…

基于钉钉通讯录,同步构建本地LDAP服务

上一篇《利用飞书通讯录同步搭建本地LDAP》方案发出后&#xff0c;引起不少企业 IT 人员共鸣。本次&#xff0c;宁盾针对使用了钉钉社交应用的企业推出基于钉钉通讯录&#xff08;组织架构和用户信息&#xff09;同步搭建本地 LDAP的方案。 钉钉已经成为很多企业日常处理工作的…