Блокирует/снимает блокировку с потока агентов на определенном участке блок-схемы. Блок Hold используется, например, когда блок может принимать агентов, но вы не хотите (временно) продолжать их обработку или когда нужно заблокировать поступление агентов только от какого-то определенного блока, в то же время принимая агентов, приходящих с выходных портов других блоков.
Состоянием блока можно управлять программно с помощью функции setBlocked().
В отличие от других блоков библиотеки, Hold не хранит агентов внутри (даже в течение нулевого времени) и может рассматриваться как расширение входного или выходного порта (или портов).
Демо-модель: Hold Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.- Режим
- Здесь вы можете выбрать режим блокировки/разблокировки для блока Hold. Имеются три режима:
Вручную (использовать функции block(), unblock()) — Блок будет заблокирован вызовом функции block() и разблокирован вызовом unblock().
Блокировать после заданного кол-ва агентов — Блок будет заблокирован автоматически, как только заданное количество агентов прибудет в его входной порт. Блок будет разблокирован вызовом функции unblock().
Условное (свое условие для каждого агента) — Блок будет принимать решение, заблокировать ли вход или нет, в зависимости от того, как вычисляется Условие блокировки для каждого входящего агента.Имя: mode
Значения:Hold.MANUAL — Вручную (использовать функции block(), unblock())
Hold.BLOCK_AFTER_N_ENTITIES — Блокировать после заданного кол-ва агентов
Hold.CONDITIONAL — Условное (свое условие для каждого агента) - Кол-во агентов для данного блока
- [Параметр виден, если Режим: Блокировать после заданного кол-ва агентов]
Количество агентов, которые должны прибыть ко входному порту блока, чтобы заблокировать Hold.Синтаксис: int nEntitiesForSelfBlock - [Параметр виден, если Режим: Условное (свое условие для каждого агента)]
Здесь вы можете задать условие, которое будет заново вычисляться для каждого агента. Если условие вычисляется как true, то блок Hold будет заблокирован. Вы можете изменять условие динамически, в этом случае, вам будет необходимо вызвать функцию блока recalculateConditions(), чтобы блок Hold пересчитал условия блокировки для всех агентов, которые в данный момент удерживаются этим блоком.Тип значения: boolean
Локальная переменная: T agent — агент - Изначально заблокирован
- Если опция выбрана (true), то блок изначально находится в заблокированном состоянии.
Синтаксис: boolean initiallyBlocked
Значение по умолчанию: false
- При входе
- Код, выполняемый при прохождении агента через блок.
Локальная переменная: T agent — агент
Функция | Описание |
---|---|
void setBlocked(boolean blocked) | Блокирует входной порт, если в качестве значения аргумента передано true, и разблокирует его в обратном случае. |
boolean isBlocked() | Возвращает true, если входной порт заблокирован. Если порт не заблокирован — возвращает false. |
void block() | Блокирует входной порт. Не делает ничего, если порт уже заблокирован. |
void unblock() | Разблокировка входного порта. Не делает ничего, если порт не заблокирован. |
boolean toggleBlock() | Изменяет состояние "заблокирован" и возвращает новое состояние (заблокирован = true). |
void recalculateConditions() | Используйте эту функцию, чтобы заставить блок Hold пересчитать условия блокировки для всех агентов, удерживаемых в данный момент в этом блоке. |
- in
- Входной порт.
- out
- Выходной порт.
-
Как мы можем улучшить эту статью?
-