canoe和python_给CANoe编程上点套路 – CAPLdll
weixin_39585974
于 2020-12-22 22:19:59 发布
734
收藏 8
文章标签: canoe和python
版权
汽车电子攻城狮:“数据处理算法有点复杂,CANoe help文档找不到想要的API接口,CAPL API用腻了怎么办?”
CANoe :“上套路,CAPLdll考虑一下?”
随着汽车电子测试复杂度的提高,测试软件需要具备更丰富的接口和数据处理功能。CANoe作为一款常见的主控软件,不仅有COM、FDX、XIL等可跟其他软件进行交互的数据接口,还能通过CAPLdll使用自己编写的动态链接库,极大的弥补了纯CAPL编程的限制。COM接口的使用我们在之前文章中有分享过(《
CAPLdll是指利用C/C++语言且按照一定规则生成的可直接在CAPL中使用的dll,以下案例参照了Vector官方Demo,其路径如下:
C:\Users\Public\Documents\Vector\CANoe\SampleConfigurations12.0.167\Programming\CAPLdll。
此路径是在CANo12.0SP3安装时的默认Demo路径,若安装在其他路径下则需要在对应路径中寻找。CAPLdll Demo工程路径
一、初识CAPLdll工程
我们打开“CAPLdll”工程,进入“VS 2013 Project”文件夹,再打开“capldll.sln”文件,进入到CAPLdll源码工程,如下图所示:CAPLdll源码
初次看这个Demo,可能无法完全理解,按照“以终为始”的策略,我们目的是使dll的函数能在CAPL中使用,所以要先找到这块的代码,其他暂时不做深入理解。代码如下图所示:CAPLdll中应用在CAPL里的函数库
我们先一起分析一下这块函数的含义和编写格式,毕竟想要在CAPL中顺利使用dll中的自定义函数,就需要严格遵守CAPL编写规则。
1. CAPL编写规则
CANoe Help中有关于CAPLdll的编写规则已经摘录出来了,这里跟大家简单介绍一下:CAPLdll总体编写规则CAPLdll编写示例
如上图所示,CAPLdll中的函数调用模块包含CAPL函数名(在CAPL中显示的函数名称)、dll中的函数名、函数类别(固定为CAPL_DLL)、Text文本(函数在CAPL中的介绍)、返回值、参数数量、参数名称等9个模块,参考下面的思维导图,有助于我们快速理清各个模块。CAPLdll函数引用模块组成分解
经过上面的介绍,相信大家对于CAPLdll中如何编写CAPL函数引用模块已经有了基础的了解,但是对于模块中的参数类型和返回值类型符号,大家是否还有困惑呢?比如上图中的“V”、“DB”到底表示什么含义呢?接下来我给大家介绍一下在CAPLdll中各种参数类型的符号含义。跟上文一样,我们还是以CANoe Help文档中的关键信息为例给大家进行介绍。参数类型符号在CAPL和C/C++中的对比
如上图所示,前文中出现的“V”代表void类型;“D”在CAPL中代表dword类型,在C/C++中代表unsigned long类型;“B”在CAPL中代表byte类型,在C/C++中代表unsigned char类型。至此相信大家对CAPLdll函数引用部分有了初步了解,接下来我们再来看一下被引用函数的编写格式。
被引用函数跟常用的函数编写格式大致相同,只是在函数定义上有特定格式,函数定义遵循如下规则:
返回值 - CAPLEXPORT farCAPLPASCAL - 函数名 -(参数类型 参数名)
其中CAPLEXPORTfar CAPLPASCAL是固定格式,表示该函数是dll中被CAPL所调用的函数,其中函数的返回值类型、函数名称、参数数量以及参数类型需要跟上文提到的CAPLdll函数引用部分一致,如下图所示:函数定义示例
我们已经将CAPLdll中最主要的两个部分—函数定义和CAPLdll函数引用给大家介绍完了。初步使用时大家按照模板来做,将不需要的函数注释完毕,然后按照编写规则编写新的函数进行使用,再点击visual studio中的“生成capldll”按钮即可。(至于CAPLdll工程中的其他细节,各位读者若有兴趣欢迎与我们交流。)
二、CAPLdll在CANoe中的使用
在上文中我们已经生成好CAPLdll了,那接下来再介绍如何在CANoe中加载CAPLdll。CANoe加载CAPLdll中有两个方法:
1. 在CANoe的Option中添加dll即可,如下图所示:在CANoe Option中添加CAPLdll
2. 在CAPL的include章节中使用关键字“#pragma library”添加CAPLdll路径,如下图所示:(图中路径使用的是相对路径)CAPL中引用CAPLdll
成功引用CAPLdll后,我们可以在CAPL Function中看到CAPLdll有哪些函数可以在CAPL中直接使用。(注意:CAPLdll中的函数是无法通过Help查看使用方法的,而CAPL自带的函数则可以通过F1查看Help文档中的函数使用方法。)CAPL Function中的CAPLdll
CAPLdll的应用范围较广,怿星的小伙伴们为了能方便快速的读取Excel中内容,也会经常利用CAPLdll在CAPL中读取Excel文件数据,结果如下图所示:CAPLdll读取Excel数据
至此,大家就可以在CAPL中使用CAPLdll的函数了。
但是C/C++编程语言还是比较复杂的语言,而C#则相对而言稍微简单一点。
在CANoe12.0SP3版本中,Vector新增加了.NET dll功能,其作用跟CAPLdll类似,使用方法也类似,需要注意的是其函数使用有以下几点限制:必须在公有类中将其定义为公有类型
函数必须是静态的
名称必须是有效的CAPL标识符
其返回类型必须为void,整数类型,布尔型或双精度型
所有参数必须是整数类型,布尔型,双精度型,字符串或整数类型或双精度型的一维数组。.NET dll示例
由于Vector公司目前还没有发布CANoe中.NET dll的官方示例,所以,小编特意制作了简单Demo供大家参考,Demo下载链接如下:
大家如果对CAPLdll的使用有任何疑问,欢迎在下方留言,或者发送邮件至[email protected]邮箱,我们会及时为大家解答哦~~
————————————————
版权声明:本文为CSDN博主「weixin_39585974」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39585974/article/details/111882569