车载诊断框架 --- UDS小白入门篇

news2024/11/18 16:38:10

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。

老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:

所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。人就应该满脑子都是前途,不再在意别人的看法不再害怕别人讨厌自己,不再畏手畏脚忧心忡忡也不会在睡前反回忆白天的行为,是否让对方产生误解用你那精神内耗的态度去搞学习搞事业搞钱,然后用躺平和摆烂的态度对待人际关系,烦恼能消失一大半。
无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。

时间不知不觉中,快要来到深秋。国庆假期结束,又开始新的忙碌。成年人的我也不知道去哪里渡自己的灵魂,独自敲击一些文字算是对这段时间做一个记录。

一、UDS很简单却总学不会?

在汽车电子领域,UDS(Unified Diagnostic Services,统一诊断服务)是一项至关重要的技能。然而,许多初学者甚至多年工作经验的老工程师都发现难以精准掌握这一技能。这可能是因为你的学习方法存在问题。为了帮助大家更有效地学习UDS,我们将从三个方面进行深入探讨:UDS是什么、如何发送UDS请求、以及如何在AUTOSAR框架中实现UDS(这部分将在后续文章中讲解)。

搞明白这三个问题,轻松掌握UDS;

是什么?(ISO14229-1)

UDS是基于ISO 14229-1标准的一套诊断服务协议,它定义了汽车电子控制单元(ECU)之间的通信规则。这套协议不仅涵盖了诊断会话控制、安全访问等基本功能,还包括了数据读写、输入/输出控制等高级功能。因此,对于汽车电子开发者来说,理解UDS协议是设计和开发汽车电子系统的基础。

为了深入学习UDS,你需要熟悉ISO 14229-1标准的各个部分,包括其定义的服务、子功能、参数以及相关的诊断会话状态机。同时,你还应该了解UDS协议与其他相关标准(如ISO 15765-2)之间的关联,以便在实际应用中更好地使用UDS。

怎么发?(ISO15765-2)

在汽车电子系统中,UDS请求通常是通过网络(如CAN总线)发送的。ISO 15765-2标准定义了如何在基于CAN的网络中传输诊断数据。这个标准采用了网络传输层协议(N_WL_TP)来确保数据的可靠传输。

为了发送UDS请求,你需要了解ISO 15765-2标准的各个细节,包括数据帧的构成、传输超时机制、错误处理流程等。此外,你还需要掌握如何使用诊断工具(如CANoe、Vector CANalyzer等)来发送和接收UDS请求。这些工具通常提供了图形化的用户界面和丰富的诊断功能,可以帮助你更好地理解和使用UDS协议。

在实际操作中,你可以通过以下步骤来发送UDS请求:

-> 配置诊断工具:选择正确的CAN通道、波特率等参数。

-> 建立诊断会话:发送一个诊断会话控制请求来启动或停止诊断会话。

-> 发送UDS请求:根据ISO 14229-1标准,构建并发送相应的UDS请求。

怎么做?(AUTOSAR Dcm, Dem)

我们主要讨论了UDS协议的基本概念以及如何通过ISO 15765-2标准发送UDS请求。然而,对于软件工程师及对软件感兴趣的朋友来说,如何在AUTOSAR框架中实现UDS同样重要。

在后续的文章中,我们将深入探讨AUTOSAR中的DCM(Diagnostic Communication Manager)和DEM(Diagnostic Event Manager)模块,以及如何使用这些模块来实现UDS协议。我们将从软件架构、模块接口、配置参数等方面进行详细讲解,并提供实际案例来帮助大家更好地理解和应用AUTOSAR中的UDS实现方法

前两问适用于所有汽车电子开发者、管理者等,本篇文章将针对前两个问题展开描述。

在这里插入图片描述

第三问适用于软件工程师及对软件感兴趣的朋友,将在后续文章中讲解AUTOSAR中UDS的软件实现方法。

二、 UDS是什么?

