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

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

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

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

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

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

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

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

Блок коммутатора ввода объектов SimEvents ® объединяет строки сообщений. В блоке:
Количество входных портов определяет количество объединяемых строк сообщений. Значение параметра: 2 для двух путей сообщений.
Выбор активного порта определяет способ выбора активного порта для отправки сообщения. При выборе Allвсе сообщения, поступающие в блок, могут выходить из блока из выходного порта. При выборе Switch, можно указать логику выбора активного порта для отправки сообщения. В этом примере параметр имеет значение All.
Блок сервера объектов SimEvents ® используется для представления задержки передачи сообщения в совместно используемом канале. В блоке:
Емкость установлена в 1, который указывает, сколько сообщений может быть обработано за один раз.
Значение времени обслуживания установлено в 1, который указывает, сколько времени занимает обработка сообщения
Блок репликации объектов SimEvents ® используется для создания идентичных копий сообщений. В блоке:
Replicas depast from указывает, покидают ли копии блок из отдельных выходных портов или тот же выходной порт, что и исходные сообщения. Параметр имеет значение Separate output ports.
Количество реплик установлено в значение 1, который определяет количество копий, созданных для каждого сообщения.
Сохранение исходного объекта до тех пор, пока все реплики не будут удалены, удерживает исходное сообщение в блоке до тех пор, пока все его копии не будут удалены из блока.
Блок терминатора объекта SimEvents ® используется для моделирования буфера приема 2. В блоке:
На вкладке Действия события в поле Действие ввода можно указать код MATLAB, выполняющий вычисления, или вызовы функции Simulink ®, которые вызываются при поступлении сообщения в блок. В этом примере :onOneMessage(entity) используется для уведомления блока Simulink Function в компоненте Listener. Чтобы визуализировать вызов функции, на вкладке Отладка (Debug) выберите Информационные наложения (Information Overlays), а затем Функциональные соединители (Function Connectors).

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

При приостановке анимации на блоках, хранящих сообщения, появляется лупа. Если вы указываете на лупу, вы увидите количество сообщений, сохраненных в блоке.
Чтобы узнать, какие сообщения хранятся в блоке, щелкните лупу, чтобы открыть инспектор хранилища. Например, на рисунке ниже показаны сообщения, хранящиеся в буфере 1 отправки.

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