【UDS】ISO14229之0x19服务

2023-05-16

文章目录

  • 前言
  • 一、理论描述
    • 1.服务分类
    • 2.状态掩码
  • 二、操作步骤
    • 1.请求
    • 2.回复
  • 总结


->返回总目录<-

前言

简称: “ReadDTCInformation”,读取DTC信息
功能: 用户通过请求该服务,读取ECU的故障诊断码(DTC)信息,服务的sub-function代表了各式各样读取DTC的方法,UDS给19服务的sub-function从0x00到0x19进行了明确定义。
通俗解释:例如ECU功能工作电压一般在6V~18.5V之间。当软件通过ADC采样发现该模拟量通道输入电压低于6V时候,会经过一段时间的软件消抖后记录该供电电压欠压故障码,并通过0x19的子服务类型读取出来。如(是否为当前正在发生的故障,记录该故障那一时刻的其他快照信息 ,如车速,IGN状态等)。


一、理论描述

1.服务分类

0x01 reportNumberOfDTCByStatusMask(读取客户端定义状态掩码匹配的DTC(Diagnostic Trouble Code)数量)
0x02 reportDTCByStatusMask(读取客户端定义状态掩码匹配的DTC)
0x04 reportDTCSnapshotRecordByDTCNumber(检索客户端定义DTC掩码的记录数据(快照)如发生某一故障记录DTC时的车速,电源电压状态等)
0x06 reportDTCExtDataRecordByDTCNumber(读取某个DTC及其相关的环境数据,环境数据包括DTC状态,优先级,发生次数,老化计数器,时间戳,里程等,厂家还可以根据自己的需求定义一些此DTC产生时的测量数据。)
0x0A reportSupportedDTC(读取ECU支持的所有DTC的状态,包含支持的各个DTC编号以及相关状态)

博主在工作中基本上只用到这些sub-function,如果想了解所有的,大家可以参考规范手册哦!

2.状态掩码

由八个DTC状态位组成,占一字节。应用于请求消息中,以便客户端为状态与DTC状态掩码相匹配的DTC请求DTC信息。在这里插入图片描述
bit 0 : testFailed
指示最近执行test的结果,test失败置1,但是它不一定被ECU存储到EEprom中,只有当bit2或bit3被置1时DTC才会被存储。test通过则置0,如果调用了14服务清除DTC的话,也需要重新置0

“0”= DTC测试的最新结果表明未检测到故障。
“1”= DTC测试的最新结果表明了一个成熟的失败结果。

在这里插入图片描述

bit1:testFailedThisMonitoringCycle
该位表示在当前test中,诊断test是否已经报告了一个testFailed结果。当新的检测循环开始时,这个位需要置0,在调用了14服务后也需要置0。如果该位置1,那么一直保持置1状态直到新的检测循环开始,因此bit1可以理解为当前DTC。如果bit2和bit3通常一起使用。

“0”= testFailed:在当前操作周期内或在当前操作周期内调用ClearDiagnosticInformation后,尚未报告testFailed结果。
“1”= testFailed:在当前操作周期中至少报告了一次testFailed结果。

在这里插入图片描述

bit2:pendingDTC
根据ISO 14229的定义,当一个test结束时,若某个DTC满足故障触发条件,则bit2置1。bit2位其实是表示DTC处于testFailed和confirmedDTC之间的一个状态,称为待定DTC。因为DTC并不是一达到触发位就会被报出来的,而是故障出现一段时间后才会被确认,而中间的这个状态就用bit2位来表示,因此bit2位又可被称为待定DTC。当某个DTC刚达到判定条件的时候,bit2被置1,若一段时间后故障条件不满足了,则bit2置0,若一段时间后故障仍然存在,那么bit3就要置1了。

“0”= 在完成测试完成且未检测到故障的操作循环后或调用ClearDiagnosticInformation服务时,该位应设置为0。
“1”= 如果在当前操作循环中检测到故障,则该位应设置为1并锁定。

在这里插入图片描述

bit3:confirmedDTC
当bit3置1时,说明故障已经发生了一段时间,也就是bit2至少有一次被置1了。需要注意的是,bit3置1的时候,DTC被存储在EEprom中,但并不代表现在故障还存在,所以可以理解为历史故障。在调用14服务清除DTC后需要置0。