UDS (Unified Diagnostic Services) 是一种用于车辆诊断和通信的标准化协议,它是ISO 14229标准的一部分,也被称为UDS协议或UDS服务。UDS协议定义了一系列的服务和子服务,用于在诊断设备和车辆ECU(电子控制单元)之间进行通信,以执行各种诊断任务,如读取和清除故障码、配置ECU参数、请求和设置数据等。

在这里插入图片描述

车载诊断非常类似医生与病人的关系。

本质上讲,UDS就是服务于Client与Server之间用于信息交互的标准协议。

什么是Client与Server?

在这里插入图片描述

Client:外部诊断设备,如诊断仪、CANoe等

Server:车身电子件(ECU)

诊断的最基本的内容其实就是请求和响应,请求即由Client端发出的数据指令,响应为由Server端返回的数据信息;搞明白UDS,最先需要搞明白请求和响应的通用格式,即做到一通百通。

掌握通用格式,即掌握所有

所有的UDS指令都直接套用如下请求和响应格式

请求格式:

###

响应格式:

正响应

在这里插入图片描述

负响应:

在这里插入图片描述

【例子1】:

请求:10 01(“10”为Request SID,“01”为Sub function)

响应(正):50 01 00 32 01 F4(“50”为Response SID,“01 00 32 01 F4”为data-parameter)

【例子2】:

请求:22 F1 90(“22”为Request SID,“F1 90”为data-parameter)

响应(正):62 F1 90 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10(“62”为Response SID,“F1 90 00……0E 0F 10”为data-parameter)

具体的服务该怎么看?

理解了如上通用的诊断格式后,非常简单的学习服务的方法,一般情况仅仅需要从字面意思既能了解内涵;本文以10服务为例展开描述,其余服务大家可以自行查阅ISO14229-1。

DiagnosticSessionControl (10 hex) service

10服务的字面意思就是Session控制。

UDS 10服务用于控制ECU(电子控制单元)在不同诊断会话之间的切换。在车辆诊断过程中,诊断仪与ECU之间需要建立通讯会话,以执行各种诊断任务。UDS 10服务允许诊断仪通过发送请求报文来控制这些诊断会话的建立、切换和结束。

它允许诊断仪通过发送请求报文来建立、切换和结束与ECU之间的诊断会话,从而执行各种诊断任务。UDS 10服务支持多种会话类型和控制类型,以满足不同的诊断需求。

在这里插入图片描述

DiagnosticSessionControl (10 hex) service请求(来源:ISO14229-1)

10服务,请求长度固定为2个字节,第一个字节为SID 10,第二个字节为子功能;

在这里插入图片描述

正响应中除了DataByte#1 为Response SID和 DataByte#2 diagnosticSession外,sessionParamaterRecord的参数格式可以参考客户需求规范。

UDS 10服务支持多种会话类型,较为常用的几个子功能服务为:

默认会话(01 Default Session):上电/远程ECU初始化后,完成初始化的ECU默认启动默认会话模式。这是基础状态,不需要任何诊断应用程序的在线服务来保持此模式激活。

扩展会话(03 Extended Session):此状态支持在ECU存储器中进行操作,如#2E写服务、#28通信控制、#31例程等操作。

编程会话(02 Programming Session):此会话下支持ECU内存编程操作,一般在此会话下执行bootloader操作。

DTC相关内容

DTC(Diagnostic Trouble Code,诊断故障码)是指车辆电子控制单元(ECU)存储的车辆故障代码,它是一种数字编码,用于标识车辆的故障问题。

车辆在运行过程中ECU会持续监控车辆运行状态,检测到故障时,它会记录相应的DTC,并将其存储在车辆的故障存储器中。通过读取故障存储器中的DTC,可以快速确定车辆的故障问题,并采取相应的修复措施。

DTC Status

DTC状态为1个字节,包含8个Bit的状态。基本上可以直接翻译从字面意思即可理解含义;详细的可以参见ISO14229-1附录。

在这里插入图片描述

与DTC相关的诊断服务

1. DTC状态更新控制ControlDTCSetting (85 hex) service

UDS 85服务,字面意思为控制诊断故障代码设置服务,是UDS协议中的一个重要部分,该服务用于停止或继续ECU中DTC状态位的更新。

