首页 > 编程语言 >canoe和python_给CANoe编程上点套路 – CAPLdll

canoe和python_给CANoe编程上点套路 – CAPLdll

时间:2023-02-28 17:26:06浏览次数:34  
标签:canoe 函数 CANoe python CAPLdll dll CAPL 类型

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

标签:canoe,函数,CANoe,python,CAPLdll,dll,CAPL,类型
From: https://www.cnblogs.com/webSnow/p/17165173.html

相关文章

  • python 线程池
    importargparseimportosimportimageioimportcv2importnumpyasnpimporttimefromconcurrent.futuresimportThreadPoolExecutor,wait,ALL_COMPLETED,FIRST_......
  • #!/usr/bin/python到底是什么意思
    关于脚本第一行的 #!/usr/bin/python 的解释,相信很多不熟悉Linux系统的同学需要普及这个知识,脚本语言的第一行,只对Linux/Unix用户适用,用来指定本脚本用什么解释器来......
  • 记一次 python+allure 的学习
    1、allure下载地址:https://github.com/allure-framework/allure2/releases 下载完成后,配置window的环境变量,到bin目录配置完成后,cmd命令窗口输入以下命令,检查是否......
  • Python 之 lambda 函数
    一、lambda语法lambda函数的语法只包含一个语句,表现形式如下:lambda[arg1[,arg2,.....argn]]:expression二、lambda特性lambda函数是匿名的;lambda函数有输入和输......
  • 记一次 python+allure 的学习
    1、allure下载地址:https://github.com/allure-framework/allure2/releases 下载完成后,配置window的环境变量,到bin目录 配置完成后,cmd命令窗口输入以下命令,检......
  • CCZ——python压缩纹理成ccz
    python压缩纹理资源===>cczimportosimportstructimportzlibdefccz(inputFile,outputFile,width,height):ifnotos.path.exists(inputFile):......
  • python显示屏幕点的坐标和颜色
    #encoding=utf-8importpyautoguifromPILimportImageGrabprint("将光标移到左上角0,0坐标点停止运行程序")whileTrue:#获取当前光标位置x,y=pyaut......
  • python socket 开发
    socket服务端开发#socket服务端开发importsocket#创建socket对象socket_server=socket.socket()#绑定ip地址和端口socket_server.bind(("localhost",888......
  • python+playwright 学习-17.模拟手机浏览器测试
    前言使用Playwright,您可以在任何浏览器上测试您的应用程序,也可以模拟真实设备,例如手机或平板电脑。设置手机模式只需配置您想要模拟的设备,Playwright就会模拟浏览器行......
  • 《流畅的Python》读后感
    《流畅的Python》这本书是一本非常有价值的Python编程书籍。它不仅涵盖了Python的基础知识,还深入探讨了许多高级主题,如装饰器、元类、协程等,让读者可以更深入地理解Py......