canoe和python_Python调用CANoe官方demon的逐行解读

Python调用CANoe官方demon的逐行解读

Python调用CANoe官方demon的逐行解读

CANO 是留有 COM Interface 的,这样我们可以通过第三方的程序调用CANoe开放的API。

在C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 11.0.55\Programming 这个路径下有个官方的demon ,是通过python 调用的CANoe .

因为脚本 调用了 win32com 这个库,如果没有COM口编程的经验,这部分还是挺难懂的,下面我就结合自己的琢磨,逐行分析下代码的逻辑,因为本人也学艺不精,仅供参考。

总代吗不到200行, 两个全局函数,五个定义的类,从类名字可以看出这些类的用意

c94fa5ea314e75f2a47e8840a573a8a2.png

下面我们需要下载个工具:OLEView.exe ,这个工具可以让你看出安装你电脑上的所有软件的COM 接口,包括office ,CANoe等。

选择到 Type Libraries列,下拉可以找到CANoe, 然后双击,会打开另外一个窗口,如下图2:

图1:

a836a1e88626de1f248de32981fffd38.png

图2:

82e41de313771fed7a7b37ab8d4b2b36.png

下面我们逐行解读下代码:

先看 class CanoeSync(object): 的 def __init__(self):

class CanoeSync(object):

"""Wrapper class for CANoe Application object"""

Started = False

Stopped = False

ConfigPath = ""

def __init__(self):

app = DispatchEx('CANoe.Application')

app.Configuration.Modified = False#

ver = app.Version

print('Loaded CANoe version ',

ver.major, '.',

ver.minor, '.',

ver.Build, '...', sep='')

self.App = app

self.Measurement = app.Measurement

self.Running = lambda : self.Measurement.Running

self.WaitForStart = lambda: DoEventsUntil(lambda: CanoeSync.Started)

self.WaitForStop = lambda: DoEventsUntil(lambda: CanoeSync.Stopped)

WithEvents(self.App.Measurement, CanoeMeasurementEvents)

app = DispatchEx('CANoe.Application') #打开一个CANoe应用程序,没毛病

app.Configuration.Modified = False#

上一步我们打开了CANoe程序,返回一个app,然后设置app的Configuration 类,和Configuration 类的Modified 方法 为False ,不清楚具体含义,我尝试了设置为True,但是打不开CANoe

a0a65ad28e585da97e49c8fce6ece8a0.png

ver = app.Version

print('Loaded CANoe version ',

ver.major, '.',

ver.minor, '.',

ver.Build, '...', sep='')

打印CANoe的版本信息

5a070d3c8cdd3691e2642dbbd7358554.png

将局部变量赋值给类变量,这没毛病

self.App = app

self.Measurement = app.Measurement

self.Running = lambda : self.Measurement.Running 这行代码使用了匿名函数lambda ,因为匿名函数没有输入参数,所以相当于 `self.Running = self.Measurement.Running`

self.WaitForStart = lambda: DoEventsUntil(lambda: self.started)

self.WaitForStop = lambda: DoEventsUntil(lambda: self.stopped)

相当于

def WaitForStart ():

DoEventsUntil(self.started)

def WaitForStop ():

DoEventsUntil(self.stopped)

WithEvents(self.App.Measurement, CanoeMeasurementEvents)#静态事件的绑定,具体不清楚

Python调用CANoe官方demon的逐行解读相关教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值