C# 使用Vector.Diagnostic.dll发送诊断请求

C# 使用Vector.Diagnostic.dll发送诊断请求,c#,python-3.x,com,canoe,canalyzer,C#,Python 3.x,Com,Canoe,Canalyzer,我想使用python发送一些诊断请求。 代码: 我还附加了下面的图片和来自CANoe的COM层次结构。 它说设备应该有一个对象诊断。但就我而言,设备没有诊断对象,只有应用程序套接字、音频接口和MOSTDisSambler。因此,我无法访问诊断对象以创建请求 diag_ob = device.Diagnostic #isnt creating a Diag object diag_ob.CreateRequest("Default_Start&qu

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

我还附加了下面的图片和来自CANoe的COM层次结构。 它说设备应该有一个对象诊断。但就我而言,设备没有诊断对象,只有应用程序套接字、音频接口和MOSTDisSambler。因此,我无法访问诊断对象以创建请求

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

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

当我试图使用
Vector.Diagnostics.Application.GetEcu()
时,我接收到一个NoneType,我的假设是
GetEcu()
方法没有看到独木舟打开


您知道如何将它们链接起来吗?

开始时需要注意的几点:

  • 您不必提及添加参考线,因为这些DLL是在安装CANoe时注册的
  • 最重要的是“Vector.Diagnostics”不能被引用,因为这是CANoe使用的东西
  • 您尝试使用的是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()
    

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

    开始时需要注意的几点:

  • 您不必提及添加参考线,因为这些DLL是在安装CANoe时注册的
  • 最重要的是“Vector.Diagnostics”不能被引用,因为这是CANoe使用的东西
  • 您尝试使用的是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()
    

    尝试此方法并发布您在控制台中看到的任何错误。测量将在执行上述代码之前开始。

    您能否分享您的代码以及有关独木舟配置的一些详细信息?您好,我编辑了我的帖子,并将代码粘贴到初始帖子中。为了更好的可视性,我使用了64位的CANoe 11,我使用了基于arxml的ETH模拟。Vector.Diagnostics.dll用于在CANoe中进行诊断,例如在C#中编写模拟或测试时。应该在python中使用COM来使用COM接口,例如使用pywin32而不是IronPython。除此之外,您能否确认您的设备在CANoe的诊断配置对话框中被称为myDevice?也许发布一个对话框的屏幕截图。它不是myDevice,在实际代码中我有真实的名字。一切都很好,但我找不到名为diagnostics的对象,即使我在Vector.Interop.dll中查找,诊断类也不存在。但是这个Vector.Diagnostic.dll怎么能看到我的独木舟被打开了?我还在名为“设备详细信息”的链接中添加了一张新照片。在那里你可以看到诊断不是一个类。你能分享你的代码和一些关于独木舟配置的详细信息吗?你好,我编辑了我的帖子,并将代码粘贴到了最初的帖子中。为了更好的可视性,我使用了64位的CANoe 11,我使用了基于arxml的ETH模拟。Vector.Diagnostics.dll用于在CANoe中进行诊断,例如在C#中编写模拟或测试时。应该在python中使用COM来使用COM接口,例如使用pywin32而不是IronPython。除此之外,您能否确认您的设备在CANoe的诊断配置对话框中被称为myDevice?也许发布一个对话框的屏幕截图。它不是myDevice,在实际代码中我有真实的名字。一切都很好,但我找不到名为diagnostics的对象,即使我在Vector.Interop.dll中查找,诊断类也不存在。但是这个Vector.Diagnostic.dll怎么能看到我的独木舟被打开了呢?我还在名为“设备详细信息”的链接中添加了一张新照片,你可以看到诊断不是一个类。您好,这个解决方案正在运行,但我想找到一种使用Diagnostics.dll的方法。为什么?因为我想获得执行命令的输出和更多的自由。现在我必须解决以下问题:如何以字符串格式从diagnostics作业获得响应?这是我的代码:
    while diagreq.Pending:time.sleep(0.5)打印(diagreq.Responses.Count)范围内的x(diagreq.Responses.Count):diagResp=diagreq.Responses(x+1)打印(diagResp.Stream)
    diagResp.Stream
    在我试图将其转换为字符串时返回一个memoryview。这就是我试图转换它的方式:
    diagResp.Stream.tobytes().decode(“utf-16”)
    Hello,这个解决方案正在运行,但我想找到一种使用Diagnostics.dll的方法。为什么?因为我想获得执行命令的输出和更多的自由。现在我必须解决以下问题:如何以字符串格式从diagnostics作业获得响应?这是我的代码:
    while diagreq.Pending:time.sleep(0.5)打印(diagreq.Responses.Count)范围内的x(diagreq.Responses.Count):diagResp=diagreq.Responses(x+1)打印(diagResp.Stream)
    diagResp.Stream
    在我试图将其转换为字符串时返回一个memoryview。这就是我试图转换它的方式:
    diagResp.Stream.tobytes().decode(“utf-16”)