一文掌握DTC

news2024/11/27 2:47:30

1. 前言

从单片机STM32开始转到汽车电子已经有一年时间了,到如今为止,很少写文章了,原因很简单,肚子里面没有墨水,就不给大家献丑了。而现在写在这篇文章,属实也是有了一定的了解。所以还不是很了解这个方面的小伙伴可以参考下本文。我尽量以大白话的方式讲明白。

2. 什么是DTC呢?

DTC的全称是Diagnostic Trouble Code,即诊断故障码。就是当汽车里出现了故障,ECU会发出一串数字,它可以帮我们找到故障的原因,可以更快速的定位解决问题。

借用网上经常看到的例子:欠电压故障
假设汽车正常的工作电压是10-18V,当此时的电压是8V,是不是就会出现打不着火,汽车不工作的故障呀?我们肉眼看不出来为什么汽车不工作,但是我们可以通过读取DTC码来找到原因。当欠压时,汽车会发出0X123456 这一串数字,而这串数字,每个厂商都有规定的,我们就相当于去看说明书,就能找到这串数字代表的意思了。

3.故障内码与标准故障码

其中,DTCHighByte、DTCMiddleByte这两个字节表示故障内码,对应5位标准故障码(第一位是字母,后面四位是数字),如"B100016"这个故障码中的"B1000";最后面的"16"则是DTCLowByte的内容。故障内码与5位标准故障码的位置对应关系如下:
在这里插入图片描述
在这里插入图片描述
第一位是字母,表示故障所属系统;有如下的四种情况:
在这里插入图片描述
第二位是数字,表示故障类型;有如下的四种情况:
在这里插入图片描述
第三位是数字,表示故障所属的子系统;以对动力系统为例(P开头的故障码),有以下的情况:
0:表示燃油和空气计量辅助排放控制整个系统;
1:表示燃油和空气计量系统;
2:表示燃油和空气计量系统(喷油器);
3:表示点火系统;
4:表示废气控制系统;
5:表示巡航、怠速控制系统;
6:车载电脑和输出信号;
7:传动系统控制;
8:传动系统控制;

DTCLowByte则是描述故障种类和子类型,该部分内容遵循ISO 15031-6;对于不需要该字节信息的DTC,可填充为0x00。

故障码的16进制表示(在程序里的写法):
一般我们都会拿到DTC的需求文档,一般情况下,系统工程师会把故障码转化成16进制,这样方便软件工程师去配置到程序里。
对照着上面的图:
举例:
U007304
U:11
0:00
0:0000
7:0111
3:0011

所以16进制是:1100 0000 0111 0011 (前面16位变成高字节和中字节)
再加上低字节04 所以16进制的写法就是:0XC07304

B100016,其故障内码为:1001 0000 0000 0000,换算成16进制则为9000;补充上DTCLowByte(16),则其完整的16进制表示为0x900016;
原文是这个博主的

4.DTC的8位bit代表的含义

在这里插入图片描述

5.DTC老化(东信)

DTC的老化是一个过程,这个过程是以循环周期作为单位。有几种周期被采用:
上下电作为一个循环周期;
warm-up作为一个循环周期。

在诊断自恢复过程中,往往我们会定义30个或40个循环周期作为自恢复的条件。原因是,在一个相对较长的过程中,如果车辆没有发生这个故障,我们可以认为这个故障是一个偶发的现象,也可以认为现在的车辆处于一个相对稳定的状态。因而,可以将这个故障码清除

在这里插入图片描述
科普小知识提示:在解释协议定义的老化过程前,我们先来解释一下上图中各位的含义。

  1. DTCAging计数器在完成测试未失败的操作周期后递增,DTCAging计数器开始计数的条件是:testFailed=0,PendingDTC= 0,ComfiredDTC=1。
  2. pendingDTC=0的条件是在一个操作周期后测试完成且未失败(testNotCompleted-ThisOperationCycle = 0,tesetFailed = 0,tesetFailed-ThisOperationCycle=0)。如果ECU不支持掉电顺序(即在关闭点火开关时立即关闭),则将无法检测到操作周期的结束。因此,在下一个操作周期开始时将pendingDTC设置为零也是有效的。
  3. DTCAging计数器在完成测试未失败的操作周期后递增。ttestNotCompleted-ThisOperationCycle = 0,tesetFailed = 0。
  4. DTCAging计数器继续递增,因为测试在这些操作周期中没有失败。tesetFailed = 0。
  5. 当完全满足老化标准时(例如,DTCAging计数器达到特定值),confirmedDTC 设置为零,DTC会从内存中清除掉。
  6. DTCAging计数器达到最大值(例如,40),此时confirmedDTC 被清除。

