Mix Tank

Создает смесь из веществ, поступающих из разных источников, количеством до пяти штук, опционально задерживает (т.е. обрабатывает) полученную смесь в течение определенного времени, после чего выпускает. Пропорции веществ в смеси можно определить либо указав объем каждого вещества, либо указав общий объем и доли компонентов. Новая смесь начнет накапливаться только после того, как предыдущая полностью покинула блок. Изначально резервуар пуст. Вы можете изменить объем каждого вещества или общий объем вещества в резервуаре, вызвав функцию updateAmounts(), когда резервуар пуст.

Скорость потока на входе не ограничена, скорость потока на выходе можно опционально ограничить. Заданное положительное значение скорости потока не должно быть ниже значения RATE_TOLERANCE, т.е. меньше 1.0e-9. Если при перерасчете скорость потока опускается ниже значения RATE_TOLERANCE, она приводится к нулю.

Вместимость данного резервуара может быть неограниченной.

Вы можете явно указать партию смеси на выходе либо выбрать в качестве партии на выходе партию по умолчанию BatchTypes.DEFAULT_BATCH. Партия на выходе рассчитывается автоматически непосредственно после того, как все компоненты полностью поступили в блок Mix Tank, но перед вызовом кода, помещенного в поле действия При готовности смеси. Также вы можете заново рассчитать партию на выходе в любое удобное для вас время, вызвав функцию updateOutputBatch().

Блок MixTank позволяет вам указать действия, которые будут выполняться в момент завершения смешивания (когда все компоненты полностью поступили в блок), в момент окончания задержки, полного выхода смеси из блока.

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

Свойства

Смешивать
Определяет процесс смешивания: Синтаксис: boolean mixByAmounts
Установить новое значение во время выполнения: set_mixByAmounts(новое значение)
Допустимые значения:
Вместимость (общий объем) [динамический]
[Параметр виден и применяется только в том случае, если Смешивать: Заданные доли] Общий объем смеси. Заданное значение не может быть меньше значения Utils.TOLERANCE. Неограниченную вместимость можно задать, прописав infinity в поле данного свойства.
Синтаксис: double totalAmount
Установить новое значение во время выполнения: set_totalAmount(новое значение)
Объем 1
[Параметр виден и применяется только в том случае, если Смешивать: Заданные объемы] Объем компонента 1 (вещество, которое проходит через порт in1).
Синтаксис: double amount1
Установить новое значение во время выполнения: set_amount1(новое значение)
Объем 2
[Параметр виден и применяется только в том случае, если Смешивать: Заданные объемы] Объем компонента 2 (вещество, которое проходит через порт in2).
Синтаксис: double amount2
Установить новое значение во время выполнения: set_amount2(новое значение)
Объем 3
[Параметр виден и применяется только в том случае, если Смешивать: Заданные объемы] Объем компонента 3 (вещество, которое проходит через порт in3).
Синтаксис: double amount3
Установить новое значение во время выполнения: set_amount3(новое значение)
Объем 4
[Параметр виден и применяется только в том случае, если Смешивать: Заданные объемы] Объем компонента 4 (вещество, которое проходит через порт in4).
Синтаксис: double amount4
Установить новое значение во время выполнения: set_amount4(новое значение)
Объем 5
[Параметр виден и применяется только в том случае, если Смешивать: Заданные объемы] Объем компонента 5 (вещество, которое проходит через порт in5).
Синтаксис: double amount5
Установить новое значение во время выполнения: set_amount5(новое значение)
Доля 1
[Параметр виден и применяется только в том случае, если Смешивать: Заданные доли] Относительная доля компонента 1 (вещество, которое проходит через порт in1).
Синтаксис: double fraction1
Установить новое значение во время выполнения: set_fraction1(новое значение)
Доля 2
[Параметр виден и применяется только в том случае, если Смешивать: Заданные доли] Относительная доля компонента 2 (вещество, которое проходит через порт in2).
Синтаксис: double fraction2
Установить новое значение во время выполнения: set_fraction2(новое значение)
Доля 3
[Параметр виден и применяется только в том случае, если Смешивать: Заданные доли] Относительная доля компонента 3 (вещество, которое проходит через порт in3).
Синтаксис: double fraction3
Установить новое значение во время выполнения: set_fraction3(новое значение)
Доля 4
[Параметр виден и применяется только в том случае, если Смешивать: Заданные доли] Относительная доля компонента 4 (вещество, которое проходит через порт in4).
Синтаксис: double fraction4
Установить новое значение во время выполнения: set_fraction4(новое значение)
Доля 5
[Параметр виден и применяется только в том случае, если Смешивать: Заданные доли] Относительная доля компонента 5 (вещество, которое проходит через порт in5).
Синтаксис: double fraction5
Установить новое значение во время выполнения: set_fraction5(новое значение)
Время задержки
Время, в течение которого смесь должна находиться в резервуаре после захода (после того, как все компоненты полностью попали в блок) и перед тем, как она начнет покидать его.
Синтаксис: double delayTime
Установить новое значение во время выполнения: set_delayTime(новое значение)
Скорость на выходе ограничена
Если пункт отмечен флажком (true), вы можете указать верхний предел скорости потока на выходе.
Синтаксис: boolean limitRateOut
Установить новое значение во время выполнения: set_limitRateOut(новое значение)
Макс. скорость на выходе
[Параметр виден и применяется только в том случае, если Скорость на выходе ограничена] Другой верхний предел скорости потока на выходе. Значение по умолчанию составляет 1 куб. метр в секунду.
Синтаксис: double maxRateOut
Установить новое значение во время выполнения: set_maxRateOut(новое значение)
Партия на выходе
Определяет партию на выходе из резервуара. Выберите один из вариантов: Узнать значение: modeOutputBatch
Установить новое значение во время выполнения: set_modeOutputBatch(новое значение)
Допустимые значения:
Партия [динамический]
[Параметр виден и применяется только в том случае, если Партия на выходе: Другая]. Определяет партию смеси (партию на выходе). Партия может зависеть от партий, поступивших в блок (они доступны здесь как локальные переменные).
Тип значения: Object
Локальные переменные:
Изменить цвет партии
[Параметр виден и применяется только в том случае, если Партия на выходе: Другая] Если отмечено флажком, цвет партии определяется параметром Цвет партии, в противном случае, применяется стандартная карта цветов.
Синтаксис: boolean customOutputBatchColor
Установить новое значение во время выполнения: set_customOutputBatchColor(новое значение)
Цвет партии [динамический]
[Параметр виден и применяется только в том случае, если установлена опция Изменить цвет партии] Определяет цвет партии на выходе.
Тип значения: Color
Локальная переменная: Object batch - партия
Анимация
Резервуар
Здесь вы указываете элемент разметки пространства Резервуар, который используется в качестве анимации этого резервуара.
Синтаксис: StorageTank storageTank
Установить новое значение во время выполнения: set_storageTank(новое значение)
Отображать партии в блоке
Если отмечено флажком, иконка блока будет отображать текущий цвет партии.
Синтаксис: boolean showBatchesInFlowchart
Установить новое значение во время выполнения: set_showBatchesInFlowchart(новое значение)
Действия
При окончании формирования [код]
Действие выполняется, когда все компоненты смеси полностью находятся в резервуаре.
При готовности смеси [код]
Действие выполняется, когда готовая смесь находится в резервуаре необходимое время (если нужно), прежде чем покинуть резервуар.
При опустошении [код]
Действие выполняется, когда смесь полностью покинула резервуар, до того, как новая смесь начнет поступать в него.
При изменении скорости [код]
Действие выполняется, когда изменяется скорость любого потока. Текущие скорости доступны как локальные переменные in1rate .. in5rate (текущая скорость во входном порте in1 .. in5) и outrate (текущая скорость в выходном порте). Обратите внимание на то, что определенные изменения, произошедшие в результате выполнения данного действия, могут вызвать другое мгновенное изменение скорости, за которым сразу последует повторное выполнение действия При изменении скорости, что в итоге может привести к взаимной блокировке.

