Overhead Crane

   

Overhead crane in graphical editor             Overhead crane at model runtime in 3D animation

Overhead Crane is a complex space markup element that graphically defines an overhead crane. You can use Material Handling Library block MoveByCrane to simulate how the overhead crane transports agents (material items) between two points of simulated environment.

To model complicated processes with additional operations between the seizing of the crane, its movement, and release, you can use the SeizeCrane block to seize the crane and ReleaseCrane block to release it.

The Overhead Crane element may include multiple simple markup elements Bridge. By specifying a Number of bridges in the properties of the overhead crane, you can create a multibridge crane. By default, the bridges move in automatic mode according to the specified priorities of the carried agents (material items) and conflict resolution rules. If necessary, you can switch to a manual mode and define the exact movement program for each bridge, using the corresponding API. This way you can exercise full control over the loading, transporting, and unloading of the agents (material items) while taking into account the specifics of the crane's working area.

Demo model: Crane System With Multiple Bridges

Crane has three different modes of operation depending on how its components - bridge, trolley, and hook - move in relation to each other.

The maximum height an agent (material item) can reach when raised by overhead crane equals the height of the crane itself.

The rails of the overhead crane can serve as an obstacle on the way of transporters moving in free space navigation mode, but they can still move between the rails.

Overhead crane element provides users with a set of actions, which are used to define additional agent behavior.

To draw an overhead crane

  1. Drag the Overhead Crane element from the Material Handling section of the Space Markup palette into the graphical editor. You will see the shape of the crane's guiding rails and the bridge between them.

  2. Overhead crane can pick up / drop off material items directly from/to a path, a conveyor, and a railway track. In this case you should connect the crane to the corresponding space markup element by placing it close enough so that the crane shape is highlighted in green (it means the connection has been established).

  3. After crane has been successfully connected, the crane shape will change color as displayed in the image below.

  4. You can adjust the width of the crane and the length of its runway, change the width of the bridge and the position of the bridge and the trolley.
  5. To customize the crane's appearance, select the type of crane in Properties view: either Gantry crane or Bridge crane. You can change the Trolley Color and the Crane color in the Properties view for both types.

To draw a multibridge crane

  1. Draw an overhead crane.
  2. In the crane's properties specify the Number of bridges that you need.
  3. Drag the handle on the edge of the leftmost bridge to set the same width for all bridges at once.

  4. To access the settings of a particular bridge, select this bridge by clicking on it.

Multibridge crane automatic mode

Automatic mode means that the bridge moves to the agent that has seized it in the SeizeCrane block or MoveByCrane block with enabled Seize option, then transports the agent in MoveByCrane block, and returns to the parking position. All these actions are executed according to the settings specified in the properties of the blocks, without using the moveTo() or moveByProgram() functions of the bridge.

The agent that seizes the bridge has a priority that is specified in the Agent selection pattern property of the SeizeCrane block or MoveByCrane block with enabled Seize option.

When the bridge begins moving to the agent that has seized it, it "inherits" the agent's priority and uses it to resolve possible collisions with other bridges that move to their own agents. The bridge that has already picked up the agent and is transporting it to the specified destination, retains the agent's priority and uses it to resolve collisions with other bridges that are transporting their own agents.

Resolving collisions in automatic mode

Collisions in automatic mode are resolved using the bridges' own priorities. A bridge with a higher priority can move another bridge with a lower priority beyond its destination point if that bridge hasn't yet finished movement. The bridge with a low priority cannot enter the area of possible collision with a bridge that has higher priority. Instead it waits until that bridge moves away from the area. This can happen when bridges move towards each other.

Bridges' priorities

The movement of one bridge by another bridge to resolve a collision depends on a complex system of priorities. The lower the bridge's priority, the more possible it is that another bridge will force it to move in order to finish its own movement. The priorities are grouped based on the state of the bridge and inside each group you also need to take into account the priorities of the agents (material items) that seized the bridges.

Below you can find the groups organized in order from the highest priority to the lowest:

  1. Bridges in automatic mode that stopped:

  2. Bridges in manual mode that move due to the call of moveTo() function or moveByProgram() function.

    Note: The user bears full responsibility for the crane's movement program, therefore any conflicts between bridges that move in manual mode will cause an error.
  3. Bridges in automatic mode that transfer the agents (material items). To resolve collisions between such bridges, AnyLogic uses the priorities of the agents that were used to seize the bridges. If the priorities weren't specified, the bridge that started its movement first has the highest priority.

  4. Bridges in automatic mode that move to pick up the agents (material items). To resolve collisions between such bridges, AnyLogic uses the priorities of the agents that were used to seize the bridges. If the priorities weren't specified, the bridge that started its movement first has the highest priority.

  5. Bridges in automatic mode that move to their parking positions. During the collision resolution the bridge that started its movement first has the highest priority.

  6. Bridges in automatic mode without tasks:

