Bulk Conveyor

Транспортирует объемные или конденсирующиеся летучие вещества из одной точки в другую. По сравнению с трубой Pipeline, допускает образование зазоров и участков с различной “плотностью”. Скорость потока на входе конвейера не обязательно равна скорости потока на его выходе. Конвейер транспортирует вещества с определенной максимальной скоростью. При транспортировке скорость выходного потока равняется "плотности" партии вещества, находящегося на выходе конвейера, помноженной на скорость конвейера. В то же время, входной поток создает на входе участок с плотностью, равняющейся скорости входного потока, поделенной на скорость конвейера. В случае, если последующий блок не может принять выходной поток с данного конвейера, то скорость конвейера корректируется так, чтобы уменьшить скорость потока на его выходе.

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

Вы можете динамически изменять скорость конвейера, останавливать или перезапускать его. Вы можете получать доступ к содержимому конвейера, используя его функции. Конвейер воспринимает участки с различной плотностью как разные партии, даже если они будут являться партиями одного типа. Блок BulkConveyor позволяет вам определять действия, связанные с полным наполнением трубы, и с новыми партиями, прибывающими на вход и на выход конвейера.

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

Параметры

Длина задается
Определяет, как будет задана длина. Доступно два варианта.
Явно - длина указывается в поле Длина ниже;
Согласно длине фигуры конвейера - длина равна длине анимации фигуры, заданной в параметре Ленточный конвейер.
Синтаксис: boolean lengthDefinedByPath
Длина
[Параметр виден и применяется только в том случае, если выбрана опция Длина задается: Явно] Длина конвейера. После запуска невозможно изменить динамически.
Синтаксис: double length
Установить новое значение во время выполнения: set_length(новое значение)
Скорость
Максимальная (желаемая) скорость конвейера.
Синтаксис: double speed
Установить новое значение во время выполнения: set_speed(новое значение)
Максимальная входная скорость потока
Максимальная скорость потока на входе при скорости конвейера по умолчанию, определяемой параметром Скорость. Если реальная скорость опускается ниже скорости по умолчанию, то предельное значение скорости потока уменьшается пропорционально.
Синтаксис: double maxInputRate
Установить новое значение во время выполнения: set_maxInputRate(новое значение)
Изначально остановлен
Если эта опция выбрана, то конвейер изначально остановлен. Опция может быть задана во время выполнения, чтобы изменить состояние конвейера.
Синтаксис: boolean stopped
Установить новое значение во время выполнения: set_stopped(true или false)
Другой приоритет
Если эта опция выбрана (значение true), то приоритет выходного потока конвейера будет иметь значение Приоритет выходного потока, в противном случае приоритет будет 1. Приоритет влияет на LP решатель, когда он стремится до максимума увеличить количество вещества, проходящего через систему.
Синтаксис: boolean customPriority
Установить новое значение во время выполнения: set_customPriority(true или false)
Приоритет выходного потока
[Параметр виден и применяется только в том случае, если выбрана опция Другой приоритет] Здесь вы можете задать другое значение приоритета выходного потока конвейера в общей диаграмме процесса. Значение приоритета должно быть положительным целым числом.
Синтаксис: int priorityOutCustom
Установить новое значение во время выполнения: set_priorityOutCustom(новое значение)
Анимация
Ленточный конвейер
Здесь можно указать имя элемента разметки пространства Ленточный конвейер, используемого в качестве фигуры анимации конвейера, заданного этим блоком BulkConveyor.
Синтаксис: BulkConveyorBelt bulkConveyorBelt
Отображать партии в блоке
Если эта опция установлена, то значок блока будет отображать размер и цвет партий.
Синтаксис: boolean showBatchesInFlowchart
Действия
При новой партии на входе [код]
Действие выполняется, когда новая партия прибывает на вход. Эта партия не обязательно начнет поступать в блок.
Локальная переменная: Object batch - партия
При новой партии на выходе [код]
Действие выполняется, когда новая партия достигает выхода из конвейера. Не выполняется при изменении плотности, если тип партии не меняется. Также не выполняется при старте или зазоре.
Local variable: Object batch - партия
При изменении скорости [код]
Действие выполняется, когда изменяется скорость любого (входящего или исходящего) потока. Обратите внимание на то, что определенные изменения, произошедшие в результате выполнения данного действия, могут вызвать другое мгновенное изменение скорости, за которым сразу последует повторное выполнение действия При изменении скорости, что в итоге может привести к взаимной блокировке.
Локальные переменные:  double inrate - текущая скорость во входном порте
                          double outrate - текущая скорость в выходном порте

Функции

double getActualSpeed() - Возвращает текущую реальную скорость конвейера, которая является меньшей либо равной параметру Скорость.

double getActualSpeed(SpeedUnits units) - Возвращает текущую реальную скорость конвейера (в указанных единицах измерения скорости) которая является меньшей либо равной параметру Скорость.

stop() - Останавливает конвейер (устанавливает параметр stopped в значение true, при этом сохраняя величину параметра Скорость).

go() - Запускает конвейер (устанавливает параметр stopped в значение false, не изменяя параметр Скорость).

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 isEmpty()- Проверяет, является ли конвейер пустым. Заметим, что в пустом конвейере все же может находиться партия нулевого размера и без зазоров в том случае, если она прибыла на вход, но не поступила в конвейер.

double utilization() - Возвращает долю использованного на данный момент объема конвейера, то есть текущая скорость входного потока, деленная на максимальную входную скорость потока на максимальной (= желаемой) Скорости. Если текущая максимальная скорость потока равна 0, то возвращает 0.

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

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

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

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

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

double averageRateIn()Возвращает среднее значение скорости на входе в конвейер за все время работы. Если модель не обнаружила никаких событий в будущем и установила время в бесконечность, будет возвращено мгновенное значение скорости конвейера.

double averageRateIn(FlowRateUnits units)Возвращает среднее значение скорости (в указанных единицах измерения скорости) на входе в конвейер за все время работы. Если модель не обнаружила никаких событий в будущем и установила время в бесконечность, будет возвращено мгновенное значение скорости конвейера.

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

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

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

double getBatchSize(int index) - Возвращает размер партии с указанным индексом. Размер зазоров равняется нулю.

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

double getBatchDensity(int index) - Возвращает плотность (объем вещества на единицу длины конвейера) партии с указанным индексом. Плотность зазоров равняется нулю.

Порты

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