Освобождает заданное количество ресурсов, ранее захваченных агентом с помощью блока Seize.
Вся процедура занимает нулевое модельное время. Пожалуйста, обратите внимание на то, что перед уничтожением агента все захваченные им ресурсы должны быть освобождены.
Один набор ресурсов может выполнять задачи с разными приоритетами, заданные в нескольких блоках.
- Если задачи имеют одинаковый приоритет, они будут выполняться последовательно в соответствии с настройками времени выполнения каждой из них. Если освободившихся единиц ресурса хватает, то такие задачи могут выполняться одновременно. Если у двух задач одинаковый приоритет, но одна из них по какой-то причине была ранее приостановлена, то выбирается приостановленная задача.1
- Если для задач не задан механизм вытеснения, они будут выполняться последовательно в соответствии с настройками времени выполнения каждой из них. Если освободившихся единиц ресурса хватает, то такие задачи могут выполняться одновременно.
- Начало выполнения задачи, заданной в одном блоке, не сбрасывает приоритеты задач, заданных в других блоках.
1 Каждый ресурс получает запросы из разных источников. Когда у ресурса есть несколько задач с одинаковым приоритетом (новых или ранее приостановленных), при выборе задачи к исполнению учитываются следующие правила:
-
Самый высокий приоритет — у приостановленных задач из «индивидуальной» очереди единицы ресурса.
Такие очереди формируются агентами, находящимися в блоках, для которых значение свойства Правило вытеснения задач установлено на Ожидать оригинал ресурса. -
После этого обрабатываются прерванные задачи из очереди блока ResourcePool.
Эта очередь формируется агентами, находящимися в блоках, для которых значение свойства Правило вытеснения задач установлено на Захватывать любой ресурс.
После выполнения задач из этих очередей ресурс сначала выполняет задачи из «индивидуальной очереди», а затем — из очереди блока ResourcePool.
Если этот порядок выполнения вам не подходит, вы можете вручную уменьшить приоритет определенной задачи с помощью кода: для этого используйте действие блока При остановке задачи.
- Освобождать
- Задает, какие ресурсы освобождаются. Имеется пять опций на выбор:
Все захваченные ресурсы (любого типа)
Все ресурсы, захваченные данным блоком Seize
Все захваченные ресурсы данного типа
Заданные ресурсы (список типов)
Указанное количество ресурсовИмя: releaseMode
Значение по умолчанию: Release.ALL
Допустимые значения:Release.ALL — Все захваченные ресурсы (любого типа)
Release.ALL_FROM_SEIZES — Все ресурсы, захваченные данным блоком Seize
Release.ALL_FROM_POOLS — Все захваченные ресурсы данного типа
Release.SPECIFIED_RESOURCES — Заданные ресурсы (список типов)
Release.SPECIFIED_QUANTITY — Указанное количество ресурсов - Блоки Seize
- [Параметр виден, если Освобождать: Все ресурсы, захваченные данным блоком Seize]
Выражение, вычисляющее тип ресурсов, к которому принадлежат захваченные ресурсы. Если не указан или возвращает null, значит, используется присоединенный набор ресурсов.Имя: seizeBlocks - [Параметр виден, если Освобождать: Все захваченные ресурсы данного типа и Заданные ресурсы (список типов)]
Список имен блоков блока ResourcePool, ресурсы которого освобождаются. На каждый тип ресурсов будет освобожден один ресурс, поэтому если вы хотите освободить два и больше ресурсов одного набора, укажите его название дважды и более, например, {doctor, nurse, nurse}.Локальная переменная: T agent — агент - [Параметр виден, если Освобождать: Указанное количество ресурсов]
Выражение, возвращающее имя блока ResourcePool, задающего ресурсы, которые требуется освободить.Локальная переменная: T agent — агент - [Виден, если Освобождать: Указанное количество ресурсов]
Выражение, вычисляющее количество ресурсов, которое необходимо освободить текущему агенту. Если Количество ресурсов равно нулю, то наличие ресурсов не проверяется, и при этом агент будет просто проходить через блок.Тип значения: int
Локальная переменная: T agent — агент - Выберите, движущиеся ресурсы Возвращаются в базовую точку (если их сразу же не захватывает другой агент) или Остаются на месте.
Тип значения: boolean
Значение по умолчанию: Возвращаются в базовую точку (true)
Локальные переменные:
T agent — агент
Agent unit — ресурс
- Здесь задается, когда будет выполняться завершающая задача для закончившего обслуживание своего агента ресурса: завершающая задача может выполняться всегда, или только если нет других задач, или же вы можете выбрать другое и задать приоритет и правило вытеснения для завершающей задачи с помощью приведенных ниже параметров. Завершающей задачей является возвращение ресурсов в их базовое местоположение, а также процесс, заданный с помощью диаграммы процесса, начинающейся с блока, соединенного с портом wrapUp, и заканчивающейся блоком ResourceTaskEnd. Если завершающая задача выполняется всегда, ее невозможно прервать любой другой задачей, включая задачи Downtime.
Локальные переменные:
T agent — агент
Agent unit — ресурс - [Параметр виден, если Завершение (возвращаться): другое]
Устанавливает приоритет задачи завершения.Тип значения: double
Значение по умолчанию: 0
Локальные переменные: T agent — агент
Agent unit — ресурс - [Параметр виден, если Завершение (возвращаться): другое]
Задает, что произойдет с завершающей задачей при поступлении другой задачи для этого же ресурса:Вытеснения нет — завершающая задача не будет вытесняться другой задачей
Прекратить — завершающая задача будет вытеснена новой задачей и прекращенаЗначение по умолчанию: Вытеснения нет
Допустимые значения:Release.PP_NO_PREEMPTION — Вытеснения нет
Локальные переменные:
Release.PP_TERMINATE — Прекратить
T agent — агент
Agent unit — ресурс - Выберите, должно ли учитываться время, затраченное на завершающую задачу, как "занятое" время, или же как "свободное" время, или же оно не учитывается в статистике вообще.
Локальные переменные:
T agent — агент
Agent unit — ресурс
- При входе
- Код, выполняемый при поступлении агента в блок.
Локальная переменная: T agent — агент
- При освобождении
- Код, выполняемый при освобождении ресурса. Обратите внимание, что ресурсу может быть назначена завершающая задача (пост-процесс) — либо опцией возвращения после выполнения задачи в базовое местоположение ресурса, либо с помощью специальной диаграммы процесса, начинающейся с блока, соединенного с портом wrapUp, и заканчивающейся блоком ResourceTaskEnd.
Локальные переменные:
T agent — агент
Agent unit — ресурс - При выходе
- Код, выполняемый, когда агент покидает блок.
Локальная переменная: T agent — агент
- При прекращении пост-процесса
- Код, выполняемый, когда прерывается выполнение завершающей задачи ресурса (в силу вытеснения другой задачей с более высоким приоритетом).
Локальные переменные:
T agent — агент, который изначально владел данным ресурсом
Agent unit — ресурс
- in
- Входной порт.
- out
- Выходной порт.
- wrapUp
- Порт, куда вы можете присоединить блок, который начинает завершающий процесс диаграммы. Эта диаграмма должна заканчиваться блоком ResourceTaskEnd.
-
Как мы можем улучшить эту статью?
-