客户端可以指示ECU停止或继续更新DTC状态位。这在某些特殊场景下非常有用,例如在ECU刷写过程中,为了避免因刷写操作导致的DTC误报,可以临时停止DTC状态位的更新。

在这里插入图片描述

ControlDTCSetting (85 hex) service(来源:ISO14229-1)

2. DTC信息的读取ReadDTCInformation (19 hex) service

UDS 19服务,字面意思即读取诊断故障代码信息(DTC),是UDS协议中的一个重要组成部分,用于读取诊断故障代码(DTC)相关信息。

UDS 19服务允许诊断仪/上位机从车辆内的任何ECU(电子控制单元)读取故障诊断码(DTC)信息的状态。

在ECU运行过程中如检测到故障,会记录对应的故障码,并根据故障严重及危害程度确定是否需要点亮仪表盘的发动机故障灯。

UDS 19服务包含28个子服务(Sub-Function),每个子服务都有其特定的功能,常用的几个服务如下:

01子服务:读取符合掩码条件的DTC数量。这里的掩码由客户端定义,可以指定读取当前故障、历史故障或全部故障。

02子服务:读取符合掩码条件的DTC列表及其状态。同样,掩码的定义与01子服务相同。

04子服务:读取DTC快照信息,即与DTC关联的已存储数据记录。这些数据可以帮助工程师在ECU出现故障时了解车辆的历史和实时故障信息。

06子服务:读取扩展信息,包括DTC状态、优先级、发生次数、时间戳、里程等。

0A子服务:读取ECU支持的所有DTC列表及其状态,此服务不需要掩码。

3. DTC的清除ClearDiagnosticInformation (14 hex) service

UDS 14服务的字面意思就是清除存储的故障诊断信息,这些信息可以是某一个特定的故障码(DTC),也可以是某个类别的故障诊断码(如动力总成、车身、底盘等),甚至是所有的故障诊断码。

在这里插入图片描述

03、UDS怎么发?

我们所常用的CAN/LIN诊断报文消息只有8个Byte长度,而上文描述的请求和响应多则几十个的Byte,本章节将阐述诊断消息如何收发;

CAN诊断由发送端的请求与接收端的响应构成,诊断即为发送端与接收端数据往来。有的诊断一条消息完成,有的诊断需要多条消息完成,毕竟在诊断中,一条CAN消息只包含8个字节长度。对于一条CAN诊断消息的分段发送问题,即为网络层需要讨论的内容。

网络层的作用可以看作是把CAN诊断通信上层需要传输的数据进行封装准备发送的过程,若数据量小于等于7个字节数据(本文只讨论正常地址模式),则用单帧发送,数据量大于7个字节数据(ISO 15765规定最大传输数据量为4095个字节),则用多帧发送。网络层的作用就好比一堆货物准备发货,货物量少,即使用一辆车托运,货物量多,则需要使用多辆车进行托运。

如下图所示,当需要传输的字节小于等于7个字节时,网络层只需将数据封装成一个单帧发送即可;

在这里插入图片描述

单帧数据收发(来源:ISO15765-2)

当需要传输的字节大于7个字节时,网络层需要将数据封装成一个首帧加若干个连续帧,然后再发送。

在这里插入图片描述
在这里插入图片描述

请求10 01

响应 50 01 00 32 00 C8

请求和响应长度都在单帧范围内,则消息Trace中报文序列为:

请求 710:[02] 10 01 [00 00 00 00 00]

响应 720:[06] 50 01 00 32 00 C8 [AA]

在这里插入图片描述

请求22 F1 90

响应 62 F1 90 31 32 33 34 37 38 20 20 20 20 20 20 20 20 20 20 20

请求在单帧范围内,响应长度需要使用首帧+连续帧传输,则消息Trace中报文序列为:

请求 710:[03] 22 F1 90 [00 00 00 00]

响应 720:[10 14] 62 F1 90 31 32 33

响应 720:[21] 34 37 38 20 20 20 20

响应 720:[22] 20 20 20 20 20 20 20

