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

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

Начните с простой системы массового обслуживания

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

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

  1. Выберите целую модель или пути сущности, происходящие из Entity Generator, Entity Queue и блоков Entity Server, и щелкните правой кнопкой, чтобы выбрать Log Selected Signals. Инспектор Данных моделирования используется, чтобы визуализировать поток баков и их газового уровня в модели. Для получения дополнительной информации смотрите, Смотрят Данные моделирования.

  2. Переименуйте блок Entity Generator как Генератор Бака, блок Entity Queue как Ожидающая Очередь, блок Entity Server как Насос и блок Entity Terminator как Выход.

    The blocks are renamed for this particular application

  3. Переименуйте путь, происходящий из блока Tank Generator как Бак Очереди, блок Waiting Queue как Бак, чтобы Накачать, и блок Pump как Бак, чтобы Выйти.

Сконфигурируйте и симулируйте модель

  1. Дважды кликните Генератор Бака и выберите вкладку Entity type. Измените Entity type name в Tank, и Attribute Name к CurrentGasLevel.

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

  2. Симулируйте модель. Откройте Simulation Data Inspector. Заметьте, что баки приближаются к Ожидающей Очереди, Насосу и Выходу с тем же уровнем.

    Баки оставляют станцию со своей начальной газовой суммой 1 который является Attribute Initial Value.

    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. Откройте диалоговое окно параметров блоков Генератора Бака. Во вкладке Entity generation, набор Time source к Matlab action. Наблюдайте код MATLAB по умолчанию.

    dt = rand(1,1);

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

  4. Симулируйте обновленную модель. В Simulation Data Inspector заметьте, что баки прибывают случайным образом с той же начальной газовой суммой 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. Откройте диалоговое окно блока Генератора Бака. Во вкладке Event actions, в поле Generate action, вводят код.

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

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

  6. Симулируйте обновленную модель. В Simulation Data Inspector заметьте, что баки прибывают со случайными количествами газа.

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

  7. Для блока Pump, установленного эти параметры:

    1. Во вкладке Event actions выберите Service complete.

    2. Для поля Service complete action введите код.

      entity.CurrentGasLevel = entity.CurrentGasLevel + 3;

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

    Заметьте, что Генератор Бака и Насос блокируют обновление со значком действия события {...} Указание, что блоки задают действие события.

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

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

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

Модифицированная модель, чтобы управлять сущностями в системе массового обслуживания

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

Смотрите также

| | |

Похожие темы