Tank

Резервуар, контейнер для жидкости или объемного вещества, имеющий ограниченный объем, вход наверху и выход внизу. Может содержать некоторое количество начальной жидкости. Когда резервуар не наполнен полностью, то его содержимое всегда находится внизу, и наполняется сверху. Не наполненный резервуар может принимать поток жидкости любой скорости. Когда резервуар наполнен, то скорость потока на его входе ограничена скоростью потока на его выходе (но не наоборот). Когда резервуар пустой, то скорость потока на его выходе ограничена скоростью потока на его входе.

Библиотека Моделирования Потоков стремится максимально увеличить скорость выходного потока из всех источников жидкости, поэтому приоритет выходного потока блока Tank по умолчанию устанавливается 1. Иногда, чтобы разрешить конфликт приоритетов, вам может понадобиться изменить скорость выходного потока, увеличив его значение.

Блок Tank также может служить в качестве источника жидкости или в качестве контейнера с ограниченным объемом для удаления жидкости из системы.

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

Блок Tank позволяет вам определять действия, которые будут выполняться, когда резервуар наполняется, опустошается, или когда объем превышает либо становится ниже заданного уровня. Кроме того, вы можете реагировать на новую партию, прибывающую на вход или на выход блока.

Демо модель: Tank

Параметры

