UDS诊断---DTC故障码基础回顾
DTC(Diagnostic Trouble Code)表示诊断故障码,是故障类型的身份ID号码;用于汽车故障时对故障部位及原因的排查。
当ECU检测到一个故障时,其将在存储器中存储对应的一个代码,此代码被称为故障代码。 除故障代码外,ECU还可能存储与此故障相关的故障状态、快照信息及扩展信息。
DTC故障码主要用来就行线下的检测和故障的维修。
1)下线检测
对于一辆车的零部件的开发、系统集成、整车组装,其中涉及的流程之长、零件数量之多,可以说是相当的复杂;为了保证最终车辆下线,并且能够安全的上路,这就要在上路之前保证每个零件本身和零件之间必须保证没有任何问题,因此故障码检测就应运而生;不仅保证电子元器件本身不存在问题,而且保证电子元器件间也是通信正常,并保证最终车辆的安全上路。
2)故障维修
车辆在整个使用的生命周期中,所处的环境也是相当的复杂且恶略;对于当前车辆复杂的线路来说是一项极大的挑战,同时在出现问题后问题的排查也是相当的困难,这时候我们就可以通过故障码来进行查询故障位置,进行快速定位和解决。
Self Fault Detection就是自诊断需求的意思。所有ECU都应持续地进行故障自诊断,以监控运行状态下的异常事件(错误)。 故障自诊断包括两种:初始化阶段自诊断及持续运行时的自诊断。
故障自诊断范围Self Fault Detection Scope
故障自诊断的范围,应包含但不限于如下列内容:
1)ECU 内部异常情况;
2)网络通信异常情况;
3)输入/输出线路的开路或短路情况;
4)超出线路正常运行范围的错误信号;
5)迫使系统以失效安全模式运行的情况;
故障代码由 3 个字节组成:故障代码高字节、 故障代码中字节及故障代码低字节(故障代码失效类型)。前两个字节代表发生故障的对象,也就是故障内码;对应5位标准故障码(第一位是字母,后面四位是数字)。
而故障代码的低字节代表故障失效类型信息。
故障代码高字节的第一位是字母,表示故障所属系统;有如下的四种情况:
| 故障内码bit14bit15 | 标准故障码表示字符 | 所属系统 |
|---|---|---|
| 0x00 | P | Powertrain动力系统故障 |
| 0x01 | C | Chassis底盘故障 |
| 0x10 | B | Body车身故障 |
| 0x11 | U | Network网络故障 |
故障码的P、C、B、U码简单来说,这四个字母的来源即是对应车辆的四个组成部分,分别是Power(动力),Chassis(底盘)、Body(车身)、Network and vehicle Integration(U:网络和车辆集成)。
PCBU码在byte0的分布主要为P(00-3F)、C(40-7F)、B(80-BF)、U(C0-FF)。
故障代码高字节的第二位是数字,表示故障类型;有如下的四种情况:
| 故障内码bit13bit12 | 标准故障码表示字符 | 故障类型 |
|---|---|---|
| 0x00 | 0 | ISOSAE标准定义故障码 |
| 0x01 | 1 | 制造商自定义故障码 |
| 0x10 | 2 | ISOSAE保留码 |
| 0x11 | 3 | ISOSAE保留码 |
故障代码高字节的第三位是数字,表示故障所属的子系统;以对动力系统为例(P开头的故障码),有以下的情况:
0:表示燃油和空气计量辅助排放控制整个系统;
1:表示燃油和空气计量系统;
2:表示燃油和空气计量系统(喷油器)
3:表示点火系统;
4:表示废气控制系统;
5:表示巡航、怠速控制系统;
6:车载电脑和输出信号;
7:传动系统控制;
8:传动系统控制;
故障代码中的低字节DTCLowByte则是描述故障种类和子类型,该部分内容遵循ISO 15031-6;对于不需要该字节信息的DTC,可填充为0x00。
故障码一般使用16进制数字来表示。
将标准故障码的第一、第二位(如下例中的“U0”、“B1”)换算为对应的内码格式,再以16进制表示出来;
至于后面的其他内容,其格式本来就是16进制进行表示的,直接照着写下来即可
就是说只要将标准故障码的第一、二位进行转换即可。
例如:
U007304,其故障内码为:1100 0000 0111 0011,换算成16进制则为C073;补充上DTCLowByte(04),则其完整的16进制表示为0xC07304;
B100016,其故障内码为:1001 0000 0000 0000,换算成16进制则为9000;补充上DTCLowByte(16),则其完整的16进制表示为0x900016;
故障指示 Fault Indication是指当检测到某个可能引起危险的故障时,ECU必须采取必要的措施以保证部件及整车安全。
具体采取的措施(如危险警报声音,危险警报显示等)及激活/关闭准则需在ECU的诊断文件中描述。
故障快照信息就是DTC Snapshot Information。
快照信息是在故障代码设置时存储的一组额外数据,对故障的维修具有辅助作用;顾名思义它就是故障发生时刻存下来的瞬态的环境数据,一般是指电源模式、温度、时间戳、车速等信息。
根据使用范围的不同,快照信息可分为全局快照和局部快照。
对于需存储快照信息的ECU,其必须支持全局快照信息,而选择性的支持局部快照信息。
扩展信息是一组提供故障代码相关扩展状态 信息的数据组,包括故障出现计数、故障待定计数等。也就是在故障发生时其他的一些辅助故障信息。故障扩展信息一般由车企与供应商的诊断工程师共同决定。
大多数情况下光有DTC号以及状态位信息往往不能一步到位定位根本原因,需要引入环境信息才能够进一步确定问题所在,因此便有了快照数据(Snapshot Data)和扩展数据(Extended Data)两个概念。
DTC状态位也叫做DTC状态掩码,用于判定当前故障的状态。
DTC状态位由一个字节表示,每个bit都有其重要含义。我们常用的故障码状态主要有bit0、bit3、bit5,主要表示当前故障、历史故障码、上次清除后问题故障。
具体解释如下:
| Bit | Despcription | 描述 |
|---|---|---|
| Bit0 | TestFailed | 请求时刻测试结果为失败,表示当前结果为故障状态 |
| Bit1 | TestFailedThisOperationCycle | 在当前点火循环至少失败过1次 |
| Bit2 | PendingDTC | 在当前或者上一个点火循环测试结果不为失败 |
| Bit3 | ConfirmedDTC | 请求时刻DTC被确认,一般确认是在一个点火周期内发生错误1次,表示存在历史故障 |
| Bit4 | TestNotCompletedSinceLastCycle | 自上次清除DTC之后测试结果已完成,DTC检测尚未完成 |
| Bit5 | TestFailedSinceLastCycle | 自上次清除DTC后测试失败,DTC为故障状态 |
| Bit6 | TestNoCompletedThisOperationCycle | 当前操作循环测试还没有完成,DTC检测还未完成 |
| Bit7 | WarningIndicatorRequest | 故障指示请求,1表示特定的DTC警告指示灯亮 |
每一个DTC故障码均有对应的DTC状态位。
当出现DTC时,我们只知道有故障发生了这一个基本事实,但是并不知道该故障什么时候发生,现在是否已经恢复、发生过几次,恢复过几次等细节性信息,因此国际标准组织ISO发布14229-1来引入DTC状态位这一概念来得到上述细节性信息,使我们对该故障的生前生后有个清晰的认识,便于我们快速定位问题所在。
故障信息存储DTC Information Storage的意思。原则上所有的故障代码及其相关信息都应存储于非易失性存储器E2PROM。但受存储空间所限,ECU可存储的故障信息也是有限的。同时存储的故障代码及其相关信息的个数应不小于总故障码个数的一半。
当存储信息已满时,ECU需决定是忽略最新检测到的故障及其信息,还是删除已存储的信息,以预留空间给最新检测到的故障。ECU供应商或者车企需定义故障信息存储的优先级机制,但必须保证部件及整车的安全。
故障自恢复策略的英文表示为Fault Automatic Recovery。
ECU清除已存储的故障及其相关信息的条件包括清除诊断信息的指令或该故障的自恢复条件满足。如果故障不再存在,则故障自恢复机制用于确保该故障和相关信息都被清除,以避免不必要的维护成本。
某个ECU是否支持该机制以及支持的故障码有哪些,这个取决于各个车企的需求定义。
19 02 ReadDTC Status
19 04 ReadSnapshotData with DTC
19 06 ReadExtendData with DTC
19 0A ReadAllSupportedDTC
通过以上四种方式便可以得到ECU支持的DTC、当前或历史DTC、Snapshot Data、Extended Data ,DTC status等信息
除此之外和DTC故障码相关的SID还有:
14 诊断故障清除:用于客户端去清除一个或多个ECU内的诊断信息。
85 控制DTC设置 如果控制信息是off,则服务端应该立即停止DTC的状态更新。即从此刻起,DTC的状态信息保持不变,无论是发生了新的故障,还是已有的故障有了新的状态,服务端的DTC数量、状态信息都不会更新。如果控制信息是on,那么如果先前是off,就立即恢复到正常的状态,如果先前是on,保持状态不变。
ISO14229-1只是UDS通讯协议,它没有具体定义DTC的格式,但它引用了其它几个标准中定义的DTC格式。
SAEJ2012是具体定义DTC代码及其含义的标准。
ISO15031-6是排放相关诊断(OBD)的故障码定义,它引用了SAE J2012,其中提到OBD DTC是2字节,但一些新的诊断通讯标准中定义的DTC是3字节,如ISO27145,解析方式有所不同,这个时候通过DTC格式标志字来区分两种解析方式。
ISO27145定义了增强型诊断的DTC格式,它也引用了SAE J2012。
UDS DTC(ISO 14229)使用三个字节,两个最高有效字节(DTC High Byte和DTC Middle Byte)根据实施的诊断协议指定的DTC Format Identifier = 0x00或 0x04进行解码;最低有效字节(DTC Low Byte)根据SAE J2012-DA Failure Type Byte (FTB) 表进行解码。
OBD DTC(ISO 15031)使用两个字节,根据SAE J2012-DA解码。
脱机诊断经过外部诊断设备读取相应的诊断信息,实现诊断作业。
自诊断故障是自己检测故障,并将自己检测到的故障情报数据等存入ECU内存的同时,通过警报灯等方式,向驾驶员发出警告信息。
一个是自发的内部诊断,一个是通过连接外部的设备来诊断
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt