Autosar UDS开发01(UDS诊断入门概念(UDSOnCan))

目录

回顾接触UDS的过程

UDS基本概念

UDS的作用

UDS的宏观认识

UDS的CAN通讯链路

UDS的报文种类


回顾接触UDS的过程

        自21年毕业后,我一直干了2年的Autosar CAN通讯开发。

        开发的主要内容简单概括就是:应用报文开发、网管报文开发、休眠唤醒开发,及CAN网络相关故障开发,并没有涉及UDS开发,但虽然没有涉及开发,但多多少少都听过一点(特别是后来跑路的时候,恶补了学习了一手,嘿嘿)。

        我刚开始接触诊断相关内容的时候,对诊断没有任何概念。所以听到同事们讨论什么SID啦、DID啦,DTC啦,什么27啦。

        不能说听得不太懂,只能说一脸懵逼。

        小小的脑瓜大大的问号,SID?SID是什么?怎么还有DID,DTC?它们是什么关系,他们是一个类别的东西吧?长得这么像!

        所以就百度,好了,假设你是一个对UDS诊断没有任何概念的小白。你看看百度出来的东西。

        你看看上面这图,我就问你,你说这是小白能看懂的东西吗??什么每种服务都有自己独立的ID,我连服务是什么鬼都不知道,我看得懂才怪了。

        所以,我连SID的概念都花了好久才搞明白。

        于是,我问同事,有没有什么资料能够学习UDS,然后,他们都告诉我,让我看14229-1和15765-2这两个标准文档。

        然而,一个文档三四百页,内容这么多,怎么看啊,主要是,对小白来说,如此多内容的文档,是很难捉住重点的,这样就很费劲了。

        有一次,领导把我派去了测试部支援3天,让我跟着一个测试部的同事测UDS的内容,想起来也挺不好意思,这3天我也没帮到什么忙,主要是不懂这些数据,举个小栗子,看下面这张图。

        这一串串数据,让一个对诊断没有任何概念的小白来看哪里能看懂啊。

        后来,我明白了什么是SID、DID,什么又是DTC,诊断报文的这些数据要怎么看。

        但是,由于没有具体开发过UDS,因此并不知道这些东西具体是怎么去开发的。比如19服务有个DTC状态码,这个状态码是要怎么开发?是Autosar配置工具配置的吗?还是不需配置静态代码已经全部实现?

        两年过去,在换了一个企业后,有机会开始正式开发UDS和对UDS进行完整的测试,让我对UDS从概念上的认识进入到了UDS各个具体内容开发的认识。

        下面就开始讲一下我理解的UDS基本概念。


UDS基本概念

UDS的作用

        当一辆汽车出现故障的时候,维修人员会拿着诊断仪接上汽车,然后读取出车上的故障信息,这样就知道车上什么地方出故障了。(这只是其中一个功能,另外还有软件升级、标定等等。)

        能实现山上面这个过程,就是因为有UDS的存在。

        我们所说的诊断UDS开发,就是代码实现上面图中“ECU-A”的诊断功能。最终使得ECU-A能够根据诊断仪的请求,返回对应的数据信息。

UDS的宏观认识

        就像地球总共由7块大陆组成一样。且先不管UDS的具体细节内容,UDS世界总共由以下这些“大陆板块”组成:

        大家把这些大陆板块称之为:SID,即:诊断服务ID,简称“服务” 。每一个服务都有它的独特的职能。(车企常用到的每个服务后续我会每个都写一篇去展开描述。)

        整个UDS都是围绕上面这些服务展开的,服务下面又会有子服务。这就好比“国家”的概念。“国家”是不会做事情的,做事情的是“国家”下面的各个“部门”,你可以把各个诊断服务理解为各个“国家”,子服务理解国家下面的“部门”。

        举个栗子:28服务(CommunicationControl)有下面的这些子服务。

       28服务它的作用是通讯控制,但是真正具体干活的是它的各个子服务,比如0x00:使能报文的发送和接收。

UDS的CAN通讯链路

       UDS的最终目的,是如一开始那张图。告诉诊断仪自己的故障信息、通过诊断仪升级软件、标定等等。

        而通讯总线,就是实现这些功能的媒介。​

        所谓的UDSOnCan,其实就是字面意思:基于CAN总线的UDS

        大家都知道,汽车上不止有CAN总线,可能还有LIN总线、以太网等等。所以,UDS还可以“On”在其它总线上。我们这里讲的是UDSOnCan,如下图。

         从上面这张官方标准的图就可以看出UDS在整个CAN通讯中的链路了,但会比较抽象。

        所以我按照Autosar的架构画了下面的图,UDS的整个链路如下图红色线所示:

        UDSOnCan相关协议如下图示。

        11898:这个是关于CAN总线的相关标准。比如它会描述CANH、CAHL的电平要求是多少、一帧CAN报文的结构定义、关于CAN Tranceive的一些要求等等。从上面的图中也可以看到,不只是诊断报文的这部分要满足11898,网管报文、应用报文也是同样要满足这个。实际上,所有的CAN报文,都得满足11898。

        15765-2:这个就是诊断报文的传输协议标准,比如发送多帧时要如何发送,每帧的时间间隔等等。

        14229-1:到这一层,才是真正打开UDS的世界,具体的UDS功能都在这个标准文档中定义。

        诊断开发。一般来说实际上是指CANTP模块(15765-2)、DCM模块和DEM模块(14229-1)。

UDS的报文种类

        UDS总共有3种报文。物理请求报文、功能请求报文、响应报文

        我们先来讲一下为什么会有这3种诊断报文。

        由于一辆汽车上有十几个ECU。因此,诊断仪对车上ECU的操作共有两种情况。

        ①对某一个ECU单独进行操作。比如读取某一个ECU的故障信息、升级某一个ECU的软件

        ②同时对所有ECU进行操作。比如整车处于唤醒过程中,大家都在往外发送报文,总线负载率相对较高。但诊断人员现在需要对某一个ECU升级软件,总线负载率高可能会影响,因此,需要先让所有的ECU都停止发送应用报文。这时候就需要通知所有ECU停发应用报文。

        根据上面第①种情况。就出现了第一种诊断报文类型:物理请求报文。每个ECU都有自己唯一的诊断物理地址。当ECU接收到物理地址是指向自己的诊断报文时就要根据这帧报文的请求内容做出对应的操作。简单来说,就是一对一。

        根据上面第②种情况。就出现了第二种诊断报文类型:功能请求报文。在同一个CAN网络上所有ECU的功能地址是一样的。在同一个CAN网络,当ECU接收到功能地址的诊断报文时都要根据这帧报文的请求内容做出对应的操作。简单来说,就是一对多。

        好了,物理请求报文和功能请求报文都是ECU要接收的诊断报文,ECU接收到诊断报文后需要回应。因此就出现了第三种诊断报文类型:响应报文

        上面的描述可以用下面两张图表示:

        物理请求示例如下图所示,诊断仪发送物理请求报文(红色),ECU接收到后,回应响应报文(蓝色) 

        功能请求示例如下图所示:诊断仪发送功能请求报文(红色),ECU接收到后,回应响应报文(蓝色) 

        另外需要注意的是:物理请求报文是支持回应多帧的。而功能请求报文只支持回应单帧。这在15765-2中8.3.2.4就有说明。


        到这里为止。关于UDS的一些基本概念应该就差不多了。接下来我会先讲一下15765-2,即UDSOnCan的“OnCan”,也即CANTP层。


返回目录:

Autosar BSW 开发笔记(目录)-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PostgreSql本地备份为dump文件与恢复】使用脚本一键备份为dump文件

环境:windows数据库:postgresql 1.准备脚本 backUpDb.bat 脚本为备份脚本,双击运行,右键可以选择编辑;restoreDb.bat 脚本为恢复脚本,双击运行,右键选择编辑; 1.1 脚本介绍 如上图…

docker更改存储目录原因及方案

为什么一定要将docker的存储目录挂载到其他目录 docker在安装时默认存储目录在/var/lib/docker,而该目录是在系统盘下的。docker安装后,会使用各种各样的镜像,动辄几个G,那么如此多的镜像文件,装着装着系统盘就撑爆了…

【mysql】将逗号分割的字段内容转换为多行并group by

先说需求: 公司想让我通过mysql导出一个报表,内容为公司每个人参加会议的次数,现在有一个会议表fusion_meeting,正常的逻辑是通过人员直接group by就可以得出结果,但是我们的参会人是通过逗号分割这种方式存在一个字段…

网络原理-UDP/TCP详解

一. UDP协议 UDP协议端格式 由上图可以看出,一个UDP报文最大长度就是65535. • 16位长度,表示整个数据报(UDP首部UDP数据)的最大长度(注意,这里的16位UDP长度只是一个标识这个数据报长度的字段&#xff0…

银河麒麟等 Linux系统 安装 .net 3.1,net 6及更高版本的方法

确定 系统的版本。华为鲲鹏处理器是 Arm64位的。 于是到windows 官网下载对应版本 .net sdk 下载地址 https://dotnet.microsoft.com/zh-cn/download/dotnet 2.下载完成后,再linux 服务器 上进入到文件所在目录,建议全英文路径。 然后依次输入以下命令 …

基于 Gin 的 HTTP 代理 demo

上次用 TCP 模拟了一个 HTTP 代理之后,感觉那样还是太简陋了,想着是不是可以用框架来做一个有点实际用处的东西。所以,就思索如何用 golang 的 Gin 框架来实现一个?嗯,对的你没有听错,是 gin 框架。你可能会…

Javaweb之javascript的小案例的详细解析

1.5.4 案例 1.5.4.1 需求说明 鲁迅说的好,光说不练假把式,光练不说傻把式。所以接下来我们需要通过案例来加强对于上述DOM知识的掌握。需求如下3个: 点亮灯泡 将所有的div标签的标签体内容后面加上:very good 使所有的复选框呈现被选中的…

【原型详解】JavaScript原型链:深入了解Prototype,超级详细!!!

😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:JavaScript进阶指南 👐学习格言:成功不是终点,失败也并非末日,最重要的是继…

1.docker linux离线环境安装 20.1.0.12

目录 概述下载解压docker 卸载docker 安装检查安装环境常用命令结束 概述 docker离线环境安装 20.1.0.12 , centos 7.x 下载 安装包下载 解压 [roothadoop01 soft]# unzip docker_20_1_0_12.zip [roothadoop01 soft]# cd docker_20_1_0_12 [roothadoop01 docker_20_1_0_1…

如何在 Idea 中修改文件的字符集(如:UTF-8)

以 IntelliJ IDEA 2023.2 (Ultimate Edition) 为例,如下: 点击左上角【IntelliJ IDEA】->【Settings…】,如下图: 从弹出页面的左侧导航中找到【Editor】->【File Encodings】,并将 Global Encoding、Project E…

2352 智能社区医院管理系统JSP【程序源码+文档+调试运行】

摘要 本文介绍了一个智能社区医院管理系统的设计和实现。该系统包括管理员、护工和医生三种用户,具有社区资料管理、药品管理、挂号管理和系统管理等功能。通过数据库设计和界面设计,实现了用户友好的操作体验和数据管理。经过测试和优化,系…

.net在使用存储过程中IN参数的拼接方案,使用Join()方法

有时候拼接SQL语句时&#xff0c;可能会需要将list中的元素都加上单引号&#xff0c;并以逗号分开&#xff0c;但是Join只能简单的分开&#xff0c;没有有单引号&#xff01; 1.第一种拼接方案 List<string> arrIds new List<string>(); arrIds.Add("aa&qu…

Spring -Spring之依赖注入源码解析(下)--实践(流程图)

IOC依赖注入流程图 Autowired&#xff1a;注入的顺序及优先级&#xff1a;type-->Qualifier-->Primary-->PriOriry-->name Resource&#xff1a;先通过Resource上指定的byName进行注入&#xff0c;若byName没找到&#xff0c;则与Autowired注入方式相同&#xff…

Django(一、简介,安装与使用)

文章目录 一、Django引入1.web应用程序什么是web&#xff1f;web引用程序的优点web应用程序的缺点什么是web框架 2.纯手写web框架1.web框架的本质2.HTTP协议的特性&#xff1a;3.编写基于wsgire模块搭建web框架代码封装优化代码封装 二、Django框架的学习1.Python中的主流框架2…

Vue中的常用指令v-html / v-show / v-if / v-else / v-on / v-bind / v-for / v-model

前言 持续学习总结输出中&#xff0c;Vue中的常用指令v-html / v-show / v-if / v-else / v-on / v-bind / v-for / v-model 概念&#xff1a;指令&#xff08;Directives&#xff09;是Vue提供的带有 v- 前缀 的特殊标签属性。可以提高操作 DOM 的效率。 vue 中的指令按照不…

京东数据分析:2023年10月京东洗衣机行业品牌销售排行榜

鲸参谋监测的京东平台10月份洗衣机市场销售数据已出炉&#xff01; 10月份&#xff0c;洗衣机市场整体销售呈上升走势。鲸参谋数据显示&#xff0c;今年10月&#xff0c;京东平台洗衣机市场的销量为143万&#xff0c;环比增长约23%&#xff0c;同比增长约1%&#xff1b;销售额约…

有源RS低通滤波

常用的滤波电路有无源滤波和有源滤波两大类。若滤波电路元件仅由无源元件&#xff08;电阻、电容、电感&#xff09;组成&#xff0c;则称为无源滤波电路。无源滤波的主要形式有电容滤波、电感滤波和复式滤波(包括倒L型、LC滤波、LCπ型滤波和RCπ型滤波等)。若滤波电路不仅有无…

c语言:用指针解决有关字符串等问题

题目1&#xff1a;将一个字符串str的内容颠倒过来&#xff0c;并输出。 数据范围&#xff1a;1≤len(str)≤10000 代码和思路&#xff1a; #include <stdio.h> #include<string.h> int main() {char str1[10000];gets(str1);//读取字符串内容char* p&str1[…

Git版本控制系统之分支与标签(版本)

目录 一、Git分支&#xff08;Branch&#xff09; 1.1 分支作用 1.2 四种分支管理策略 1.3 使用案例 1.3.1 指令 1.3.2 结合应用场景使用 二、Git标签&#xff08;Tag&#xff09; 2.1 标签作用 2.2 标签规范 2.3 使用案例 2.3.1 指令 2.3.2 使用示例 一、Git分支&…

Linux下C++调用python脚本实现LDAP协议通过TNLM认证连接到AD服务器

1.前言 首先要实现这个功能&#xff0c;必须先搞懂如何通过C调用python脚本文件最为关键&#xff0c;因为两者的环境不同。本质上是在 c 中启动了一个 python 解释器&#xff0c;由解释器对 python 相关的代码进行执行&#xff0c;执行完毕后释放资源。 2 模块功能 2.1python…