AnyLogic
Expand
Font size

BulkConveyor

The BulkConveyor block conveys bulk or condensable matter from one point to another. Compared to pipeline, allows gaps and sections of different “density”. The inflow rate of the conveyor is not necessarily equal to the outflow. The conveyor tries to move at the certain maximum speed. When it moves, the output rate equals the “density” of the matter portion located at the conveyor output, multiplied by the speed. At the same time, at the input, the inflow creates a section with the density that equals the inflow rate divided by the speed. If the next block is not able to accept the outflow of the conveyor, the conveyor speed adjusts to reduce the flow.

The “density” of the matter, that is, the amount of matter per conveyor length unit, is limited. At the maximum speed, the conveyor can accept the input rate not higher than the specified value, which means the maximum density is maximum input rate divided by the maximum speed. If the actual speed is lower (due to the output rate constraints), the maximum input rate limit is proportionally reduced. The specified rate cannot be lower than the value of Utils.RATE_TOLERANCE constant, that is, 1.0e-9. If rate value falls below this value after recalculation, it will be snapped to 0.

You can dynamically change speed of the conveyor, stop, and restart it. You can access the contents of the conveyor using its API. Internally, the conveyor considers sections with different density as different batches, even if they can be of same batch type. The BulkConveyor block allows you to define actions associated with the bulk conveyor getting completely filled, and with new batches appearing at the input or at the output.

Demo model: BulkConveyor Open the model page in AnyLogic Cloud. There you can run the model or download it (by clicking Model source files). Demo model: BulkConveyorOpen the model in your AnyLogic desktop installation.

Properties

Length is
Defines how the conveyor length is defined:
Specified explicitly — The length is specified in the Length edit box below.
Defined by conveyor belt shape — The length equals the length of the Bulk conveyor belt space markup element.
Name: lengthDefinedByPath
Type: boolean
Length
[Visible and applies if Length is: Specified explicitly]
The length of the conveyor. Cannot be changed dynamically after initialization.
Name: length
Type: double
Set new value at runtime: set_length(new value)
Speed
The maximum, or desired, speed of the conveyor.
Name: speed
Type: double
Set new value at runtime: set_speed(new value)
Maximum input rate at speed
The maximum input rate at the default speed defined by the Speed property. If the actual speed gets lower than the default speed, the rate limit decreases proportionally. If the rate decreases to the value lower than the value of Utils.RATE_TOLERANCE constant, that is, 1.0e-9, it is snapped to 0.
Name: maxInputRate
Type: double
Set new value at runtime: set_maxInputRate(new value)
Initially stopped
If the option is selected, the conveyor is initially stopped. The option can be toggled at runtime to change the conveyor’s state.
Name: stopped
Type: boolean
Set new value at runtime: set_stopped(new value)
Custom priority
If the option is set (the value equals true), the priority of the conveyor outflow will be set to Output flow priority, otherwise it equals 1. Priority affects the LP solver when it tries to maximize the flow through the system.
Name: customPriority
Type: boolean
Set new value at runtime: set_customPriority(new value)
Output flow priority
[Visible and applies if the Custom priority option is set]
The custom priority of the conveyor outflow in the overall flowchart. Must be a positive integer.
Name: priorityOutCustom
Type: int
Set new value at runtime: set_priorityOutCustom(new value)

Animation

Bulk conveyor belt
The name of the Bulk conveyor belt space markup element used to animate the conveyor defined by this BulkConveyor block (both in 2D and 3D animation).
Name: bulkConveyorBelt
Type: BulkConveyorBelt
Show batches in flowchart
If set, the block icon will display the batches size and color.
Name: showBatchesInFlowchart
Type: boolean

Actions

On new batch at input
The action executed when a new batch appears at the input. It will not necessarily start flowing into the block.
Local variable: Object batch — the batch
On new batch at output
The action executed when a new batch reaches the conveyor output. Is not executed on density change if the batch type does not change. Is not executed on start of a gap.
Local variable: Object batch — the batch
On rate change
The action executed when any of the flow rates (input or output) changes.
Changing something in the action may result in another immediate rate change and immediately following another call of On rate change, so the user can possibly create a livelock.
Local variables:
double inrate — the current input rate
double outrate — the current output rate

Functions

