autosar 诊断入门

news2025/1/12 12:13:26

AUTOSAR (汽车开放系统架构) 是一个国际汽车行业的开放和标准化的软件架构。它的主要目标是为了创建一种独立于硬件的软件架构,以提高汽车电子系统的模块化和可重用性。
AUTOSAR架构主要分为两个部分:AUTOSAR Runtime Environment (RTE) 和 AUTOSAR Software Components (SWCs)。

  1. AUTOSAR Runtime Environment (RTE)
    RTE是软件组件之间的通信媒介,它提供接口以实现组件间的数据交换。RTE的主要任务包括通信,输入/输出硬件抽象,时间和数据同步等。
  2. AUTOSAR Software Components (SWCs)
    SWCs是具有明确功能的一种软件模块,例如发动机管理或刹车控制。它们包含一种或多种Runnable Entities (Runnables),这些Runnables是实现SWC功能的代码块。SWCs可以通过RTE进行通信。

AUTOSAR架构还包括以下层级:

  1. 应用层
    应用层包含了所有的AUTOSAR SWC,这些SW辆功能,如刹车管理,动力系统控制等。
  2. 运行时环境层
    这就是RTE,它允许SWC之间的通信并提供硬件抽象。
  3. 基础软件层
    基础软件层包含一系列的模块,负责提供各种服务,如操作系统,通信服务,网络管理,输入/输出硬件控制等。
  4. 微控制器抽象层
    这一层为微控制器硬件提供抽象,使得上层软件可以独立于硬件进行设计和开发。
  5. 硬件层
    硬件层是实际的物理硬件,例如微控制器,传感器,执行器等。
    AUTOSAR的这种分层架构可以提高软件的模块化和可重用性,使得汽车制造商和供应商可以更容易地设计和开发复杂的汽车电子系统。

以ECU例子,通俗理解
假设我们正在使用一个单片机(例如STM32)来控制汽车的灯光系统,需要控制头灯、尾灯和转向灯。在AUTOSAR架构中,我们可以将每一个灯光看作是一个单独的软件组件(Software Component,SWC)。例如,“头灯控制SWC”,和“转向灯控制SWC”。

应用层:这一层包含所有的软件组件,也就是我们的头灯、尾灯和转向灯的控制代码。

运行时环境层(RTE): 这一层是所有软件组件之间通信的桥梁。例如,当驾驶员打开头灯的开关,"开关控制SW RTE 告诉 "头灯控制SW。

基础软件层:这一层包含了一些基本的软件服务,例如操作系统、驱动程序等。在我们的例子中,单片机的GPIO引脚驱动、PWM驱动等就属于这一层。

微控制器抽象层:这一层对硬件进行了抽象,使得上层软件可以不用关心具体的硬件细节。例如,这一层可以将单片机的某个GPIO引脚抽象为"头灯控制引脚"。

硬件层:这一层就是实际的硬件,也就是我们的单片机和灯光硬件。

这样,当驾驶员打开头灯的开关时,“开关控制SWC” 会通过 RTE 发送消息给 “头灯控制SW灯控制SWC” 会调用基础软件层的 GPIO 驱动程序,通过微控制器抽象层控制硬件层的 GPIO 引脚,从而点亮头灯。
诊断部分
在AUTOSAR架构中,诊断主要包括两个重要模块:Diagnostic Communication Manager (Dcm) 和 Diagnostic Event Manager (Dem)。这两个模块都属于基础软件层(BSW Layer)的服务层(Service Layer)。
以下是每一层的详细实现和层与层之间的联系:
应用层(Application Layer)
应用层并不直接实现诊断功能,但它会生成一些可能需要诊断的事件或故障,比如一个传感器的读数超过了正常范围。这些事件或故障会被送入Diagnostic Event Manager (Dem)进行管理。
运行时环境层(RTE)
RTE负责应用层和基础软件层之间的通信。在诊断的上下文中,RTE提供了APIs,允许应用层调用Diagnostic Event Manager (Dem)的服务,比如报告一个新的故障。
基础软件层(BSW Layer)
在基础软件层的服务层中,Diagnostic Event Manager (Dem) 和 Diagnostic Communication Manager (Dcm) 是实现诊断功能的关键。

  • Diagnostic Event Manager (Dem): Dem负责管理和存储所有的故障码(Diagnostic Trouble Codes,DTC)。当应用层或其他BSW模块报告一个新的故障时,Dem会存储这个故障码,以便后续的诊断。Dem还管理故障码的状态,比如故障是否已经恢复,故障是否需要立即通知驾驶员等。
  • Diagnostic Communication Manager (Dcm): Dcm负责处理来自外部诊断设备的诊断请求,比如读取故障码、清除故障码、读取数据流等。Dcm会通过RTE调用Dem或其他BSW模块提供的服务,以完成这些诊断请求。然后,Dcm会将诊断结果发送回外部诊断设备。
    Dcm和Dem模块通常通过RTE进行通信,但也可以直接进行通信。Dcm和Dem的配置(比如支持的诊断服务、故障码的定义等)通常是通过XML文件进行的。
    通过以上的分层和模块化设计,AUTOSAR的诊断功能可以实现很高的灵活性和可配置性,满足了不同车辆和不同诊断需求的要求。

