如何从python3.x调用CAPL通用函数?

2024-09-27 18:01:10 发布

您现在位置:Python中文网/ 问答频道 /正文

发行

我试图调用CAPL通用函数(在我的例子中timeNowNS),但我不知道是否可能。在

capl general functions

我用的是什么?在

我使用的是python3.7和Vector canoe11.0。在

连接是使用.NETCANoeAPI完成的。 这就是我获取DLL的方法。在


import clr
sys.path.append("C:\Program Files\Vector CANoe 11.0\Exec64")  # path to CANoe DLL Files
clr.AddReference('Vector.CANoe.Interop')                      # add reference to .NET DLL file
import CANoe                                                  # import namespace from DLL file

我试过什么?在

我成功地打开了独木舟模拟,开始了测量,我可以访问信号,环境变量和系统变量。在

然后我创建了CAPL对象,并尝试使用GetFunction方法来获取CAPLFunction对象,以便调用它。在

^{pr2}$

预期结果

我应该用这个函数得到当前的模拟时间。在

实际结果

使用上面的代码我得到:

**COMException**: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
   at CANoe.ICAPL5.GetFunction(String Name)

我尝试过不同的代码变体,但是没有成功。在

可能是硬件问题吗? 我应该在独木舟模拟中做一些设置吗?在

如果您需要更多信息,请咨询我!提前感谢

更新:在添加CAPL块之后,我添加了一张测量设置的照片

Measure setup


Tags: topath对象方法函数fromimportfiles
2条回答

经过长时间的反复尝试和@m-spiller的帮助,我找到了解决办法。在

function2 = None

   def open_can(self):
        self.mCANoeApp = CANoe.Application()
        self.mCANoeMeasurement = self.mCANoeApp.Measurement   # change here: no cast necessary
        self.mCANoeEnv = CANoe.Environment(self.mCANoeApp.Environment)
        self.mCANoeBus = CANoe.Bus(self.mCANoeApp.get_Bus("CAN"))
        self.mCANoeSys = CANoe.System(self.mCANoeApp.System)
        self.mCANoeNamespaces = CANoe.Namespaces(self.mCANoeSys.Namespaces)
        self.mCANoeCAPL = CANoe.CAPL(self.mCANoeApp.CAPL)
        self.mCANoeMeasurement.OnInit += CANoe._IMeasurementEvents_OnInitEventHandler(self.OnInit)  
        # change here also: explained below

    def OnInit(self):
        global function2
        function2 = CANoe.CAPLFunction(mCANoeCAPL.GetFunction('MyTime')) # cast here is necessary

    def callFunction(self):
        result = function2.Call()

初始代码有什么问题?

问题是,我试图在度量开始后为变量赋值。
如第2.7章here所述,只能在测量对象的OnInit事件处理程序中对变量赋值。

我添加了这一行,研究文档:

^{pr2}$

添加后,在init上执行OnInit函数,并将CAPL函数分配给一个变量,然后我可以使用该变量来调用该函数。在

再次感谢你,@m-spiller!在

您必须编写一个CAPL函数,在该函数中调用timeNowNS。然后可以按照您实现的方式从Python调用这个CAPL函数。在

GetFunction仅适用于(用户编写的)CAPL函数。不能直接调用CAPL内部函数(即内置的CAPL函数)。在

把这个放到一个CAPL文件中:

int MyFunc()
{
  return timeNowNS();
}

从Python中这样调用:

^{pr2}$

相关问题 更多 >

    热门问题