Запуск функции CAPL в CANoe с comtypes выдает ошибку - PullRequest
0 голосов
/ 25 февраля 2020

Сейчас я пытаюсь вызвать функцию CAPL в CANoe с помощью CANoe COM API, используя пакет python comtypes.

Для этого я создал следующую небольшую короткую программу python:

from comtypes.client import CreateObject
c=CreateObject("CANoe.Application")
squareFunction=c.CAPL.GetFunction("square")
res=squareFunction.Call(5)
print(res==25)

Это должно вызвать мою короткую функцию CAPL:

int square(int x) {
   return x*x;
}

К сожалению, программа выдает c.CAPL.GetFunction("square") исключение, если симуляция выполняется в CANoe.

COMError: (-2147418113, 'Critical Error', (None, None, None, 0, None)) 

Если симуляция в CANoe остановлена, ошибки нет, но вызов функции выдает None.

Кто-нибудь знает, что здесь происходит?

1 Ответ

2 голосов
/ 26 февраля 2020

Сначала убедитесь, что ваша функция определена в блоке CAPL в настройке измерения, а не в настройке моделирования.

Замечание по применению CANalyzer / CANoe в качестве COM-сервера по Vector link сообщает на странице 15, что

Назначение функции CAPL для переменной может быть выполнено только в обработчике события OnInit объекта Measurement.

Т.е. ваша переменная squareFunction должна быть инициализирована во время события OnInit. Аналогично этому:

def OnInit():
  self.squareFunction = c.CAPL.GetFunction("square")

c.Measurement.OnInit += CANoe._IMeasurementEvents_OnInitEventHandler(self.OnInit)

При этом OnInit будет выполнено во время инициализации измерения, и позже вы сможете выполнить self.squareFunction.Call(5)

...