Вместимость
Максимальный объем вещества, который резервуар может содержать.
Синтаксис: double capacity
Установить новое значение во время выполнения: set_capacity(новое значение)
Начальный объем
Объем вещества, изначально содержащийся в резервуаре.
Синтаксис: double initialAmount
Установить новое значение во время выполнения: set_initialAmount(новое значение)
Скорость на выходе ограничена
Если данная опция выбрана (значение true), то вы можете задавать другой верхний предел скорости потока на выходе резервуара.
Синтаксис: boolean limitRateOut
Максимальная скорость на выходе
[Параметр виден и применяется только в том случае, если установлена опция Скорость на выходе ограничена] Здесь вы можете задать другой верхний предел скорости потока на выходе резервуара. Значение по умолчанию составляет 10 куб. метров/сек.
Синтаксис: double maxRateOut
Установить новое значение во время выполнения: set_maxRateOut(новое значение)
Другой приоритет
Если данная опция выбрана (значение true), то приоритет потока на выходе резервуара будет установлен в Приоритет выходного потока, в противном случае приоритет будет равен 1. Приоритет влияет на LP решатель, когда он стремится до максимума увеличить количество вещества, проходящего через систему.
Синтаксис: boolean customPriority
Установить новое значение во время выполнения: set_customPriority(true или false)
Приоритет выходного потока
[Параметр виден и применяется только в том случае, если установлена опция Другой приоритет] Здесь вы можете задать другой приоритет скорости потока на выходе резервуара в общей диаграмме процесса. Должен быть положительным целым числом.
Синтаксис: int priorityOutCustom
Установить новое значение во время выполнения: set_priorityOutCustom(новое значение)
Другая начальная партия
Если данный параметр установлен, то жидкость, изначально содержащаяся в резервуаре, будет иметь тип Начальная партия. Если параметр не установлен, то жидкость будет иметь тип: BatchTypes.DEFAULT_BATCH.
Синтаксис: boolean customInitialBatch
Установить новое значение во время выполнения: set_customInitialBatch(новое значение)
Начальная партия
[Параметр виден и применяется только в том случае, если установлена опция Другая начальная партия] Определяет партию, изначально содержащуюся в резервуаре.
Синтаксис: Object initialBatch
Установить новое значение во время выполнения: set_initialBatch(новое значение)
Изменить цвет партии
Если данная опция установлена, то цвет начальной партии определяется параметром Цвет партии (см.ниже), в противном случае применяются стандартные цвета.
Синтаксис: boolean customInitialBatchColor
Установить новое значение во время выполнения: set_customInitialBatchColor(новое значение)
Цвет партии [динамический]
[Параметр виден и примняется только в том случае, если установлена опция Изменить цвет партии] Здесь вы можете задать цвет начальной партии.
Тип величины: Color
Локальная переменная: Object batch - начальная партия
Партия на выходе
Определяет выходную партию резервуара. Одно из следующих:
Та же, что и вошла в блок – та же, что и начальная партия, вошедшая в блок
По умолчанию - установлена в партию по умолчанию BatchTypes.DEFAULT_BATCH
Другая – определяется параметром Партия на выходе (см.ниже)
Получить значение: modeOutputBatch
Установить новое значение во время выполнения: set_modeOutputBatch(новое значение)
Допустимые значения: Tank.OUTPUT_BATCH_IN1, Tank.OUTPUT_BATCH_DEFAULT, Tank.OUTPUT_BATCH_CUSTOM
Партия на выходе [динамический]
[Параметр виден и применяется только в том случае, если опция Партия на выходе установлена в значение Другая] Здесь вы можете задать, какую партию нужно создать на выходе из резервуара.
Тип величины: Object
Локальная переменная: Object originalbatch - начальная партия
Изменить цвет партии
[Параметр виден и применяется только в том случае, если опция Партия на выходе установлена в значение Другая] Если данная опция установлена, то цвет выходной партии будет определяться параметром Цвет партии (см. ниже), в противном случае будут примняться стандартные цвета.
Синтаксис: boolean customOutputBatchColor
Поменять значение во время выполнения: set_customOutputBatchColor(true или false)
Цвет партии [динамический]
[Параметр виден и применяется только в том случае, если установлена опция Изменить цвет партии] Здесь вы можете задать цвет выходной партии.
Тип величины: Color
Локальная переменная: Object batch - начальная партия
Анимация
Резервуар
Здесь можно указать имя элемента разметки пространства Резервуар, используемого в качестве фигуры анимации резервуара, заданного этим блоком Tank.
Синтаксис: StorageTank storageTank
Отображать партии в блоке
Если данная опция установлена, то значок блока будет отображать цвет текущей партии.
Синтаксис: boolean showBatchesInFlowchart
Действия
При наполнении [код]
Действие выполняется, когда резервуар полностью наполняется. Если резервуар изначально наполнен, то данное действие не выполняется при запуске процесса моделирования.
При опустошении [код]
Действие выполняется, когда резервуар полностью опустошается. Если резервуар изначально пустой, то данное действие не выполняется при запуске процесса моделирования.
Действие, если выше уровня
Если данная опция установлена (значение true), то вы можете задать действие, которое будет выполняться, когда объем жидкости в резервуаре увеличивается и достигает определенного порога.
Синтаксис: boolean actionOnAbove
Уровень [динамический]
[Параметр виден и применяется только в том случае, если установлена опция Действие, если выше уровня ] Порог действия Если выше.
Тип величины: double
Если выше [код]
[Параметр виден и применяется только в том случае, если установлена опция Действие, если выше уровня] Данное действие выполняется, когда объем жидкости в резервуаре увеличивается и достигает порога, указанного в параметре Уровень. Данное действие не выполняется, когда объем жидкости изначально выше или равен данному порогу, или если порог пересекается во время уменьшения количества жидкости.
Локальная переменная: double amount - текущий объем
Действие, если ниже уровня
Если данная опция установлена (значение true), то вы можете задать действие, которое будет выполняться, когда объем жидкости в резервуаре уменьшается и достигает определенного порога.
Синтаксис: boolean actionOnBelow
Уровень [динамический]
[Параметр виден и применяется только в том случае, если установлена опция Действие, если ниже уровня] Порог для действия Если ниже.
Тип величины: double
Если ниже [код]
[Параметр виден и применяется только в том случае, если установлена опция Действие, если ниже уровня] Данное действие выполняется, когда объем жидкости в резервуаре уменьшается и достигает порога, указанного в параметре Уровень. Данное действие не выполняется, когда объем жидкости изначально ниже или равен данному порогу, или если порог пересекается во время увеличения количества жидкости.
Локальная переменная: double amount - текущий объем
При новой партии на входе [код]
Действие выполняется, когда новая партия прибывает на вход резервуара. Эта партия не обязательно начнет поступать в блок.
Локальная переменная: Object batch - партия
При новой партии на выходе [код]
Действие выполняется, когда новая партия достигает выхода резервуара, даже если выходная партия установлена в режим партии по умолчанию или другой партии.
Локальная переменная: Object batch - партия
При изменении скорости [код]
Действие выполняется, когда изменяется скорость любого (входящего или исходящего) потока. Обратите внимание на то, что определенные изменения, произошедшие в результате выполнения данного действия, могут вызвать другое мгновенное изменение скорости, за которым сразу последует повторное выполнение действия При изменении скорости, что в итоге может привести к взаимной блокировке.
Локальные переменные:  double inrate - текущая скорость во входном порте
                          double outrate - текущая скорость в выходном порте

