1

我想使用 python 发送一些诊断请求。代码:

clr.AddReference('Vector.CANoe.Interop')
clr.AddReference('Vector.Diagnostics')
import CANoe
import Vector.Diagnostics
 
mCANoeApp = CANoe.Application()
mCANoeApp.Open("myPath")
mCANoeMeasurement =  mCANoeApp.Measurement
mCANoeMeasurement.Start()
mCANoeBus = CANoe.Bus(mCANoeApp.get_Bus("Ethernet"))
MNetwork = CANoe.Networks(mCANoeApp.get_Networks(11))
net = CANoe.Network(MNetwork.get_Item(1))
devices = CANoe.Devices(net.Devices)
device = CANoe.Device(devices.get_Item("myDevice"))

我还在 CANoe 的 COM Hierarchy 中附加了以下图像。 COM Object Hierarchy 它说设备应该有一个对象诊断。但在我这边,设备没有诊断对象,只有:ApplicationSocket、AudioInterface 和 MostDisassambler。因此,我无法访问诊断对象以创建请求。

    diag_ob = device.Diagnostic             #isnt creating a Diag object
    diag_ob.CreateRequest("Default_Start")  #Error

设备详情

CANoe.诊断失败

设备.诊断

因为我无法访问诊断对象,所以我尝试直接使用Vector.Diagnostics,这似乎无法识别测量值,我试图了解如何链接它们。

当我尝试使用时,Vector.Diagnostics.Application.GetEcu()我收到了 NoneType 并且我的假设是该GetEcu()方法没有看到 CANoe 打开。

你知道如何链接它们吗?

4

1 回答 1

0

一开始有几点需要注意:

  1. 您不必提及添加参考行,因为这些 dll 在安装 CANoe 时已注册。
  2. 最重要的是不要引用“Vector.Diagnostics”,因为这是 CANoe 使用的东西。
  3. 您尝试使用的是 COM 接口而不是诊断接口。

查看以下代码以发送默认会话请求:

from win32com.client import *
import time
mainApp = DispatchEx('CANoe.Application')
print(mainApp.Networks("CAN network 1").Devices("Example_ECU").Name) # To make sure you are referencing the correct ECU
diagreq = mainApp.Networks("CAN network 1").Devices("Example_ECU").Diagnostic.CreateRequest("DefaultSession_Start")
time.sleep(1)
diagreq.Send()

试试这个并发布您在控制台中看到的任何错误。在执行上述代码之前要开始测量。

于 2021-01-27T08:43:36.420 回答