В этом примере показано, как управлять частотой генерации сущностей и записывать действия события для изменения атрибутов сущностей в простой системе постановки в очередь. В дискретно-событийной симуляции event является наблюдением мгновенного инцидента, который может изменить переменную состояния, выход или вхождение других событий. SimEvents® позволяет создавать пользовательские действия при возникновении события. Эти действия называются event actions. События могут иметь соответствующие действия. Можно записать действия события для изменения атрибутов сущности с помощью MATLAB® код или Simulink® функций.
Это простая система построения очередей с блоками Генератор сущностей, Очередь сущностей, Сервер сущностей и Терминатор сущностей. В этом примере сущность представляет бак грузовика, который прибывает на заправочную станцию. Атрибут сущности представляет текущий уровень газа в баке. Действия события представляют изменения уровня газа в баке. Баки генерируются случайным образом, ставятся в очередь, и они обслуживаются насосом, который перекачивает постоянное количество газа в течение одной секунды. Баки отправляются со станции с новым общим количеством газа.
Выберите целую модель или пути к сущности, происходящие из блоков Entity Generator, Entity Queue и Entity Server, и щелкните правой кнопкой мыши, чтобы выбрать Log Selected Signals. Simulation Data Inspector используется, чтобы визуализировать поток баков и их уровень газа в модели. Для получения дополнительной информации см. раздел «Просмотр данных моделирования».
Переименуйте блок Entity Generator в Tank Generator, блок Entity Queue в Waiting Queue, блок Entity Server как Pump и блок Entity Terminator как Exit.
Переименуйте путь, исходящий от блока Бака Generator, как Бак на Queue, блок Waiting Queue как Бак на Pump и блок Pump как Бак на Exit.
Дважды кликните «Генератор бака» и выберите вкладку Entity type. Измените Entity type name на Tank
и Attribute Name для CurrentGasLevel
.
Атрибут сущности CurrentGasLevel
представляет существующее количество газа в каждом баке.
Симулируйте модель. Откройте Simulation Data Inspector. Обратите внимание, что баки приближаются к очереди ожидания, насосу и выходу с той же скоростью.
Баки покидают станцию с исходным количеством газа 1
который является Attribute Initial Value.
Откройте диалоговое окно Bank Generator параметры блоков. На вкладке Entity generation установите Time source равным Matlab action
. Наблюдайте код MATLAB по умолчанию.
dt = rand(1,1);
Код рандомизирует параметр времени межгенерации сущностей dt
для представления случайных поступлений в баки.
Симулируйте обновленную модель. В Simulation Data Inspector обратите внимание, что баки поступают случайным образом с таким же начальным количеством газа 1
.
Заметьте, что баки генерируются случайным образом, но они приближаются к насосу с регулируемой постоянной скоростью, потому что время работы насоса 1
.
Откройте Бак Generator диалогового окна блока. На вкладке Event actions, в поле Generate action, введите код.
entity.CurrentGasLevel = randi([1,4]);
Баки поступают на станцию со случайным количеством газа, которое колеблется от 1
на 4
.
Симулируйте обновленную модель. В Simulation Data Inspector обратите внимание, что баки поступают со случайным количеством газа.
Для блока Pump установите следующие параметры:
На вкладке Event actions выберите Service complete.
Для поля Service complete action введите код.
entity.CurrentGasLevel = entity.CurrentGasLevel + 3;
Каждый бак заполнен 3 модулями газа для 1
s длительность, и затем он отходит от насоса.
Обратите внимание, что генератор бака и блоки насоса обновляются значком действия события {...}, указывающим, что блоки определяют действие события.
Симулируйте обновленную модель. В Simulation Data Inspector обратите внимание, что каждый бак покидает станцию с 3 дополнительными модулями газа.
Это измененная модель после настройки простой системы построения очередей.
Entity Generator | Entity Queue | Entity Server | Entity Terminator