UDS tester之Tdrm 

2018-1-16

Tdrm叫做 tester diagnostic request manager,或者叫做诊断请求测试管理器,今天以vector的Tdrm为例,研究下它的工作流程。

一、Tdrm的作用

如果你在做汽车ECU,那么当做诊断服务的时候一定会用到UDS,而如果恰好你所开发的ECU也有诊断其他ECU的需求,那么就一定会用到tester端软件。Tester可以调用TP层,向其他ecu发起诊断请求,实现全车诊断、ECU软件刷写的功能,十分有用。它也可以处理ecu的反馈,供用户层使用。

二、一个状态机,四个timer

先看下内部状态机的定义,tester一共定义了8个状态,空闲状态; 默认会话下的空闲状态(用于查询当前是否可以进行诊断操作,只有在idle的条件下才可以发起下一次诊断); 诊断请求发送过程中;等待请求发送完成;等待ecu应答;接收进行中(无请求的接收); 请求接收结果接收中; 等待下一次进入idle的delay。

typedef enum _tTdrmState

{

kTdrmStateIdle,                  /* System in idle state */

kTdrmStateIdleSessionActive,    /* System session is active (just for TdrmGetStatus() when in idle mode) */

kTdrmStateTxInProgress,         /* Temporary state while sending data */

kTdrmStateWaitSendReqConfirm, /* Request issued to TP. Waiting for confirmation */

kTdrmStateWaitEcuResponse,   /* Service successfully transmitted to ECU. Wait for ECU response */

kTdrmStateRxInProgress        /* Temporary state while receiving data */

kTdrmStateWaitRxInProgress    /* Temporary state while receiving data */

kTdrmStateWaitIdle             /* Temporary state after a transmission */

} tTdrmState;

四个timer P2, P2Star, S3, P3

P2: 客户端请求到ECU的响应时间, typical 100ms。

P2Star: 增强延时时间,当client收到 0x78的否定响应时,会多延长一会等待时间,典型值为 5000ms。

S3:client发送两次test present(3E,00)的间隔。

P3:在没有应答的条件下,两次请求之间(从第一次请求timeout到第二次请求发出)插入的延时时间。

三、Tdrm的工作流程分析

下面用一张图表示这几个状态是如何转换的:

(1)tester 初始化

Tdrm 正常工作前应该首先调用TdrmInitPowerOn()来初始化状态机用到的几个timer,根据当前MCU执行的周期,计算出所有时间参数对应的循环数量; 调用TdrmInit()来初始化状态机到idle状态,关闭定时器以及清除请求标志等,此时状态机停留在S1状态。需要周期性调用TdrmTask(),来推动状态机转换。

(2)tester 发送请求

当应用层调用TdrmServiceRequest()来请求某一个服务时,此时App需要把请求服务的数据字和长度填充好,再调用TP层将数据发送出去;此处就直接返回发送成功,之后就就进入等待ECU应答的S4状态。与此同时,TP发送完请求后会调用CanTp_NUSDataIndication进而调用TdrmSendConfirm,这里会判断这个请求是否需要ecu应答,如果需要就进入到S5状态,如果不需要应答肯定响应,就进入S8,继而回到S1 idle状态。

(3)tester 接收响应

在S5 等待ECU应答状态下,会启动一个定时器P2,如果在规定的时间内TP收到了SF或者FF,那就会调用TdrmPrepareReception,使其进入到S7也就是等待接收过程中;如果接收完成或这接收失败都会重新回到S1。如果在规定的时间内没有收到任何应答,待P2超时后回到S1,此时重试次数减一,重置P2,待进行下一次重新发送。

(4)tester 维持会话

作为client端,请求服务器进入非default session后,如果没有请求,要周期发送tester present报文来保持会话,如果应用层发起了其他请求从而使状态机进入非idle状态后,就不需要发送tester present报文了。

四、Tdrm的局限性

在这个架构下是无法多路并发的。不过在实际的情况下,如果需要诊断总数不多的ecu,一般的做法是轮询,但如果所在ecu需要诊断、刷写的ecu比较多,论询是非常耗时的,如果能把这个过程与ecu之间的诊断或刷新顺序进行解偶,同时对多个ecu进行操作,就可以极大提升诊断或刷写速度了。

