В этом примере показано, как заметить, что сообщение, обрабатывающее поведения 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 отправляются от MATLAB. Сообщения загружаются из обеспеченного MAT-файла. canChannel
создается, чтобы передать данные позже в этом примере. Сообщения, чтобы отправить периодически синхронизируются на уровне 100 мс, и содержавшие данные сигнала постепенно увеличиваются линейно.
load canMessages.mat txCh = canChannel("MathWorks","Virtual 1", 1);
Присвойте конечное время симуляции и запустите модель.
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. Следующие выводы могут быть сделаны из этих форм волны:
Несколько значений сигналов наблюдаются в каждом шаге расчета.
Линейно увеличивающее значение сигналов указывает, что все сообщения в каждом шаге расчета распакованы.
Никакие данные не подавлены этот путь, когда подсистема вызова функций инициирована для каждого полученного сообщения, и распаковка сделана в нем.
Только одно значение сигналов наблюдается в каждом шаге расчета.
Поэтому только одно сообщение CAN распаковано в каждом шаге расчета.
Только последнее сообщение в выборке распаковано в каждом шаге расчета.
Все другие сообщения, кроме последнего, подавлены в каждой выборке.
Таким образом, функциональный триггерный порт блока CAN Receive используется, чтобы распаковать все сообщения, получил каждый шаг расчета. Если не используемый, то только последнее сообщение распаковано в каждом шаге расчета. Выберите поведение модели на основе требования вашей системы и потребностей обработки данных.