汽车电子攻城狮:“数据处理算法有点复杂,CANoe help文档找不到想要的API接口,CAPL API用腻了怎么办?”
CANoe :“上套路,CAPLdll考虑一下?”
随着汽车电子测试复杂度的提高,测试软件需要具备更丰富的接口和数据处理功能。CANoe作为一款常见的主控软件,不仅有COM、FDX、XIL等可跟其他软件进行交互的数据接口,还能通过CAPLdll使用自己编写的动态链接库,极大的弥补了纯CAPL编程的限制。COM接口的使用我们在之前文章中有分享过(《当Python遇到CANoe》),今天主要给大家介绍一下CAPLdll的使用。
CAPLdll是指利用C/C++语言且按照一定规则生成的可直接在CAPL中使用的dll,以下案例参照了Vector官方Demo,其路径如下:
C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 12.0.167\Programming\CAPLdll。
此路径是在CANo12.0SP3安装时的默认Demo路径,若安装在其他路径下则需要在对应路径中寻找。
CAPLdll Demo工程路径
我们打开“CAPLdll”工程,进入“VS 2013 Project”文件夹,再打开“capldll.sln”文件,进入到CAPLdll源码工程,如下图所示:
CAPLdll源码
初次看这个Demo,可能无法完全理解,按照“以终为始”的策略,我们目的是使dll的函数能在CAPL中使用,所以要先找到这块的代码,其他暂时不做深入理解。代码如下图所示:
我们先一起分析一下这块函数的含义和编写格式,毕竟想要在CAPL中顺利使用dll中的自定义函数,就需要严格遵守CAPL编写规则。
CANoe Help中有关于CAPLdll的编写规则已经摘录出来了,这里跟大家简单介绍一下:
CAPLdll函数引用模块组成分解
经过上面的介绍,相信大家对于CAPLdll中如何编写CAPL函数引用模块已经有了基础的了解,但是对于模块中的参数类型和返回值类型符号,大家是否还有困惑呢?比如上图中的“V”、“DB”到底表示什么含义呢?接下来我给大家介绍一下在CAPLdll中各种参数类型的符号含义。跟上文一样,我们还是以CANoe Help文档中的关键信息为例给大家进行介绍。
如上图所示,前文中出现的“V”代表void类型;“D”在CAPL中代表dword类型,在C/C++中代表unsigned long类型;“B”在CAPL中代表byte类型,在C/C++中代表unsigned char类型。至此相信大家对CAPLdll函数引用部分有了初步了解,接下来我们再来看一下被引用函数的编写格式。
被引用函数跟常用的函数编写格式大致相同,只是在函数定义上有特定格式,函数定义遵循如下规则:
其中CAPLEXPORTfar CAPLPASCAL是固定格式,表示该函数是dll中被CAPL所调用的函数,其中函数的返回值类型、函数名称、参数数量以及参数类型需要跟上文提到的CAPLdll函数引用部分一致,如下图所示:
我们已经将CAPLdll中最主要的两个部分—函数定义和CAPLdll函数引用给大家介绍完了。初步使用时大家按照模板来做,将不需要的函数注释完毕,然后按照编写规则编写新的函数进行使用,再点击visual studio中的“生成capldll”按钮即可。(至于CAPLdll工程中的其他细节,各位读者若有兴趣欢迎与我们交流。)
在上文中我们已经生成好CAPLdll了,那接下来再介绍如何在CANoe中加载CAPLdll。CANoe加载CAPLdll中有两个方法:
1. 在CANoe的Option中添加dll即可,如下图所示:
2. 在CAPL的include章节中使用关键字“#pragma library”添加CAPLdll路径,如下图所示:(图中路径使用的是相对路径)
CAPL中引用CAPLdll
成功引用CAPLdll后,我们可以在CAPL Function中看到CAPLdll有哪些函数可以在CAPL中直接使用。(注意:CAPLdll中的函数是无法通过Help查看使用方法的,而CAPL自带的函数则可以通过F1查看Help文档中的函数使用方法。)

至此,大家就可以在CAPL中使用CAPLdll的函数了。
但是C/C++编程语言还是比较复杂的语言,而C#则相对而言稍微简单一点。
在CANoe12.0SP3版本中,Vector新增加了.NET dll功能,其作用跟CAPLdll类似,使用方法也类似,需要注意的是其函数使用有以下几点限制:
必须在公有类中将其定义为公有类型
函数必须是静态的
名称必须是有效的CAPL标识符
其返回类型必须为void,整数类型,布尔型或双精度型
所有参数必须是整数类型,布尔型,双精度型,字符串或整数类型或双精度型的一维数组。
由于Vector公司目前还没有发布CANoe中.NET dll的官方示例,所以,小编特意制作了简单Demo供大家参考,Demo下载链接如下:https://zdrv.com.cn/uZL0rL。
大家如果对CAPLdll的使用有任何疑问,欢迎在下方留言,或者发送邮件至support@e-planet.cn邮箱,我们会及时为大家解答哦~~
更多精彩推荐:
手把手教你如何在PREEvision中进行CAN的多路信号复用设计


