Функции обратного вызова приема сообщения CAN

Этот пример показывает вам, как сконфигурировать и использовать функцию обратного вызова, чтобы получить и обработать сообщения, полученные от канала 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: 13
        MessagesReceived: 399
     MessagesTransmitted: 0
    InitializationAccess: 1
        InitialTimestamp: 29-Jan-2020 20:59:36
           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);