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定制部件级功能测试系统(包括车身域控制器,及传统分布式控制器功能测试开发),提供系统级及实车级测试验证服务,期待交流分享和合作的机会。
全部0条评论
快来发表一下你的评论吧 !