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

Mix Tank

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

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

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

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

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

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

Свойства

Смешивать
Определяет процесс смешивания:
  • Заданные объемы — пользователь указывает объемы для каждого компонента (входного порта)
  • Заданные доли — пользователь указывает общий объем и процентные доли для каждого компонента (входного порта). Доли нормализуются.
Синтаксис: boolean mixByAmounts
Установить новое значение во время выполнения: set_mixByAmounts(новое значение)
Допустимые значения:
true — Заданные объемы
false — Заданные доли
Вместимость (общий объем)
[Параметр виден и применяется только в том случае, если Смешивать: Заданные доли]
Общий объем смеси. Заданное значение не может быть меньше значения 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(новое значение)
Партия на выходе
Определяет партию на выходе из резервуара. Выберите один из вариантов:
  • По умолчанию — партия на выходе равна партии по умолчанию BatchTypes.DEFAULT_BATCH
  • Другая — партия на выходе определяется параметром Партия ниже
Узнать значение: modeOutputBatch
Установить новое значение во время выполнения: set_modeOutputBatch(новое значение) Допустимые значения:
ProcessTank.OUTPUT_BATCH_DEFAULT — По умолчанию
ProcessTank.OUTPUT_BATCH_CUSTOM — Другая
Партия
[Параметр виден и применяется только в том случае, если Партия на выходе: Другая]
Определяет партию смеси (партию на выходе). Партия может зависеть от партий, поступивших в блок (они доступны здесь как локальные переменные).
Тип значения: Object
Локальные переменные:
Object batch1 — партия, поступившая в порт in1
Object batch2 — партия, поступившая в порт in2
Object batch3 — партия, поступившая в порт in3
Object batch4 — партия, поступившая в порт in4
Object batch5 — партия, поступившая в порт in5
Изменить цвет партии
[Параметр виден и применяется только в том случае, если Партия на выходе: Другая]
Если отмечено флажком, цвет партии определяется параметром Цвет партии, в противном случае, применяется стандартная карта цветов.
Синтаксис: 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 amountOf(int input) Возвращает объем определенного компонента, который в данный момент находится в резервуаре. Компонент определяется номером входа (1..5).
double amountOf(int input, AmountUnits units) Возвращает объем определенного компонента (в заданных единицах измерения объема), который в данный момент находится в резервуаре. Компонент определяется номером входа (1..5).
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 capacity() Возвращает максимальный объем смеси, который может содержаться в резервуаре. Если объем меньше значения Utils.TOLERANCE, функция возвращает 0.
boolean isEmpty() Проверяет, не пуст ли резервуар.
boolean isEmptying() Проверяет, закончена ли обработка смеси, открыт ли выход, закрыты ли входы и не пуст ли еще резервуар.
boolean isFilling() Проверяет, наполняется ли резервуар, т.е. хотя бы один из входов открыт, выход закрыт и объем ниже требуемой Вместимости.
boolean isProcessing() Проверяет, обрабатывается ли сейчас смесь, т.е. все входы и выходы закрыты и выполняется задержка для обработки.
Оставшееся время
Функция Описание
double remainingTime() Возвращает оставшееся время задержки (в секундах), если смесь в данный момент задерживается (в процессе "обработки"). В остальных случаях возвращает 0.
double remainingTime(TimeUnits units) Возвращает оставшееся время задержки (в указанных единицах измерения времени), если смесь в данный момент задерживается (в процессе "обработки"). В остальных случаях возвращает 0. Например, remainingTime(MINUTE) возвращает оставшееся время задержки в минутах.
Скорость потока
Функция Описание
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() Выполняет принудительный пересчет выходной партии и ее цвета в соответствии с текущими заданными параметрами.
Сброс статистики
Функция Описание
void resetStats() Сбрасывает собранную блоком статистику, включая статистику, собранную на его портах.

Порты

in1, in2, ... , in5
Порты входа.
out
Порт выхода.
Как мы можем улучшить эту статью?