Downtime

С помощью этого блока вы можете создавать задачи по техническому обслуживанию, аварии, а также нестандартные задачи для набора ресурсов, заданного блоком ResourcePool.

Вы можете задать расписание повторяющихся задач такого рода с помощью набора различных триггеров или же через Расписание AnyLogic. Вы также можете отдельно настроить время постановки первой задачи.

Если вы создали несколько разных триггеров для постановки первой задачи, тогда первый сработавший триггер инициирует обратный отсчет для триггеров, с помощью которых вы задали период регулярного повторения этой задачи.

Если вы не задали ни одного триггера для постановки первой задачи, но задали период ее регулярного повторения, тогда первая постановка задачи произойдет по истечении первого периода. Например, если вы задали период повторения в 50 рабочих часов, то первая постановка задачи Downtime для ресурса произойдет спустя 50 рабочих часов с момента запуска модели и будет повторяться каждые 50 рабочих часов до завершения работы модели.

Один набор ресурсов может выполнять задачи с разными приоритетами, описанные в нескольких блоках Downtime.

Если задача Downtime была задана с помощью любого типа расписания, то есть это задача на обслуживание или нестандартная задача, и в тот момент, когда эта задача должна была начаться, ресурс выполнял более приоритетную задачу, то начало выполнения задачи Downtime отложится ровно настолько, сколько понадобится ресурсу, чтобы завершить более приоритетную задачу.

Например, рассмотрим задачу Downtime на обслуживание, заданную с помощью расписания с интервальным режимом. Интервал "on", в течение которого выполняется задача Downtime, длится 2 часа и повторяется каждые 10 часов. Интервал "off" соответственно длится 8 часов. Если более приоритетная задача займет первый час интервала "on", то обслуживание начнется со второго часа и продлится 2 часа, как и было запланировано. Интервал "off" в свою очередь сократится ровно на столько времени, сколько отняла в расписании более приоритетная задача, и будет длиться не 8 часов, а 7.

Время выполнения задач блоков Downtime, связанных с набором ресурсов (блоком ResourcePool), может пересекаться с окончанием смены, заданным в свойствах этого набора. В таких случаях задачи блоков Downtime помещаются в очередь выполнения блока ResourcePool и выполняются после начала следующей смены.

Демонстрационная модель: Maintenance of a Coffee Machine

Параметры

Во всех динамических параметрах и действиях ресурс доступен как локальная переменная unit.

