是否可以通过回调函数发送 CAN 消息?

Is it possible to send CAN messages out of a callback function?

我有以下问题:我想通过回调函数发送 CAN 消息。此回调函数由计时器对象调用。每次执行回调函数时,它应该发送 CAN 消息。

我编码:

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

canch.Database = canDatabase('\psf\Home\Desktop 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 通道启动 - 但消息未发送。

有人可以帮忙吗?

很可能您的计时器函数根本无法访问 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;