Flow Conveyor

Overview and Key Concepts

The flow conveyor is used to allow continuous flow to be transported during a non-zero time, and potentially be buffered (accumulated) when the downstream capacity is insufficient. The conveyor may represent a belt or screw with which 'dry bulk' can be discharged and transported to the end of the conveyor. The conveyor has a speed that is used to calculate the time required for a product to reach the output of the conveyor. Together with the width of the conveyor the speed also determines the height of the product on the conveyor, based on the input rate. At the output point the maximum outflow rate is a result of the speed of the conveyor and the height of the product, the actual outflow rate can of course be restricted by downstream objects in which case the conveyor will accumulate.

The mass flow conveyor is an accumulating object. When the actual output rate is lower than the requested output rate, the material that cannot exit will stack up against the output end of the conveyor up to a predefined maximum height. If you wish the conveyor to be non-accumulating, you can connect a flow sink to the last output port to absorb any excess material, or write custom logic to stop and restart the conveyor when necessary.

The image shows two flow conveyors, a straight and a curved conveyor, in a simple model. The visualization of the conveyor has been edited to draw the objects as belt conveyors.

Events

The flow conveyor uses the standard events that are common to almost all FloWorks objects. See FloWorks Triggers for an explanation of these events.

The flow conveyor has the following additional events:

On Product Change

This event occurs whenever the product leaving the conveyor changes. This event is commonly used to switch output ports or take some other action based on the new product type. The provided dropdown options include an option to pass the new product downstream - this will set the product of a specified output object to the new type. You can use this to link multiple conveyors or pipes and conveyors together and automatically create a multi-product pipeline based on the actual output product of a conveyor.

It has the following parameters:

Event Parameter Explanation
curproducttype The product ID or name of the product type that was leaving prior to this event.
newproducttype The product ID or name of the product type that will be leaving after this event.

On Output Blocked

This event only occurs when the conveyor is non-accumulating, and the calculated outflow rate is less than what it should be to discharge all the material currently at the exit point. You can indicate whether the conveyor should stop (with or without sending a message to the output console) so that you can resume it later. You can also take an action immediately in the trigger, such as slowing down the conveyor or increasing the input rate of the receiving objects; then re-evaluate the network to try and avoid the accumulation stop.

It has the following parameters:

Event Parameter Explanation
rate The calculated possible output rate of the conveyor.
requested The output rate the conveyor should have to avoid accumulation.
maxspeed The maximum speed the conveyor can have without adjusting any rates to avoid accumulation.

From within the trigger, you can return one of the values of the FlowConveyorUnblockAction enumeration, that will determine the behavior of the conveyor after the trigger has run:

  • FlowConveyorUnblockAction.StopObjectWithError (default) will popup the Output Console, if it is not yet open, and print an error message. It will stop the conveyor as if you called Object.stop() on it. After removing the cause for the accumulation stop (for example, by decreasing the conveyor speed or increasing the downstream flow capacity) you can call the corresponding Object.resume() command manually.
  • FlowConveyorUnblockAction.StopObjectSilently behaves similar to the previous option, except it does not open the output console or print an error message.
  • FlowConveyorUnblockAction.RequestRecalculation schedules the flow control to recalculate the flow rates. If the On Output Blocked trigger contains any logic to remove the cause for the accumulation stop, you can return this value to try and avoid the stop completely. Use this option with caution: if the logic in your trigger does not manage to avoid the stop completely, the trigger will fire again and you may create an infinite loop!

States

For statistical purposes, the conveyor's FloWorks state profile will be in one of the following states at various points during a simulation run:

Empty

The conveyor is empty and there is no flow.

Filling

The conveyor's inflow rate exceeds the outflow rate.

Releasing

The conveyor's outflow rate exceeds the inflow rate.

Not empty

The conveyor is not empty but there is no net flow because the input rate is equal to the output rate.

Idle

The conveyor has stopped because the requested output rate exceeds the downstream capacity.

Statistics

The (mass) flow conveyor tracks the following statistics. These can be viewed by clicking on the object and then viewing the Statistics panel in Properties.

Input / Output

The total number amount of flow, measured in fluid units, that has entered or exited the (mass) flow conveyor.

Flow rates

The current input and output rate of the (mass) flow conveyor, measured in fluid units per time unit.

Content

The current content of the (mass) flow conveyor, which is the difference between the output amount and the input amount.

Properties Panels

The (mass) flow conveyor objects use the following properties panels:

Properties

The Flow Conveyor object shares several properties with all fixed resources and flow objects:

Additionally, the Queue object uses the following properties:

PropertyType
BatchSize
DoBatching Boolean
FlushContent Boolean
ItemPlacement Options
LIFO Boolean
MaxBatchTime Unit
StackBaseZ Unit

Custom coding

You may control the behavior of the conveyor dynamically by writing FlexScript, for example in a Script window or by changing the code behind one of the options in an object trigger.

The conveyor is an instance of the FlowObject class, see the class reference for information about its properties.