04、如何快速学UDS?

4.1推荐的学习技巧

自己尝试编辑诊断调查问券文件,有条件的同学可以编辑CDD文件

使用CANoe(或其余设备)调试诊断请求和响应,观察Trace报文

按照诊断需求,软件改写简单指令,并测试验证

在这里插入图片描述
诊断服务列表
在这里插入图片描述
DID列表
在这里插入图片描述
DTC列表

搁笔分享完毕!

愿你我相信时间的力量

做一个长期主义者

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

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

相关文章

强大的正则表达式——Easy

进入题目界面输入难度1后,让我们输入正则表达式(regex): 目前不清楚题目要求,先去下载附件查看情况: import re import random# pip install libscrc import libscrcallowed_chars "0123456789()|*&q…

字节青训-小C的外卖超时判断、小C的排列询问

目录 一、小C的外卖超时判断 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、小C的排列询问 问题描述 测试样例 最终代码: 运行结果: ​编辑 一、小C的外卖超时判断…

游戏引擎学习第13天

视频参考:https://www.bilibili.com/video/BV1QQUaYMEEz/ 改代码的地方尽量一张图说清楚吧,懒得浪费时间 game.h #pragma once #include <cmath> #include <cstdint> #include <malloc.h>#define internal static // 用于定义内翻译单元内部函数 #…

C++11(五)----lambda表达式

文章目录 lambda表达式 lambda表达式 lambda表达式可以看作一个匿名函数 语法 [capture-list] (parameters) mutable -> return-type { statement } auto func1 [](int a, int b) mutable -> int {return a b; }; *capture-list&#xff1a;捕捉列表。编译器根据[]来 判…

CSS基础知识05(弹性盒子、布局详解,动画,3D转换,calc)

目录 0、弹性盒子、布局 0.1.弹性盒子的基本概念 0.2.弹性盒子的主轴和交叉轴 0.3.弹性盒子的属性 flex-direction row row-reverse column column-reverse flex-wrap nowrap wrap wrap-reverse flex-dirction和flex-wrap的组合简写模式 justify-content flex-s…

【Qt聊天室】客户端实现总结

目录 1. 项目概述 2. 功能实现 2.1 主窗口设计 2.2 功能性窗口 2.3 主界面功能实现 2.4 聊天界面功能实现 2.5 个人信息功能开发 2.6 用户信息界面设置功能 2.7 单聊与群聊 2.8 登录窗口 2.9 消息功能 3. 核心设计逻辑 3.1 核心类 3.2 前后端交互与DataCenter 4…

RK3568平台开发系列讲解(高级字符设备篇)IO 模型引入实验

🚀返回专栏总目录 文章目录 一、IO 的概念二、IO 执行过程三、IO 模型的分类阻塞 IO非阻塞 IOIO 多路复用信号驱动异步 IO沉淀、分享、成长,让自己和他人都能有所收获!😄 一、IO 的概念 IO 是英文 Input 和 Output 的首字母, 代表了输入和输出, 当然这样的描述有一点点…

简单实现QT对象的[json]序列化与反序列化

简单实现QT对象的[json]序列化与反序列化 简介应用场景qt元对象系统思路实现使用方式题外话 简介 众所周知json作为一种轻量级的数据交换格式&#xff0c;在开发中被广泛应用。因此如何方便的将对象数据转为json格式和从json格式中加载数据到对象中就变得尤为重要。 在python类…

【qt】控件2

1.frameGeometry和Geometry区别 frameGeometry是开始从红圈开始算&#xff0c;Geometry从黑圈算 程序证明&#xff1a;使用一个按键&#xff0c;当按键按下,qdebug打印各自左上角的坐标&#xff08;相当于屏幕左上角&#xff09;&#xff0c;以及窗口大小 Widget::Widget(QWid…

LeetCode654.最大二叉树

LeetCode刷题记录 文章目录 &#x1f4dc;题目描述&#x1f4a1;解题思路⌨C代码 &#x1f4dc;题目描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子…

华为欧拉系统使用U盘制作引导安装华为欧拉操作系统

