AUTOSAR_DCM&DEM(UDS&OBD)

2023-05-16

1.术语与缩写

术语
DCM

Diagnostic Communication Manager

DEM

Diagnostic Event Manager

UDS

Unified diagnostic services

OBD

On-Board Diagnosis

DSD

Diagnostic Service Dispatcher

DSL

Diagnostic Session Layer

DSP

Diagnostic Service Processing

SID

Server Identifier

2.文章简介

 本文主要介绍DCM 与DEM模块,以及这两个模块在Autosar架构下如何运行。同时介绍了UDS 和OBD中相关概念。

3.DCM模块

1.什么是DCM

                                  

如上图所示,DCM模块负责接收并响应诊断仪的数据请求。在AUTOSAR_SWS_DCM文档中描述如下:

                 

也就是说,DCM模块负责诊断数据流以及诊断状态的管理。并且检查请求的服务是否在当前的会话和安全等级中支持。

 2.DCM模块如何工作

                         

 根据上图可以看出,当ECU接收到诊断报文时,经过CANTp模块进行网络层解析(15765-2),在根据报文的归属判断,由PDUR模块转发置DCM模块。当DCM收到诊断报文时,DCM模块就开始运行了。

DCM模块由三个子模块组成:DSL DSD DSP组成。

DSL:Diagnostic Session Layer,DSL模块负责确认诊断数据流的请求与响应。确保诊断计时以及诊断状态的切换。

DSD: Diagnostic Service Dispatcher,DSD负责接收网络上的诊断请求,并转发到对应的数据处理模块。接收响应数据并将数据传递给DSL模块,在由DSL模块发送到网路。

DSP:Diagnostic Service Processing,DSP负责处理诊断服务请求。

三个模块架构如下:

                      

3.诊断服务(UDS&OBD)

  DCM是服务的形式响应诊断仪的数据请求的。DCM支持UDS(14229-1)和OBD-II(15765-4)的全部服务。这里只介绍一部分诊断服务,详细请参考14229和15031。

10服务

DiagnosticSessionControl (0x10) service,用于激活和切换会话。在默认状态下ECU处于Default Session。14229-1中定义了如下几个Other Session。14229-2中有关于会话层的详细描述。

                  

一般用到02 Programming Session和03 Extended Diagnostic Session。02服务用于开启编程,APP主动跳转到Boot,并告知Boot处于SIB(Stay In Boot)状态等待升级。这里会涉及到一个问题,也就是Programmning Session的请求是APP响应还是Boot响应,一般是由BOOT响应,但是各家做法可能不同,APP也可以响应。

03 服务用于开启拓展会话,UDS的其他服务可以根据OEM的需求,定义在不同的Session和Level下。14229-1定义了服务在哪些Session状态执行。

                        

                                      

Q:10服务的响应帧数据由哪些组成?

A:每个服务都会有Positive Response 和Negative Response。

                

 DiagnosticSessionControl Response SID:响应ID等于服务ID+0x40

Sub-funtion,也就是切换的会话类型

sessionParameterRecord:

             

P2server_max 与P2*server_max定义如下:

                         

P2、P2*是由OEM定义的APP在会话的最大保持时间,一般P2为50MS,P2*为5000MS。

当超过定义的时间DCM就会自动切换到Default Session。

11服务

ECUReset (0x11) service,诊断仪请求ECU重启服务。11服务支持一下几种复位类型。

         

         

  不同子服务,对应不同的复位方式。

11服务的Postitive Response 与Negative Response 如下:

          

27服务

SecurityAccess (0x27) service,提供安全访问数据或者服务的方法。Client首先请求Seed,在Server返回Seed之后,Client根据Seed计算出Key,并将Key发送给Server。Server接收到Key之后校验,校验成功则进入安全状态。

                             

                 

28服务

CommunicationControl (0x28) service,用于控制通信的发送与接收,诊断帧不受影响。服务请求数据格式如下:

                         

Sub-Funtion 定义如下:

                               

Communication Type定义如下:

                          

                             

                              

3E服务

TesterPresent (0x3E) service,用于保持诊断仪与ECU的连接,同时将之前的服务和状态保持。TesterPresent (0x3E) service,用于保持诊断仪与ECU的连接,同时将之前的服务和状态保持,,不会因为超过P2*的时间限制重新切换到Default Session。

服务请求数据如下:

                        

Postitive Responese 和 Negatice Response 数据如下:

                  

                 

NRC

