exponenta event banner

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

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

Начать с простой системы очередей

Это простая система очередей с блоками генератора сущностей, очереди сущностей, сервера сущностей и терминатора сущностей. В этом примере объект представляет цистерну грузовика, который прибывает на заправку. Атрибут объекта представляет текущий уровень газа в резервуаре. События представляют собой изменения уровня газа в резервуаре. Резервуары генерируются случайным образом, ставятся в очередь, и они обслуживаются насосом, который передает постоянное количество газа в течение одной секунды. Танки отходят от станции с их новым общим количеством газа.

Изменение модели

  1. Выберите всю модель или пути к объектам из блоков Генератор сущностей (Entity Generator), Очередь сущностей (Entity Queue) и Сервер сущностей (Entity Server) и щелкните правой кнопкой мыши, чтобы выбрать пункт Зарегистрировать выбранные сигналы (Log Selected Signals). Simulation Data Inspector используется для визуализации потока резервуаров и их уровня газа в модели. Дополнительные сведения см. в разделе Проверка данных моделирования.

  2. Переименуйте блок «Генератор объектов» в «Генератор резервуаров», блок «Очередь объектов» в «Очередь ожидания», блок «Сервер объектов» в «Насос» и блок «Терминатор объектов» в «Выход».

    The blocks are renamed for this particular application

  3. Переименуйте путь, исходящий из блока «Генератор резервуаров», как «Резервуар в очередь», блок «Очередь ожидания» - как «Резервуар в насос», а блок «Насос» - как «Резервуар на выход».

Настройка и моделирование модели

  1. Дважды щелкните генератор резервуаров и выберите вкладку Тип объекта (Entity type). Измените имя типа объекта на Tankи имя атрибута для CurrentGasLevel.

    Атрибут сущности CurrentGasLevel представляет собой существующее количество газа в каждом резервуаре.

  2. Моделирование модели. Откройте инспектор данных моделирования. Обратите внимание, что резервуары приближаются к очереди ожидания, насосу и выходу с одинаковой скоростью.

    Баки покидают станцию с начальным количеством газа 1 которое является начальным значением атрибута.

    Simulink Data inspector showing that the CurrentGasLevel value is 1 for each entity that arrives at the queue

    Simulink Data inspector showing that the CurrentGasLevel value is 1 for each entity that arrives at the pump

    Simulink Data inspector showing that the CurrentGasLevel value is 1 for each entity that arrives at the exit

  3. Откройте диалоговое окно «Параметры блока генератора резервуаров». На вкладке Создание сущности задайте для параметра Источник времени значение Matlab action. Соблюдайте код MATLAB по умолчанию.

    dt = rand(1,1);

    Код рандомизирует параметр времени межгенерации объекта dt для представления случайных прибывающих танков.

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

    Simulink Data inspector showing that the entities are generated randomly

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

    Simulink Data inspector showing that the entity departures from the queue are regulated to a constant value of 1

  5. Откройте диалоговое окно «Блок генератора резервуаров». На вкладке Действия с событиями в поле Создать действие введите код.

    entity.CurrentGasLevel = randi([1,4]);

    Резервуары прибывают на станцию со случайным количеством газа, которое колеблется от 1 кому 4.

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

    Simulink Data inspector showing that the entities are generated with random initial gas values

  7. Для блока «Насос» задайте следующие параметры:

    1. На вкладке Действия с событиями выберите Сервис завершен.

    2. В поле Действие завершения обслуживания введите код.

      entity.CurrentGasLevel = entity.CurrentGasLevel + 3;

      Каждый бак заполнен 3 ед. газа для 1s длительность, а затем он покидает насос.

    Обратите внимание, что блоки Tank Generator и Pump обновляются со значком действия события {...}, указывающим, что блоки определяют действие события.

    Model with the event action icon on the Tank Generator and Pump blocks

  8. Моделирование обновленной модели. В инспекторе данных моделирования обратите внимание, что каждый резервуар покидает станцию с 3 дополнительными блоками газа.

    Simulink Data inspector showing that the entities depart the pump with added gas

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

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

См. также

| | |

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