诊断DTC实现
在AUTOSAR中,故障码(Diagnostic Trouble Code,或DTC)的触发和读取过程如下:

故障码的触发

在应用层,某个模块(例如,一个引擎管理模块)可能会检测到某种故障情况,比如一个传感器的读数超过了正常范围。

当故障发生时,应用层模块通过RTE调用Diagnostic Event Manager(Dem)的API来报告故障。具体的API可能是Dem_ReportErrorStatus。

Dem模块接收到故障报告后,首先会检查该故障是否已经存在。如果这是一个新的故障,Dem会创建一个新的DTC,并将其状态设置为“已报告”。如果该故障已经存在,Dem可能会更新其状态或计数器。

Dem将新的DTC存储在非易失性内存中,以便在车辆重新启动后仍然可用。

故障码的读取

外部诊断设备(例如,一个诊断工具或诊断测试设备)通过Vehicle Diagnostic Connector发送一个读取DTC的诊断请求。

该请求通过车辆的网络(例如,CAN或Ethernet)传输到目标ECU。

在目标ECU中,Diagnostic Communication Manager(Dcm)接收到诊断请求,解析出请求的服务ID(在这个例子中,是读取DTC的服务ID)。

Dcm通过RTE调用Dem的API(例如,Dem_GetDTCOfEvent)来获取请求的DTC。

Dem返回请求的DTC,包括DTC的ID、状态、严重性等信息。

Dcm将DTC的信息封装成诊断响应消息,并通过网络发送回外部诊断设备。

通过以上的流程,AUTOSAR实现了故障码的触发和读取。这个流程涉及到了应用层、RTE和BSW层的多个模块,显示了AUTOSAR分层和模块化设计的优势。

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

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

相关文章

HTTP各版本差异

HTTP1.0 无法复用连接 HTTP1.0为每个请求单独新开一个TCP连接 #mermaid-svg-9N3exXRS4VvT4bWF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9N3exXRS4VvT4bWF .error-icon{fill:#552222;}#mermaid-svg-9N3exXRS…

集成电路运算放大器[23-9-16]

目录 1、结构组成:差分放大电路、电压放大电路、功率放大电路。 2、同相放大器: 3、反相放大器:一个正电压放大并变为负电压。 4、差分放大电路:输入两个不同的电压,两者的差值乘以放大系数得到输 出电压。 1、结构组…

2.策略模式

UML图 代码 main.cpp #include "Strategy.h" #include "Context.h"void test() {Context* pContext nullptr;/* StrategyA */pContext new Context(new StrategyA());pContext->contextInterface();/* StrategyB */pContext new Context(new Strat…

MybatisPlus(5)

前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 上篇讲了增删的操作,这篇讲修改操作中的一个问题以及它对应的…

002-第一代硬件系统架构确立及产品选型

第一代硬件系统架构确立及产品选型 文章目录 第一代硬件系统架构确立及产品选型项目介绍摘要硬件架构硬件结构选型及设计单片机选型上位机选型扯点别的 关键字: Qt、 Qml、 信号采集机、 数据处理、 上位机 项目介绍 欢迎来到我们的 QML & C 项目&#xff…

Centos8下载安装JDK8

安装JDK8 一、下载 官网:https://www.oracle.com/java/technologies/downloads/#java8-linux 二、存放到opt目录下 三、解压 tar -zxvf jdk-8u361-linux-x64.tar.gz -C /usr/local如果下载的是tar格式,则安装如下命令解压 tar -zvf jdk-8u361-linu…

Flash的学习

Flash的学习 1 概述 2 特性 STM32 的内部FLASH 包含主存储器、系统存储器以及选项字节区域。 2.1 主存储器 主存储器分为256 页,每页大小为2KB,共512KB。这个分页的概念,实质就是FLASH 存储器 的扇区,与其它FLASH 一样&…

【C++】动态内存管理(79分钟写的文章哪里看不懂了,快来学)