今天记录一下通过U盘来安装华为欧拉操作系统 华为欧拉操作系统是国产的一个类似于Centos的Linus系统 具体实现操作步骤&#xff1a; 先在官网下载欧拉系统镜像点击跳转到下载 准备好一个大于16g的U盘 &#xff0c;用于制作U盘启动 下载一个引导程序制作工具&#xff0c;我使用…

软考教材重点内容 信息安全工程师 第 3 章 密码学基本理论

&#xff08;本章相对老版本极大的简化&#xff0c;所有与算法相关的计算全部删除&#xff0c;因此考试需要了解各个常 用算法的基本参数以及考试中可能存在的古典密码算法的计算&#xff0c;典型的例子是 2021 和 2022 年分别考了 DES 算法中的 S 盒计算&#xff0c;RSA 中的已…

如何让手机ip变成动态

在数字化浪潮中&#xff0c;手机已成为我们日常生活中不可或缺的一部分。无论是浏览网页、使用社交媒体还是进行在线购物&#xff0c;手机都扮演着举足轻重的角色。然而&#xff0c;在享受网络带来的便利时&#xff0c;我们也需要关注网络安全和隐私保护。静态IP地址可能让手机…

64位程序调用32位dll解决方案

最近在做64位代码移植&#xff0c;发现很多老代码使用到了第三方的32位dll;而且这些第三方32位dll库已经年代久远&#xff0c;原开发商已不再了&#xff1b;所以急切的需要在64位主程序 中使用老的32位dll;查询很多解决方案 发现目前只有使用com 进程外组件的方法可以解决此问题…

无人机挂载超细干粉灭火装置技术详解

无人机挂载超细干粉灭火装置技术是一种创新的灭火方式&#xff0c;结合了无人机的远程操控能力和超细干粉灭火剂的高效灭火性能。以下是对该技术的详细解析&#xff1a; 一、技术背景与原理 背景&#xff1a;高层建筑灭火救援困难一直是公认的世界性难题。无人机技术的发展为…

信号-3-信号处理

main 信号捕捉的操作 sigaction struct sigaction OS不允许信号处理方法进行嵌套&#xff1a;某一个信号正在被处理时&#xff0c;OS会自动block改信号&#xff0c;之后会自动恢复 同理&#xff0c;sigaction.sa_mask 为捕捉指定信号后临时屏蔽的表 pending什么时候清零&…

Linux的指令(三)

1.grep指令 功能&#xff1a; 在文件中搜索字符串&#xff0c;将找到的行打印出来 -i&#xff1a;忽略大小写的不同&#xff0c;所以大小写视为一样 -n&#xff1a;顺便输出行号 -v:反向选择&#xff0c;就是显示出没有你输入要搜索内容的内容 代码示例&#xff1a; roo…

onvif协议相关:4.1.7 Digest方式云台控制停止

背景 关于onvif的其实很早之前我已经在专栏中写了不少了, 使用onvif协议操作设备 但最近有陆陆续续的粉丝问我, 希望我在写一些关于 onvif的设备自动发现、预置位跳转、云台操作的博客。 满足粉丝的需求,安排。 今天我们来实现 设备云台的控制(启动) 实现 1.在ONVIF Devi…

【机器学习】数学知识:标准差,方差,协方差,平均数,中位数,众数

标准差、方差和协方差是统计学中重要的概念&#xff0c;用于描述数据的分散程度和变量之间的关系。以下是它们的定义和公式&#xff1a; 1. 标准差 (Standard Deviation) 标准差是方差的平方根&#xff0c;表示数据的分散程度&#xff0c;以与数据相同的单位表示。 公式&…

数据结构习题——有效的括号(栈),栈与队列和互相实现,循环队列的实现

文章目录 前言1、有效的括号题目思路代码 2、用队列实现栈题目思路代码 3、用栈实现对列题目思路代码 4、设计循环队列4.1循环队列的概念和了解题目思路代码 总结 前言 继上篇博客学习了栈与队列之后&#xff0c;今天我们来尝试着使用他们来写一些题目&#xff0c;话不多说&…