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

В этом примере показано, как смоделировать коммуникацию через разделяемый канал с несколькими отправителями и приемниками при помощи сообщений 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. Блок выводит новое значение данных.

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

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

Блок 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, чтобы Визуализировать сообщения, События и Сущности.