动态内存管理目录: 一、C/C内存分布 在学习了C/C内存区域的划分后,我们来做几道题巩固一下: 1. 选择题:选项 : A.栈 B.堆 C.数据段(静态区) D.代码段(常量区)globalVar在哪里?____ staticGlobalVar在哪里&#x…

【2023知乎评论爬虫】我用Python爬虫爬了2386条知乎评论!

文章目录 一、爬取目标二、展示爬取结果三、爬虫代码讲解3.1 分析知乎页面3.2 爬虫代码 四、同步视频五、完整源码 您好,我是 马哥python说,一枚10年程序猿。 一、爬取目标 前些天我分享过一篇微博的爬虫:https://blog.csdn.net/solo_msk/a…

Spring 的注入

目录 一、注入(Injection) 1、什么是注入 (1)为什么需要注入 (2)如何进行注入 2、Spring 注入原理分析(简易版) 二、Set 注入详解 1、JDK 内置类型 (1&#xff09…

【修复版】2023新版塔罗 算八字测运易理风水 取名 源码平台 搭建教程

全线修复,欢迎你拿其他家的来比,叫他们发测试连接去测试对比,眼睛骗不了人 很多说自家的是修复版,能像我这样把修复的列出来嘛,顾客朋友也可以直接去问他:你到底修复了个啥??&#…

深入探索智能问答:从检索到生成的技术之旅

目录 一、智能问答概述1. **语义理解**2. **知识库和数据库**3. **上下文感知**4. **动态学习和自适应** 二、发展历程1. **基于规则的系统**2. **统计方法的兴起**3. **深度学习和神经网络的突破**4. **预训练模型** 三、智能问答系统的主要类型四、基于知识库的问答系统五、基…

如何使用记事本制作一个简陋的小网页(1)

1、创建一个记事本 2、将记事本的尾缀进行修改,变为html html本质上是一种标签并不是一种语言,其最主要的功能就是对页面设置和页面的文本样式进行修改和修缮。 3、右键被修改了尾缀的文本,选择使用记事本的打开方式。 打开完毕后&#xf…

什么是JavaScript的事件驱动编程(event-driven programming)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 事件(Event)⭐ 事件监听器(Event Listener)⭐ 回调函数(Callback Function)⭐ 非阻塞和异步⭐ 事件循环(Event Loop)⭐ 触发事件(…

「C++程序设计 (面向对象进阶)」学习笔记・二

0、引言 本专栏的系列文章是在学习 北京邮电大学 崔毅东 老师的《C程序设计 (面向对象进阶)》课程过程中整理的。欢迎前往专栏了解更多相关内容~ 😀 有关于现代 C 的基本介绍,请前往《现代C基本介绍》! 🔔 先决条件 本专栏的系列…

【测试开发】答疑篇 · 什么是软件测试

【测试开发】答疑篇 文章目录 【测试开发】答疑篇1. 生活中的测试2. 什么是软件测试3. 为什么要有测试/没有测试行不行4. 软件测试和软件开发的区别5. 软件测试和软件调试之间的区别6. 软件测试的岗位7. 优秀测试人员具备的素质 【测试开发】答疑篇 软件不一定是桌面应用&#…

公众号迁移线上公证如何办?

公众号账号迁移的作用是什么?只能变更主体吗?微信公众平台的帐号迁移功能可将原公众号的粉丝、文章素材、违规记录、留言功能、名称等迁移至新的公众号。通过迁移可以实现公众号的公司主体变更、粉丝转移、开通留言功能、服务号转为订阅号等作用。因此不…

Qt基于paintEvent自定义CharView

Qt基于paintEvent自定义CharView 鼠标拖动&#xff0c;缩放&#xff0c;区域缩放&#xff0c; 针对x轴&#xff0c;直接上代码 charview.h #ifndef CHARVIEW_H #define CHARVIEW_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #inclu…

Kotlin使用infix关键字构建高可读性代码

自从Google推出Kotlin作为官方开发语言后&#xff0c;一堆像我这样的习惯Java开发的程序员从不习惯到爱上这门语言只用了很短的时间&#xff0c;相比于Java语言&#xff0c;kotlin集各家所长&#xff0c;可以使用更少的代码&#xff0c;实现更多更复杂的需求&#xff0c;而且可…

腾讯mini项目-【指标监控服务重构】2023-08-18

今日已办 watermill 将 key 设置到 message 中 修改 watermill-kafka 源码 将 key 设置到 message.metadata中 接入 otel-sdk 添加 middleware resolveUpstreamCtx 解析上游上下文&#xff0c;开启根Span添加 middleware middleware.InstantAck - 马上ACK&#xff0c;使得多…