Ich lief in ein ähnliches Problem eine Weile zurück, und einige Googeln führte mich auf die folgende Application Note von Vector:
http://vector.com/portal/medien/cmc/application_notes/AN-AND-1-117_CANoe_CANalyzer_as_a_COM_Server.pdf
... Kasse Abschnitt "2.7 Aufruf CAPL Funktionen".
Um es zusammenzufassen, stellen Sie sicher, dass Ihre CAPL Funktion der Parameter als „lang“, .eg zu erklären: die folgenden schien für mich zu arbeiten:
void function1(long l)
{
write("function1() called with %d!", l);
}
Aus Gründen der Fertigstellung ist dies, wie mein python-Code (für das Beispiel oben) wie folgt aussieht:
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)
Ich fühle mich Neugier. Was ist der Zweck der Verwendung von Python-Skripten, um CANoe-CAPLs auszuführen? –
Hängt vom Anwendungsfall ab. Ich verwende eine Reihe von Python-APIs zur Automatisierung verschiedener Teile eines vollständigen Systemtests, einschließlich einer in CANoe ausgeführten CAN-Simulation, eines Debuggers, der mit dem Ziel verbunden ist, einer programmierbaren Stromversorgung und einiger anderer kundenspezifischer Hardware. In einigen Szenarien kann die Verwendung von Windows COM zur Steuerung jedes Aspekts von CANoe sowohl mühsam als auch langsam werden, sodass die Erstellung von CAPL- "APIs", die extern aufgerufen werden können, viel Flexibilität ermöglicht. – schaazzz
Wenn Sie bereits über vorhandene CAPL-Skripte verfügen, die bestimmte Funktionen für Ihre Simulation implementieren, können Sie die entsprechenden Funktionen auch extern aufrufen, wenn Sie einen entsprechenden Anwendungsfall haben (z. B. einen Systemleveltest wie in meinem vorherigen Kommentar erwähnt). Übrigens, es muss nicht Python sein, es kann _any_ language sein, die Idee ist, eine ganze CANoe-Simulation extern steuern zu können (mit Vectors COM-API). – schaazzz