NRC,否定响应码,当Server返回NRC码时,可以根据不同的NRC码,分析出对应的原因,不同的服务支持不同的NRC,NRC码汇总请参考14229-1的附录A。不同的NRC码,对应不同的故障条件,但是每个故障条件的检测都是存在先后顺序。

下图是不带子服务的响应顺序。

   

当收到服务请求,DCM会检测当前是否处于BUSY状态(比如上次的多帧数据还没发送完成),如果是就会返回0x21(Busy Repeat Request)。

检查完成后,在检查请求的SID是否支持,如果不支持则返回0x11(Service Not Supported)。

查询SID是否在当前会话中支持,如果不支持则返回0x7F(Service Not Support In Active Session)。

查询SID是否在当前安全等级(Level)中支持,如果不支持则返回0x33(Security Access Denied)。

有些服务可能会自定义一些检查条件,比如在执行10 02跳转Boot之前一般都会执行车速检查,如果大于设定值则返回指定的NRC。

下图是带子服务的响应流程。

响应抑制位

suppressPosRspMsgIndicationBit,肯定响应抑制位。是SubFunction的BIT,表示当请求服务的子服务参数的BIT7置1,表示这个请求不必返回积极响应的报文。比如,当请求 10 81 时,ECU会切换到Default Session 但是不会返回积极响应的报文 50 81。

OBD服务

说到OBD总会要问OBD与UDS的关联。OBD是在15031-5中定义的排放相关的服务,UDS是14229-1中定义的通用服务。两者都依赖15765-2中定义的网络层和14229-2中定义的会话层,因此在一个ECU中是可以共存OBD与UDS的,两者各司其职。

OBD一共有9个服务,服务编号01 到09。

          

01服务,Request Current Powertrain diagnostic data, 诊断仪可以通过01服务请求排放相关的数据,包括模拟输入输出,数字输入输出,系统状态信息。请求的信息以PID的形式给出,PID的定义在15031-5的附录B中描述。

所有支持OBD的ECU必须支持01服务和PID $00,因为PID $00中包含了通用的”Initialization / keep alive/Ping ”等系统状态。

01服务最多可以请求6个PID信号,请求数据格式如图20所示。

                   

响应的数据格式如下:

               

                 

4.DEM模块

   DEM(Diagnostic Event Mannger)模块,用于处理诊断事件的信息和相关的数据,DCM模块通过服务请求可以获得这些数据。DEM模块主要是处理的DTC相关的数据,DTC在15765-6中有详细定义。DTC一共分为四类,如下图所示。

              

1.DTC

 DTC由两个字节或者三个字节组成,每个DTC对应一个或者多个Event。比如ECU检测到某个Sensor断线了,就可以通过DEM接口函数:Dem_SetEventStatus 改变DTC的状态。达到某个条件之后这个DTC关联的数据就可以以快照的方式存储起来,同时车身亮故障灯,维修人员就可以根据DTC码判断出是何处发生了故障。UDS可以通过19服务获取DTC是Status。

DTC的Status是一个Byte的数据,每个BIT代表不同的状态。

BIT0 : testFailed。表示发生了TestFailed

置位与恢复逻辑如下:

              

BIT1:testFailedThisOperationCycle。表示当前Cycle发生了TestFailed

置位与恢复逻辑如下:

                

BIT2:pendingDTC。表示当前发生了testFailed

置位与恢复逻辑如下:

                

BIT3: confirmedDTC,表示已经检测到多次testfailed,并且能确认故障发生,需要去存储相关的数据。

置位与恢复逻辑如下:

                 

  BIT4:testNotCompletedSinceLastClear, 表示自执行14服务起,还没有完成完成测试,也就是没有testPass或者testFailed。

置位与恢复逻辑如下:

                

BIT5:testFailedSinceLastClear,表示自执行14服务起,发生了testFailed事件。

置位与恢复逻辑如下:

                 

BIT 6: testNotCompletedThisOperationCycle,表示当前OperationCycle还未完成测试。

置位与恢复逻辑如下:

                  

BIT7: warningIndicationRequested,表示特定的DTC需要置告警,车身故障灯亮起。

置位与恢复逻辑如下:

                  

2.DTC置位的Debounce

DEM提供接口函数Dem_SetEventStatus设置DTC的Status,接口描述如下:

           

EventStatus表示需要置成的状态,由如下几种选择:

           

为了防止出现故障误报的现象,14229-1中规定了Debounce功能,只有当TripCounter达到一定数值时,才能确认故障发生,也就是BIT3置位。

                 

              

上图可以看出,TripCounter在默认状态下是为0,计数范围是-128 ~127。

