2016-04-26 13 views
1

Ich arbeite an CANalyzer und ich kann nicht finden, wie man eine CAPL-Funktion aufruft, die einen Parameter enthält. Wenn ich num in functions_call.Call(num) setze, funktioniert es nicht.Aufruf der CAPL-Funktion von Python

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

Antwort

3

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) 
+1

Ich fühle mich Neugier. Was ist der Zweck der Verwendung von Python-Skripten, um CANoe-CAPLs auszuführen? –

+1

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

+1

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

-1

Wenn ich in function1.Call (einige char-Variable) in python als Argument char passieren, wirft es Fehler als

File "C:\Python27\lib\site-packages\win32com\gen_py\4CB02FC0-4F33-11D3-854D-00105A3E017Bx0x1x31.py", line 1668, in Call , p7, p8, p9, p10) File "C:\Python27\lib\site-packages\win32com\client__init__.py", line 467, in ApplyTypes self.oleobj.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args), pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352571), 10)

Python:

var = 'abc' 

count = 0 

while count < 10: 

    if (is_running): 

     function1.Call(var) 

     count += 1 

CAPL: 

void function1(char var1[]) 

{ 

    //Code 

} 
+1

Dies liefert keine Antwort auf die Frage. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (https://stackoverflow.com/help/privileges/comment); Stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (https://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/18231430) – larsr

Verwandte Themen