Вызов функции CAPL из Python

Я работаю над CANalyzer и не могу найти, как вызвать функцию CAPL, которая содержит параметр. Если я вставлю num в functions_call.Call(num), это не сработает.

def call(num):
    print 'calling from CAN'
    x=int(num) 
    functions_call.Call()
    return 1

person alaya garci    schedule 26.04.2016    source источник


Ответы (1)


Некоторое время назад я столкнулся с аналогичной проблемой, и поиск в Google привел меня к следующему примечанию к приложению от Vector:

http://vector.com/portal/medien/cmc/application_notes/AN-AND-1-117_CANoe_CANalyzer_as_a_COM_Server.pdf

... раздел оформления заказа "2.7 Вызов функций CAPL".

Подводя итог, не забудьте объявить параметры вашей функции CAPL как "длинные", например: мне показалось, что следующее работает:

void function1(long l)
{
   write("function1() called with %d!", l);
}

Для завершения вот как выглядит мой код Python (для примера выше):

from win32com import client
import pythoncom
import time

function1 = None
canoe_app = None
is_running = False

class EventHandler:

    def OnInit(self):
        global canoe_app
        global function1

        function1 = canoe_app.CAPL.GetFunction('function1')

    def OnStart(self):
        global is_running
        is_running = True

canoe_app = client.Dispatch('CANoe.Application')
measurement = canoe_app.Measurement
measurement_events = client.WithEvents(measurement, EventHandler)
measurement.Start()


# The following loop takes care of any pending events and, once, the Measurement
# starts, it will call the CAPL function "function1" 10 times and then exit!
count = 0
while count < 10:
    if (is_running):
        function1.Call(count)
        count += 1

    pythoncom.PumpWaitingMessages()
    time.sleep(1)
person schaazzz    schedule 06.05.2016
comment
Я испытываю любопытство. Какова цель использования скриптов Python для выполнения CANoe CAPL? - person PySerial Killer; 03.09.2017
comment
Зависит от варианта использования. Я использую набор API-интерфейсов Python для автоматизации различных частей полного тестирования системы, включая симуляцию CAN, работающую в CANoe, отладчик, подключенный к цели, программируемый источник питания и некоторое другое настраиваемое оборудование. В некоторых сценариях использование Windows COM для управления каждым аспектом CANoe может стать утомительным и медленным, поэтому создание API-интерфейсов CAPL, которые можно вызывать извне, обеспечивает большую гибкость. - person schaazzz; 04.09.2017
comment
Кроме того, если у вас уже есть существующие сценарии CAPL, которые реализуют определенные функции для вашей симуляции, вы также можете вызывать соответствующие функции, используя извне, если у вас есть соответствующий вариант использования (например, тест системного уровня, как упоминалось в моем предыдущем комментарии). Между прочим, это не обязательно, чтобы быть Python, это может быть любой язык, идея состоит в том, чтобы иметь возможность управлять всей симуляцией CANoe извне (используя Vector's COM API). - person schaazzz; 04.09.2017
comment
@schaazzz ты наконец добился этого? Я запускаю скрипт Python, чтобы получить некоторые результаты. Мой вопрос, можно ли отправить результаты в CAN и отобразить на панели CanOe в скрипте Python? - person Sivaram Boina; 22.02.2019
comment
@sivaram Если я правильно понял ваш вопрос, я предполагаю, что вы хотите отправить какое-то значение через CAN и обновить какое-то значение на панели CANoe через COM (с использованием Python). Значения панели могут быть либо Environment / System Variables, либо Signals, вы можете установить их напрямую, используя правильные COM-объекты для установки переменных или сигналов. Если вам нужны конкретные примеры, создайте новый вопрос с подробностями. - person schaazzz; 07.05.2019
comment
@schaazzz Спасибо за ваш ответ. Наконец-то я добился этого. Если потребуется дополнительная помощь / предложение, я опубликую здесь. - person Sivaram Boina; 20.05.2019