4

CANalyzer を使用していますが、パラメーターを含む CAPL 関数を呼び出す方法が見つかりません。num入れたらfunctions_call.Call(num)ダメ。

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

1 に答える 1

9

私はしばらく前に同様の問題に遭遇し、いくつかのグーグルが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)
于 2016-05-06T09:02:31.367 に答える