Создайте общий канал связи с несколькими отправителями и приемниками

В этом примере показано, как смоделировать коммуникацию через общий канал с несколькими отправителями и приемниками с помощью сообщений Simulink ®, SimEvents ® и Stateflow ®.

Обзор сообщений см. в разделе Обзор сообщений Simulink.

В этой модели существуют два программных компонента, которые отправляют сообщения, и два компонента, которые получают сообщения. Общий канал передает сообщения с дополнительной задержкой. Блоки SimEvents ® используются для создания пользовательского поведения связи путем слияния линий сообщений и копирования и задержки сообщений. Диаграмма Stateflow ® используется в компоненте send для отправки сообщений на основе логики принятия решений.

Создание компонентов для отправки сообщений

В модели существуют два программных компонента, которые выводят сообщения: Send и StateflowSend.

В компоненте Send источником сигнала является блок Sine Wave. Блок генерирует сигнал синусоиды с амплитудой 1. Шаг расчета блока 0.1. Блок Send преобразует сигнал в сообщение, которое несет значение сигналов как данные. Компонент отправки отправляет сообщения в буфер отправки 1.

В компоненте StateflowSend другой блок Sine Wave генерирует сигнал синусоиды, а блок Noise вводит шум в сигнал. Блок Noise выводит сигнал, значения которого генерируются из Гауссова распределения со средним значением 0 и отклонение 1. Шаг расчета блока 0.1.

График Stateflow ® представляет простую логику, которая фильтрует сигнал и решает, отправлять ли сообщения. Если значение сигнала больше 0.5 на время, больше 0.1, затем график отправляет сообщение, которое несет значение сигналов. Если значение сигналов ниже 0, затем график переходит к ReceiveSignal состояние. Компонент StateflowSend отправляет сообщения в буфер отправки 2.

Дополнительные сведения о создании интерфейсов сообщений см. в разделе Установка интерфейсов отправки и получения сообщений между программными компонентами.

Создание компонентов для приема сообщений

В модели есть два программных компонента, которые получают сообщения, Receive и прослушиватель.

В компоненте Receive блок Receive получает сообщения и преобразует данные сообщения в значения сигналов.

В компоненте Listener существует блок Simulink Function. Блок отображает функцию onOneMessage (данные) на грани блока.

Когда сообщение приходит в буфер приема 2, блок Listener уведомляется, и он принимает аргумент data, которое является значением от данных сообщения в качестве входного сигнала. В блоке, data значения умножаются на 2. Блок выводит новое значение данных.

Маршрутизация сообщений с использованием SimEvents

®

В общем канале пути сообщения, исходящие из двух компонентов отправки сообщения, объединяются, чтобы представлять общий канал связи.

Блок SimEvents ® Entity Input Switch объединяет линии сообщений. В блоке:

  • Количество портов входа определяет количество линий сообщений, которые будут объединены. Это значение параметров 2 для двух путей сообщения.

  • Активный выбор порта определяет, как выбрать активный порт для отправки сообщения. Если вы выбираете Allвсе сообщения, поступающие в блок, могут покинуть блок из порта выхода. Если вы выбираете Switchможно задать логику, выбирающую активный порт для отправки сообщений. В данном примере параметр устанавливается на All.

Блок SimEvents ® Entity Server используется для представления задержки передачи сообщений в общем канале. В блоке:

  • Емкость установлена в 1, который определяет, сколько сообщений может обрабатываться за раз.

  • Значение времени обслуживания установлено в 1, который определяет, сколько времени требуется для обработки сообщения

Блок SimEvents ® Entity Replicator используется для создания идентичных копий сообщений. В блоке:

  • Replicas depart от определяет, оставляют ли копии блок из отдельных выходных портов или из того же выходного порта, что и исходные сообщения. Параметр установлен в Separate output ports.

  • Количество реплик установлено в 1, которое определяет количество копий, сгенерированных для каждого сообщения.

  • Удерживайте исходную сущность до тех пор, пока все реплики не будут хранить исходное сообщение в блоке, пока все его копии не покинут блок.

Блок SimEvents ® Entity Terminator используется для моделирования буфера приема 2. В блоке:

  • На вкладке Действия события, в поле Действие входа, можно задать код MATLAB, который выполняет вычисления или вызовы функции Simulink ®, которые вызываются при входе сообщения в блок. В этом примере onOneMessage(entity) используется для уведомления блока Simulink Function в компоненте Listener. Чтобы визуализировать вызов функции, на вкладке Debug, выберите Information Overlays, а затем Function Connectors.

Моделируйте модель и рецензируйте результаты

Симулируйте модель. Заметьте, что в анимации подсвечиваются сообщения, проходящие через модель. Можно выключить анимацию, щелкнув правой кнопкой мыши по полотну модели и задав для параметра Animation Speed значение None.

Когда вы останавливаете анимацию, на блоках, которые хранят сообщения, появляется лупа. Если вы указываете на лупу, вы видите количество сообщений, хранящихся в блоке.

Чтобы увидеть, какие сообщения хранятся в блоке, щелкните лупу, чтобы открыть Storage Inspector. Например, рисунок ниже иллюстрирует сообщения, хранящиеся в буфере 1 отправки.

Отключите анимацию и откройте блок Sequence Viewer, чтобы наблюдать вызовы функции Simulink и поток сообщений в модели.

Например, наблюдайте за временем симуляции 0, во время которого сообщение учитывает значение 0 отправляется из компонента отправки в буфер отправки 1. От времени симуляции 0.1 на 0.5компонент Send продолжает отправлять сообщения в Send Buffer 1 с различными значениями данных. Во время 0.5компонент StateflowSend отправляет сообщение в буфер отправки 2. Дополнительные сведения об использовании блока Sequence Viewer см. в разделе Использование Sequence Viewer для визуализации сообщений, событий и сущностей.

Для просмотра документации необходимо авторизоваться на сайте