Downtime

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

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

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

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

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

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

Параметры

Во всех динамических параметрах и действиях ресурс доступен как локальная переменная unit.
Тип ресурса [динамический]
Тип агента, определяющего ресурсы, которые выполняют задачу. Далее к этому типу агента можно обращаться с помощью локальной переменной T. Если вы хотите назначить одну задачу наборам ресуров разного типа, используйте здесь значение Agent.
Значение по умолчанию: Agent
Тип задачи
Тип задачи, которую должны выполнять ресурсы. Задачи могут быть следующих типов: Обслуживание, Поломка или Нестандартная.
Синтаксис: Downtime.ActivityType activityType
Задать новое значение во время выполнения: set_activityType(новое значение)
Допустимые значения: Downtime.ACTIVITY_MAINTENANCEDowntime.ACTIVITY_FAILUREDowntime.ACTIVITY_CUSTOM
Задается [динамический]
[Параметр виден, если выбран Тип задачи: Обслуживание или Нестандартная] Здесь вы можете выбрать, как задавать расписание задач: Триггерами или же Расписанием AnyLogic.
Тип значения: DowntimeDescriptor.TriggerType
Расписание [динамический]
[Параметр виден, если Задается: Расписанием] Здесь вы можете выбрать расписание, задающее шаблон повторения этой задачи. Тип расписания должен быть "да/нет". В течение периода "да" ресурс выполняет задачу, описанную данным блоком.
Тип значения: Schedule<Boolean>
Локальная переменная: 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 - ресурс
Задача
Тип задачи [динамический]
Здесь вы можете выбрать, как будет моделироваться задача:
Задержка (таймаут/расписание) - вы можете задать длительность задачи как задержку или использовать расписание.
Задержка до вызова stopTask() - задача будет выполняться, пока ее не прервет вызов функции stopTask().
Отправляется на диаграмму процесса - вы можете смоделировать задачу диаграммой процесса. Диаграмма должна начинаться с блока ResourceTaskStart, который задается в параметре Блок TaskStart.
Допустимые значения: Задержка (таймаут/расписание) (Downtime.TASK_DELAY)
                     Отправляется на диаграмму процесса (Downtime.TASK_FLOWCHART)
                     Задержка до вызова stopTask() (Downtime.TASK_WAIT_CALLBACK)
Длительность задачи [динамический]
[Параметр виден, если Задается: Триггерами и Тип задачи: Задержка (таймаут/расписание)] Продолжительность выполнения задачи.
Тип значения: double
Значение по умолчанию: triangular(10, 20, 30) секунд
Локальная переменная:  T unit - ресурс
Блок TaskStart [динамический]
[Параметр виден, если Тип задачи: Отправляется на диаграмму процесса] Блок ResourceTaskStart, с которого начинается диаграмма процесса, описывающая данную задачу.
Локальная переменная:  T unit - ресурс
В статистике [динамический]
Здесь вы можете выбрать, хотите ли вы рассматривать время выполнения задачи как "занятое" время, как "свободное" время, или оно не учитывается вовсе.
Значение по умолчанию: Не учитывается
Приоритеты
Приоритет [динамический]
Задает Приоритет задачи.
Тип значенияdouble
Локаль
ная переменная:  T unit - ресурс
Может вытеснять другие задачи [динамический]
Если опция выбрана, эта задача может вытеснять выполняемую в данный момент задачу, если ее приоритет ниже. В данном параметре true значит, что ресурс прекратит работу или простой, заданный другой задачей, когда активируется задача, описанная в данном блоке. Соответственно false обозначает, что ресурс закончит выполнять все текущие задачи с более низким приоритетом. Обратите внимание, что из опции true есть исключения: в свойствах текущей задачи может быть выбрана опция Вытеснения нет.
Тип значенияboolean
Локальная переменная:  T unit - ресурс
Правило вытеснения [динамический]
Здесь вы можете выбрать, что будет происходить, если поступает новая задача:
Нет вытеснения - эту задачу нельзя вытеснить (ресурс будет занят ее выполнением, пока не завершит)
Прекратить - задача прерывается и больше не возобновляется
Тип значенияcom.anylogic.libraries.processmodeling.ResourcePreemptionPolicy
Локальная переменная:  T unit - ресурс
Действия
При начале [код]
Здесь вы можете задать код, который будет выполняться, когда ресурс начинает выполнять задачу.
Локальные переменные: T unit - ресурс
                          ResourceUnitTask task - задача
При завершении [код]
Здесь вы можете задать код, который будет выполняться, когда ресурс закончил выполнять задачу.
Локальные переменные: T unit - ресурс
                          ResourceUnitTask task - задача
При прекращении [код]
[Параметр виден, если Правило вытеснения: Прекратить] Здесь вы можете задать код, который будет выполняться, когда выполнение задачи было прекращено.
Локальные переменные: T unit - ресурс
                          ResourceUnitTask task - задача

Функции

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

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