AnyLogic
Развернуть
Размер шрифта

ResourceTaskStart

Задает начало ветви диаграммы процесса, моделирующей подготовительную задачу занятого ресурса (или ресурсов).

Диаграмма подготовительной задачи начинается с блока ResourceTaskStart и заканчивается там, где соединитель приходит в нижний порт блока Seize, захватившего ресурс и запустившего эту задачу.

Агент сможет перейти в следующие за блоком Seize блоки диаграммы процесса только после того, как ресурс закончит выполнение подготовительной задачи.

Пример

Демо-модель: Emergency Department Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

В приведенной модели отделения скорой медицинской помощи вы можете найти примеры задания как подготовительной, так и завершающей задач. Для этого откройте диаграмму типа агента USoundProcess, задающего нестандартный блок с логикой процесса обследования с помощью УЗИ. Для этого обследования инженер УЗИ должен доставить аппарат УЗИ к пациенту. Если вы посмотрите на диаграмму процесса, то увидите, что вначале пациент занимает ресурс (инженера УЗИ, в блоке seizeTech). В этот момент начинается подготовительная задача этого ресурса, заданная ветвью диаграммы процесса, соединенной с нижним портом этого блока. Ветвь диаграммы, задающая подготовительный процесс ресурса, всегда начинается с блока ResourceTaskStart. В этом блоке задается, для какого именно ресурса задается подготовительная задача (в данном случае это инженер УЗИ technician). В нашем случае подготовительный процесс состоит из блока seizeUSound (захватывает ресурс - аппарат УЗИ uSound), блока takeUSound типа MoveTo (инженер-техник идет к занятому им аппарату) и блока attachUSound типа ResourceAttach (присоединяет ресурс - аппарат УЗИ к ресурсу - инженеру). Подготовительная задача заканчивается, когда соединитель приходит в нижний порт блока Seize. Поскольку у этого блока Seize выбрана опция Пересылать захваченные ресурсы, то инженер УЗИ в итоге доставит аппарат УЗИ нуждающемуся в нем пациенту.

После блока doUSound типа Delay, моделирующего проведение обследования, следует блок releaseTechUSound типа Release. Он освобождает указанный ресурс (technician) и начинает завершающую задачу (заданную ветвью диаграммы, соединенной с нижним портом блока). Инженер УЗИ переходит в узел базового расположения захваченного ресурса usound (это делает блок moveTo) и освобождает этот ресурс по прибытии (блок release). Ветвь диаграммы, задающей завершающую задачу, всегда заканчивается блоком ResourceTaskEnd.

Параметры

Тип ресурса
Тип ресурсов, выполняющих задачу. Упоминается ниже как T.
Значение по умолчанию: Agent
Начинать задачу
Здесь вы можете указать, все ли ресурсы должны начинать задание или только указанные вами ниже. Всем ресурсам — все ресурсы, захваченные блоком Seize, который запускает задачу, начнут выполнять ее. Указанным ресурсам — только некоторые определенные ресурсы из захваченного набора начинают эту задачу.
Синтаксис: boolean defaultUnitsStart
Значение по умолчанию: true
Тип ресурсов
[Параметр виден, если Начинать задачу: Указанным ресурсам]
Здесь вы можете выбрать определенный тип ресурсов ResourcePool, которые будут начинать эту задачу.

Действия

При входе
Код, выполняемый при поступлении ресурса в этот блок ResourceTaskStart.
Локальная переменная: T unit — ресурс
При извлечении
Код, выполняемый, когда ресурс умышленно извлекается из блока посредством вызова функции ресурса remove(). Этот код вызывается автоматически после вызова функции remove().
Локальная переменная: T unit — ресурс

Функции

Функция Описание
int size() Возвращает количество ресурсов, ожидающих перемещения в данный момент в этом блоке (которые еще не были приняты следующим блоком).
long count() Возвращает количество ресурсов, которые вошли в этот блок. void take(T unit) — Вставляет заданный ресурс unit в процесс, передавая его в порт out.
Iterator<T> iterator() Возвращает итератор над ресурсами, ожидающими в этом блоке (из-за того, что не были приняты следующим блоком) — в порядке, задаваемом функцией take().

Порт

out
Выходной порт.
Как мы можем улучшить эту статью?