Classic AUTOSAR专题

2023-11-03

往期小怿向各位小伙伴介绍了Classic AUTOSAR专题之I/O模块,相信看过的小伙伴对Classic AUTOSAR的I/O模块已经有基本的认知了,本期为大家介绍《AUTOSAR模块之诊断模块》,内容超丰富,将分两期推出哦。

目录

1.概述

2.DCM

3.DEM

4.FIM

5.结语

01 概述

为了对车辆生命周期内的运行状态进行监测,车辆诊断技术应运而生。AUTOSAR的诊断模块可以对汽车控制系统进行远程或本地诊断。它提供了一系列的规范,包括Diagnostics Communication Manager(DCM),Diagnostic Event Manager(DEM)和Function Inhibition Manager(FIM),以实现完整的整车诊断功能。

图片

AUTOSAR诊断协议可帮助工程师进行车辆的故障诊断,定位和排查问题,并进行错误代码的管理和修复。诊断可应用于车辆制造商的生产线,车辆售后服务及维修等诸多场景。下面就为大家一一介绍不同诊断模块的主要功能。

02 DCM

DCM(Diagnostics Communication Manager)是底层的诊断通讯管理器模块,用于管理整个诊断通讯过程和处理诊断数据流。DCM模块的功能由三个子模块实现,分别是DSL(Diagnostic Session layer)用于处理诊断请求和诊断响应数据,并且对诊断的时序进行监控;DSD(Diagnostic Service Dispatcher)用于处理诊断数据流,以及DSP(Diagnostic Service Processing)用于分发不同的诊断服务请求。

图片

2-1  DSL

DSL与其他模块的交互

与PduR模块交互:

● PduR模块向DSL提供诊断请求数据输入

● DSL模块向PduR模块输出诊断响应数据

与DSD子模块交互:

● DSL子模块通知DSD子模块关于传入的请求并提供数据

● DSD子模块将触发诊断响应的输出

与SWC/DSP模块交互:

● DSL子模块提供了对安全性和会话状态的访问

与ComM模块交互:

● DSL子模块保证了ComM模块所需的通信行为

图片

DSL模块的功能

诊断请求处理

● 将从PduR模块发出的请求转发到DSD子模块。DSL子模块应调用Dcm_TpRxIndication并返回参数Result = E_OK后,才将接收到的数据转发到DSD子模块

● Tester在线保持(“保持有效逻辑”)。“Tester在线”命令可由Tester通过物理请求/响应发送,即ISO14229-1 [1]中定义的“keep alive logic”

诊断响应处理

DSD子模块应请求DSL子模块进行诊断响应数据的传输。

● 转发DSD子模块传入的诊断响应数据到PduR模块。DSD子模块应请求DSL子模块进行诊断响应数据的传输

● 保证对测试仪的响应时间。如果应用程序(或DSP子模块)能够执行请求的诊断任务,但需要额外的时间来完成任务和准备响应,那么DSL子模块应在达到响应时间时发送NRC0x78(Response Pending)

● 支持周期型传输方式。UDS服务通过ReadDataByPeriodicIdentifier(0x2A)周期性读取数据;Periodic Transmission通信方式只能在Full Communication Mode模式下进行

● 支持事件型传输方式。UDS服务通过 ResponseOnEvent(0x86)请求ECU开始/暂停传输诊断响应

● 支持分段响应

安全等级处理

管理安全等级。DSL子模块应保存当前活动安全级别的级别,为了访问Security Level,DSL子模块提供了两个接口:

① 获取当前安全等级:Dcm_GetSecurityLevel

② 设置当前安全等级:DslInternal_SetSecurityLevel

会话状态处理

● 管理会话状态。DSL子模块应保存当前活动会话的状态,为了获取当前会话状态,DSL模块提供了两个接口:

① 获取当前会话状态:Dcm_GetSesCtrlType

② 设置新的会话:DslInternal_SetSesCtrlType()

● 保持跟踪当前运行的非默认会话。当非默认会话处于活动状态,并且到达会话超时(S3Server)时,DSL子模块应重置到默认会话状态(“默认会话”,0x01)

● 允许修改定时参数。包括P2ServerMin, P2ServerMax,P2*ServerMin, P2*ServerMax, S3Server

诊断协议处理

● 处理不同的诊断方案

● 管理资源

通信模式处理

● 通信需求处理(Full- / Silent- / No Communication)

● 指示active / inactive diagnostic

● 启用/禁用各种诊断传输

2.2 DSD

DSD与其他模块的交互

与DSL模块交互:

数据传递方向

解释

双向

交换诊断信息(接收/传输)

DSD→DSL

获取最新的诊断会话和最新的安全级别

DSL→DSD

诊断消息传输确认

与DSP模块的交互:

数据传递方向

解释

DSD→DSP

委托诊断请求处理

诊断消息传输确认

DSP→DSD

处理已完成消息通知

图片

DSD模块的功能

支持检查诊断服务标识符并调整诊断消息

如果识别出新的诊断消息,DSL子模块应触发DSD子模块。DSD子模块将通过分析接收到的诊断消息中包含的诊断服务标识符进行相应的处理。

