Этот пример показывает вам, как сконфигурировать и использовать функцию обратного вызова, чтобы получить и обработать сообщения, полученные от канала CAN. Это использует MathWorks Virtual CAN channels, соединенный в петлевой настройке.
Создайте канал 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, например, цели и не является частью Vehicle Network 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: 11-Jan-2019 00:18:33 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);