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

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

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

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

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

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

  2. Переименуйте блок Entity Generator в Tank Generator, блок Entity Queue в Waiting Queue, блок Entity Server как Pump и блок Entity Terminator как Exit.

    The blocks are renamed for this particular application

  3. Переименуйте путь, исходящий от блока Бака Generator, как Бак на Queue, блок Waiting Queue как Бак на Pump и блок Pump как Бак на Exit.

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

  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. Откройте диалоговое окно Bank Generator параметры блоков. На вкладке 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. Откройте Бак Generator диалогового окна блока. На вкладке 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

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

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

См. также

| | |

Похожие темы