Call CAPL function from Python

前端 未结 1 1769
情歌与酒
情歌与酒 2021-01-01 04:48

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 doe

相关标签:
1条回答
  • 2021-01-01 05:11

    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)
    
    0 讨论(0)
提交回复
热议问题