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定制部件级功能测试系统(包括车身域控制器,及传统分布式控制器功能测试开发),提供系统级及实车级测试验证服务,期待交流分享和合作的机会。
晶方科技:市场拓展叠加产业延伸谱写新的发展航程
驱动之路-设备模型之底层模型
中天科技将回购国开发展基金所持中天科技海缆6.51%的股权
瑞隆源电子自研项目一种外置失效装置的开路失效模式放电管及其电子电路
温度传感器的种类_空调器温度传感器的故障检测
CAPL在诊断中的应用,你值得了解!
山东科技创新能力迈入全国前列
简述模拟电路的八大基础电路
Intel宣布48核心96线程处理器 将用于高性能计算和AI相关负载等领域
ADC框图解析
模/数转换器和数/模转换的技术术语
卢伟冰出任小米副总裁负责海外业务,小米支付过亿元赔偿诚壹科技变相被小米收购
苹果发飙!iPhone8真机全球首曝光:颜值逆天全面屏!
裁员风波后,富士康又大量招工因为获得华为订单?
基于MSP430F149和nRF905的无线血氧指夹的设计
华为P40/Pro将采用石墨烯电池,大大提高续航能力和充电速度
植物冠层分析仪的作用及功能特点的介绍
浮子流量计怎样分类
采用VHDL语言实现SDRAM与双口RAM的数据传输系统设计
骁龙888对比骁龙865具体有哪些升级?