在连续测试中一直处于testPassed状态,直到TripCounter达到-128,BIT4由1置位0,BIT6由1置位0。如果侦测到testFiled,那么TripCounter就直接从大于0开始计数,并且testFailed的计数比TestPassed快。当TripCounter计数到127时,BIT2与BIT3置位。

3.老化AgingCounter &Agecounter

AgingCounter也就是处于老化中DTC的计数。当一个OpreationCycle没有检测到testFailed,AgingCounter就会自加1,同时DTC Status的BIT就会清0。当AgingCounter计数达到一定的阈值后,此故障已经完成了老化,可以自愈。同时DTC Status的BIT3清0。

AgedCounter,表示完成老化的DTC的数量。

14229-1附录D提供了关于AgingCounter的演示。

          

       

4.快照

 快照SnapShot是一群DID数据的集合,每个DTC在Confirm时可以生成快照,将当时的一些关键数据存储在NVM中。诊断仪可以通过19服务读取SnapShot的具体数据。

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

AUTOSAR_DCM&DEM(UDS&OBD) 的相关文章

  • Liunx下源代码安装&&make&&makefile

    Linux下安装软件的方式分为源代码安装和二进制安装 源代码安装 xff0c 即使用应用程序源代码进行编译安装二进制安装 xff0c 例如red hat发行的 rpm包 debian发行的 deb包 源代码安装 用c语言为例 include
  • 递归遍历无限极分类菜单、菜单树。(php版&&java版)

    文章目录 php版java版 php版 span class token operator lt span span class token operator span php span class token comment 定义一个数组
  • 2013&2014

    2013总结 2013 毕业了 xff0c 算是正式工作半年 xff0c 2013年7月开始 xff0c 算是我的生活 xff0c 工作之外的时间都是自己的 一 收获 1 压力测试 差不多算是一个月的时间 xff0c 疯狂的一个月 xff0
  • AMP:参考xapp-1078和xapp1079的一些建议

    Linux系统默认是SMP模式 xff0c 有时我们也需要AMP模式进行开发 参考网站 xff1a wiki xilinx com 有xapp1078 xapp1079最新版本的AMP demo www arm com 主要是介绍arm系列
  • TCP Server&Client socket实现(Ubuntu16.04)

    TCP Server amp Client socket实现 xff08 Ubuntu16 04 xff09 1 测试 xff1a 2 TCP Server3 TCP Client 1 测试 xff1a 2 TCP Server span
  • 持续请求/socket.io/?EIO=3&transport=polling&t=N8HrzIR

    项目基本介绍 xff1a 使用React xff0c webpack xff0c socket io client Node js Express socket io 等技术 xff0c 采用前后端分离开发 实现项目中的聊天室时遇到报错 x
  • 【STM32】 利用paho MQTT&WIFI 连接阿里云

    ST联合阿里云推出了云接入的相关培训 xff08 基于STM32的端到端物联网全栈开发 xff09 xff0c 所采用的的板卡为NUCLEO L4R5ZI板 xff0c 实现的主要功能为采集温湿度传感器上传到阿里云物联网平台 xff0c 并
  • Chrome安装Proxy SwitchyOmega插件&Ubuntu20.04安装Proxychains

    目录 1 Chrome浏览器1 1 安装Proxy SwitchyOmega插件1 2 安装Proxy SwitchyOmega插件 2 Ubuntu服务器2 1 安装2 2 配置2 3 测试2 4 异常处理 1 Chrome浏览器 1 1
  • A1&AlienGo--通过realsense-viewer调用相机

    使用机器狗时 xff0c 有时需要通过NX 树莓派上的系统来查看调用相机 xff0c 可以通过realsense提供的realsense viewer来查看 但是机器狗自带的视觉程序会开机自启占用相机 xff0c 所以首先需要杀掉这个进程
  • 无人机拉力测试台研制&测试过程中的9个关键技术点

    随着近年来无人机行业的飞速迭代发展 xff0c 越来越多的相关从业人员选择使用拉力测试台来测试并优化无人机的动力系统 xff0c 本文尝试从无人机拉力测试台的研制和使用角度来阐述无人机拉力测试中的9个关键技术点 1 电磁干扰方面的考虑 测试
  • ROS通信机制~话题通信(Publisher&Subscriber)·笔记2

    系列文章目录 xff1a ROS开发 xff08 ubuntu xff09 笔记 1 嘻 嘻的博客 CSDN博客 ROS通信机制 服务通信 server amp client 笔记3 嘻 嘻的博客 CSDN博客 话题通信 理论模型 xff1
  • ROS速成之发送&接收消息

    人真的老了 xff0c 扔了个周末 xff0c 完全不记得干了什么 论纪录的重要性啊 xff0c 当时觉得明白的很 xff0c 你扔两天试试 xff1f 扔一年试试 xff1f 扔几年试试 xff1f 最近参加的各种项目脑疼眼乏 xff0c
  • ZYNQ有两个CPU?(一)——AMP搭建

    ZYNQ有两个CPU xff1f xff08 一 xff09 AMP搭建 罗宾老师 嵌入式教师 码峰社QQ群541931432
  • Docker数据卷&&自定义Docker镜像

    目录 宿主机与容器之间的文件拷贝 引言 xff1a 利用MySQL镜像安装MySQL服务 从容器中拷贝文件到宿主机 从宿主机拷贝文件到容器 数据卷 数据卷容器 Dockerfile自定义镜像 自定义tomcat8 xff08 熟悉几乎所有的
  • Flask-SQLAlchemy 中的 relationship & backref

    今天重看 Flask 时 xff0c 发现对backref仍然没有理解透彻 查阅文档后发现 xff0c 以前试图孤立地理解backref是问题之源 xff0c backref是与relationship配合使用的 一对多关系 db rela
  • C++ 文件的读写(fin && fout)

    如何让键盘输入字符保存在 txt文件中 如何让我们自己在键盘上输入的字符不仅仅在屏幕上显示 xff0c 而且还能保存在特定路径的文件中 xff0c 这让简单枯燥的控制台命令程序变得略有趣 首先 xff0c 先看看cin和cout对象 xff
  • 【EXata】2.1 文件组织 & 2.5 Makefile组织

    2 1 文件组织 EXata 发行文件被分组到几个子目录中 这使得用户可以快速找到源代码 二进制对象文件 配置文件 文档或样本 表 2 1 列出了这些子目录和它们的内容 注意 xff1a 在本文件中 xff0c EXATA HOME 指的是
  • PHY- PHY芯片概述

    1 PHY概述 关于Internet Protocal的分层模型可以参考文章 Internet Protocal OSI模型中的网络分层模型 下面我们讲讲底层以太网控制器和收发器的知识 其主要是处理OSI模型中的物理层和链路层的事情 在CA
  • 协议数据单元PDU和服务数据单元SDU

    关注汽车工程师谈技术 一起学习技术 目录 1 协议数据单元PDU和服务数据单元SDU 2 AutoSAR中PDU和SDU的应用 3 总结 返回总目录 协议数据单元PDU 大家在AutoSAR开发过程中 特别是通信和诊断开发中 应该会经常碰到
  • Opencv系列1_opencv对单张DCM文件的读取并显示

    实例1 opencv对单张DCM文件的读取并显示 include