车辆制造商有责任指定testFailedSinceLastClear位是否通过老化标准或由于故障存储器溢出而重置。

6.工程师角度如何下手

应用层:
应用层做的事其实就相当于做一个判断,拿到需求,要知道这个故障在什么状况下才能报出来,什么时候故障消失。把这个逻辑实现出来就可以了。
if(10<voltage<18)
{
setevent(pass);
}
else
{
setevent(fail);
}

RTE层:
这一层主要就是做一个接口,设置DTC事件的接口,就是当应用层发生了故障,就会调用这个接口,这个接口连接着DEM模块,直接设置上这个DTC,其中DEM模块里就是DTC16进制的集合地。

底层:
这一层就是需要配置CDD文件,以及用达芬奇软件配置这个DTC的一些相关内容,其中包括什么时候才能确认这个DTC,什么时候才能老化这个DTC等等。

总结

仅供学习参考使用

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

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

相关文章

从一到无穷大 #9 Firestore:开发者友好的Serverless NoSQL Database

引言 简单浏览了下ICDE 2023 industry-and-applications-track 部分的文章&#xff0c;其中我感兴趣的文章有三篇&#xff0c;分别为&#xff1a; Accelerating Cloud-Native Databases with Distributed PMem StoresBackward-Sort for Time Series in Apache IoTDBFirestore…

10年测开经验面试35K公司后,吐血整理出高频面试题和答案!

一&#xff1a;前言 在当今竞争激烈的职场环境中&#xff0c;拥有丰富的测试开发经验已成为众多企业青睐的重要条件之一。而在面试过程中&#xff0c;高频面试题更是能够考察应聘者的实际能力和知识水平。本文作者具备10年的测试开发经验&#xff0c;并通过面试获得了35K公司的…

VMWare16和Ubuntu20.04虚拟机安装记录

VMWare网盘链接&#xff1a;https://pan.baidu.com/s/1zZvtwnH9N47_k3pAy2dZCg 提取码&#xff1a;1234 Ubuntu下载网址&#xff1a;Ubuntu Release 推荐20.04&#xff0c;网上的教程也比较多 列举两个我参考的&#xff0c;其实都大差不差。 保姆级教程|VMware安装Ubuntu20…

Android之 activity活动页面详解

一 四大组件 1.1 Activity组件&#xff0c;它一个单独的窗口&#xff0c;程序流程都必须在Activity中运行&#xff0c;所有它是最基本的模块。 1.2 service组件&#xff0c;用于在后台完成用户指定的操作。 1.3 content provider组件&#xff0c;会为所有的应用准备一个内容…

线对象QgsLineString

几何对象中线用QgsLineString进行封装支持Z和M值&#xff0c;用于表示2维的&#xff0c;2. 5维的&#xff0c;3维的线线是由一串点连接而成 创建线 QgsLineString() #创建空的线QgsLineString(points: Iterable[QgsPoint]) #从一串QgsPoint创建QgsLineString(x: Iterable…

[JavaScript]JSON对象

eval函数 eval函数能将一个字符串当做一段JS代码解释并执行。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name&quo…

大数据经典项目案列——滴滴数据分析(云服务器-零基础从配置到项目落地1)

本次我们项目采用阿里云服务器&#xff0c;采用以下技术及框架协议&#xff0c;进行数据分析&#xff1a; HDFSHiveSpark SQLZeppelin 当然我们也可以利用数据库清洗好的数据&#xff0c;采用 1.Tableau 2.Pythonechartsweb前端 3.腾讯云、阿里云BI报表 4.当然我们也可以采…

51单片机(十四)LCD1602

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

SpringCloud Alibaba 配置中心功能

一、快速入门 1、创建工程nacos-client7777 pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&q…

基于企业网的信息安全防护系统的设计与实现_kaic

摘 要 这篇文章提供了一种新的&#xff0c;基于“禁止一切”安全策略和VxD技术的企业网络安全保障方案&#xff0c;旨在帮助企业更好地应对外界的威胁。通过设计一套完善的企业网信息安全防护系统&#xff0c;不仅可以有效地解决企业网络中存在的问题&#xff0c;而且还可以有…

