Поведение приема сообщения CAN в Simulink

В этом примере показано, как заметить, что сообщение, обрабатывающее поведения CAN, Получает, и CAN Распаковывают блоки в нескольких сценариях моделирования. Этот пример демонстрирует два случая, с и не используя функциональный триггер f() порт блока CAN Receive. Выходные параметры модели указывают на количество сообщений CAN, распакованных для нисходящей обработки в каждом случае. Пример использует MathWorks виртуальные каналы CAN, чтобы отправить сообщения CAN от MATLAB до модели Simulink. Эти методы моделирования и поведение также применяются к протоколу CAN FD с помощью Vehicle Network Toolbox блоки CAN FD.

Исследуйте модель в качестве примера

Модель в качестве примера содержит блок CAN Receive, сконфигурированный для MathWorks виртуальные каналы, производящие каждые 500 мс. Полученные сообщения CAN распакованы двумя способами:

  • Блок CAN Unpack в подсистеме вызова функций, инициированной функциональным триггером f() порт блока CAN Receive.

  • Блок CAN Unpack, соединенный непосредственно с CAN Msg выходной порт.

Осциллографы помещаются, чтобы просмотреть полученные сигналы в обоих случаях. Кроме того, значения сигналов от выходного порта CAN Распаковывают блоки, экспортируются в рабочее пространство MATLAB и используются, чтобы построить результаты.

open CanReceiveModel

Подготовьте сообщения CAN к передаче

Чтобы продемонстрировать операцию модели, сообщения CAN отправляются от MATLAB. Сообщения загружаются из обеспеченного MAT-файла. canChannel создается, чтобы передать данные позже в этом примере. Сообщения, чтобы отправить периодически синхронизируются на уровне 100 мс, и содержавшие данные сигнала постепенно увеличиваются линейно.

load canMessages.mat
txCh = canChannel("MathWorks","Virtual 1", 1);

Выполните модель и воспроизведите сообщения CAN из MATLAB

Присвойте конечное время симуляции и запустите модель.

simTime = 10;
set_param("CanReceiveModel","StopTime",num2str(simTime))
set_param("CanReceiveModel","SimulationCommand","start")

Приостановите выполнение скрипта, пока модель не будет распознана, как полностью запущено.

while strcmp(get_param("CanReceiveModel","SimulationStatus"),"stopped")
end

Запустите канал CAN и выполните replay из загруженных сообщений CAN.

start(txCh);
replay(txCh, canMessages);

Когда воспроизведение происходит, блок CAN Receive в модели получает и обрабатывает сообщения. Можно просмотреть значения сигналов, полученные в режиме реального времени в осциллографах, помещенных внутри и снаружи подсистемы вызова функций. Ожидайте до симуляции концов модели, чтобы продолжиться.

Исследуйте результаты обработки принятых данных

Осциллографы обеспечили в модели show значения сигналов из сообщений, полученных внутри и снаружи подсистемы вызова функций, когда они распакованы. Следующие представления показывают осциллографы после симуляции концов модели. Отметьте эти различия:

  • В подсистеме вызова функций: 4-6 сообщений с увеличивающимися значениями сигналов получены в каждом шаге расчета. По сути, все сообщения CAN от воспроизведения были индивидуально получены, инициированы к подсистеме и обработаны блоком CAN Unpack в подсистеме на шаг расчета.

  • Вне подсистемы вызова функций: Одно сообщение со скачком в значении сигналов получено в каждом шаге расчета. По сути, только последнему сообщению CAN от воспроизведения на шаг расчета предоставил и обработал блок CAN Unpack. Другие промежуточные сообщения не обрабатываются.

Используя экспортируемые значения сигналов модели от выходного порта CAN Распаковывают блоки, график сравнивает оба случая. Функция, используемая, чтобы построить результаты, включена с этим примером и сконфигурирована, чтобы выполниться в коллбэке Функции Остановки модели, так, чтобы это было выполнено, когда модель останавливает симуляцию.

Передача сообщения CAN происходила периодически каждые 100 мс, в то время как блок CAN Receive произвел на уровне 500 мс. Так, в каждой выборке существует 4-6 сообщений CAN. Следующие выводы могут быть сделаны из этих форм волны:

Случай 1: Распаковка сообщений CAN с помощью функционального триггера (в подсистеме вызова функций) распаковывает все сообщения, полученные в каждой выборке.

  • Несколько значений сигналов наблюдаются в каждом шаге расчета.

  • Линейно увеличивающее значение сигналов указывает, что все сообщения в каждом шаге расчета распакованы.

  • Никакие данные не подавлены этот путь, когда подсистема вызова функций инициирована для каждого полученного сообщения, и распаковка сделана в нем.

Случай 2: Распаковка сообщений CAN, не используя функциональный триггер (вне подсистемы вызова функций) распаковывает только последнее сообщение в каждой выборке.

  • Только одно значение сигналов наблюдается в каждом шаге расчета.

  • Поэтому только одно сообщение CAN распаковано в каждом шаге расчета.

  • Только последнее сообщение в выборке распаковано в каждом шаге расчета.

  • Все другие сообщения, кроме последнего, подавлены в каждой выборке.

Таким образом, функциональный триггерный порт блока CAN Receive используется, чтобы распаковать все сообщения, получил каждый шаг расчета. Если не используемый, то только последнее сообщение распаковано в каждом шаге расчета. Выберите поведение модели на основе требования вашей системы и потребностей обработки данных.