suppressPosRspMsgIndicationBit

如果“suppressPosRspMsgIndicationBit”为真,DSD子模块不得发送正响应消息。只有在服务具有子功能时才可用。

验证功能

在执行接收到的诊断服务之前,DSD会执行一组验证。只有当所有验证都成功通过,DSD才会接受服务。验证项包括:

● 验证制造商许可

● 验证SID

● 验证当前认证状态下的服务访问控制

● 诊断会话的验证

● 验证服务安全访问级别

● 验证供应商许可

● 验证服务ID的模式规则

检查格式和子功能支持:

在执行所请求的命令之前,DSD子模块会检查是否支持特定的子函数。如果未配置子服务,则DSD应发送负响应NRC:0x12(子功能不支持)。DSD子模块将在执行所请求的命令之前会检查最小消息长度。

将诊断信息分配到DSP子模块

DSD子模块收集DSP子模块新接收的诊断服务标识符的可执行功能,并调用相应的DSP服务解释器。

组装Positive/Negative Response:

当DSP子模块完成了所请求的诊断服务的执行时,DSD子模块应组装诊断响应报文。

启动传输

DSD子模块应将诊断响应信息转发给DSL子模块。

2.3 DSP

概述

当接收到来自DSD子模块的调用请求时,DSP总是执行以下基本的处理步骤:

● 分析接收到的诊断请求消息

● 检查格式以及是否支持携带的子功能

● 在DEM、SW-Cs或其他BSW模块上获取数据或执行所需的函数调用

DSP模块功能

检查格式和子功能支持

DSP子模块将在执行所请求的命令之前检查合适的消息长度和结构。当分析诊断请求格式或长度有误时,DSP子模块应触发具有NRC:0x13(消息长度错误或无效格式)的负响应。

组装诊断响应报文

DSP子模块应组装不包括响应服务标识符的响应消息,并确定响应消息的长度。

负响应代码处理

当没有特定的NRC时,如果API调用执行服务未返回OK,DSP子模块应返回NRC: 0x10的负响应(一般拒绝)。如果请求消息包含不支持的参数时,DSP子模块应触发具有NRC:0x31的负响应(请求超出范围)。

诊断模式管理

● DcmDiagnosticSessionControl (service 0x10)

● DcmEcuReset (partly service 0x11)

● DcmSecurityAccess (service 0x27)

● DcmModeRapidPowerShutDown (partly service 0x11)

● DcmCommunicationControl_. (service

0x28)

● DcmControlDTCSetting (service 0x85)

● DcmResponseOnEvent_(service 0x86)

支持UDS服务

下表定义了DCM支持的UDS服务:

图片

支持OBD服务

下表定义了DCM支持的OBD服务:

图片

2.4 DID Configuration

Dcm的配置包含支持的DID列表,可以通过两种方式配置:

● Individual DID configuration:需要每个DataElement(数据元素)单独配置一个连接来访问数据(读取、写入和控制)

● DID range configuration:用来处理在SWC中统一位于一个PortConnection内并且具有相同行为的DID

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

Classic AUTOSAR专题 的相关文章

  • 《啊哈算法》学习——桶排序

    学习啊哈算法第一天 第一章第一节最快最简单的桶排序 问题描述 班级五名同学的分数排序 十分制 问题分析及思路 借助大小为10的一维数组 初始化为0 意味该分数没有人得 接下来处理分数 如有两个人得5分 即将a 5 2 记录下分数即出现次数后
  • Spring Validation 接口入参校验

    一 前言 JSR 是 Java Specification Requests 的缩写 含义为 JAVA 规范提案 JSR 303 Bean Validation 规范 正是一套基于 JavaBean 参数校验的标准 Hibernate Va
  • s3c2440移植ucGUI

    编译环境 ADS1 2 开发板 TQ2440 主要参考这篇文章 stm32 UCGUI 完美移植 ucGUI版本 3 90 ucGUI3 90下载地址 UCGUI最新3 90版源码 屏幕 联想VGA电脑屏幕 最大分辨率1024x768 1

