I'm working on CANalyzer and I can't find how to call a CAPL function which contains a parameter. If I put num
in functions_call.Call(num)
it doesn't work.
def call(num):
print 'calling from CAN'
x=int(num)
functions_call.Call()
return 1
I ran into a similar problem a while back and some Googling led me to the following application note by Vector:
http://vector.com/portal/medien/cmc/application_notes/AN-AND-1-117_CANoe_CANalyzer_as_a_COM_Server.pdf
...checkout section "2.7 Calling CAPL Functions".
To sum it up, make sure to declare your CAPL function's parameters as "long", .e.g: the following seemed to work for me:
void function1(long l)
{
write("function1() called with %d!", l);
}
For the sake of completion, this is how my python code (for the example above) looks like:
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With