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

描述

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

 

 

诊断

诊 断

 

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

 

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

 

诊断

在CANoe中加载CDD文件

 

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

 

诊断

用 Diagnostic Console发送诊断请求

 

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

 

诊断

CAPL Browser 中CDD文件的调用

 

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

 

通过发送CAN报文的形式去实现

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

 

诊断

CAPL 代码实现


 

诊断

Trace 中报文的显示

 

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

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

 

诊断

CAPL 代码实现

 

 

诊断

诊断常用CAPL函数

 

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

 

诊断处理事件

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

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

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

 

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


 

通信/设定功能函数

diagGetCurrentEcu 用于获取当前ECU名称;

诊断

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

诊断

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

诊断

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

诊断

 

安全访问函数

diagSetCurrentSession 设置当前ECU的会话状态:

诊断

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

诊断


 

 对象访问函数

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

诊断

 

 诊断测试函数

函数

功能描述

diagCheckObjectMatch

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

diagCheckValidNegResCode

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

diagCheckValidPrimitive

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

diagCheckValidRespPrimitive

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

testCollectDiagEculnformation

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

testReportWriteDi-agResponse

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

testWaitForDiagRe-questSent

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

testWaitForDiagRe-sponse

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

testWaitForDiagRe-sponseStart

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

testWaitForUnlock-Ecu

用于尝试解锁 ECU

 

 

诊断

拓展小学堂

 

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

 

诊断

 

 CANdelastudio

CANdelaStudio用于定义ECU的诊断功能,并且生成诊断数据库(CDD文件)来优化整个诊断开发过程。CANdelaStudio支持文档模板(CDDT文件),可以满足不同厂商对同一个标准工具的各种特殊要求。在内容上一个文档模板对应于一种诊断规范,它包含了对ECU所有允许的基本服务和在每个ECU中都必需实现的强制功能的一个正式描述。

 

 ODXStudio

基于ODX的诊断流程并以ODX格式查看、编辑、处理或管理诊断数据的所有用户而设计。它支持单个ECU的诊断开发,直至整个车辆平台的水平。它同样适合在汽车OEM和供应商工作的用户。ODXStudio处理的是ODX 2.0.1和2.2.0版本的数据。

 

 CANoe.Diva

作为一个生成诊断测试用例的工具,可以支持把CDD文件和ODX文件导入到Diva工程当中,然后去通过一些相应的配置,点一个按钮自动生成诊断相关的一些测试用例,再把生成的测试用例导入到CANoe中进行诊断的自动化测试,测试完成后会自动生成相应的测试报告。

 

 vFlash

刷写工具,vFlash可以作为一个独立的工具来实现程序刷写。精简的用户操作界面,利用模板来实现对于不同Flash刷写规范的支持,可通过CAN/LIN/以太网进行刷写。在提高刷写速度的同时,可以刷写更大的数据,还能结合VN8810实现远程一键刷写。

 

 Indigo

作为参数化工程诊断仪,支持工程诊断的应用场景。同时,Indigo支持客户定制化,例如集成vFlash工程支持刷写应用场景、通过选择车辆配置参数组支持车型配置、例程控制界面、可执行工程但不可编辑工程配置的Indigo Run、中文界面并且还可以拓展支持远程诊断等功能。

 

 

诊断

总 结

 

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

 

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

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分