В этом примере показано, как смоделировать коммуникацию через разделяемый канал с несколькими отправителями и приемниками при помощи сообщений Simulink®, SimEvents® и Stateflow®.
Для обзора о сообщениях смотрите, что Simulink передает Обзор.
В этой модели существует два компонента программного обеспечения, которые отправляют сообщения и два компонента, которые получают сообщения. Разделяемый канал передает сообщения с добавленной задержкой. Блоки SimEvents® используются, чтобы создать пользовательское коммуникационное поведение путем слияния строк сообщения, и копирования и задержки сообщений. Диаграмма Stateflow используется в отправить компоненте, чтобы отправить сообщения на основе логики решения.
В модели существует два компонента программного обеспечения, что выходные сигналы, Отправьте и StateflowSend.
В Отправить компоненте блок 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 получает сообщения и преобразует данные о сообщении в значения сигналов.
В компоненте Прослушивателя существует Функциональный блок Simulink. Блок отображает функцию, onOneMessage (данные), на поверхности блока.
Когда сообщение прибывает в, Получают Буферные 2, блок Listener уведомляется, и это берет аргумент data
, который является значением из данных о сообщении как входной сигнал. В блоке, data
значения умножаются на 2
. Блок выводит новое значение данных.
В разделяемом канале пути к сообщению, происходящие из двух отправляющих сообщение компонентов, объединены, чтобы представлять разделяемый канал связи.
Блок switch SimEvents® Entity Input объединяет строки сообщения. В блоке:
Количество входных портов задает количество строк сообщения, которые будут объединены. Значением параметров является 2
для двух путей к сообщению.
Выбор активного порта задает, как выбрать активный порт для отъезда сообщения. Если вы выбираете All
, все сообщения, прибывающие в блок, могут отбыть из блока из выходного порта. Если вы выбираете Switch
, можно задать логику, которая выбирает активный порт для отъезда сообщения. В данном примере параметр устанавливается на All
.
Блок Entity Server SimEvents® используется, чтобы представлять задержку передачи сообщения разделяемого канала. В блоке:
Способность установлена в 1
, который задает, сколько сообщений может быть обработано за один раз.
Значение времени обслуживания установлено к 1
, который задает, сколько времени это берет, чтобы обработать сообщение
Блок SimEvents® Entity Replicator используется, чтобы сгенерировать идентичные копии сообщений. В блоке:
Копии вылетают, задает, оставляют ли копии блок из отдельных выходных портов или того же выходного порта как исходные сообщения. Параметр устанавливается на Separate output ports
.
Номер копий определяется к 1
, который задает количество копий, сгенерированных для каждого сообщения.
Содержите исходную сущность, пока все копии не отбывают, содержит исходное сообщение в блоке, пока все его копии не отбывают из блока.
Блок Entity Terminator SimEvents® используется к модели Receive Buffer 2. В блоке:
Под вкладкой действий События, в поле Действия входа, можно задать код MATLAB, который выполняет вычисления или вызовы функции Simulink®, которые вызываются, когда сообщение вводит блок. В этом примере, onOneMessage(entity)
используется, чтобы уведомить Функциональный блок Simulink в компоненте Прослушивателя. Чтобы визуализировать вызов функции, под вкладкой Debug, выбирают Information Overlays и затем Функциональные Коннекторы.
Симулируйте модель. Заметьте, что анимация подсвечивает сообщения, текущие через модель. Можно выключить анимацию путем щелчка правой кнопкой по холсту модели и установке Animation Speed к None
.
Когда вы приостанавливаете анимацию, лупа появляется на блоках, которые хранят сообщения. Если вы указываете на лупу, вы видите количество сообщений, хранивших в блоке.
Чтобы наблюдать, какие сообщения хранятся в блоке, кликните по лупе, чтобы открыть Инспектора Устройства хранения данных. Например, изображение ниже иллюстрирует, что сообщения, хранившие в, Отправляют Буферный 1.
Выключите анимацию и откройте блок Sequence Viewer, чтобы наблюдать Вызовы функции Simulink и поток сообщений в модели.
Например, наблюдайте время симуляции 0
, во время которого балансовая стоимость сообщения 0
отправляется от Отправить компонента, чтобы Отправить Буферный 1. От времени симуляции 0.1
к 0.5
, Отправить компонент продолжает отправлять сообщения, чтобы Отправить Буферный 1 с различными значениями данных. Во время 0.5
, компонент StateflowSend отправляет сообщение, чтобы Отправить Буферные 2. Для получения дополнительной информации об использовании блока Sequence Viewer смотрите Использование Sequence Viewer, чтобы Визуализировать сообщения, События и Сущности.