大数跨境

当Python遇到CANoe

当Python遇到CANoe 怿星科技
2019-08-09
4
导读:作为一种扩展性极强的“胶水型”编程语言,Python可以和Matlab、Labview等第三方软件无缝集成。​那么当汽车电子通信分析软件CANoe和Python结合使用时会碰撞出怎样的火花?测试“攻城

Python是一种面向对象的解释型计算机程序设计语言,具有丰富、强大的函数库,目前已成为继JAVA、C++之后的第三大语言,并被广泛应用于Web开发、人工智能、数据挖掘和科学计算等领域。作为一种扩展性极强的“胶水型”编程语言,Python还可以和Matlab、Labview等第三方软件无缝集成。那么当汽车电子通信分析软件CANoe和Python结合使用时会碰撞出怎样的火花?测试“攻城狮们”会有哪些奇思妙想呢?



我们先看一段Python调用CANoe的视频。

 


上面这个视频向我们演示了Python调用CANoe的基本流程——使用Python打开CANoe工程并运行测试,测试完毕后停止CANoe工程运行。
各位看官可能已经迫不及待地想知道这里面的流程是怎样实现的了,小板凳准备好,开始烧脑了。



软件安装
1、Python IDE安装
进入Python官网下载标准IDE:https://www.python.org。这里面版本会随时更新,推荐新手使用(比较容易上手)。当然网上也有推荐的其它IDE环境比如PyCharm、Visual Studio也不错,根据个人习惯使用。


Python IDE安装


2、Win32 COM库安装
A)在调用CANoe的过程中会用到win32的COM组件库,需要提前下载并安装,否则程序会报错,找不到win32api模块。(如下图)


win32api报错


B)在cmd命令行窗口中进入python程序安装路径,键入命令pip install pypiwin32进行安装。

安装Python win32 COM插件



Python调用CANoe思路
1、基于COM接口调用CANoe - 把CANoe当做COM Server,访问相应对象的属性、方法和事件。


COM对象树

2、遍历对象树,根节点—子节点—次子节点—······,直至最底层节点,先新建Application对象即根节点CANoe,然后逐级访问Measurement、Environment、Configuration、CAPL等子节点对象,基于子节点对象比如Configuration继续逐级访问其次级子节点对象,比如Test Setup。


CANoe COM对象遍历思路


Python调用CANoe步骤
以CANoe自带Demo为例来分析,默认路径如下:


Python调用CANoe Demo路径


注意:这个CANoe工程包含了Test Module 和Test Unit。


CANoe工程框架


OK,下面开始详解调用步骤。


01
实例化Application对象(即CANoe工程)。


Application对象实例化

02
调用Application对象的Open方法,打开相关CANoe工程(注:这里建议使用相对路径,便于工程在不同文件夹之间复制)。

打开CANoe工程

03
加载Test Module,对象搜索路径:App – Configuration –TestSetup – TestEnvironments – Add()。



Test Module加载

04

加载Test Unit(基于vTESTstudio生成),对象搜索路径:App – Configuration –TestConfigurations - Add()


Test Unit加载

05
启动CANoe工程,调用Measurement对象的Start方法。



启动CANoe工程


06
启动测试节点,调用TestModule对象的Start方法。


启动Test Module


07

启动测试单元,调用TestConfiguration对象的Start方法。


启动Test Unit

08
主线程挂起,等待CANoe测试执行完毕(注:这里用到了pythoncom库里的API - PumpWaitingMessages),测试界面中弹出CANoe相关运行消息。


主线程挂起等待


09

停止CANoe工程,调用Measurement对象的Stop方法。



停止CANoe工程


调用主流程如下,可以看到使用Python可以写出非常轻量级的代码。

调用主流程



知识点来啦——敲黑板!!!
1、在代码开始时需要进行库文件导入(import关键字),否则相关win32com API无法被正常调用。

库文件调用


2、加载CANoe工程速度分析,若当前没有CANoe工程打开,则载入工程速度较慢,大约20~40s左右;若当前已有任意CANoe工程打开,则Python能在2s左右加载指定路径的CANoe工程。所以只有第一次打开工程费点时间,后续基本上可以实现秒开。

CANoe工程打开速度分析


3、搞清楚COM对象之间的包含关系,对于编程来说事半功倍。


COM对象包含关系


更多可能性······

1、对上述Demo稍作修改(重新赋值.cfg的调用路径),就可以调用CANoe的其它Demo了,比如Central Locking System。



Python调用Central Locking System Demo


2、除了Python之外,其它编程语言比如C/C++, C#, VBS, VBA, VB, Delphi, JScript, Perl等等,都可以基于COM接口调用CANoe工程。下面是通过C#调用CANoe工程的示例。


C#调用CANoe示例


这个Demo的存放路径如下(也在CANoe Demo的默认安装路径下)。


C#调用CANoe Demo路径


总结
1、Python调用CANoe可以快速创建&修改CANoe工程配置,实现CANoe运行自动化(工程加载,启动/停止测量),可以自动执行测试序列(Test Module/Test Unit)。

2、使用Python调用CANoe,测试人员无需对CANoe进行细节配置,全部由脚本自动生成,适用于重复型工作;运行一次Python脚本等于点十几次鼠标配置CANoe工程,测试工程师开发好测试脚本,可交给产线工人直接运行。

3、要善于通过COM对象树分析各个对象的关系,调用相关对象的属性、事件和方法。

4、基于COM接口调用CANoe的方法也可以应用于其它第三方上位机编程语言。
 
OK,今天的干货分享就到这里,估计不少路过的Python高手已经开始跃跃欲试了,希望大家多思考,大开脑洞,和我们一起挖掘CANoe这个宝藏。如果大家对Vector工具的使用有任何疑问,可以发邮件support@e-planet.cn,我们会有技术工程师在线答疑,欢迎大家一起讨论。



相关精彩链接:
浅谈深看:CANoe中UDS Basic Demo解析
当CANoe遇上LabVIEW--影音娱乐系统测试
CANoe与Matlab/Simulink联合仿真
Step by Step学习CANoe三大工具链(上)
Step by Step学习CANoe三大工具链(下)
CANoe+VT系统模拟4种常见传感器
干货 | 如何在CANoe中使用Trigger Block进行数据挖掘
如何用CANoe处理音频数据
如何用 CANoe 对离线数据进行二次处理
CANoe诊断功能——安全算法调用介绍





怿星一意,专注车载
引领汽车科技新高度




【声明】内容源于网络
0
0
怿星科技
让智能汽车研发更高效!
内容 428
粉丝 0
怿星科技 让智能汽车研发更高效!
总阅读795
粉丝0
内容428