В этом примере показано, как смоделировать беспроводную связь сообщения с пакетной потерей и сбой в канале при помощи сообщений Simulink®, Stateflow® и SimEvents®.
В этой модели существует два компонента, которые отправляют сообщения и два компонента, которые получают сообщения. Сообщения передаются с помощью разделяемого беспроводного канала с задержкой передачи. Логика отправки сообщения моделей графика Stateflow® в беспроводном компоненте и SimEvents® блокирует беспроводную передачу сообщения модели, сбой в канале и пакетную потерю.
Для обзора о сообщениях смотрите, что Simulink передает Обзор.
В модели существует два компонента программного обеспечения что выходные сигналы, WirelessSend и WirelessStateflowSend.
В компоненте WirelessSend блок Sine Wave является источником сигнала. Блок Sine Wave генерирует синусоиду с амплитудой 1
. Шаг расчета блока установлен в 0.1
. Блок Send преобразует сигнал в сообщение, которое несет данные значения сигналов. WirelessSendComponent соединяется, чтобы Отправить Буферный 1.
В компоненте WirelessStateflowSend другой блок Sine Wave генерирует синусоидальный сигнал, и блок Noise используется, чтобы ввести шум в сигнал. Блок Noise выводит сигнал, значения которого сгенерированы от Распределения Гаусса со средним значением 0
и отклонение 1
. График Stateflow® представляет простую логику, которая фильтрует сигнал и решает, отправить ли сообщения. Компонент StateflowSend отправляет сообщения, чтобы Отправить Буферные 2.
В модели существует два компонента программного обеспечения, которые получают сообщения, WirelessReceive и WirelessListener.
В компоненте WirelessReceive блок Receive получает сообщения и преобразует данные о сообщении в значения сигналов. Компонент соединяется, чтобы Получить Буферный 1.
В компоненте WirelessListener существует Функциональный блок Simulink, который запускает onOneMessage(data)
функция. Когда сообщение прибывает в, Получают Буферные 3, Функциональный блок Simulink берет аргумент data
, который является значением из данных о сообщении как входной сигнал. В блоке, data
значения умножаются на 2
. Блок выводит новое значение данных.
Чтобы узнать больше о создании этих компонентов, смотрите Сборку Разделяемый Канал связи с Несколькими Отправителями и Приемниками.
Компоненты WirelessSend и WirelessStateflowSend отправляют сообщения, чтобы Отправить Буферный 1 и Отправить Буферные 2, которые являются блоками SimEvents® Entity Multicast, которые могут с помощью беспроводных технологий передать сообщения. Блок Transmission Buffer является многоадресной передачей SimEvents®, принимают очередь, которая может получить сообщения, отправленные, Отправляют Буферный 1 и Отправляют Буферные 2.
Чтобы достигнуть этой радиосвязи между Отправляют Буферный 1, Отправляют Буферные 2 и блок Transmission Buffer, который является в блоке Wireless Channel:
В Отправить Буферном 1 и Отправляют Буферные 2 блока, устанавливают Многоадресный параметр тегов на A
.
В блоке Transmission Buffer, набор Многоадресный параметр тегов к A
.
Многоадресный параметр тегов задает, от которого блокируется Многоадресная передача Сущности, сообщения получены.
Блок Entity Gate SimEvents® используется к сбою в канале модели. Блок имеет два входных порта. Один входной порт для входящих сообщений от Буфера Передачи. Второй входной порт является портом управления, чтобы решить, когда открыть логический элемент.
Установите параметр Рабочего режима блока Gate на Enable gate
. В этом режиме:
Блок открывает логический элемент и разрешает сообщениям совершенствоваться, когда это получает сущность, несущую значение, которое больше 0
от его порта управления. Это представляет операционный канал.
Блок закрывает логический элемент и блокирует передачу сообщений, если сущность несет данные, значение которых меньше чем или равно 0
. Это представляет сбой в канале.
Чтобы управлять блоком Gate, можно использовать блок Entity Generator SimEvents®, который помечен Control Gate в этом примере, чтобы сгенерировать сущности, несущие различные значения данных.
В блоке Control Gate, в действиях События, в Сгенерировать поле действия, код ниже используется, чтобы сгенерировать сущности, чтобы открыть и закрыть блок Gate. Первоначально, данными сущности является 1
и логический элемент открыт, и канал находится в рабочем состоянии. Когда новая сущность сгенерирована, ее изменения значения в 0
, который закрывает логический элемент. Каждая сгенерированная сущность изменяет состояние логического элемента от открытого до закрытого или от закрытого, чтобы открыться.
В блоке Control Gate, в поле действия времени Межгенерации, код ниже используется, чтобы представлять рабочее состояние и состояние отказа канала. Код инициализирует канал как операционный. dt
время межгенерации сущности и используется, чтобы изменить состояние канала, потому что каждая сгенерированная сущность изменяет состояние блока Gate.
В коде время восстановления сгенерировано от равномерного распределения, которое принимает значения между 0
и 10
. Временной интервал между отказами сгенерирован от другого равномерного распределения, которое принимает значения между 0
и 50
.
Чтобы смоделировать пакетную потерю, блок switch SimEvents® Entity Output используется.
Блок имеет два входных порта. Один входной порт принимает сообщения. Другой входной порт принимает сущности, которые определяют выбор выходного порта. Если сущность установлена в 1
, блок выбирает выходной порт 1
передавать сообщения с блоком Wirelessly Share Messages. Если сущность установлена в 2
, блок выбирает выходной порт 2
, который соединяется с блоком Entity Terminator, который представляет пакетную потерю.
В Выходном блоке switch:
Номер выходных портов определяется к 2
.
Определить, которые выводят, выбрано, Переключающийся критерий установлен в From control port
и Начальный выбор портов установлен в 1
.
Смоделировать 0.1
вероятность пакетной потери, в блоке Probabilistic Packet Loss, выбирает вкладку действий События, и в Сгенерировать поле действия включает этот код:
persistent rngInit; if isempty(rngInit) seed = 12345; rng(seed); rngInit = true; end
% Pattern: Uniform distribution % m: Minimum, M: Maximum m = 0; M = 1; x = m + (M - m) * rand;
% x is generated from uniform distribution and % takes values between |0| and |1|. if x > 0.1 % Entity carries data |1| and this forces Output switch to select % output |1| to forward entities to receive components. entity = 1; else % Entity carries data |2| and this forces Output switch to select % output |2| and this represents a packet loss. entity = 1; end
Это означает, что сущности, вводящие порт управления, имеют 0.9
вероятность того, чтобы быть установленным в 1
, который делает выходные сигналы блока с блоком Wirelessly Share Messages.
Симулируйте модель.
Откройтесь соединенный блок Scope превышают блок Transmission Buffer. Блок отображает общее количество сообщений, переданных через разделяемый канал.
4255 сообщения передаются через канал.
График также отображает сбои в канале. Например, масштабируйте в первый 100
секунды. Наблюдатель, что сбой в канале находится между 40
и 49
во время которого блокируется передача сообщения.
Откройте Data Inspector, чтобы визуализировать сущности, которые управляют Логическим элементом. Данные сущности изменяются от 1
к 0
для каждой сгенерированной сущности.
Чтобы видеть количество потерянных сообщений, откройте блок Scope, соединенный с блоком Packet Loss.
409 сообщения потеряны во время передачи. Это -
9.6
процент сообщений.
Queue | Receive | Send | Sine Wave | Логический элемент сущности (SimEvents) | многоадресная передача сущности (SimEvents) | переключатель сущности Выход (SimEvents) | Терминатор сущности (SimEvents)