中文  |  English
所在位置:市场活动 > 客户案例与技术文章

CAPL在诊断中的应用,你值得了解!

CANoe主要用于汽车总线的开发并广泛被汽车电子工程师们使用。它具有强大的开发、分析、仿真、诊断、测试等功能。一提到CANoe大家往往都会想到CAPL,在使用CANoe的过程中相信每位工程师都或多或少的要和“CAPL”打交道。学好CAPL的用法可以让我们更加高效、便捷地使用CANoe。本文就CANoe中关于诊断的CAPL函数进行介绍。

诊断,其实就是服务端和客户端进行一问一答的方式。这里的一问一答指的是发送和接收的方式,Tester端发送一条特定ID的报文(请求),ECU接收到以后会相应的回复一条特定ID的报文(响应)。诊断是一个非常重要的功能,可以读取ECU的很多信息,比如:版本号,故障信息,状态信息等。CANoe是具有诊断功能的,如果需要大批量的进行诊断测试就需要使用CAPL来辅助。

如下图所示,CANoe可以直接加载CDD文件,加载完CDD文件后可以通过CANoe工程的诊断界面打开诊断台,进行手动的发送诊断报文。

图片1.png

 

如下图所示,在Diagnostic Console中我们可以直接发送扩展会话服务(0x1003),ECU端收到扩展会话服务请求后会给出肯定响应或否定响应。


 

但是随着测试任务的增加,我们要进行多种方式的诊断测试。如下图所示,加载完CDD文件后,随之打开CAPL Browser,就可以在CAPL编辑器的Symbols栏中找到我们CDD文件对应的诊断服务。

 

 

对于使用CAPL实现诊断功能我们通常有两种方式:

 

(1)通过发送CAN报文的形式去实现;

 

针对第一种方式,我们只需要在CAPL中定义一条特定ID的报文,再定义它的DLC以及每个字节的内容再发出去就可以了,如下图所示:

 

 

 

(2)通过调用加载到CANoe工程中CDD文件定义好的诊断功能去实现。

 

针对第二种方式,因为CDD文件中已经定义了ECU支持的诊断服务、通信参数等参数,所以我们只需要把我们在CDD中定义好的诊断服务发送出去即可,如下图所示:

 

 

下面就让我们来学习一下诊断中常用的一些CAPL函数。

 

在我们学习常用CAPL函数之前,先来了解一下诊断处理事件:

 

(1)on diagRequest NewRequest:进行ECU仿真时,收到诊断请求时调用。

(2)on diagResponse NewResponse:Tester端收到诊断响应时调用。

(3)on diagRequestSent NewRequestsent:收到Tester端发送的诊断请求时调用。

 

常用的诊断函数列表及功能描述:

 

(1)通信/设定功能函数

 

diagGetCurrentEcu 用于获取当前ECU名称;

 

 

diagGetLastCommunicationError 用于返回上一次诊断请求的错误码

 

 

diagSendRequest 用于发送诊断请求给目标 ECU

 

 

diagSetTimeout 用于设定诊断请求的超时时长& diagSetTimeoutHandler 用于创建一个回调函数,在诊断请求超时时被调用:

 

 

diagSetCurrentSession 设置当前ECU的会话模式:

 

 

diagStartGenerateKeyFromSeed 用于根据种子和密钥算法DLL生成一个密钥&_Diag_GenerateKeyResult 用于返回使用计算密钥的结果:

 

 

diagGetLastResponse 用于保存上一次收到的诊断请求响应:

 

 

函数

功能描述

diagCheckObjectMatch

用于检测诊断响应的 ID 是否与诊断请求相符

diagCheckValidNegResCode

用于检测返回的否定响应是否在诊断描述文件 (CDD文件)中已经定义

diagCheckValidPrimitive

用于检测指定的诊断对象是否符合规范 (CDD 文件) 中的定义

diagCheckValidRespPrimitive

用于检测收到的诊断请求响应是否符合规范(CDD 文件)中的定义

testCollectDiagEculnformation

用于向指定的诊断目标发送诊断请求并将响应写入报告文件

testReportWriteDiagResponse

用于将接收到的诊断响应写入报告

testWaitForDiagRequestSent

用于等待上一次的诊断请求成功发送到 ECU

testWaitForDiagResponse

用于等待接收到请求的诊断响应

testWaitForDiagResponseStart

用于等待接收到请求的诊断响应开始,即收到响应的首帧报文

testWaitForUnlockEcu

用于尝试解锁 ECU

 

拓展小学堂:

 

VECTOR对于诊断方面是有许多专业性的工具,下图为诊断工具链的V模型,从开发到测试、从供应商到主机厂都会涉及到的诊断工具。下面就由我来为大家进行简单的介绍:

 

CANoe作为一个强大的总线开发工具有很多的功能,本文就CANoe中的诊断功能相关的CAPL函数做了讲解并简单的讲解了VECTOR旗下的诊断工具,希望本文章可以为大家带来全新的使用体验,如有问题欢迎私信我们北汇信息。

北汇信息作为Vector的合作伙伴,已为多家OEM/Tier1定制部件级功能测试系统(包括车身域控制器,及传统分布式控制器功能测试开发),提供系统级及实车级测试验证服务,期待交流分享和合作的机会。