浅谈深看:CANoe中UDS Basic Demo解析
来源: | 作者:pmo9ca4dc | 发布时间: 2019-04-19 | 2648 次浏览 | 分享到:
今天要分享的内容是CANoe中,基于UDS的Basic Demo解析。若谈及有关诊断的定义,就不得不提及这张神助攻的功能图。



图1 UDS诊断功能 (图片源于Vector)

上图简单概括了UDS诊断属于触发型诊断事件,由客户端(Client)发送请求指令给服务器(Server),而后服务器(Server)对接收到的诊断请求进行响应,实现故障检测及软件刷写等功能。UDS诊断共支持26种诊断服务,诊断事件依据诊断服务建立和存在。


表1 UDS诊断服务列表

如果想要对诊断服务和事件进行测试,CANoe的诊断功能窗口可以满足这个需求,CANoe中只需要添加数据库文件.cdd,并遵循UDS诊断协议,就可以模拟Tester和ECU之间的诊断请求和响应,如下图所示。


图2 CANoe诊断功能描述图(图片源于Vector)

文章标题中的浅谈可能无法很好的理解UDS诊断的实际应用,那就长话短说,让我们通过解析CANoe中Demo来更好的理解UDS诊断。

1、Demo配置

通过诊断工具链中的CANoe软件,按照路径File→Sample Configurations→CAN-Diagnostics选框下→UDS Diagnostics Basic Example打开Demo。


图3 Demo打开路径

打开Demo后,首先需要学会诊断数据库配置。在Diagnostics窗口,点击Diagnostic/ISO TP Configuration →CAN→Add Diagnostic Description,添加对应要求的诊断数据库文件.cdd。


图4 诊断数据库添加

完成cdd文件添加后,需要分别对ECU名称,传输层,诊断层等信息进行确认。


STEP 1:
查看ECU名称,Interface及Variant,也可以配置寻址方式,如物理寻址或功能寻址;并选择仿真节点SimDiagECU,来激活ECU仿真。


图5 数据库配置信息确认

STEP 2:

Transport Layer,查看地址(请求/响应ID)等信息。

STEP 3:
Diagnostic Layer,查看诊断应用层参数,如S3 Server,Tester Present服务是否打开,或添加安全算法.dll等文件。

2、Demo仿真

以上操作配置完成后,连接配有软件License的插卡口并运行CANoe,Demo便可实现UDS诊断仿真。


图6 诊断控制面板

通过上图中的Diagnostic Console快捷窗口打开Demo的控制面板,双击诊断服务如“10 01”来实现Tester的指令发送,并等待SimDiagECU节点的诊断响应,数据流等细节信息可通过Trace窗口查看。


图7 诊断数据流

在Trace窗口中,SimDiagECU节点回复了肯定响应如“50 01”。为了方便查看,通过Trace窗口左侧的过滤器,可以筛选传输层和诊断应用层的信息。


如勾选“ECU Door”则显示应用层诊断服务的解析信息,如ECU名称为Door,0x10是SID-RQ(服务ID)等,若勾选“ISO TP observer”则对应显示传输层的信息,如数据帧特征位【02】,数据长度len等。

那么问题来了,Tester和SimDiagECU之间的诊断请求和响应交互在CANoe中是如何实现的?总感觉少不了编程这个强大推手。

3、节点拓扑分析

的确,在CANoe 的仿真窗口中,首先需要通过Simulation Setup配置界面来新建仿真节点,Tester和SimDiagECU都是作为仿真节点存在的。如下图所示的拓扑图中共建立了3个节点。Tester节点用于发送诊断服务事件和接收诊断响应结果,SimDiagECU节点功能是接收诊断请求并发出诊断响应,TestModule节点功能是实现自动诊断功能。


图8 仿真节点拓扑图

其次,仿真节点功能的实现,在于节点配置中添加的.can文件。如SimDiagECU节点的.can文件,就是利用CAPL编程语言模拟了真实ECU,对诊断请求做出响应。


图9 SimDiagECU节点配置

因此,本文Demo可以实现诊断功能的本质在于应用CAPL编程描述了Tester与ECU之间基于UDS诊断的完整操作流程,而对于操作流程的复杂度主要体现在调用的API数量和多功能的需求。

4、API解析

Demo代码程序的简洁性在于API的调用,调用API只需定义部分功能函数,因此对于API的了解和学习,可以帮助各位更好更快速的理解整个Demo。如表格所示为CAPL诊断最基本的请求/响应API。


表2 CAPL诊断常用API

CAPL编程常用的诊断请求API有2个:

(1)on diagRequest是当ECU接收到诊断请求时被调用;
(2)on diagRequestSent是当Tester端已发送诊断请求时被调用。

诊断响应API有1个:

on diagResponse是当Tester端接收到诊断响应时被调用。

莫要用错位置,好不啦!还不懂?往下看!以其中一个诊断事件为例。
Tester按键“1”中定义诊断请求,请求向ECU写入,并通过定义功能函数SendRequestAndCheckReturnvalue( )发送诊断请求。


图10 诊断请求

ECU对诊断请求进行响应。


图11 诊断响应

Tester接收响应,Write窗口显示信息。


图12 响应信息确认

然后,查看Trace窗口,验证诊断服务(Variant Coding Write)请求被成功发送,并获得肯定响应,如下图所示。


图13 2E诊断服务数据流

是不是有一种感觉,学习UDS诊断好像也不是很难?答案当然是NO !

上述Demo仅仅使用了一小部分API,更多API信息获取和学习,需要通过CANoe软件的Help文档来帮助查询,本文仅为各位提供精神层面的了解。
若对本文内容有任何疑问或存在技术痛点,欢迎联系我们。(发送邮件至support@e-planet.cn邮箱,或关注怿星科技公众号并留言)
相关文章