Можно ли отправлять сообщения CAN из функции обратного вызова?
У меня следующая проблема: я хотел бы отправить сообщения 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 ответ
Вполне вероятно, что ваша функция таймера просто не имеет доступа к message
объект (т.е. он существует в другой области видимости). Одним из вариантов является вложение вашей функции таймера в функцию, где вы инициализируете message
, Кроме того, вы можете пройти 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;