“0”= 自上次调用ClearDiagnosticInformation后,或在满足故障诊断码的老化条件(或由于故障记忆溢出而清除了故障诊断码)后,从未确认过故障诊断码。
“1”= 自上次调用ClearDiagnosticInformation后至少确认一次的DTC,且尚未满足老化标准

在这里插入图片描述

bit4:testNotCompletedSinceLastClear
因为并不是所有的DTC测试都是从上电就开始的,所以该位用来表示上次调用14服务清除诊断消息后,是否进行过完整的test。如果进行了完整的test,无论结果如何,都置0,否则置1。调用完14服务后就是置0的。

“0”= 自上次清除诊断信息以来,DTC测试至少返回一次测试结果(无论通过或失败)。
“1”= 自上次清除诊断信息后,DTC测试尚未运行到完成。

在这里插入图片描述

bit5:testFailedSinceLastClear
该位表示在上次调用14服务清除后DTC后,若test DTC未进行测试或者测试了但结果是pass时置0,如果test运行完成并且返回结果为fails,那么该位置1。在调用14服务清除DTC后需要置0。bit4和bit5通常一起使用。

“0”=自上次清除诊断信息后,DTC测试未显示失败结果。如果满足老化阈值或发生故障记忆溢出,则车辆制造商应负责将该位重置为零(“0”)。
“1”=自上次清除诊断信息以来,DTC测试至少返回一次失败结果。

在这里插入图片描述

bit6:testNotCompletedThisOperationCycle
该位表示在当前检测循环周期过程中DTC test是否完成,若完成了置0,未完成置1。在调用ClearDiagnosticDTC后需要置1。

“0”= DTC测试在当前驾驶循环期间(或自上次在当前操作循环期间清除诊断信息以来)完成。
“1”= 此操作循环(或自上次清除此操作循环的诊断信息后),DTC测试尚未运行到完成。

在这里插入图片描述

bit7:warningIndicatorRequested
该位报告警告指示,比如说仪表盘上的警示灯等。但不是所有的DTC都会有警告指示,如果没有和DTC相关的警告存在,该位应置0;如果该DTC有相关警告指示,bit3置1的时候,bit7也要置1。在调用14服务清除DTC后需要置0
在这里插入图片描述

举个栗子:博主项目中基本上都是状态掩码设置为0x09,即上图标红位置1。启用第0位和第3位(软件中配置)。当某一DTC发生且一直保持,则在ECU回复报文中的状态掩码字节为0x09。若该DTC发生过了,并且在我请求19服务时候已经不发生了,那么ECU回复报文中的状态掩码字节就变成了0x08(testFailed位不满足,置0)。

二、操作步骤

1.请求

19 01 / 19 02
在这里插入图片描述
如状态掩码设置为0x09,则图中第三个字节XX应该为09

19 04
在这里插入图片描述
该服务请求报文分为四段,在UDS中,每个DTC都有个名称–DTCMaskRecord。我们举个栗子,假设转向灯故障码名称设定为0xC14041。快照包含电源电压状态,车速信息。则该请求报文应为:19 04 C1 40 41 FF (读取转向灯故障发生时的快照信息), FF代表读取所有快照数据。

19 06
在这里插入图片描述
同理19 04服务,区别在于最后一个字节是DTCExtDataRecordNumber(DTC扩展数据记录编号),读取所有也设置为FF。按照上面转向灯故障的例子,扩展数据包含该故障发生次数。则该请求报文应为:19 06 C1 40 41 FF (读取转向灯故障发生次数信息)

19 0A
在这里插入图片描述
发送指令19 0A ,读取ECU支持的所有DTC列表以及各DTC的状态。

~

2.回复

1)积极响应

19 01
在这里插入图片描述
哇,请求报文辣么简约,ECU回复这么长。 ~~“有我在!别害怕”
解析:前两个字节就不解析了,看过之前的文章就知道了。
DTCStatusMask: (这一项客户会告诉你他的要求,莫担心)就是我们上面所说设置的状态掩码,我们就用0x09作为状态掩码。
标准上是DTCStatusAvailabilityMask,开发中都是我们设置好的掩码,可以理解成同一个数据09.只是为了筛选DTC的状态08 / 09