UDS tester之Tdrm相关推荐

  1. uds帧格式_如何看懂UDS诊断报文

    UDS介绍 UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是ISO 15765 和ISO 14229 定义的一种汽车通用诊断协议,位于OSI模型中的应用层,它 ...

  2. 【图解UDS】UDS汽车诊断标准协议(ISO 14229)带你入门到精通

                                      [图解UDS]UDS汽车诊断标准协议(ISO 14229)带你入门到精通 目录 为了便于学习ISO 14229 UDS诊断协议,提供 ...

  3. UDS之浅谈11服务

    一.服务概述 ECUReset(ECU重置),ECU作为Server端,执行Client发送来ECU Reset请求中重启的类型(通过子服务区分).对于UDS协议关于处理该请求的逻辑,没有强制性定义: ...

  4. 【车载开发系列】UDS诊断---OBD基础概述

    [车载开发系列]UDS诊断-OBD基础概述 UDS诊断---OBD基础概述 [车载开发系列]UDS诊断---OBD基础概述 一.什么是OBD 二.OBD和UDS的区别 三.OBD应用功能与应用领域 四 ...

  5. UDS服务基础篇之22

    UDS诊断服务基础篇之22 前言 22服务作为诊断服务种的基础服务,可以简单理解为就是一个用于读取ECU数据的外部接口,可实时获取软件内部的相关的状态信息. 鉴于本文是基础入门介绍,小T还是会问下大家 ...

  6. UDS协议发展历史(UDS是什么?)

    诊断协议那些事儿 本文为诊断协议那些事儿专栏首篇文章,旨在介绍诊断的起源.发展历史,让读者对诊断有一个基本的认识,明确UDS到底是什么. 关联文章: UDS的应用场景 UDS的OSI模型 UDS服务列 ...

  7. UDS诊断系列介绍05-27服务

    本文框架 1. 系列介绍 27服务概述 2. 27服务请求与应答 2.1 27服务请求 2.2 27服务肯定应答 2.3 27服务否定应答 1. 系列介绍 UDS(Unified Diagnostic ...

  8. 统一诊断服务(UDS)中的肯定响应抑制

    统一诊断服务UDS中的肯定响应抑制 子功能参数定义 肯定响应抑制位的作用 例外情况 子功能参数定义 UDS协议中,有些诊断服务是带有子功能的.子功能参数的取值范围为0x00 - 0x7F.细心的同学应 ...

  9. 【车载开发系列】UDS诊断协议总括篇

    [车载开发系列]UDS诊断协议总括篇 UDS诊断协议总括篇 [车载开发系列]UDS诊断协议总括篇 一.UDS诊断协议简介 为什么要设计UDS诊断协议 二. UDS诊断协议详细 1)诊断通信管理功能单元 ...

  10. 聊聊诊断协议——UDS

    文章目录 前言 一.车载诊断功能是什么? 二.诊断协议框架 总结 前言 随着技术不断提高,驾驶员对车辆的要求也在不断提高,因此车身控制器的数量也在与日俱增.控制器实现的功能:安全功能(防抱死系统等). ...

最新文章

  1. Bzoj3168 [Heoi2013]钙铁锌硒维生素
  2. 解决ubuntu下无线网络不可用
  3. OO Unit4 UML
  4. Unity之计时器功能(转)
  5. 对大学 IT 专业教育的反馈
  6. Yii的各种render
  7. mac安装需要的骚操作
  8. 微信公众号php提交表单,PHP教程:使用YII2框架实现微信公众号中表单提交功能...
  9. API – MultiByteToWideChar的用法
  10. 临床必备 | 第 5 期全基因组/外显子组家系分析理论和实战
  11. 高德联手饿了么:外卖小哥跑出偏远地区活地图
  12. 数据库在什么情况下适合添加索引
  13. 如何搭建软件测试环境?
  14. mysql 查询临时表_MySQL临时表与内存表
  15. Desktops 虚拟桌面软件(推荐)
  16. Android MotionEvent详解
  17. MySQL教程——MySQL注释:单行注释和多行注释
  18. 木舟总结 | 2021年推文笔记分类汇总
  19. linux使用mysql命令行工具_我使用过的Linux命令之mysql - MySQL客户端命令行工具
  20. 曝各城市娶妻成本:深圳208万 程序员成为“妻奴”?

热门文章

  1. OpenGL(十三)——Qt OpenGL绘制三维图形
  2. OpenGL 驱动 与 扩展的关系
  3. Footprint:Polkadot创立至今,生态如何?
  4. c语言做游戏音效,游戏背后辛苦付出的劳动者—游戏音效师
  5. 揭秘北京奥运会上的中国保镖[转贴]
  6. HDU 4816 Bathysphere(数学)(2013 Asia Regional Changchun)
  7. Python中的*和**
  8. Allegro削铜皮详细操作指导
  9. 【与奥斯丁的二十种邂逅】-- 得克萨斯首府的小情调城市游 (介绍你在奥斯丁必须做的,推荐做的,和做了你就牛掰了的20件事)...
  10. python读取pcd文件_PCL读取PCD文件的数据