随机推荐

  • vue如何编写自定义指令directive

    vue已经给我们内置了很多很好用的指令了 v mode v show 等等 但是有时候当这些指令不能满足我们需求的时候 我们还可以使用vue的自定义指令功能编写我们的指令 这是一个很强大的功能 需要说明的是 尽管自定义指令这个功能很强大 但
  • 3D MAX导出插件编写

    转 3D MAX导出插件编写 2011 6 9阅读1667 评论0 文章版权归博客园 BigCoder所有 转载请于明显位置标明原文作者及出处 以示尊重 原文出处 http www cnblogs com csyisong archive
  • 用GDB远程调试运行于QEMU的程序

    1 前言 限于作者能力水平 本文可能存在谬误 因此而给读者带来的损失 作者不做任何承诺 2 测试环境 本文使用 Ubuntu 16 04 4 LTS QEMU 环境进行调试 3 用 GDB 调试 QEMU 内程序 3 1 编写用来调试的程序
  • 国内使用reCaptcha验证码的完整教程

    国内使用reCaptcha验证码的完整教程
  • 查看系统端口占用

    第一步 win R打开 输入cmd进入命令窗口 第二步 输入netstat ano回车 找到对应的进程PID为14472 或者采用这个方法 用 netstat ntlp 查看监听端口 无3000 第三步 输入命令tasklist回车 找到对
  • C#Expression表达式树(lambda)的使用——Parameter、Property、Call、构建Select、构建Where

    1 定义参数 Parameter 访问属性 Property private static void Main string args 1 定义参数 Parameter 访问属性 Property 定义表达式树中的参数或变量 linq表达式
  • SSH密码暴力破解及防御实战

    前言 本文对目前流行的 SSH 密码暴力破解工具进行实战研究 分析和总结 对渗透攻击测试和安全防御具有一定的参考价值 首先介绍几款常用的ssh暴力破解工具 1 hydra 海德拉 指定用户破解 Examples hydra l user P
  • nn.moduleList 和Sequential由来、用法和实例 —— 写网络模型

    对于cnn前馈神经网络如果前馈一次写一个forward函数会有些麻烦 在此就有两种简化方式 ModuleList和Sequential 其中Sequential是一个特殊的module 它包含几个子Module 前向传播时会将输入一层接一层
  • Python爬虫从入门到精通:(36)CrawlSpider实现深度爬取_Python涛哥

    我们来看下CrawlSpider实现深度爬取 爬取阳光热线标题 状态 和详情页内容 https wz sun0769 com political index politicsNewest id 1 type 4 page 创建CrawlSp
  • 找工作必看,用Python爬取数据分析岗位信息并可视化分析

    导读 最近经常收到人事小姐姐和猎头小哥哥的面试邀请 想想最近也不是招聘旺季呀 但又想到许多小伙伴们有找工作这方面的需求 今天就来分享一篇简单的爬虫案例 旨在跟大家一起分析一下部分招聘市场 以 数据分析 为例 Tips 本次爬虫案例分析结果仅
  • 内网内Linux(cenOs)安装telnet

    1 执行 rm f var run yum pid 关闭yum 2 https blog csdn net My SweetXue article details 112021778 无法使用yum安装 首先下载安装文件 下载地址附上 链接
  • Docker夺命连环15问,你能坚持第几问?

    文章目录 前言 1 什么是Docker 2 Docker的应用场景有哪些 3 Docker的优点有哪些 4 Docker与虚拟机的区别是什么 5 Docker的三大核心是什么 6 如何快速安装Docker 7 如何修改Docker的存储位置
  • QT:sqlite创建并访问数据库

    本文代码在博文 https blog csdn net frieryumao article details 93871774 基础上实现创建数据库并实现数据库访问 知识点 1 读写锁防止多线程资源竞争 2 sqlite实现数据库创建 插入
  • 浏览器兼容性测试

    浏览器相关兼容性测试时的测试要点 测试Web页面在不同浏览器的界面是否一致 a 界面是否正常加载 b 界面的CSS样式是否显示完全 c 文字图片的统一性 d 排版是否整齐一致 e 数据是否正确 f 特效是否正常显示等 测试web页面在不同浏
  • 【网络教程】Iptables官方教程-学习笔记6-IPTABLES TARGETS

    一 IPTABLES TAGRETS 本章节介绍Iptables 的目标和跳转 targets and jumps 目标和跳转负责告诉规则如何处理与规则匹配部分完全匹配的包 ACCEPT 和 DROP 是一对基础目标 他们是首先处理的 在学
  • 【esp8266】史上最详细的Arduino uno R3接入机智云教程

    原文地址 http club gizwits com thread 6728 1 1 html 本文使用arduino UNO板卡和esp8266无线WIFI模块实现了通过手机APP远程监测单片机系统采集的数据和控制一个LED的亮灭 读者将
  • Python笔记-字符串

    print hello world capitalize 让第一个单词首字母大写 print hello world upper 全大写 print hello world lower 全小写 print hello world title
  • 联想计算机BIOS启动顺序boot,联想电脑BIOS启动项如何设置U盘启动_联想电脑BIOS启动项设置U盘启动教程介绍...

    联想电脑大家应该都不陌生 台式的大家也都有使用过 笔记本也都使用过 这个品牌的电脑性能都是非常不错的 也是很多用户家庭办公必备的 那么在长时间使用以后很多电脑系统就会出现崩溃 那么这个时候就需要进行系统重新安装 那么在安装的时候可以通过设置
  • java-一次运算结束后,是否继续? Y 是,其他键结束

    请输入第一个数 4 请输入第二个数 9 请输入运算符 运算结果是13 是否继续 Y 是 其他键结束 Y 请输入第一个数 7 请输入第二个数 0 请输入运算符 除数不能为零 请重新输入 思路 一次运算结束后 是否继续 Y 是 其他键结束 用d
  • Classic AUTOSAR专题

    往期小怿向各位小伙伴介绍了Classic AUTOSAR专题之I O模块 相信看过的小伙伴对Classic AUTOSAR的I O模块已经有基本的认知了 本期为大家介绍 AUTOSAR模块之诊断模块 内容超丰富 将分两期推出哦 目录 1 概