车载测试之UDS诊断协议

2024-08-31 19:12
文章标签 协议 测试 uds 诊断 车载

本文主要是介绍车载测试之UDS诊断协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是UDS诊断

也被称为离线诊断或者增强型诊断,面向汽车上的所有ECU的诊断,可以通过UDS进行读取、写入ECU运行时的一些数据,刷写ECU、获取故障信息等,UDS是一套统一的诊断服务命令,分为6大类26个服务

26个诊断服务

UDS中的26个服务是规定在ISO的14229-1协议中

诊断和通信管理功能单元

故障码传输功能单元

数据传输类功能单元

输入输出控制功能单元

例行程序功能单元

上传和下载功能单元

诊断的请求与响应

UDS协议规定诊断的整个过程是是请求响应模式,其实这个做web的就很好理解了,就如同我们http请求,基于请求响应的,发送请求获取响应,在USD诊断中是由诊断仪发送诊断请求,ECU接收到诊断请求后处理,再发回给诊断仪

诊断请求和诊断响应的本质就是一段符合UDS协议规范的16进制的报文

下图所示:

这里我们看到开头SID是22,可以回头去看是6大服务内的哪个功能,可以找到是数据传输类功能单元里面包含22,作用是通过ID读取数据,实际上这段诊断请求就是读取ECU当前工作的电压信息

这里的7F 22 11 这个其实是负响应(否定响应),是失败的,这个之前工作中没有Zenzifi认证经常碰到这个否定响应

下面会肯定响应,才代表这次诊断请求响应正常的

否定响应码

否定响应码也叫NRC(Negative Response Code),当一次UDS诊断请求失败的时候ECU会返回一个否定响应码

常见的否定响应码

11:代表ECU不支持该服务

12:代表EUC不支持当前服务的子功能

22:某一项诊断请求需要在某个更高级的扩展会话下进行

31:很多请求需要提供一些数据参数,有些数据参数是不被支持的

33:权限问题

请求和响应的寻址

CAN总线上面会有很多个ECU是如何实现将诊断请求发送给某个具体的ECU呢?

在UDS诊断协议中除了规定26个服务的服务细节,还规定了诊断请求和响应报文发送时必须要指明寻址信息,寻址信息包含了源地址和目标地址

基于CAN总线的诊断通信,由于每个ECU可以根据事先设定只处理总线上指定CAN报文ID的报文,因此UUS协议中的诊断请求响应的地址信息本质上就是CAN报文的地址ID

诊断请求之物理寻址

物理寻址其实是诊断仪与单个ECU之间的通信,只有指向的ECU可以响应报文

诊断请求之功能寻址

诊断仪与多个ECU之间的通信,可以理解为群发,一般企业都把功能寻址的CAN报文ID设置为7DF

诊断会话控制

首先要知道会话有哪些:

10 01:默认会话

10 02:编程会话

10 03:扩展会话

不同会话下所能操作的诊断请求是不同的

10服务请求和响应的报文格式

 

这篇关于车载测试之UDS诊断协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124760

相关文章

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测