Тип ресурса [динамический]
Тип агента, определяющего ресурсы, которые выполняют задачу. Далее к этому типу агента можно обращаться с помощью локальной переменной T. Если вы хотите назначить одну задачу наборам ресурсов разного типа, используйте здесь значение Agent.
Значение по умолчанию: Agent
Тип задачи
Тип задачи, которую должны выполнять ресурсы. Задачи могут быть следующих типов:
Обслуживание
Поломка
Нестандартная
Синтаксис: Downtime.ActivityType activityType
Допустимые значения:
Downtime.ACTIVITY_MAINTENANCE - обслуживание
Downtime.ACTIVITY_FAILURE - поломка
Downtime.ACTIVITY_CUSTOM - нестандартная
Задается [динамический]
[Параметр виден, если Тип задачи: Обслуживание или Нестандартная] Здесь вы можете выбрать, как задавать расписание задач: Триггерами или же Расписанием AnyLogic.
Тип значения: DowntimeDescriptor.TriggerType
Расписание [динамический]
[Параметр виден, если Задается: Расписанием] Здесь вы можете выбрать расписание, задающее шаблон повторения этой задачи. Тип расписания должен быть"да/нет". В течение периода "да" ресурс выполняет задачу, описанную данным блоком.
Тип значения: Schedule<Boolean>
Локальная переменная: T unit - ресурс
Общее время между выполнениями [динамический]
[Параметр виден, если Задается: Триггерами] Здесь вы можете указать, сколько времени (рабочего, когда ресурс обслуживает агента, и свободного, когда ресурс свободен) должно пройти между повторными постановками этой задачи. Если вы не хотите использовать этот способ отсчета, просто оставьте поле пустым.
Тип значения: double
Локальная переменная: T unit - ресурс
...отсчет начинается, когда [динамический]
[Параметр виден, если Задается: Триггерами] Здесь вы можете указать, когда должен начинаться отсчет времени в параметре Общее время между выполнениями: когда задача начинается или когда задача завершается. Если постановка задачи произошла по истечении другого таймаута, то отсчет таймаута Общее время между выполнениями начнется заново после того, как эта задача завершится.
Тип значения: boolean
Рабочее время между выполнениями [динамический]
[Параметр виден, если Задается: Триггерами] Здесь вы можете указать, сколько рабочего времени должно пройти между повторными постановками этой задачи. Здесь учитывается время, которое ресурс тратит на то, чтобы добраться до захватившего его агента, и время непосредственного обслуживания этого агента. Если вы не хотите использовать этот способ отсчета, просто оставьте поле пустым.
Тип значения: double
Локальная переменная: T unit - ресурс
Кол-во циклов между выполнениями [динамический]
[Параметр виден, если Задается: Триггерами] Здесь вы можете указать, сколько раз ресурс должен быть захвачен агентом между повторными постановками этой задачи. Если после захвата работа ресурса была прервана, а потом возобновлена снова, это будет засчитываться как два цикла. Если вы не хотите использовать этот способ отсчета, просто оставьте поле пустым.
Тип значения: int
Локальная переменная: T unit - ресурс
Настроить первое выполнение [динамический]
[Параметр виден, если Задается: Триггерами] Позволяет задать отдельные триггеры для первой постановки этой задачи. Если эта опция не выбрана, то первая постановка произойдет по истечении первого периода, определяющего регулярность повторения задачи.
Тип значения: boolean
Локальная переменная: T unit - ресурс
Общее время до 1-го выполнения [динамический]
[Параметр виден, если выбрана опция Настроить первое выполнение] Здесь вы можете указать, сколько времени (рабочего, когда ресурс обслуживает агента, и свободного, когда ресурс ничем не занят) должно пройти до того момента, когда ресурсу будет поставлена эта задача. Если вы не хотите использовать этот способ отсчета, просто оставьте поле пустым.
Тип значения: double
Локальная переменная: T unit - ресурс
Рабочее время до 1-го выполнения [динамический]
[Параметр виден, если выбрана опция Настроить первое выполнение] Здесь вы можете указать, сколько рабочего времени должно пройти до первого возникновения этой задачи. Здесь учитывается время, которое ресурс тратит на то, чтобы добраться до захватившего его агента, и время непосредственного обслуживания этого агента. Если вы не хотите использовать этот способ отсчета, просто оставьте поле пустым.
Тип значения: double
Локальная переменная: T unit - ресурс
Кол-во циклов до 1-го выполнения [динамический]
[Параметр виден, если выбрана опция Настроить первое выполнение] Здесь вы можете указать, сколько раз ресурс был захвачен агентом до того момента, когда ресурсу будет поставлена эта задача. Если после захвата работа ресурса была прервана, а потом возобновлена снова, это будет засчитываться как два цикла.Если вы не хотите использовать этот способ отсчета, просто оставьте поле пустым.
Тип значения: int
Локальная переменная: T unit - ресурс
Задача
Тип задачи [динамический]
Здесь вы можете выбрать, как будет моделироваться задача:
Задержка (таймаут/расписание) - вы можете задать длительность задачи как задержку или использовать расписание.
Задержка (таймаут/расписание) с ресурсами - вы можете задать длительность задачи как задержку или использовать расписание, а также задать ресурсы, которые будут выполнять эту задачу, и минимальную логику их использования. Если ресурсы, которые вы собираетесь использовать для задачи, также используются где-то еще, приоритет задачи всегда будет равен 0. Для более сложных процессов с участием ресурсов (например, задания приоритетов и т.д.) используйте опцию Отправляется на диаграмму процесса.
Задержка до вызова stopTask() - задача будет выполняться, пока ее не прервет вызов функции stopTask().
Отправляется на диаграмму процесса - вы можете смоделировать задачу диаграммой процесса. Диаграмма должна начинаться с блока ResourceTaskStart, который задается в параметре Блок ResourceTaskStart.
Допустимые значения:
Downtime.TASK_DELAY - Задержка (таймаут/расписание)
Downtime.TASK_DELAY_WITH_RESOURCES - Задержка (таймаут/расписание) с ресурсами
Downtime.TASK_FLOWCHART - Отправляется на диаграмму процесса
Downtime.TASK_WAIT_CALLBACK - Задержка до вызова stopTask()
Длительность задачи [динамический]
[Параметр виден, если Задается: Триггерами и Тип задачи: Задержка (таймаут/расписание)] Продолжительность выполнения задачи.
Тип значения: double
Значение по умолчанию: triangular(10, 20, 30) секунд
Локальная переменная: T unit - ресурс
Захватить
Здесь вы можете выбрать, требуются ли для задачи ресурсы одного типа или ресурсы разных типов ((альтернативный) набор ресурсов). Детальное описание см. здесь.
Синтаксис: boolean seizeFromOnePool
Набор(ы) ресурсов [динамический]
[Параметр виден, если Захватить: (Альтернативный) набор ресурсов] Здесь вы можете задать требуемые наборы ресурсов (блоки ResourcePool). Вы можете добавить несколько наборов с помощью кнопки Добавить список. Ресурсы набираются согласно их доступности. Детальное описание см. здесь.
Локальная переменная: agent - агент
Тип ресурсов [динамический]
[Параметр виден, если Захватить: Ресурсы одного типа] Блок ResourcePool, задающий ресурсы, которые требуются для обслуживания агента. Детальное описание см. здесь.
Локальная переменная: agent - агент
Количество ресурсов [динамический]
[Параметр виден, если Захватить: Ресурсы одного типа] Выражение, возвращающее требуемое количество ресурсов для агента.
Тип значения: int
Значение по умолчанию: 1
Локальная переменная: agent - агент
Пересылать захваченные ресурсы [динамический]
Если опция выбрана (true), захваченные ресурсы будут пересылаться в указанное местоположение.
Тип значения: boolean
Значение по умолчанию: false
Локальные переменные:
agent - агент
Agent unit - ресурс
Место назначения
[Параметр виден, если выбрана опция Пересылать захваченные ресурсы] Задает место, куда будут пересылаться ресурсы. Ресурсы могут быть отправлены в следующее место назначения:
К агенту - ресурсы пересылаются в местоположение указанного агента.
Узел сети - ресурсы пересылаются в указанный узел сети.
Аттрактор - ресурсы пересылаются в указанный аттрактор.
Имя: destinationType
Значение по умолчанию: К агенту (Service.DEST_ENTITY)
Допустимые значения:
Service.DEST_ENTITY - К агенту
Service.DEST_NODE - Узел сети
Service.DEST_ATTRACTOR - Аттрактор
Узел [динамический]
[Параметр виден, если Место назначения: Узел сети] Узел сети, куда отправляются агенты, созданные этим блоком.
Тип значения: Node
Локальные переменные:
T agent - агент
Agent unit - ресурс
Аттрактор [динамический]
[Параметр виден, если Место назначения: Аттрактор] Аттрактор, куда отправляются агенты, созданные этим блоком.
Тип значения: Attractor
Локальные переменные:
T agent - агент
Agent unit - ресурс и
После освобождения ресурсы [динамический]
[Параметр виден, если выбрана опция Пересылать захваченные ресурсы] - Здесь вы можете задать поведение ресурсов после того, как агент их отпустит. В соответствии с вашим выбором освобожденные ресурсы либо возвращаются в базовое местоположение, либо остаются на месте.
Тип значения: boolean
Локальная переменная: T unit - ресурс
Блок ResourceTaskStart [динамический]
[Параметр виден, если Тип задачи: Отправляется на диаграмму процесса] Блок ResourceTaskStart, с которого начинается диаграмма процесса, описывающая данную задачу.
Локальная переменная: T unit - ресурс
В статистике [динамический]
Здесь вы можете выбрать, хотите ли вы рассматривать время выполнения задачи как "занятое" время, как "свободное" время, или оно не учитывается вовсе.
Значение по умолчанию: Не учитывается
Приоритеты
Приоритет [динамический]
Задает Приоритет задачи.
Тип значения: double
Локальная переменная: T unit - ресурс
Может вытеснять другие задачи [динамический]
Если опция выбрана, эта задача может вытеснять выполняемую в данный момент задачу, если ее приоритет ниже. В данном параметре true значит, что ресурс прекратит работу или простой, заданный другой задачей, когда активируется задача, описанная в данном блоке. Соответственно false обозначает, что ресурс закончит выполнять все текущие задачи с более низким приоритетом. Обратите внимание, что из опции true есть исключения: в свойствах текущей задачи может быть выбрана опция Вытеснения нет.
Тип значения: boolean
Локальная переменная: T unit - ресурс
Правило вытеснения [динамический]
Здесь вы можете выбрать, что будет происходить, если поступает новая задача:
Нет вытеснения - эту задачу нельзя вытеснить (ресурс будет занят ее выполнением, пока не завершит)
Прекратить - задача прерывается и больше не возобновляется
Тип значения: ResourcePreemptionPolicy
Локальная переменная: T unit - ресурс
Действия
При начале [код]
Здесь вы можете задать код, который будет выполняться, когда ресурс начинает выполнять задачу.
Локальные переменные:
T unit - ресурс
ResourceUnitTask task - задача
При завершении [код]
Здесь вы можете задать код, который будет выполняться, когда ресурс закончил выполнять задачу.
Локальные переменные:
T unit - ресурс
ResourceUnitTask task - задача
При прекращении [код]
[Параметр виден, если Правило вытеснения: Прекратить] Здесь вы можете задать код, который будет выполняться, когда выполнение задачи было прекращено.
Локальные переменные:
T unit - ресурс
ResourceUnitTask task - задача

Функции

void restartTriggers(T unit) - Обнуляет все счетчики для таймаутов для указанного ресурса и начинает отсчет таймаутов заново.

void stopTask(T unit) - Заканчивает задачу (ТО, авария или нестандартная) для заданного ресурса и запускает заново все счетчики таймаутов согласно настройкам задачи.

boolean isActive(Agent unit) - Если заданный ресурс в данный момент выполняет задачу по техническому обслуживанию, находится в аварийном состоянии и т.д., и это задано с помощью блока Downtime, то данная функция возвращает значение true. В противном случае, она возвращает значение false.