Mix Tank

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

Вы можете явно указать новую партию смеси, либо выбрать в качестве партии смеси партию по умолчанию BatchTypes.DEFAULT_BATCH.

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

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

Свойства

Смешивать
Определяет процесс смешивания:
Заданные объемы - пользователь указывает объемы для каждого компонента (входного порта)
Заданные доли - пользователь указывает общий объем и процентные доли для каждого компонента (входного порта). Доли нормализуются.
Синтаксис: boolean mixByAmounts
Установить новое значение во время выполнения: set_mixByAmounts (новое значение)
Допустимые значения: true  - Заданные объемы
                   false - Заданные доли
Вместимость (общий объем) [динамический]
[Параметр виден и применяется только в том случае, если установлена опция Заданные Доли] Общий объем смеси.
Синтаксис: 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 (новое значение)
Партия на выходе
Определяет партию на выходе из резервуара. Выберите один из вариантов:
По умолчанию - партия на выходе равна партии по умолчанию BatchTypes.DEFAULT_BATCH
Другая - партия на выходе определяется параметром Партия ниже.
Узнать значение: modeOutputBatch
Установить новое значение во время выполнения: set_modeOutputBatch(новое значение)
Допустимые значения: ProcessTank.OUTPUT_BATCH_DEFAULT  -  По умолчанию
                   ProcessTank.OUTPUT_BATCH_CUSTOM  -
Другая
Партия [динамический]
[Параметр виден и применяется только в том случае, если установлена опция Партия на выходе: Другая]. Определяет партию смеси (партию на выходе). Партия может зависеть от партий, поступивших в блок (они доступны здесь как локальные переменные).
Тип значения: Object
Локальные переменные:  Object batch1 - партия, поступившая во входной порт блока in1
                      Object batch2 - партия, поступившая в порт in2
                      Object batch2 - партия, поступившая в порт in3
                      Object batch2 - партия, поступившая в порт in4
                      Object batch2 - партия, поступившая в порт in5
Изменить цвет партии
[Параметр виден и применяется только в том случае, если установлена опция Другая] Если отмечено флажком, цвет партии определяется параметром Цвет партии, в противном случае, применяется стандартная карта цветов.
Синтаксис: boolean customOutputBatchColor
Установить новое значение во время выполнения: set_customOutputBatchColor(новое значение)
Цвет партии [динамический]
[Параметр виден и применяется только в том случае, если установлена опция Изменить цвет партии] Определяет цвет партии на выходе.
Тип значения: Color
Локальная переменная:  Object batch - партия
Анимация
Резервуар
Здесь вы указываете элемент разметки пространства Резервуар, который используется в качестве анимации этого резервуара.
Синтаксис: StorageTank storageTank
Установить новое значение во время выполнения: set_storageTank(новое значение)
Отображать партии в блоке
Если отмечено флажком, иконка блока будет отображать текущий цвет партии.
Синтаксис: boolean showBatchesInFlowchart
Установить новое значение во время выполнения: set_showBatchesInFlowchart(новое значение)
Действия
При окончании формирования [код]
Действие выполняется, когда все компоненты смеси полностью находятся в резервуаре.
При готовности смеси [код]
Действие выполняется, когда готовая смесь находится в резервуаре необходимое время (если нужно), прежде чем покинуть резервуар.
При опустошении [код]
Действие выполняется, когда смесь полностью покинула резервуар, до того, как новая смесь начнет поступать в него.
При изменении скорости [код]
Действие выполняется, когда изменяется скорость любого потока. Текущие скорости доступны как локальные переменные in1rate .. in5rate (текущая скорость во входном порте in1 .. in5) и outrate (текущая скорость в выходном порте). Обратите внимание на то, что определенные изменения, произошедшие в результате выполнения данного действия, могут вызвать другое мгновенное изменение скорости, за которым сразу последует повторное выполнение действия При изменении скорости, что в итоге может привести к взаимной блокировке.

Функции

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

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

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

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

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

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

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

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

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

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) - Возвращает исходящую партию c указанным индексом (index), если резервуар опустошается в данный момент. В противном случае возвращает одну из 5 входящих партий (включая возможные партии с нулевой длиной). При этом индекс 0 соответствует входу 5, а индекс 4 соответствует входу 1.

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

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

double getBatchSize(int index, AmountUnits units) - Возвращает общее количество вещества, находящегося в резервуаре c указанным индексом (index) в указанных единицах измерения объема, если резервуар опустошается в данный момент. В противном случае возвращает количество конкретного компонента, поступившего в резервуар. При этом индекс 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
Порт выхода.