是否可以从回调函数中发送CAN消息?

时间:2016-12-08 21:02:57

标签: matlab timer callback simulink can-bus

我遇到以下问题:我想从回调函数中发送CAN消息。此回调函数由timerobject调用。每次执行回调函数时,都应该发送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通道启动 - 但不发送消息。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您的计时器功能可能无法访问message对象(即它存在于不同的范围内)。在初始化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;