2016-12-08 32 views
1

私は次の問題があります:私はコールバック関数からCANメッセージを送信したいと思います。このコールバック関数は、timerオブジェクトによって呼び出されます。コールバック関数が実行されるたびに、CANメッセージを送信する必要があります。CANメッセージをコールバック関数から送信することは可能ですか?

私はコード化された:

canch = canChannel('PEAK-System', 'PCAN_USBBUS1'); 
configBusSpeed(canch, 1000000) 
start(canch) 

canch.Database = canDatabase('\\psf\Home\Desktop\02 CAN DBC\CAN4.dbc'); 

message = canMessage (canch.Database,'IPSS_RX_1_1ms'); 

transmitPeriodic(canch,message, 'On', 0.01); 

T= timer('ExecutionMode','fixedrate','Period',0.2,... 
     'TimerFcn',@TEST_timer_callback_fcn,'StopFcn','disp(''Timer has stopped'')'); 

start(T) 

コールバック関数:

function TEST_timer_callback_fcn(src,event) 

message.Signals.In_ti= 39; 

CANチャンネルが開始されます - しかし、メッセージは送信されません。

誰かが助けることができますか?

+0

どんな機能では?メインスクリプトのサブ機能ですか? – Suever

答えて

0

あなたのタイマー機能は、単にmessageオブジェクトにアクセスできない(つまり、別の範囲に存在する)可能性があります。 1つのオプションは、messageを初期化する関数内のnest your timer functionです。または、messageをタイマー機能に渡すこともできます。あなたはこれにタイマーの作成ラインを変更することでこれを行うことができます:

これに
T = timer('ExecutionMode','fixedrate','Period',0.2,... 
      'TimerFcn',@(~,~) TEST_timer_callback_fcn(message),... 
      'StopFcn','disp(''Timer has stopped'')'); 

コールバック関数:あなたは、コールバック関数が定義されていない

function TEST_timer_callback_fcn(message) 

    message.Signals.In_ti= 39; 
+0

私はちょうど私のタイマー機能にメッセージを渡し、あなたが言ったように動作します。 –

+0

@ R.Scott:素晴らしい!あなたが比較的新しいサイトであることを見て、あなたの問題を解決したときに答えをマークすることができます。サイトに関するより有用な情報は、[ここ](http://stackoverflow.com/tour)にあります。 – gnovice

関連する問題