Функции

double amount() - Возвращает объем жидкости, содержащийся в данный момент в резервуаре (суммарный объем всех партий жидкости).

double amount(AmountUnits units) - Возвращает объем жидкости (в указанных единицах измерения объема) содержащийся в данный момент в резервуаре (суммарный объем всех партий жидкости).

double amountPassedIn() - Возвращает общий объем жидкости, прошедший через входной порт резервуара, начиная с запуска процесса моделирования.

double amountPassedIn(AmountUnits units) - Возвращает общий объем жидкости (в указанных единицах измерения объема) прошедший через входной порт резервуара, начиная с запуска процесса моделирования.

double amountPassedOut() - Возвращает общий объем жидкости, прошедший через выходной порт резервуара, начиная с запуска процесса моделирования.

double amountPassedOut(AmountUnits units) - Возвращает общий объем жидкости (в указанных единицах измерения объема) прошедший через выходной порт резервуара, начиная с запуска процесса моделирования.

double amountMin() - Возвращает исторический минимум объема вещества в резервуаре.

double amountMin(AmountUnits units) - Возвращает исторический минимум объема вещества в резервуаре в указанных единицах измерения объема.

double amountMax() - Возвращает исторический максимум объема вещества в резервуаре.

double amountMax(AmountUnits units) - Возвращает исторический максимум объема вещества в резервуаре в указанных единицах измерения объема.

double amountAverage() - Возвращает средний объем вещества в резервуаре за все время работы.

double amountAverage(AmountUnits units) - Возвращает средний объем вещества в резервуаре за все время работы в указанных единицах измерения объема.

boolean isFull() - Проверяет, наполнен ли резервуар, т.е. равен ли объем жидкости, находящейся в резервуаре, его вместимости. Возвращает true, если резервуар наполнен, и false, если он не наполнен.

boolean isEmpty() - Проверяет, является ли резервуар пустым. Возвращает true, если резервуар пустой, и false, если он не пустой. В пустом резервуаре может находиться партия нулевого размера в том случае, если она прибыла на вход, но не поступила в резервуар.

double utilization() - Возвращает долю использованного на данный момент объема резервуара т.е. amount() / capacity.

double utilizationTotal() - Возвращает среднее значение использования резервуара за все время работы, т.е. полное мгновенное использование, деленное на (вместимость, умноженная на время работы)

double currentRateIn() - Возвращает текущую скорость потока вещества на входе.

double currentRateIn(FlowRateUnits units) - Возвращает текущую скорость потока вещества (в указанных единицах измерения скорости) на входе.

double currentRateOut() - Возвращает текущую скорость потока вещества на выходе.

double currentRateOut(FlowRateUnits units) - Возвращает текущую скорость потока вещества (в указанных единицах измерения скорости) на выходе.

void resetStats() - Сбрасывает собранную блоком статистику, включая статистику, собранную на его портах.

int numberOfBatches() - Возвращает количество партий, находящихся в данный момент в резервуаре, включая возможные партии с нулевой длиной.

Object getBatch(int index) - Возвращает партию с указанным индексом (index). Партия с индексом 0 - это партия, находящаяся ближе всего к выходу резервуара, а партия с индексом numberOfBatches()-1 - это партия, находящаяся ближе всего ко входу в резервуар.

Color getBatchColor(int index) - Возвращает цвет партии с указанным индексом.

double getBatchSize(int index) - Возвращает размер партии с указанным индексом (index). Партия с индексом 0 - это партия, находящаяся ближе всего к выходу резервуара, а партия с индексом numberOfBatches()-1 - это партия, находящаяся ближе всего ко входу в резервуар.

double getBatchSize(int index, AmountUnits units)Возвращает размер партии с указанным индексом (index) в указанных единицах измерения объемаПартия с индексом 0 - это партия, находящаяся ближе всего к выходу резервуара, а партия с индексом numberOfBatches()-1 - это партия, находящаяся ближе всего ко входу в резервуар.

double updateOutputBatch() - Выполняет принудительный пересчет выходной партии и ее цвета в соответствии с текущими заданными параметрами.

double getBatchOffset(int index) - Возвращает сумму размеров всех партий, расположенных ближе к выходу, чем партия с указанным индексом index (то есть, под данной партией). Функция предназначена для использования в случае создания нестандартной анимации для блока.

Порты

in
Входной порт.
out
Выходной порт.