Properties

General

Name - The name of the overhead crane. The name is used to identify and access the overhead crane from code and Material Handling Library blocks.

Ignore - If selected, the overhead crane is excluded from the model.

Visible on upper agent - If selected, the overhead crane is also visible on the upper agent where this agent lives.

Lock - If selected, the overhead crane's shape is locked. Locked shapes do not react to mouse clicks - it is impossible to select them in the graphical editor until you unlock them. It is frequently needed when you want to prevent editing this shape while drawing other shapes over it.

Visible - Here you specify whether the shape is visible on animation at model runtime, or not. Using the control, choose yes or no.

Material item type - The type of the material item that is transported by this overhead crane.

Is obstacle - If selected, the rails of this overhead crane will be considered an obstacle for transporters moving in free space mode.

Number of bridges - Here you can specify the number of bridges for this crane.

Components movement mode - Here you can choose how the crane's jib, trolley, and hook should move in relation to each other. The options are:
Step-by-step - the components will move one at a time. This mode satisfies the safety conditions of operating a crane.
Concurrent - the movement of all components will be executed at the same time. This mode is considerably faster than Step-by-step mode, but not as safe.
Independent hoist - the movement of the bridge and the trolley is executed at the same time, either before or after the movement of the hoist.

Note: If the crane has multiple bridges, the speed, acceleration, and deceleration of the crane's components specified in the properties below are applied to all bridges of this crane.

Bridge speed - Here you can specify the crane's bridge maximum speed. The property is dynamic, therefore you can set up the speed change on runtime depending on whether the crane is loaded or not. Using the local variable isLoaded of boolean type, you can, for example, set up the speed change with the conditional operator: isLoaded ? agent.mySpeed : 1. When the crane is unloaded, the agent variable is null. If you haven't specified any particular speed value for the unloaded crane, the bridge will move with the default speed of 0.5 meters per second.

Trolley speed - Here you can define the crane's trolley maximum speed. The property is dynamic, therefore you can set up the speed change on runtime depending on whether the crane is loaded or not. Using the local variable isLoaded of boolean type, you can, for example, set up the speed change with the conditional operator: isLoaded ? agent.mySpeed : 1. When the crane is unloaded, the agent variable is null. If you haven't specified any particular speed value for the unloaded crane, the trolley will move with the default speed of 0.3 meters per second.

Hoist speed - Here you can define the speed of the crane's hoist (lifting / lowering speed). The property is dynamic, therefore you can set up the speed change on runtime depending on whether the crane is loaded or not. Using the local variable isLoaded of boolean type, you can, for example, set up the speed change with the conditional operator: isLoaded ? agent.mySpeed : 1. When the crane is unloaded, the agent variable is null. If you haven't specified any particular speed value for the unloaded crane, the trolley will move with the default speed of 0.1 meters per second.

Set acceleration/deceleration - If selected, this option allows you to specify the acceleration and deceleration for the overhead crane's bridge and trolley.

Bridge acceleration - [Visible if Set acceleration/deceleration is selected] Here you can define the acceleration of the crane's bridge. If you set this parameter to 0, the bridge will instantly accelerate to its maximum speed. The property is dynamic, therefore you can set up the acceleration change on runtime depending on whether the crane is loaded or not. Using the local variable isLoaded of boolean type, you can, for example, set up the speed change with the conditional operator: isLoaded ? agent.myAcceleration : 1. When the crane is unloaded, the agent variable is null. If you haven't specified any particular acceleration value for the unloaded crane, the bridge will accelerate with the default speed of 0.3 meters per second2.

Bridge deceleration - [Visible if Set acceleration/deceleration is selected] Here you can define the crane's bridge deceleration. If you set this parameter to 0, the bridge will instantly slow down to complete halt. The property is dynamic, therefore you can set up the deceleration change on runtime depending on whether the crane is loaded or not. Using the local variable isLoaded of boolean type, you can, for example, set up the speed change with the conditional operator: isLoaded ? agent.myDeceleration : 1. When the crane is unloaded, the agent variable is null. If you haven't specified any particular deceleration value for the unloaded crane, the bridge will decelerate with the default speed of 0.3 meters per second2.

