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

Downtime

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

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

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

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

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

  • Если задачи имеют одинаковый приоритет, они будут выполняться последовательно в соответствии с настройками времени выполнения каждой из них. Если освободившихся единиц ресурса хватает, то такие задачи могут выполняться одновременно. Если у двух задач одинаковый приоритет, но одна из них по какой-то причине была ранее приостановлена, то выбирается приостановленная задача.1
  • Если для задач не задан механизм вытеснения, они будут выполняться последовательно в соответствии с настройками времени выполнения каждой из них. Если освободившихся единиц ресурса хватает, то такие задачи могут выполняться одновременно.
  • Начало выполнения задачи, заданной в одном блоке, не сбрасывает приоритеты задач, заданных в других блоках.
1 Каждый ресурс получает запросы из разных источников. Когда у ресурса есть несколько задач с одинаковым приоритетом (новых или ранее приостановленных), при выборе задачи к исполнению учитываются следующие правила:
  • Самый высокий приоритет — у приостановленных задач из «индивидуальной» очереди единицы ресурса.
    Такие очереди формируются агентами, находящимися в блоках, для которых значение свойства Правило вытеснения задач установлено на Ожидать оригинал ресурса.
  • После этого обрабатываются прерванные задачи из очереди блока ResourcePool.
    Эта очередь формируется агентами, находящимися в блоках, для которых значение свойства Правило вытеснения задач установлено на Захватывать любой ресурс.

После выполнения задач из этих очередей ресурс сначала выполняет задачи из «индивидуальной очереди», а затем — из очереди блока ResourcePool.

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

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

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

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

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

Параметры

Во всех динамических параметрах и действиях ресурс доступен как локальная переменная 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 — агент
T unit — ресурс
Место назначения
[Параметр виден, если выбрана опция Пересылать захваченные ресурсы]
Задает место, куда будут пересылаться ресурсы. Ресурсы могут быть отправлены в следующее место назначения:
К агенту — ресурсы пересылаются в местоположение указанного агента.
Узел сети — ресурсы пересылаются в указанный узел сети.
Аттрактор — ресурсы пересылаются в указанный аттрактор.
Имя: destinationType
Значение по умолчанию: К агенту (Service.DEST_ENTITY)
Допустимые значения:
Service.DEST_ENTITY — К агенту
Service.DEST_NODE — Узел сети
Service.DEST_ATTRACTOR — Аттрактор
Узел
[Параметр виден, если Место назначения: Узел сети]
Узел сети, куда отправляются агенты, созданные этим блоком.
Тип значения: Node
Локальные переменные:
agent — агент
T unit — ресурс
Аттрактор
[Параметр виден, если Место назначения: Аттрактор]
Аттрактор, куда отправляются агенты, созданные этим блоком.
Тип значения: Attractor
Локальные переменные:
agent — агент
T 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(T unit) Если заданный ресурс в данный момент выполняет задачу по техническому обслуживанию, находится в аварийном состоянии и т.д., и это задано с помощью блока Downtime, то данная функция возвращает значение true. В противном случае, она возвращает значение false.
Как мы можем улучшить эту статью?