To go with the release of the Material Handling Library we prepared a set of training models. They demonstrate the main features of the library through the use of example conveyor systems. These systems are often found in production facilities and in warehouses – they transport parts between workstations, sort finished products and deliver them to storage areas.
In a series of blogs, I will examine, in detail, the training models and elements of the new library. I recommend that you build these models yourself while reading the blog: you will learn how to use the library faster! Don’t forget, you will need the free or commercial version AnyLogic 8.3.
This blog is about modeling conveyors. The Convey, ConveyorEnter and ConveyorExit blocks, along with other special space-markup elements, are built into the Material Handling Library to simplify the modeling of conveyor systems. I will look at them in detail with the help of the models of the same name. They can be found on the AnyLogic main screen in the ‘Example Models’ section under ‘How-To >> Material Handling Library’. They can be seen in the animation windows are embedded directly into this text.
The main block of the model – Convey – is responsible for moving the agent along the conveyor network. To create a network, use the Conveyor layout element to draw a line of arbitrary appearance and width.
Set the markup properties as follows:
- type of simulated conveyor: belt, roller, tilt-tray (fixed cell) conveyor;
- acceleration and deceleration parameters;
- distance between transported agents.
In the properties of the markup element, leave all the default values.
To create a multi-conveyor network, just connect two conveyor lines. An element will appear in the junction that is responsible for moving an object from one line to another. If the junction angle is straight, a Transfer element is created, otherwise a Turntable appears. These can also be added to the conveyor network by dragging them from the palette. These markup elements represent the actual conveyor equipment.
Processing at a packaging station (see below) delays the agent and changes its state. It is modeled by the layout element Station. Place it on the conveyor network by dragging it from the palette. The box packing time at a standard station is set in the Delay field of the item properties (1 second in our model). For the fragile items package station, the packing time is set to 10 seconds.
The order type (plain or fragile) is set using a variable before the box moves along the conveyor. To make boxes go to the desired packing station, use the photoEye markup element (Position on Conveyor). This is a point on the conveyor which recognizes objects and send them to the correct conveyor line. In our case, it is placed on the conveyor before the fork and determines the type of order.
The conveyor network is ready. Let’s give it some packages to handle.
The Source block generates boxes that move along a conveyor with an arrival rate of 20 per minute. Note that in the Advanced section the option Forced pushing is inactive. This is because the Convey block immediately starts moving objects when it receives them, due to it not having a built-in queue: if the beginning of the conveyor line is already occupied, new agents cannot enter. The Forced pushing option allows you to store waiting agents in the Source (for Agents that can’t exit, set the option to wait in this block) or to delete them (set the option to are destroyed). You can also create a buffer imitation queue (Queue) and place it between the Source and Convey blocks.
The next block, after Source, is the fromConveyorStart block (block type Convey). This moves the box along the conveyor to the photoEye, where the type of the order and its path are determined. The Convey from property determines where the agent starts moving from. In this case, the box starts from the beginning of the conveyor, so leave the default value.
In the Source Conveyor properties, select where the agent will appear. The properties, Source Offset from and Source Offset, determine where the agent appears on the conveyor by setting its distance from either the beginning or the end of the conveyor. In this case, the agent starts its journey from the beginning of the line, so leave the property values unchanged. The Convey to property determines where the agent should be delivered within the conveyor network. In our case, it is sent to the point where the order type is determined, the photoEye (Point on Conveyor) location. To do this, specify Position on Conveyor as the Convey to property, and for the Target Position property, select the positionOnConveyor.
Following on, the next block is selectWay (SelectOutput), which divides the stream of boxes. If Select True output has the option If condition is true selected, you can enter a code in the Condition field. In our case, agent.isFragile code checks if the order in the box is fragile. Depending on the result, the boxes are directed to the appropriate Convey blocks.
Now let's look at the upper toStation (Convey) block. It moves the boxes along the conveyor network to the station for packing fragile orders. The Convey block allows you to select any starting and ending point for the agent path. Since the box is already placed on the conveyor, select Current position as its starting point in the Convey from property. To set the destination, select Processing station in the Convey to property. In the Target station field, select the station for fragile orders.
After packing, the boxes are delivered to the end of the conveyor network by the toConveyorEnd (Convey) block. To do this, select the starting point, the Current position option, and then the destination: in the Convey to property, select the Conveyor value, and in the Target conveyor property, specify its name.
If there are no fragile orders in the box, it goes to the toConveyorEnd (Convey) block and automatically moves along the shortest route through the usual packing station. Please note that station processing is not displayed on the process diagram. The main point here is that the Convey unit is responsible for transportation and for processing agents at the stations.
You can manually place boxes on the conveyor using the button put carton from order pickingzone when in the main model view. Pressing the button calls the inject function, which adds a new agent to the block called source1. At the same time, the fromPosition (Convey) block places this agent on the conveyor network — not from the beginning of the conveyor, but from a point specified by placingPoint (Position on Conveyor). To do this, the Position on Conveyor option is selected in the Convey from drop-down menu and Source position is set to placingPoint (the name of the corresponding point on the conveyor).
By default, upon reaching the end of the Convey block, an agent remains on the conveyor network and physically takes space on the conveyor. You can change this logic by setting the Leave conveyor on exit property in the Convey block. This makes an agent immediately leave the conveyor network when it reaches the end. In real life, this happens when an object is dropped or immediately removed from the end of the conveyor.
But what to do if the process of leaving the conveyor is complicated or associated with further processing? What if an operator or robot is required and they are busy with another, higher priority task? A similar situation is described in the ConveyorExit training model: it uses a forklift to remove a heavy load from the end of a conveyor. When an agent (boxes, in this case) is at the end of the conveyor, it waits for the forklift, preventing other agents from reaching the end. Let us consider the flowchart of the process in more detail.
The sourceHeavyLoad (Source) block creates agents and passes them to a Convey block that moves them around the network. Configure this by setting a single conveyor as the initial and final conveyor, leaving the remaining parameters of the Convey block unchanged.
Since the Leave the conveyor on exit option is not selected for the Сonvey unit, agents will remain on the conveyor when they reach the end. Further along the process diagram, the agent enters the seizeForklift (Seize) block, this block is responsible for capturing the forklift resource. Select the option Send seized resources and set the Destination is parameter as Agent to send. This will send a forklift to the waiting agent on the conveyor. Pay attention to the property Attach seized resources: it allows you to connect the agent and the resource that serves it for use in further operations.
When the forklift approaches a box on the conveyor, it goes to the ConveyorExit block, which removes the load from the conveyor and frees up space for the next box. The removed load is moved to storage using the toStorage (Move to) block and the releaseForklift (Release) block then releases the resource. It is stored for some time, specified by the storing block, and leaves the model via the sink block. An empty forklift may return to the conveyor for another load. If there are no pending loads at the end of the conveyor, the forklift returns to its starting point. This behavior is determined by the Wrap-up tasks parameter, Wrap-up (i.e. go home), in the Release block. If you select the option if no other tasks, the loader will return to its starting base location when it is not busy.
Unlike ConveyorExit, ConveyorEnter is associated with complex processes that occur before an agent is transported along a conveyor network. In this case, the agent is already on the conveyor and interacts with other agents on the conveyor network (for example, by blocking further movement along the conveyor). An example of the reason for this behavior is the filling of a container on a conveyor. The filling action takes place on the conveyor, blocking the movement of other containers on the network. They either accumulate behind it or go around it, depending on the logic provided.
An example is shown in the ConveyorEnter training model: before a pallet moves along the conveyor, an anti-slip sheet is placed on it.
The palletsSource (Source) block generates pallets that are then transferred to the palletBuffer (Queue) block which simulates a stack of pallets at the conveyor. In the liftUp (Delay) block, a pallet moves to the beginning of the conveyor. This block is needed because the conveyorEnter block is only responsible for the logical placement of the agent onto the conveyor network and, in this model, it is necessary to animate the transfer of the agent onto the conveyor.
In a similar manner, the sheetsSource(Source), sheetBuffer (Queue) and putSheetOnPallet (Delay) blocks create anti-slip sheets and place them on pallets.
The conveyorEnter block places the pallet on the conveyor but does not move it anywhere. For convenience and clarity, the location of the agent is marked with the help of Position on the conveyor. To place a pallet exactly at this point, in the conveyorEnter block, the Entry point defined as parameter is set as Position on conveyor and the corresponding point on the conveyor is selected below. If necessary, you can specify the orientation of the agent when it is placed on the conveyor network (option Change orientation).
Moving to the addSheet (Combine) block, the pallet is still at the beginning of the conveyor, at the positionOnConveyor point. In the addSheet block, the pallets and the anti-slip sheet are connected. Note: the type of agent transported within a single conveyor line cannot be changed. Therefore, when combining the pallet and sheet in addSheet the The resulting agent is parameter is set to agent1 because the agent being received is already on the conveyor (agent1). This means both the conveyEnter block and the сonvey block work with one type of agent – a pallet – and no errors occur.
When exiting the addSheet block, the hold block opens the transfer to the next pallet line. The convey block transports pallets with an anti-slip sheet to the end of the conveyor. Since conveyorEnter places agents on the conveyor, the Current position value can be used as the Convey from value in the convey block. The end of the conveyor is the destination, so select Conveyor in the Convey to field. In the field below that, specify the name of the conveyor that will transport the pallet
This is the end of the first part — now you know how to start modeling conveyors in AnyLogic! If you have questions about these models, put them in the comments section below.
The second part will investigate the transporters in the new library: how to set their movement, avoid collisions, and model their interaction with other objects in a model. Don’t miss it! (Follow us on LinkedIn, facebook, or Twitter, and with our newsletter).
⭐ Here at AnyLogic we are curious to see your models too. If you have already built a model with the new conveyor elements, upload it to AnyLogic Cloud and share it in the comments — we will review them next month and award a T-shirt for the best!