随机推荐

  • unix环境编程1 环境变量

    预处理 编译 汇编 连接 cpu中有个MMU xff0c 内存处理单元 xff1a 它的作用是 1 处理物理内存与虚拟内存映射的关系 2 设置修改内存访问级别 xff08 0 3级 xff09 内核空间的访问级别为0 用户空间的访问级别为3
  • RSU NTP时间同步配置方式

    RSU NTP同步配时方式 RSU ntp同步配时是基于一个开源工具chrony实现的 xff0c 这个工具集成在RSU里面了 xff0c 网上也能搜索到教程 xff0c 以下是一个参考链接 xff1a Centos使用chrony做时间同
  • Linux回收子进程

    孤儿进程 孤儿进程 父进程先于子进程结束 xff0c 则子进程成为孤儿进程 xff0c 子进程的父进程成为init进程 xff0c 称为init进程领养孤儿进程 include lt stdio h gt include lt unistd
  • C++内存管理(超长,例子很详细,排版很好)

    导语 内存管理是C 43 43 最令人切齿痛恨的问题 xff0c 也是C 43 43 最有争议的问题 xff0c C 43 43 高手从中获得了更好的性能 xff0c 更大的自由 xff0c C 43 43 菜鸟的收获则是一遍一遍的检查代码
  • c++ string 的常用库函数的用法

    目录 一 初始化 二 获取长度 xff08 length size xff09 三 插入 xff08 insert xff09 四 替换 xff08 replace xff09 五 添加 xff08 append xff09 六 赋值 xf
  • linux学习笔记1

    shutdown 一分钟后关机 shutdown c 取消关机命令 shutdown r 重新启动系统 shutdown 43 10 十分钟后关机 ifconfig 查看 配置计算机当前的网卡配置信息 ping 地址 检测目标ip地址的连接
  • 一道爬楼梯的算法题

    一个小孩爬楼梯 xff0c 每次可以爬1个 2个或3个台阶 xff0c 编程求出这个小孩爬完10个台阶的楼梯一共有多少种走法 def main k 61 0 构建函数1 x 43 2 y 43 3 z 61 10 确定x取值范围 for x
  • 面试技术杂ji——需要解决的问题

    需要搞明白的几个问题 xff1a 1 3次握手和4次挥手 2 TCP与UDP的区别 3 如果TCP连接出现问题该如何排查 xff0c 说明排查的思路 连接断开或者出错 xff0c 会返回一个错误码 xff0c errorNo 最后一次系统调
  •  SHELL 脚本学习笔记

    第十四章 SHELL 脚本 终于到 shell 脚本这章了 xff0c 在以前笔者卖了好多关子说 shell 脚本怎么怎么重要 xff0c 确实 shell 脚本在 linux 系统管理员的运维工作中非常非常重要 下面笔者就带你正式进入 s
  • 软件定义汽车 新一代技术发展

    引言 作为一个技术的爱好者 xff0c 搞算法 xff0c 玩芯片 xff0c 攒系统 xff0c 并不只是工作 xff0c 也是自己所追求的很重要的部分 写这个系列 xff0c 是为了梳理这几年的所学 所思 所想 xff0c 从而形成一个
  • 解压缩 tar命令详解

    1 tar命令进行文档的归档和压缩 归档和压缩文件 归档和压缩文件的好处 xff1a 节约硬盘的资源 xff0c 加快文件传输速率 tar命令 作用 xff1a 打包 压缩文件 xff1b tar文件是把几个文件和 xff08 或 xff0
  • 华测导航GPCHC协议ROS驱动包,CGI610、410接收机,NavSatStatus、GPSFix和普通格式

    目录 一 消息类型1 1 sensor msgs NavSatFix1 2 sensor msgs NavSatStatus1 3 gps common GPSFix1 4 sensor msgs Imu 二 部分源码2 1 相关的依赖和库
  • 淡定地撸了一遍AUTOSAR的基本概念

    1 AUTOSAR的解决方案 之前的文章 老板说项目要上AUTOSAR xff0c 我慌得一批 讲到了 xff0c 面对日益复杂的汽车E E架构 xff0c 在欧洲大地上诞生的AUTOSAR组织 xff0c 提出了解决方案 而且做了标准化
  • 图文并茂,一文讲透C语言结构体内存对齐

    面试官 xff1a 你知道C语言的结构体对齐吗 xff1f 应聘者 xff1a 听说过 平时很少关注 面试官 xff1a 好吧 xff0c 那回去等通知吧 C语言结构体对齐问题 xff0c 是面试必备问题 本文 xff0c 除了用图解的方式
  • 老板说项目要上AUTOSAR,我慌得一批

    莫慌 xff0c 淡定 xff0c 先来看看AUTOSAR是个什么鬼 AUTOSAR是什么 AUTOSAR AUTomotive Open System ARchitecture xff0c 中文是 汽车开放系统架构 xff0c 是一家致力
  • AUTOSAR架构的故事(干货)

    1 AUTOSAR架构概览 在新世纪 xff0c 汽车产业蓬勃发展 xff0c 欧洲大陆的车企们 xff0c 瞄准了这是一块大蛋糕 xff0c 于是在2002年成立了一个联盟 xff0c 搞了个叫AUTOSAR的标准 xff0c 以期一统天
  • 基于PREEvision的AUTOSAR Adaptive设计

    导读 xff1a 为适应汽车智能化 网联化等的发展趋势 xff0c 应对汽车E E系统开发面临的高性能处理器的应用 自动驾驶的软件实现 高带宽通信需求 车与外界的互联互通等的挑战 xff0c AUTOSAR组织推出了AUTOSAR Adap
  • DoIP技术

    首发于汽车控制器 ECU 网络诊断技术交流 DoIP技术 xff08 一 xff09 本文是关于DoIP技术的第一篇文章 xff0c 主要进行一些概念介绍 xff0c 具体的细节会在后续的文章中和大家探讨 DoIP是 Diagnostic
  • 车载以太网 - SOME/IP简介

    SOME IP Scalable service Oriented MiddlewarE over IP 是车载以太网通信引入的一个概念 xff0c 位于OSI 7层模型的层4 传输层 之上 在以CAN总线为主的车载网络中 xff0c 通信
  • AUTOSAR_DCM&DEM(UDS&OBD)

    1 术语与缩写 术语 DCM Diagnostic Communication Manager DEM Diagnostic Event Manager UDS Unified diagnostic services OBD On Boar