В этом примере показано, как сконфигурировать и использовать функцию обратного вызова для приема и обработки сообщений, полученных от канала CAN. Он использует виртуальные каналы CAN MathWorks, подключенные в конфигурации с закольцовыванием.
Создайте канал CAN для приема сообщений, указав имя поставщика, имя устройства и индекс канала устройства.
rxCh = canChannel('MathWorks', 'Virtual 1', 2)
rxCh =
Channel with properties:
Device Information
DeviceVendor: 'MathWorks'
Device: 'Virtual 1'
DeviceChannelIndex: 2
DeviceSerialNumber: 0
ProtocolMode: 'CAN'
Status Information
Running: 0
MessagesAvailable: 0
MessagesReceived: 0
MessagesTransmitted: 0
InitializationAccess: 1
InitialTimestamp: [0x0 datetime]
FilterHistory: 'Standard ID Filter: Allow All | Extended ID Filter: Allow All'
Channel Information
BusStatus: 'N/A'
SilentMode: 0
TransceiverName: 'N/A'
TransceiverState: 'N/A'
ReceiveErrorCount: 0
TransmitErrorCount: 0
BusSpeed: 500000
SJW: []
TSEG1: []
TSEG2: []
NumOfSamples: []
Other Information
Database: []
UserData: []
Установка функции обратного вызова в канале для запуска через входящие сообщения.
rxCh.MessageReceivedFcn = @receivingFcn;
Укажите доступное пороговое значение для управления количеством сообщений, необходимых в канале до запуска функции обратного вызова.
rxCh.MessageReceivedFcnCount = 30;
Примерная функция обратного вызова принимает сообщение от канала при каждом выполнении и отображает идентификаторы CAN по их меткам времени при каждом выполнении.
type receivingFcn
function receivingFcn(rxCh)
% RECEIVINGFCN A CAN channel message receive callback function.
%
% This is a callback function used to receive CAN message. It receives
% messages from the channel RXCH and plots the result.
%
% Copyright 2009-2016 The MathWorks, Inc.
% Receive all available messages.
rxMsg = receive(rxCh, Inf, 'OutputFormat', 'timetable');
% Plot the signal values against their message timestamps.
plot(rxMsg.Time, rxMsg.ID, 'x');
ylim([0 2047])
xlabel('Timestamp');
ylabel('CAN Identifier');
hold all;
end
Используйте start для перевода канала в оперативный режим.
start(rxCh);
Примерная функция generateMsgs создает сообщения CAN и передает их с различной периодичностью. Он создает трафик на шине CAN, например, и не является частью Toolbox™ сети транспортных средств. Когда сообщения передаются, функция обратного вызова выполняется каждый раз, когда соблюдается порог подсчета принятых функций сообщения.
generateMsgs();

Обратите внимание на остальные сообщения в канале. Поскольку количество доступных сообщений ниже порогового значения, указанного ранее, требуется больше сообщений для запуска обратного вызова в другой раз.
rxCh
rxCh =
Channel with properties:
Device Information
DeviceVendor: 'MathWorks'
Device: 'Virtual 1'
DeviceChannelIndex: 2
DeviceSerialNumber: 0
ProtocolMode: 'CAN'
Status Information
Running: 1
MessagesAvailable: 4
MessagesReceived: 399
MessagesTransmitted: 0
InitializationAccess: 1
InitialTimestamp: 27-Jan-2021 15:37:48
FilterHistory: 'Standard ID Filter: Allow All | Extended ID Filter: Allow All'
Channel Information
BusStatus: 'N/A'
SilentMode: 0
TransceiverName: 'N/A'
TransceiverState: 'N/A'
ReceiveErrorCount: 0
TransmitErrorCount: 0
BusSpeed: 500000
SJW: []
TSEG1: []
TSEG2: []
NumOfSamples: []
Other Information
Database: []
UserData: []
Используйте stop для перевода канала в автономный режим.
stop(rxCh);