热度 6
2023-9-7 14:06
1027 次阅读|
0 个评论
C AN oe主要用于汽车总线的开发并广泛被汽车电子工程师们使用。它具有强大的开发、分析、仿真、诊断、测试等功能。一提到C AN oe大家往往都会想到 CAPL ,在使用 CAN oe的过程中相信每位工程师都或多或少的要和“ CAPL ”打交道。学好C APL 的用法可以让我们更加高效、便捷地使用CANoe。本文就C AN oe中关于诊断的C APL 函数进行介绍。 诊断,其实就是服务端和客户端进行一问一答的方式。这里的一问一答指的是发送和接收的方式,Tester端发送一条特定I D 的报文(请求),E CU 接收到以后会相应的回复一条特定I D 的报文(响应)。诊断是一个非常重要的功能,可以读取E CU 的很多信息,比如:版本号,故障信息,状态信息等。 CANoe 是具有诊断功能的 , 如果需要大批量的进行诊断测试就需要使用C APL 来辅助。 如下图所示,C AN oe可以直接加载C DD 文件,加载完C DD 文件后可以 通过CANoe工程的诊断界面 打开诊断台,进行手动的发送诊断报文。 在CANoe中加载CDD文件 如下图所示,在Diagnostic C onsole中我们可以直接发送扩展会话服务(0x1003),E CU 端收到扩展会话服务请求后会给出肯定响应或否定响应。 用 Diagnostic Console发送诊断请求 但是随着测试任务的增加,我们要进行多种方式的诊断测试。如下图所示,加载完C DD 文件后,随之打开C APL Browser ,就可以在C APL 编辑器的 S ymbols栏中找到我们C DD 文件对应的诊断服务。 CAPL Browser 中CDD文件的调用 对于使用C APL 实现诊断功能我们通常有两种方式: (1)通过发送C AN 报文的形式去实现; 针对第一种方式,我们只需要在 CAPL 中定义一条特定I D 的报文,再定义它的D LC 以及每个字节的内容再发出去就可以了,如下图所示: CAPL 代码实现 Trace 中报文的显示 (2)通过调用加载到C AN oe工程中C DD 文件定义好的诊断功能去实现。 针对第二种方式,因为CDD文件中已经定义了ECU支持的诊断服务、通信参数等参数,所以我们只需要把我们在C DD 中定义好的诊断服务发送出去即可,如下图所示: CAPL 代码实现 下面就让我们来学习一下诊断中常用的一些C APL 函数 。 在我们学习常用CAPL函数之前,先来了解一下诊断处理事件: (1) on diagRequest NewRequest :进行ECU仿真时,收到诊断请求时调用。 (2) on diagResponse NewResponse :Tester端收到诊断响应时调用。 (3) on diagRequestSent NewRequestsent :收到Tester端发送的诊断请求时调用。 常用的诊断函数列表及功能描述: (1)通信/设定功能函数 d iagGetCurrentEcu 用于获取当前E CU 名称; d iagGetLastCommunicationError 用于返回上一次诊断请求的错误码 d iagSendRequest 用于发送诊断请求给目标 ECU d iagSetTimeout 用于设定诊断请求的超时时长& d iagSetTimeoutHandler 用于创建一个回调函数,在诊断请求超时时被调用 : (2)安全访问函数 diagSetCurrentSession 设置当前E CU 的会话模式 : diagStartGenerateKeyFromSeed 用于根据种子和密钥算法DLL生成一个密钥&_ Diag_GenerateKeyResult 用于返回使用计算密钥的结果: (3)对象访问函数 diagGetLastResponse 用于保存上一次收到的诊断请求响应: (4)诊断测试函数 函数 功能描述 diagCheckObjectMatch 用于检测诊断响应的 ID 是否与诊断请求相符 diagCheckValidNegResCode 用于检测返回的否定响应是否在诊断描述文件 (CDD文件)中已经定义 diagCheckValidPrimitive 用于检测指定的诊断对象是否符合规范 (CDD 文件) 中的定义 diagCheckValidRespPrimitive 用于检测收到的诊断请求响应是否符合规范(CDD 文件)中的定义 testCollectDiagEculnformation 用于向指定的诊断目标发送诊断请求并将响应写入报告文件 testReportWriteDiagResponse 用于将接收到的诊断响应写入报告 testWaitForDiagRequestSent 用于等待上一次的诊断请求成功发送到 ECU testWaitForDiagResponse 用于等待接收到请求的诊断响应 testWaitForDiagResponseStart 用于等待接收到请求的诊断响应开始,即收到响应的首帧报文 testWaitForUnlockEcu 用于尝试解锁 ECU 拓展小学堂 : VECTOR 对于诊断方面是有许多专业性的工具 , 下图为诊断工具链的V模型,从开发到测试、从供应商到主机厂都会涉及到的诊断工具。 下面就由我来为大家进行简单的介绍: C AN delastudio :CANdelaStudio用于定义ECU的诊断功能,并且生成诊断数据库(CDD文件)来优化整个诊断开发过程。CANdelaStudio支持文档模板(CDDT文件),可以满足不同厂商对同一个标准工具的各种特殊要求。在内容上一个文档模板对应于一种诊断规范,它包含了对ECU所有允许的基本服务和在每个ECU中都必需实现的强制功能的一个正式描述。 O DXStudio :基于ODX的诊断流程并以ODX格式查看、编辑、处理或管理诊断数据的所有用户而设计。它支持单个 ECU 的诊断开发,直至整个车辆平台的水平。它同样适合在汽车 OEM 和供应商工作的用户。ODXStudio处理的是ODX 2.0.1和2.2 .0 版本的数据。 CAN oe. D iva :作为一个生成诊断测试用例的工具,可以支持把CDD文件和ODX文件导入到Diva工程当中,然后去通过一些相应的配置,点一个按钮自动生成诊断相关的一些测试用例,再把生成的测试用例导入到C AN oe中进行诊断的自动化测试,测试完成后会自动生成相应的测试报告。 v Flash :刷写工具,vFlash可以作为一个独立的工具来实现程序刷写。作为一个简单易用的刷写工具,vFlash不需要使用者具有专业的知识。它具有如下的特点:精简的用户操作界面利用模板来实现对于不同Flash刷写规范的支持可通过CAN/LIN/以太网进行刷写在提高刷写速度的同时,可以刷写更大的数据结合VN8810实现远程一键刷写 I ndigo :作为参数化工程诊断仪,支持工程诊断的应用场景。同时,Indigo支持客户定制化,例如集成vFlash工程支持刷写应用场景、通过选择车辆配置参数组支持车型配置、例程控制界面、可执行工程但不可编辑工程配置的Indigo Run、中文界面并且还可以拓展支持远程诊断等功能。 CAN oe作为一个强大的总线开发工具有很多的功能,本文就CANoe中的诊断功能相关的CAPL函数做了讲解并简单的讲解了V ECTOR 旗下的诊断工具,希望本文章可以为大家带来全新的使用体验,如有问题欢迎私信我们北汇信息。 北汇信息作为Vector的合作伙伴, 已为多家OEM/Tier1定制部件级功能测试系统(包括车身域控制器,及传统分布式控制器功能测试开发),提供系统级及实车级测试验证服务,期待交流分享和合作的机会。