Bulk conveyor control
Function Description
void stop() Stops the conveyor (sets the stopped property to true, while keeping the value of the Speed property).
void go() Starts the conveyor (sets the stopped property to false, does not change the Speed property).
Fluid amount
Function Description
boolean isEmpty() Tests if the conveyor is empty.
There can still be a zero-size non-gap batch in an empty conveyor in case it has appeared at the input, but has not actually started flowing in.
double amount() Returns the amount of material currently on the conveyor. If the value is less than Utils.TOLERANCE, returns 0.
double amount(AmountUnits units) Returns the amount of material (in given units) currently on the conveyor. If the value is less than Utils.TOLERANCE, returns 0.

units — the amount units
double amountPassedIn() Returns the total amount passed through the input port of the conveyor since the start of the simulation.
double amountPassedIn(AmountUnits units) Returns the total amount (in given units) passed through the input port of the conveyor since the start of the simulation.

units — the amount units
double amountPassedOut() Returns the total amount passed through the output port of the conveyor since the start of the simulation.
double amountPassedOut(AmountUnits units) Returns the total amount passed (in given units) through the output port of the conveyor since the start of the simulation.

units — the amount units
double amountMin() Returns the historical minimum of the material amount on the conveyor.
double amountMin(AmountUnits units) Returns the historical minimum of the material amount on the conveyor in given units.

units — the amount units
double amountMax() Returns the historical maximum of the material amount on the conveyor.
double amountMax(AmountUnits units) Returns the historical maximum of the material amount on the conveyor in given units.

units — the amount units
double amountAverage() Returns the average amount of material on the conveyor over the total operating time.
double amountAverage(AmountUnits units) Returns the average amount of material on the conveyor over the total operating time in given units.

units — the amount units
Flow rate
Function Description
double currentRateIn() Returns the current inflow rate of the conveyor.
double currentRateIn(FlowRateUnits units) Returns the current flow rate (in given units) of fluid at the conveyor input. If the rate value is less than Utils.RATE_TOLERANCE, returns 0.

units — the flow rate units
double currentRateOut() Returns the current outflow rate of the conveyor.
double currentRateOut(FlowRateUnits units) Returns the current flow rate (in given units) of fluid at the conveyor output.

units — the flow rate units
double averageRateIn() Returns the average actual rate through the input of the conveyor throughout the total operating time. If time has run to infinity, the current input rate is returned.
double averageRateIn(FlowRateUnits units) Returns the average actual rate (in given units) through the input of the conveyor throughout the total operating time in given units. If time has ran to infinity, the current input rate is returned.

units — the flow rate units
Speed
Function Description
double getActualSpeed() Returns the current actual speed of the conveyor, which is less or equal to the Speed property.
double getActualSpeed(SpeedUnits units) Returns the current actual Speed (in given units) of the conveyor, which is less than or equal to the Speed property.

units — the speed units
Utilization
Function Description
double utilization() Returns the current fraction of the conveyor capacity being utilized, calculated as the ratio of the current input rate to the maximum input rate at the maximum Speed. If the maximum input rate is 0, this function returns 0.
double utilizationTotal() Returns the average utilization of the conveyor over the total operating time. It is calculated as the ratio of the total amount of material that actually passed through the conveyor input to the maximum total amount that could have passed through, given the (possibly changing) maximum input rate. If the operating time tends to infinity, the instant utilization is returned.
Batches
Function Description
int numberOfBatches() Returns the number of batches currently on the conveyor, including possible zero-length batches and gaps. Two adjacent batches with different density are treated by conveyor as different batches, even if they have the same batch type.
Object getBatch(int index) Returns the batch (it can be a gap) with the specified index. The batch with the index 0 is the one at the conveyor output, the batch with the index numberOfBatches() - 1 is the last batch closest to the conveyor input. Gaps are represented by the batches with the null type.

index — the index of the desired batch
double getBatchSize(int index) Returns the size of the batch with the specified index. Gaps have zero size.

index — the index of the desired batch
double getBatchSize(int index, AmountUnits units) Returns the size of the batch with the specified index in the specified amount units. Gaps have zero size.

index — the index of the desired batch
units — the amount units
double getBatchLength(int index) Returns the length (the length footprint) of the batch with the specified index.

index — the index of the desired batch
double getBatchDensity(int index) Returns the density (the amount of matter per conveyor length unit) of the batch with the specified index. Gaps have zero density.

index — the index of the desired batch
Resetting statistics
Function Description
void resetStats() Resets statistics collected for this block, including the statistics collected for its ports.

Ports

in
The input port.
out
The output port.
How can we improve this article?