Trolley acceleration - [Visible if Set acceleration/deceleration is selected] Here you can define the acceleration of the crane's hoist (lifting / lowering speed). If you set this parameter to 0, the trolley will instantly accelerate to its maximum speed. The property is dynamic, therefore you can set up the acceleration change on runtime depending on whether the crane is loaded or not. Using the local variable isLoaded of boolean type, you can, for example, set up the speed change with the conditional operator: isLoaded ? agent.myAcceleration : 1. When the crane is unloaded, the agent variable is null. If you haven't specified any particular acceleration value for the unloaded crane, the trolley will accelerate with the default speed of 0.3 meters per second2.

Trolley deceleration - [Visible if Set acceleration/deceleration is selected] Here you can define the crane's trolley deceleration. If you set this parameter to 0, the trolley will instantly slow down to complete halt. The property is dynamic, therefore you can set up the deceleration change on runtime depending on whether the crane is loaded or not. Using the local variable isLoaded of boolean type, you can, for example, set up the speed change with the conditional operator: isLoaded ? agent.myDeceleration : 1. When the crane is unloaded, the agent variable is null. If you haven't specified any particular deceleration value for the unloaded crane, the trolley will decelerate with the default speed of 0.3 meters per second2.

Actions

In all the actions, the current material item is accessible as the local variable agent.

On failed - Here you can type Java code that will be executed in case of overhead crane failure.

On repaired - Here you can type Java code that will be executed when the overhead crane is repaired.

On loading - Here you can type Java code that will be executed directly after the overhead crane takes hold of the material item.

On unloading - Here you can type Java code that will be executed directly after the overhead crane releases the material item.

On target reached - Here you can type Java code that will be executed when all components of the crane, including the hook, reach the target specified in the Destination is property of the SeizeCrane block or MoveByCrane block.

On bridge movement finished - Here you can type Java code that will be executed when the bridge finishes its movement having reached the target specified in the Destination is property of the SeizeCrane block or MoveByCrane block.

On bridge state changed - Here you can type Java code that will be executed when the bridge's state changes.

On seize - Here you can type Java code that will be executed directly afterthe agent (material item) seizes the crane or a bridge.

On release - Here you can type Java code that will be executed directly afterthe agent (material item) releases the crane or a bridge.

Appearance

Type - Here you can choose the type of crane: either either Gantry crane or Bridge crane.

Gantry crane

Bridge crane

Note that you only change the visual appearance of your crane: your choice doesn't affect the logic of its operation.

Girder type - The type of the bridge depending on the number of girders: either a Double or a Single.

Trolley color - The fill color of the overhead crane's trolley. Choose No color, if you do not want the area to be filled.

Crane color - The color of the overhead crane's shape. Choose No color, if you do not want the area to be filled.

Position and size

LevelLevel to which this element belongs.

X - X-coordinate of the point where the overhead crane is located.

Y - Y-coordinate of the point where the overhead crane is located.

Z - Z-coordinate of the point where the overhead crane is located.

Runway length - Here you can specify the crane's runway length.

Crane width - Here you can specify the width of the overhead crane itself, i.e. the distance between the crane's guiding rails.

Crane height - [Visible if Gantry crane option is selected in the Type parameter] Here you can specify the height of the crane's legs. It is calculated from the crane's Z.

Bridge width - Here you can specify the width of the overhead crane's bridge.

Bridge safety gap - Here you can specify the distance that bridges must observe between each other.

Advanced

Show in - Here you can choose whether you want the overhead crane to be shown both in 2D and 3D animation, or in 2D only, or in 3D only.

Show name - If selected, the overhead crane's name is displayed on the graphical diagram.

To adjust the width of the crane and the length of the crane's runway

  1. Drag the corner of the crane's shape to specify the width of the crane and the length of its runway.

To adjust the width of the bridge

  1. Drag the handle at the edge of the crane's bridge to change the width of the bridge.

To adjust the position of the bridge and the trolley

  1. Click on the bridge and drag the handle on the trolley shape to adjust the position of the bridge and the trolley.

  2. If you want to adjust only the position of the bridge and preserve the position of the trolley, hold the Shift key pressed while dragging the handle.

Functions

You can dynamically modify the overhead crane's properties at model runtime using the following API.

Working state

Function

Description

boolean isReady()

Returns true if the overhead crane is ready to operate, otherwise returns false.

boolean isFailed()

Returns true if the overhead crane failed (broke down) and is not operating, otherwise returns false.

boolean isLoaded()

Returns true, if the overhead crane is currently loaded with an material item. Otherwise, this function returns false.

void fail()

If called for a single bridge crane, it initiates the crane's failure. The crane stops working. If called for multi-bridge crane, an error will occur, since this function should be called for a specific bridge.

void repair()