Функции

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

double amount(AmountUnits units) - Возвращает объем смеси (в заданных единицах измерения объема), который находится в резервуаре в данный момент (сумма всех компонентов). Если объем меньше значения Utils.TOLERANCE, функция возвращает 0.

double capacity() - Возвращает максимальный объем смеси, который может содержаться в резервуаре. Если объем меньше значения Utils.TOLERANCE, функция возвращает 0.

boolean isEmpty() - Проверяет, не пуст ли резервуар.

boolean isEmptying() - Проверяет, закончена ли обработка смеси, открыт ли выход, закрыты ли входы и не пуст ли еще резервуар.

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

boolean isProcessing() - Проверяет, обрабатывается ли сейчас смесь, т.е. все входы и выходы закрыты и выполняется задержка для обработки.

double amountPassedIn(int input) - Возвращает общий объем жидкости, прошедший через заданный порт (1..5) c начала выполнения модели.

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

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

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

boolean updateAmounts() - Если для смешивания указываются объемы каждого компонента, данная функция обновляет значения объемов. Если для смешивания указывается общий объем и процентные доли для каждого компонента, функция обновляет значение общего объема смеси, т.е. вынуждает резервуар перезапустить смешивание с новыми значениями параметров Объем 1..Объем 5 или новым значением параметра Вместимость (общий объем). Функцию можно вызвать в любое время, но во время вызова резервуар должен быть пустым.

double currentRateIn(int input) - Возвращает текущую скорость потока через заданный входной порт (1..5).

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

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

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

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

Object getBatch(int index) - Возвращает объект, описывающий исходящую смесь, если резервуар опустошается в данный момент. При этом может использоваться только индекс 0. Если резервуар не опустошается, возвращает один из 5 входящих компонентов (включая возможные компоненты с нулевой длиной). Индекс 0 соответствует входу 5, а индекс 4 соответствует входу 1.

Color getBatchColor(int index)- Возвращает цвет исходящей смеси, если резервуар опустошается в данный момент. При этом может использоваться только индекс 0. Если резервуар наполняется или в нем идет обработка, функция возвращает цвет входящего компонента с заданным индексом. Индекс 0 соответствует входу 5, а индекс 4 соответствует входу 1. Если цвет исходящей партии отличается от цвета входящей партии, текущий цвет подвергается линейной интерполяции в ходе обработки так, чтобы соответствовать степени выполнения обработки.

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

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

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

double amountOf(int input) - Возвращает объем определенного компонента, который в данный момент находится в резервуаре. Компонент определяется номером входа (1..5).

double amountOf(int input, AmountUnits units) - Возвращает объем определенного компонента (в заданных единицах измерения объема), который в данный момент находится в резервуаре. Компонент определяется номером входа (1..5).

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

double remainingTime(TimeUnits units) - Возвращает оставшееся время задержки (в указанных единицах измерения времени), если смесь в данный момент задерживается (в процессе "обработки"). В остальных случаях возвращает 0. Например, remainingTime(MINUTE) возвращает оставшееся время задержки в минутах.

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

Порты

in1, in2, ... , in5
Порты входа.
out
Порт выхода.