浅谈深看:CANoe中UDS Basic Demo解析
来源: | 作者:pmo9ca4dc | 发布时间: 2019-04-19 | 2651 次浏览 | 分享到:



图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端已发送诊断请求时被调用。
相关文章