我正在尝试自动化独木舟,在尝试在方法“load_testenvironment”中为测试模块创建对象时遇到一些错误。我指的是独木舟->帮助->技术参考->COM接口,但没有太多帮助。
任何人都可以告诉我我在这里做错了什么吗?
错误:
引发属性错误(
AttributeError:“
代码:
import time, os, msvcrt
from win32com.client import *
from win32com.client.connect import *
import win32com.client
import pythoncom
def DoEvents():
pythoncom.PumpWaitingMessages()
time.sleep(.1)
def DoEventsUntil(cond):
while not cond():
DoEvents()
class CanoeSync(object):
"""Wrapper class for CANoe Application object"""
Started = False
Stopped = False
ConfigPath = ""
CANOE_APP_NAME = "CANoe.Application"
def __init__(self):
# app = win32com.client.Dispatch(self.CANOE_APP_NAME)
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 = win32com.client.Dispatch(self.App.Measurement)
self.Measurement = self.App.Measurement
self.Networks = None
self.Devices = None
self.Device = None
self.Diagnostic = None
self.Running = lambda: self.Measurement.Running
#self.Networks = win32com.client.Dispatch(self.App.Networks)
#self.network = None
self.Testmodules = None
self.environment_obj = dict()
self.testmodule_obj = dict()
self.WaitForStart = lambda: DoEventsUntil(lambda: CanoeSync.Started)
self.WaitForStop = lambda: DoEventsUntil(lambda: CanoeSync.Stopped)
WithEvents(self.App.Measurement, CanoeMeasurementEvents)
def load_testenvironment(self):
self.Testmodules = self.App.Configuration.TestSetup.TestEnvironments.Item(1).TestModules
def run_testenviroment(self,environment_name):
pass
def Load(self, cfgPath):
# current dir must point to the script file
cfg = os.path.join(os.curdir, cfgPath)
cfg = os.path.abspath(cfg)
print('Opening: ', cfg)
self.ConfigPath = os.path.dirname(cfg)
self.Configuration = self.App.Configuration
self.App.Open(cfg)
def Start(self):
if not self.Running():
self.Measurement.Start()
self.WaitForStart()
def Stop(self):
if self.Running():
self.Measurement.Stop()
self.WaitForStop()
def diagnostic_setup(self):
self.Networks = self.App.Networks
self.Devices = self.Networks.Item(1).Devices #set only for one
self.Device = self.Devices.Item(1)
self.Diagnostic = self.Devices.Item(1).Diagnostic
print(self.Device.Name)
def tester_presentstatus(self):
print(self.Diagnostic.TesterPresentStatus)
def diag_request(self,request):
diareq = self.Diagnostic.CreateRequest(request)
diareq.Send()
# wait until ECU response is pending
while diareq.Pending:
time.sleep(0.1)
if diareq.Responses.Count == 0:
return False
else :
response = list()
print('count of resp:',diareq.Responses.Count)
for num_of_resp in range(0, diareq.Responses.Count):
resp = diareq.Responses(num_of_resp + 1)
if resp.Positive :
for data in resp.Stream:
response.append(hex(data))
else :
print(111,resp.ResponseCode)
print(response)
return response
def diag_response(self):
pass
class CanoeMeasurementEvents(object):
"""Handler for CANoe measurement events"""
def OnStart(self):
CanoeSync.Started = True
CanoeSync.Stopped = False
print("< measurement started >")
def OnStop(self):
CanoeSync.Started = False
CanoeSync.Stopped = True
print("< measurement stopped >")
com 接口有很多版本,最好的方法是用 Cast 来把接口强制转换到最新的,可以在canoe15\Exec32\COMdev\CANoe.h 中查看有哪些接口版本。