DTCFormatIdentifier: 故障码格式标识符,也就是说客户选择哪个标准的格式,如下图,我们选择SAE_J2012-DA_DTCFormat_00, 0x00。在这里插入图片描述

DTCCount: 满足DTCStatusMask的DTC个数。

综上所述ECU回复报文如下图所示:在这里插入图片描述

~

19 02
在这里插入图片描述
DTCAndStatusRecord: 满足DTCStatusMask 0x09(当前故障)的DTC以及状态。如:故障码0xC14041,0xC14042两个故障都正在发生。则ECU回复 59 02 09 C1 40 41 09 C1 40 42 09 (这种情况ECU回复的是多帧数据,下图仅供参考)如下图是发生一个故障时候的回复格式
在这里插入图片描述
~

19 04
在这里插入图片描述
举例读取转向灯故障码0xC14041发生时的快照数据
DTCAndStatusRecord :C1 40 41 09,其中09为设置的状态掩码
DTC快照记录组号: 占一字节,标准中要求的组号,就是为了分类下。
快照DID个数: 占一字节,该组号中的快照DID个数。
快照DID: 占两字节,每个快照数据都有它的ID。
快照DID的数据: 该快照具体的数据,具体占字节数,看客户要求的快照数据占多少字节。
我们假设快照记录组号为01,该组中有两个快照DID:0x0112电源电压,0x0113车辆启动按钮状态。则ECU回复数据如下:
59 04 (C1 40 41) 09 01 02 (01 12) 00 78 (01 13) 01 当转向灯发生故障时,电源电压为12V供电(0x0078转换十进制为120)。
启动按钮按下(01).

~

19 06
在这里插入图片描述
DTC扩展数据组号: 分类作用
扩展数据: 具体记录该故障时保存的数据,如发生故障次数。

我们假设DTC扩展数据组号为01,该组中有一个扩展数据:故障发生次数。则ECU回复数据如下:
59 06 (C1 40 41) 09 01 05。表示,故障C1 40 41发生了5次。

2)否定响应:
在这里插入图片描述

总结

是不是发现0x19服务相比较之前的服务要复杂些。的确如此。稳住!我们能赢。下一章0x14服务见~

->返回总目录<-

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【UDS】ISO14229之0x19服务 的相关文章