If called for a single bridge crane, repairs the crane. The crane becomes available again. If called for a multi-bridge crane, an error will occur, since this function should be called for a specific bridge.


Utilization statistics

Function

Description

double getUtilization()

Returns the overhead crane utilization: the fraction of the time the crane was busy. The returned crane utilization value lies in the range [0..1].

void resetStats()

Resets the overhead crane utilization statistics.

int numberOfAgentsHandled()

A total number of agents handled by all bridges of the crane.


Bridges

Function

Description

OverheadCraneBridge getBridge(int index)

Returns the bridge with the specified index. The leftmost bridge on the animation has index 0.

Parameter:
index - the index of the bridge

List<OverheadCraneBridge> getBridges()

Returns a list of all bridges of this crane.

int getNumberOfBridges()

Returns the total number of all bridges of this crane.


Agents

Function

Description

List<Agent> getAgents()

Returns a list of all agents that have seized the crane or a bridge. They can either be waiting for a bridge to come to them or already be transported by a bridge.

List<Agent> getAgentsInQueue()

Returns a list of all agents that are currently waiting in the queue to this crane.


Level

Function

Description

Level getLevel()

Returns the level where this overhead crane is located.


Obstacle

Function

Description

boolean isObstacle()

Returns true if this overhead crane is considered an obstacle by transporters moving in free space mode. Otherwise, returns false.

void setObstacle(boolean isObstacle)

Sets this overhead crane as an obstacle for transporters moving in free space mode.

Parameter:
isObstacle - if true, the crane is set as an obstacle. Otherwise, not.


Movement

Function

Description

boolean isAccelerationEnabled()

Returns true, if the option to set acceleration / deceleration for for this overhead crane's components is enabled. Otherwise, returns false.

void setAccelerationEnabled()

Enables the option to set acceleration / deceleration for the components of this overhead crane.

Parameter:
value - if true, the option will be enabled. If false, the option will be disabled.

OverheadCraneMovementMode getMovementMode()

Returns the mode for the movement of the crane's bridge, trolley, and hook in relation to each other. Valid values are: OVERHEAD_CRANE_MOVEMENT_STEP_BY_STEP, OVERHEAD_CRANE_MOVEMENT_CONCURRENT, OVERHEAD_CRANE_MOVEMENT_INDEPENDENT_HOIST.

void setMovementMode(OverheadCraneMovementMode movementMode)

Sets the mode for the movement of crane's trolley, jib, and hook in relation to each other.

Parameter:
movementMode - components movement mode. Valid values are: OVERHEAD_CRANE_MOVEMENT_STEP_BY_STEP, OVERHEAD_CRANE_MOVEMENT_CONCURRENT, OVERHEAD_CRANE_MOVEMENT_INDEPENDENT_HOIST.

double trolleySpeed(Agent agent, SpeedUnits units)

Returns the speed of the overhead crane's trolley, as set in the crane's properties, in the specified speed units.

Parameters:
agent - an agent that's being transferred by the crane
units - a constant defining the speed units

double hoistSpeed(Agent agent, SpeedUnits units)

Returns the speed of the hoisting winch operation, as set in the crane's properties, in the specified speed units.

Parameters:
agent - an agent that's being transferred by the crane
units - a constant defining the speed units

double bridgeSpeed(Agent agent, SpeedUnits units)

Returns the speed of the overhead crane's bridge, as set in the crane's properties, in the specified speed units.

Parameters:
agent - an agent that's being transferred by the crane
units - a constant defining the speed units

Point getCurrentHookPosition()

Returns current hook position in the crane's coordinate system (in pixels).

Position getAbsoluteHookPosition()

Returns the current hook position relative to the origin of coordinates of the agent, where the crane is located.

double bridgeAcceleration(Agent agent,
AccelerationUnits units)

Returns the acceleration value for the crane's bridge, as set in the crane's properties, in specified acceleration units.

Parameters:
agent - an agent that's being transferred by the crane
units - a constant defining the acceleration units

double bridgeDeceleration(Agent agent,
AccelerationUnits units)

Returns the deceleration value for the crane's bridge, as set in the crane's properties, in specified acceleration units.

Parameters:
agent - an agent that's being transferred by the crane
units - a constant defining the acceleration units

double trolleyAcceleration(Agent agent,
AccelerationUnits units)

Returns the acceleration value for the crane's trolley, as set in the crane's properties, in specified acceleration units.

Parameters:
agent - an agent that's being transferred by the crane
units - a constant defining the acceleration units

double trolleyDeceleration(Agent agent,
AccelerationUnits units)

Returns the deceleration value for the crane's trolley, as set in the crane's properties, in specified acceleration units.

