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行, 两个全局函数,五个定义的类,从类名字可以看出这些类的用意
下面我们需要下载个工具:OLEView.exe ,这个工具可以让你看出安装你电脑上的所有软件的COM 接口,包括office ,CANoe等。
选择到 Type Libraries列,下拉可以找到CANoe, 然后双击,会打开另外一个窗口,如下图2:
图1:
图2:
下面我们逐行解读下代码:
先看 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
ver = app.Version
print('Loaded CANoe version ',
ver.major, '.',
ver.minor, '.',
ver.Build, '...', sep='')
打印CANoe的版本信息
将局部变量赋值给类变量,这没毛病
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的逐行解读相关教程