随机推荐

  • 运行roscore 出现[rosout-1] process has died [pid 13103, exit code 127

    运行roscore 出现 rosout 1 process has died pid 13103 exit code 127 问题 xff1a 运行roscore后出现该报错 xff1a rosout 1 process has died
  • Zookeeper异常解决方案

    目录 一 Starting Zookeeper FAILED TO START 1 查看错误日志信息 2 总结 二 bash ZookeeperServer sh command not found异常 2 总结 一 Starting Zo
  • 用端口映射的办法使用矩池云隐藏的vnc功能

    矩池云隐藏了很多高级功能待用户去挖掘 租用机器 进入jupyterlab 设置vnc密码 span class token assign left variable VNC PASSWD span span class token oper
  • Linux apt-get autoremove千万别乱用

    使用linux下的apt get autoremove命令的心得体会 前几天在实验室搭建要做人工智能项目的环境时 xff0c 由于未解决python2 7和python3 6共存时 xff0c 只利用python2 7版本的库文件 xff0
  • 基于gazebo实现多机器人编队仿真(三)

    基于gazebo实现多机器人编队仿真 xff08 三 xff09 三角编队与一字编队的实现 前言原理简图代码实现虚拟坐标的发布跟随者消息接收 总结 前言 前文已经阐述了多机器人的编队模型实现与多辆小车跟随的实现 xff0c 本文以通过tf通
  • 天猫精灵通过AliOS网桥控制Zigbee设备

    天猫精灵对接AliOS 设备 The article is released under license CC BY NC ND 4 0 IoT Boot Camp系列课程是由TorchIoTBootCamp团队发起 xff0c 广大IoT
  • 什么是最长前缀匹配?为什么网络前缀越长,其地址块就越小,路由就越具体?

    使用 CIDR 时 xff0c 路由表中的每个项目由 网络前缀 和 下一跳地址 组成 在查找路由表时可能会得到不止一个匹配结果 应当从匹配结果中选择具有最长网络前缀的路由 xff1a 最长前缀匹配 longest prefix matchi
  • STM32 模拟串口(UART)使用

    学习目标 xff1a 由于在项目中需要用到多路的串口使用 xff0c 而自己的单片机目前来讲没法满足我们项目所需要的串口需求 xff0c 因此要对普通的GPIO进行转换为UART进行使用 从而使得我们单片机能够得到多一路的串口 学习内容 x
  • Linux(ubuntu) 基础

    本文主要讲解一些有关linux下的相关知识 xff1a 文章目录 一 shell 命令二 文件系统三 ubuntu磁盘管理操作四 Ubuntu下压缩和解压缩五 ubuntu用户和组六 ubuntu 文件权限管理七 Linux连接文件操作八
  • CentOS-7.2部署Squid服务

    一 安装Squid代理服务器 yum y install squid 1 启动Squid服务和设置开机启动 systemctl start squid systemctl enable squid 2 详解Squid服务器配置文件 默认的
  • 【Docker系列】Docker Swarm

    docker swarm 介绍 为什么不建议在生产环境中使用docker compose xff1f docker compose 单节点的问题 xff0c 多个实体机就无法适应的 多机器如何管理 xff1f 如果跨机器做scale横向扩展
  • 【mysql】远程连接服务器数据库出现 Client does not support authentication protocol requested by server的解决方法

    前言 之前已经配好了本地数据库与云服务器上的数据库的连接 xff0c 也能正常进行操作 几个月后某天打开navicat想打开此连接却弹出了个错误提示窗口 xff0c 显示Client does not support authenticat
  • Ubuntu16.04系统卡顿,刷新率低,输入有延迟

    问题 xff1a 从某次开机之后ubuntu就一直卡顿 xff0c 原本以为是cscode占用过大 xff0c 在删除部分文件后没有改善 xff0c swp也未使用 每次挂起重加载也经常出现失败的情况 在不断查找资料及更改配置文件之后 xf
  • vs code git配置及使用

    一 下载及安装git程序 浏览器中搜索git官网 xff1a https git scm com download win进行程序下载 xff0c 根据自己的系统选择不同版本 xff08 32 bit Git for Windows Set
  • 根文件系统rootfs的移植及制作镜像ramdisk.img

    根文件系统的移植 介绍 1 移植根文件系统的工具 gt busybox 1 短小精悍 2 版本更新较快 xff0c 版本之间差异不大 2 如何获取busybox 1 xff09 https busybox net downloads 选择b
  • 解决linux共享文件夹丢失的问题

    虚拟机已经设置了共享文件夹 xff0c ubuntu里 mnt hgfs 没有共享文件夹 在终端输入此命令 xff0c 即可恢复 xff08 前提必须有vmware tools安装过了 xff09 sudo vmhgfs fuse host
  • 汽车CAN总线入门,通俗易懂

    附件 xff1a 文档原件github CAN总线简介 CAN xff08 Controller Area Network xff0c 控制器局域网络 xff09 属于工业现场总线的范畴 最初CAN总线是由德国的Bosch 博世 公司为汽车
  • CAN网络管理Autosar(入门)

    一 xff0c 个人小心得 作为刚入门两个月汽车电子行业的软件工程师 xff0c 现阶段在学习汽车组合开关的测试 xff08 主要用CANoe软件 xff09 xff0c 在学习过程中总结了一些自己理解的知识点 xff0c 当然也希望得到大
  • UDS诊断系列讲解-总目录

    一 前言 欢迎大家来学习 UDS诊断从入门到熟练 专栏 xff0c 该篇为总目录 xff0c 方便以后大家直接进入需要学习的文章 正所谓独乐乐不如众乐乐 1 UDS的简介和存在意义 UDS诊断系列讲解之 1 1 UDS开篇 二 UDS应用层
  • 【UDS】ISO14229之0x19服务

    文章目录 前言一 理论描述1 服务分类2 状态掩码 二 操作步骤1 请求2 回复 总结 gt 返回总目录 lt 前言 简称 xff1a ReadDTCInformation xff0c 读取DTC信息 功能 xff1a 用户通过请求该服务