Этот пример показывает вам, как использовать функцию обратного вызова, чтобы обработать сообщения, полученные от канала CAN. Это использует MathWorks виртуальные каналы CAN, соединенные в петлевой настройке. Этот пример описывает рабочий процесс для сети CAN, но концепция, продемонстрированная также, применяется к сети CAN FD.
Создайте канал CAN с помощью canChannel чтобы получить сообщения путем определения имени поставщика, имя устройства и устройство образовывают канал индекс.
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 receivingFcnfunction 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. Когда сообщения передаются, функция обратного вызова выполняет каждый раз порог, заданный свойством MessageReceivedFcnCount соответствуется.
generateMsgs();

Отобразите MessagesAvailable свойство канала видеть количество остающихся сообщений. Поскольку доступное количество сообщения ниже заданного порога, больше сообщений требуется, чтобы инициировать коллбэк другое время.
rxCh.MessagesAvailable
ans = 7
Используйте stop команда, чтобы установить канал оффлайн.
stop(rxCh);