一文带你了解和掌握Markdown编辑神器mdnice

无论你是博客写作爱好者&#xff0c;还是想要自己动手开发一个网站&#xff0c;你都可能会接触到Markdown。Markdown是一种轻量级的标记语言&#xff0c;它允许人们使用易读易写的纯文本格式编写文档&#xff0c;然后转换成有效的HTML内容。然而&#xff0c;当你想要将你的Mark…

MYSQL主从复制和读写分离.2

搭建MYSQL读写分离 master :192.168.142.10 slave1:192.168.142.20 slave2:192.168.142.30 Amoeba:192.168.142.40 客户端:192.168.142.50 ----Amoeba服务器配置---- ##安装 Java 环境## 因为 Amoeba 基于是 jdk1.5 开发的&#xff0c;所以官方推荐使用 jdk1.5 或 1.6 版…

Linux 指令3

文章目录 标题日期date时间戳 cal 日历find -name 查找which ls 搜指令whereisgrep 行文本过滤工具&#xff08;例如找到main函数入口&#xff09;例子 ps ajx 进程 打包压缩&#xff0c;解包解压&#xff08;过程是这么个过程&#xff0c;简化成压缩->解压&#xff09;zip多…

使用gitee上传vue项目

菜鸟教程&#xff1a;https://www.runoob.com/git/git-tutorial.html 参考文档&#xff1a;https://blog.csdn.net/handy_csdn/article/details/117400151#:~:text%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E6%90%AD%E5%BB%BAvue%E9%A1%B9%E7%9B%AE%EF%BC%8C%E5%B9%B6%E4%BD%BF%E7…

试用chatgpt写一篇文章,关于自动化测试框架的思路

当涉及到软件测试和自动化框架时&#xff0c;Python是一种广泛使用的编程语言。它提供了丰富的库和工具&#xff0c;使得构建测试框架变得相对容易。本文将介绍一个基于Python的自动化测试框架&#xff0c;结合了pytest、allure报告、日志记录、YAML配置、MySQL数据库以及钉钉和…

JNI 中Get<PrimitiveType>ArrayElements 和 Release<PrimitiveType>ArrayElements 函数讲解

文章目录 Get<*PrimitiveType*>ArrayElements 函数族Release<*PrimitiveType*>ArrayElements 函数族使用场景 Get<PrimitiveType>ArrayElements 函数族 函数原型&#xff1a; NativeType *Get<PrimitiveType>ArrayElements(JNIEnv *env, ArrayType ar…

vscode 标签的使用

使用标签就可以快速跳转到某一段代码,十分方便 安装 首先,我们需要安装 设置快捷键 shiftcommandp. 调出命令行 输入bookmark, 即可看到标签的相关指令 生成一个标签 设置一个你喜欢的快捷键 ,这代表 在光标所在的行上添加一个标签。需要设置一个label 调出列表 可以显示…

CMakeList.txt -- 编写保姆式教程

致每一个还坚持在互联网和软件行业的同路人。 最近有朋友问我为什么选择当程序员&#xff0c;我也不明白。可能是缺少社交能力&#xff0c;可能更喜欢心理上保存平静&#xff0c;可能是为了那份对于从无到有的沉浸感和满足感。 目录 欢迎加入陈达书--C交流群: Errrr113(非诚勿扰…

LitCTF Writeup By AheadSec

文章目录 Web我Flag呢&#xff1f;Follow me and hack mePing导弹迷踪PHP是世界上最好的语言&#xff01;&#xff01;作业管理系统Vim yyds这是什么&#xff1f;SQL &#xff01;注一下 &#xff01;就当无事发生Flag点击就送&#xff01;Http pro max plus1zjs彩蛋 Pwn只需要…

Jenkins持续集成项目搭建与实践—基于Python Selenium自动化测试

Jenkins简介 Jenkins是Java编写的非常流行的持续集成&#xff08;CI&#xff09;服务&#xff0c;起源于Hudson项目。所以Jenkins和Hudson功能相似。 在华为工作了10年的大佬出的Web自动化测试教程&#xff0c;华为现用技术教程&#xff01;_哔哩哔哩_bilibili在华为工作了10…