exponenta event banner

События и действия с событиями

При моделировании дискретных событий событие является мгновенным инцидентом, который может изменить переменную состояния, выходной сигнал или возникновение других событий. С помощью SimEvents ® можно создавать пользовательские действия, которые происходят при возникновении события для объекта, например при входе или выходе объекта из блока .

Обзор событий

В SimEvents можно указать действия события на основе статуса сущности. Типичная последовательность событий в модели SimEvents:

  1. Создается объект.

  2. Объект переходит из блока генератора сущностей в блок сервера сущностей.

  3. Блок сервера сущностей завершает службу сущности.

  4. Объект выходит из блока Entity Server и входит в блок Entity Terminator.

  5. Объект уничтожен.

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

  • Код MATLAB ®, выполняющий вычисления.

  • Вызовы функции Simulink ®, которые вызывают функцию, выполняющую вычисления.

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

Написать пользовательский код для действий с событиями

Чтобы создать код действия события и язык, в блоке SimEvents перейдите на вкладку Действия события и выберите событие, вызывающее действие. Например, в блоке «Генератор объектов» для вызова действий события предусмотрены два события: «Создать» и «Выход». Действия с событиями инициируются при создании объекта или выходе из блока.

Entity Generator block window showing the Generate action field.

Если щелкнуть событие Создать, можно записать код в поле Создать действие.

При использовании действий события:

  • Объекты доступны в виде структур MATLAB и включают поля структуры, представляющие значения атрибутов объекта.

  • Зарезервированные поля, такие как идентификатор объекта и приоритет объекта, также доступны в отдельной структуре MATLAB, называемой entitySys.

Пример использования действий с событиями см. в разделе Управление сущностями с помощью действий с событиями.

Блоки SimEvents, включающие действия с событиями

Действия с событиями доступны на вкладке Действия с событиями блока. Это возможные события, для которых можно создавать действия.

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

Создание объекта

Запись объекта в блок очереди

Запись объекта в блок сервера

Запись объекта в блок терминатора

Запись объекта в блок получения

Запись объекта в блок пакета

Выход объекта из блока

Выход объекта из блока

Завершение обслуживания объекта

Н/Д

Выход объекта из блока получения

Создание пакета объектов

Н/Д

Объект заблокирован

Выход объекта из блока

Н/Д

Объект заблокирован

Выход объекта из блока

Н/Д

Н/Д

Объект заблокирован

Н/Д

Н/Д

Объект заблокирован

Н/Д

Н/Д

Объект вытеснен

Н/Д

Н/Д

Н/Д

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

Entity flow and events occurring in a storage. Entity is forwarded to the storage or generated inside the storage. Entity is serviced or terminated inside the storage. Entity exits the storage if the forwarding process is not blocked.

Примечания:

  • Действия входа, выхода и блокировки объекта выполняются как часть события пересылки объекта.

  • Действие завершения обслуживания выполняется после события таймера.

  • Событие завершения сущности выполняет действие уничтожения.

Можно также изменить атрибуты сущности (entityName.attribureName), приоритеты сущности (sys.entity.priority) и идентификаторы объектов (sys.entity.id). Однако изменить атрибуты объекта или свойства системы невозможно (entitySys) для действий выхода. Попытка изменить эти значения приводит к ошибке при моделировании.

Использование помощника по действиям с событиями

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

  1. Откройте блок и перейдите на вкладку Действия с событиями и выберите действие Создать событие.

  2. В поле Создать действие нажмите кнопку Вставить образец.

Entity Generator block window

Предположим, что необходимо создать объекты и назначить им случайные значения атрибутов. Значения генерируются на основе равномерного распределения между 0 и 1.

Для выполнения этого действия:

  1. Выберите Случайное число.

  2. Чтобы выбрать равномерное распределение, задайте для параметра Распределение значение Uniform.

  3. По умолчанию параметры Минимум (Minimum) и Максимум (Maximum) указаны как 0 и 1соответственно.

  4. Присоединение значений к атрибуту сущности Attribute1, задайте для параметра Assign output to значение entity.Attribute1.

Помощник создает код.

MATLAB code created by the assistant in the Generate action field

Код создает постоянную переменную для начального значения. Затем случайное значение присоединяется к entity.Attribute1. После определения действия на вкладке Действия события (Event actions) появляется звездочка (*), указывающая, что для этого события вызывается код. В этом случае звездочка отображается после действия Создать событие.

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

Отслеживать события с помощью календаря событий

SimEvents не представляет события графически. Вместо этого программное обеспечение SimEvents поддерживает календарь событий, который планирует события. Календарь событий можно использовать для наблюдения за событиями при отладке модели SimEvents. Дополнительные сведения см. в разделе Отладка моделей SimEvents.

Также можно взаимодействовать с календарем событий с помощью simevents.SimulationObserver методы. С помощью этого класса и его методов можно создать настраиваемого наблюдателя событий. Дополнительные сведения см. в разделе Использование класса Observer для мониторинга модели SimEvents.

Визуализация действий события

При создании действия события {...} на блоке появляется значок, указывающий, что действие создано. Значки, которые отображаются в зависимости от того, какие действия события связаны с кодом.

Например, на этом рисунке показан блок Entity Queue с действиями события, которые вызываются входом объекта и выходом из блока.

Entity Queue block with event action badges

При наведении курсора на значок можно увидеть действие события. Например, на этом рисунке показано действие выхода из объекта.

Badge showing the event action

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

Предотвращение Livelock для больших конечных чисел одновременных событий

Одновременные события - это события, происходящие в одно и то же время часов моделирования. События, запланированные в календаре событий в моменты времени T и T + Δt, считаются одновременными, если 0 ≤ Δt ≤128*eps*Т, где eps - относительная точность с плавающей запятой в программном обеспечении MATLAB, а T - время моделирования. Если при моделировании создается большое количество одновременных событий, это число может указывать на нежелательную ситуацию «живого следа». Во время ситуации livelock блок возвращается в одно и то же состояние бесконечно часто одновременно. Программное обеспечение SimEvents предотвращает livelock со следующими ограничениями:

  • SimEvents ограничивает максимальное количество одновременных событий на блок до 5000.

  • SimEvents ограничивает максимальное количество одновременных событий в модели 100 000.

См. также

| | | | | |

Связанные примеры

Подробнее