
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.- 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)
- 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
- 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
- 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 unitsdouble 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 unitsdouble 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 unitsdouble 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 unitsdouble 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 unitsdouble 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 unitsdouble 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 unitsdouble 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 batchdouble getBatchSize(int index) Returns the size of the batch with the specified index. Gaps have zero size.
index — the index of the desired batchdouble 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 unitsdouble getBatchLength(int index) Returns the length (the length footprint) of the batch with the specified index.
index — the index of the desired batchdouble 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.
- in
- The input port.
- out
- The output port.
-
How can we improve this article?
-