exponenta event banner

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

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

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

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

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

В модели имеется два компонента программного обеспечения, которые выводят сообщения: «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «»

В компоненте, связанном с StartSend, источником сигнала является блок синусоидальной волны. Блок синусоидальной волны генерирует синусоидальную волну с амплитудой 1. Для параметра block Sample time установлено значение 0.1. Блок Send преобразует сигнал в сообщение, которое несет данные значения сигнала. Компонент StartSendComponent подключен к буферу отправки 1.

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

В модели имеется два программных компонента, которые принимают сообщения,, "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "

В компоненте, использующем StartReceive, блок приема принимает сообщения и преобразует данные сообщения в сигнальные значения. Компонент подключен к буферу приема 1.

В компоненте StartListener имеется функциональный блок Simulink, который запускает onOneMessage(data) функция. Когда сообщение поступает в буфер приема 3, блок функции Simulink принимает аргумент data, которое является значением из данных сообщения, в качестве входного сигнала. В блоке, data значения умножаются на 2. Блок выводит новое значение данных.

Дополнительные сведения о создании этих компонентов см. в разделе Создание общего канала связи с несколькими отправителями и получателями.

Модель беспроводной передачи сообщений с использованием многоадресной передачи

Компоненты StartSend и StartStateflowSend посылают сообщения в буфер 1 передачи и буфер 2 передачи, которые представляют собой блоки многоадресной передачи объектов SimEvents ®, которые могут передавать сообщения по беспроводной связи. Блок буфера передачи представляет собой очередь приема многоадресной передачи SimEvents ®, которая может принимать сообщения, отправленные буфером 1 отправки и буфером 2 отправки.

Для достижения этой беспроводной связи между буфером посылки 1, буфером посылки 2 и блоком буфера передачи, находящимся внутри блока беспроводного канала:

  1. В блоках Send Buffer 1 и Send Buffer 2 установите для параметра Multicast tag значение A.

  2. В блоке Transmission Buffer установите для параметра Multicast tag значение A.

Параметр «Тег многоадресной передачи» определяет, из каких блоков многоадресной передачи сущности принимаются сообщения.

Отказ канала модели

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

Установите для параметра рабочего режима блока литника значение Enable gate. В этом режиме:

  • Блок открывает шейку питателя и позволяет сообщениям продвигаться вперед, когда он получает объект, несущий значение, большее, чем 0 от порта управления. Это представляет собой рабочий канал.

  • Блок закрывает затвор и блокирует передачу сообщений, если объект несет данные, значение которых меньше или равно 0. Это означает отказ канала.

Для управления блоком Gate можно использовать блок SimEvents ® Entity Generator, который в этом примере называется Control Gate, для создания объектов, содержащих различные значения данных.

В блоке Элемент управления (Control Gate), в действиях Событие (Event), в поле Создать действие (Generate action), приведенный ниже код используется для создания объектов для открытия и закрытия блока Элемент управления (Gate). Первоначально данные объекта являются 1 и затвор открыт, и канал находится в рабочем состоянии. При создании новой сущности ее значение изменяется на 0, что закрывает ворота. Каждый созданный объект изменяет статус литника с открытого на закрытый или с закрытого на открытый.

В блоке Control Gate, в поле Intergeneration time action, приведенный ниже код используется для представления рабочего и неисправного состояния канала. Код инициализирует канал как рабочий. dt - время межгенерации объекта и используется для изменения статуса канала, поскольку каждый сгенерированный объект изменяет статус блока Gate.

В коде время восстановления генерируется из равномерного распределения, которое принимает значения между 0 и 10. Временной интервал между отказами генерируется из другого равномерного распределения, принимающего значения между 0 и 50.

Потеря пакета модели

Для моделирования потери пакета используется блок выходного коммутатора объекта SimEvents ®.

Блок имеет два входных порта. Один входной порт принимает сообщения. Другой входной порт принимает объекты, определяющие выбор выходного порта. Если для объекта установлено значение 1, блок выбирает выходной порт 1 для пересылки сообщений в блок «Беспроводный общий доступ к сообщениям». Если для объекта установлено значение 2, блок выбирает выходной порт 2, который подключен к блоку терминатора сущности, который представляет потерю пакета.

В блоке переключателя вывода:

  • Для параметра Number of output ports установлено значение 2.

  • Чтобы определить, какой выход выбран, критерием переключения является From control port и для параметра Initial port selection установлено значение 1.

Для моделирования 0.1 вероятность потери пакета в блоке Вероятностная потеря пакета выберите вкладку Действия события, а в поле Создать действие включает следующий код:

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

Моделирование модели и просмотр результатов

Моделирование модели.

  • Откройте блок Scope, подключенный в верхней части блока Transmission Buffer. Блок отображает общее количество сообщений, переданных по совместно используемому каналу.

4255 сообщения передаются по каналу.

На графике также отображаются сбои канала. Например, увеличьте изображение первого 100 секунд. Наблюдатель, что отказ канала происходит между 40 и 49 в течение которого передача сообщения блокируется.

Откройте Инспектор данных (Data Inspector) для визуализации объектов, управляющих литником. Изменения данных объекта из 1 кому 0 для каждого сгенерированного объекта.

Для просмотра количества потерянных сообщений откройте блок Scope, подключенный к блоку Packet Loss.

409 сообщения теряются во время передачи. Это 9.6 процент сообщений.

См. также

| | | | (SimEvents) | (SimEvents) | (SimEvents) | (SimEvents)

Связанные темы