Parameters:
agent - an agent that's being transferred by the crane
units - a constant defining the acceleration units


Dimensions and components

Function

Description

double getCraneHeight()

Returns the overhead crane's height in pixels.

double getCraneHeight(LengthUnits units)

Returns the height of the overhead crane legs (if gantry type is selected) in specified units.

Parameter:
units - a constant defining the length units

void setCraneHeight(double craneHeight,
LengthUnits units)

Sets the height of the overhead crane legs (if gantry type is selected) in specified units.

Parameters:
craneHeight - a new height value
units - a constant defining the length units

double getCraneWidth()

Returns the crane's width in pixels.

double getCraneWidth(LengthUnits units)

Returns the crane's width in specified units.

Parameter:
units - a constant defining the length units

void setCraneWidth(double craneWidth,
LengthUnits units)

Sets the crane's width in specified units.

Parameters:
craneWidth - a new crane width value
units - a constant defining the length units

double getBridgeWidth()

Returns the width of the crane's bridge in pixels.

double getBridgeWidth(LengthUnits units)

Returns the width of the crane's bridge in specified units.

Parameter:
units - a constant defining the length units

void setBridgeWidth(double bridgeWidth,
LengthUnits units)

Sets the width of the crane's bridge.

Parameters:
bridgeWidth - a new bridge width value
units - a constant defining the length units

double getRunwayLength()

Returns the length of the crane's runway in pixels.

double getRunwayLength(LengthUnits units)

Returns the length of the crane's runway in specified units.

Parameter:
units - a constant defining the length units

void setRunwayLength(double runwayLength, LengthUnits units)

Sets the length of the crane's runway in specified units.

Parameters:
runwayLength - a new value of the crane's runway length
units - a constant defining the length units

void setInitialBridgePosition(double bridgePosition, LengthUnits units)

Sets the initial placement of the bridge in specified length units.

Parameters:
bridgePosition - distance from the starting point of the crane to the initial position of the bridge
units - a constant defining the length units

void setInitialHookPosition(double hookHeight, LengthUnits units)

Sets the initial height at which the hook is located in the specified length units.

Parameters:
hookHeight - the height at which the hook is located initially
units - a constant defining the length units

void setInitialTrolleyPosition(double trolleyPosition, LengthUnits units)

Sets the initial placement of the trolley in specified length units.

Parameters:
trolleyPosition - distance from the starting point of the crane to the initial position of the trolley
units - a constant defining the length units


Crane type

Function

Description

OverheadCraneType getType()

Returns the type of the crane's appearance.

Valid values are: OVERHEAD_CRANE_BRIDGE, OVERHEAD_CRANE_GANTRY.

void setType(OverheadCraneType type)

Sets the type of the crane's appearance.

Parameter:
type - new type of the crane's appearance. Valid values are: OVERHEAD_CRANE_BRIDGE, OVERHEAD_CRANE_GANTRY.

void setGirderType (OverheadCraneGirderDrawingType girderType)

Sets the bridge type for this crane: either a single flat or a double tie.

Parameter:
girderType - a new bridge type. Valid values are: OVERHEAD_CRANE_GIRDER_SINGLE, OVERHEAD_CRANE_GIRDER_DOUBLE.


Color

Function

Description

Color getColor()

Returns the color of the overhead crane, or null if the crane has no color.

void setColor(Color color)

Sets the color of the overhead crane./p>

Parameter:
color - the new color

Color getTrolleyColor()

Returns the color of the crane's trolley, or null if the crane's trolley has no color.

void setTrolleyColor(Color trolleyColor)

Sets the color of the crane's trolley.

Parameter:
trolleyColor - the new color


Visibility

Function

Description

boolean isVisible()

Returns true if the overhead crane is visible; returns false otherwise.

void setVisible(boolean v)

Sets the visibility of the overhead crane.

Parameter:
v - visibility. If v is true - the crane is set to be visible, if it is false - not visible.


Position

Function

Description

double getX()

Returns the X coordinate of the center point of the crane.

double getY()

Returns the Y coordinate of the center point of the crane.

double getZ()

Returns the Z coordinate of the center point of the crane.

Point getXYZ(Point out)

Returns the (X, Y, Z) coordinates of the center point of the given crane.

Parameter:
out - the output Point object to write the result to. The object may be null.


Removal

Function

Description

void remove()

Removes the overhead crane from the presentation. If the crane is not a part of presentation, the function does nothing. Note, that removal from the presentation does not necessarily mean removing from the model logic, since logical networks and routes may have been created before the removal and survive it.



Related topics

Space markup for material handling models

Material Handling Library

CraneProgram API

API reference: Crane class