AnyLogic AnyLogic
Expand
Font size

Class JibCrane<T extends Agent>

All Implemented Interfaces:
AggregatableAnimationElement, HasLevel, IMarkupLibraryDescriptor, LevelElement, LevelMarkup, com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T>, com.anylogic.engine.markup.material_handling.IMaterialFallible, com.anylogic.engine.markup.material_handling.IMaterialMarkupLibraryDescriptor, SVGElement, java.io.Serializable

public class JibCrane<T extends Agent>
extends Crane<T>
implements com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T>
See Also:
Serialized Form

Constructor Summary

Constructors 
JibCrane()  
JibCrane​(Agent owner, ShapeDrawMode drawMode, boolean isPublic, boolean isObstacle, com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T> descriptor, double x, double y, double z, double jibLengthMeters, double craneHeightMeters, double jibAngleRadians, double trolleyLocationMeters, boolean blockedZoneEnabled, double blockedZoneStartAngleRadians, double blockedZoneAngleRadians, java.awt.Color color, java.awt.Color cabinColor, JibCraneDrawingType type)
This method is internal and shouldn't be called by user.
it may be removed/renamed in future. It is public due to technical reasons.
JibCrane​(com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T> d)
Deprecated.
Constructor Description

Method Summary

All Methods Instance Methods Concrete Methods Deprecated Methods 
boolean contains​(double px, double py)
Test if the shape contains the point with the given coordinates (relative to this shape's container, i.e. in the same system with the coordinates of this shape, x and y)
void fail()
Sets the crane to failed state
Position getAbsoluteHookPosition()
Returns the current absolute hook position as an instance of Position in pixels.
double getBlockedZoneAngle​(AngleUnits units)
Returns the delta angle of the crane's blocked zone.
double getBlockedZoneStartAngle​(AngleUnits units)
Returns the initial angle of the crane's blocked zone.
BoundingRectangle getBoundingRectangle()  
java.awt.Color getCabinColor()
Returns the color of the crane's cabin
java.awt.Color getColor()
Returns the crane's color
double getCraneHeight()
Returns the crane's height in pixels.
double getCraneHeight​(LengthUnits units)
Returns the crane's height in the specified length units.
Position getCurrentHookPosition()
Returns the current relative hook position as an instance of Position in pixels.
Position getInitialHookPoint()
Returns the initial hook point in pixels, calculated according to the crane's dimensions and converted to pixels with crane's space.
Position getInitialHookPoint​(LengthUnits units)
Returns the initial hook point in the specified length units.
double getInitialHookPosition​(LengthUnits units)
Returns the initial offset of the crane's hook in the specified length units.
double getInitialJibAngle​(AngleUnits units)
Returns the initial jib angle.
double getInitialTrolleyPosition​(LengthUnits units)
Returns the initial offset of the crane's trolley in the specified length units.
double getJibLength()
Returns the crane's jib length in pixels.
double getJibLength​(LengthUnits units)
Returns the crane's jib length in the specified length units.
com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T> getLibraryDescriptor()  
double getLiftingSpeed​(SpeedUnits units)
Deprecated.
- will be deleted in the next release because the crane's motion parameters became dynamic.
JibCraneMovementMode getMovementMode()
Returns movement mode of the crane.
double getRotationSpeed​(RotationSpeedUnits units)
Deprecated.
- will be deleted in the next release because the crane's motion parameters became dynamic.
double getStatisticsStartTime()  
double getTrolleySpeed​(SpeedUnits units)
Deprecated.
- will be deleted in the next release because the crane's motion parameters became dynamic.
JibCraneDrawingType getType()
Returns the type of the crane.
double getUtilization()
Returns the crane utilization: the fraction of time the crane was operating.
boolean isBlockedZoneEnabled()
Returns true if the crane has enabled blocked zone and false otherwise.
boolean isFailed()
Returns true if the crane is failed and false otherwise.
boolean isLoaded()
Returns true if crane loaded.
boolean isObstacle()
Returns true if this crane is considered an obstacle by transporters moving in free space mode.
boolean isReady()
Returns true if the crane is ready to operate, i.e. idle and not failed.
double liftingSpeed​(T agent, boolean isLoaded, SpeedUnits units)
Returns the hoist speed specified by the parameter value of this crane in the specified units.
void onFailed()
Calls the crane's onFailed() callback code
void onLoading​(T agent)
Calls the crane's onLoading() callback code
void onRelease​(T agent)  
void onRepaired()
Calls the crane's onRepaired() callback code
void onSeize​(T agent)  
void onUnloading​(T agent)
Calls the crane's onUnloading() callback code
void repair()
Repairs the crane from failed state
void resetStats()
Resets the crane utilization statistics.
double rotationSpeed​(T agent, boolean isLoaded, RotationSpeedUnits units)
Returns the jib rotation speed specified by the parameter value of this crane in the specified units.
void setBlockedZone​(double startAngle, double deltaAngle, AngleUnits units)
Sets the specified blocked zone of the crane in the specified angle units.
void setBlockedZoneAngle​(double angle, AngleUnits units)
Sets the delta angle of the crane's blocked zone in the specified angle units and updates animation.
void setBlockedZoneEnabled​(boolean blockedZoneEnabled)
Enables the crane's blocked zone if the parameter is true and disables if false
void setBlockedZoneStartAngle​(double angle, AngleUnits units)
Sets the initial angle of the crane's blocked zone in the specified units and updates animation.
void setCabinColor​(java.awt.Color cabinColor)
Sets the specified color of the crane's cabin
void setColor​(java.awt.Color color)
Sets the specified color of the crane
void setCraneHeight​(double height, LengthUnits units)
Sets the crane's height in the specified length units and updates animation.
void setInitialHookPosition​(double hookPosition, LengthUnits units)
Sets the initial hook position in the specified length units.
void setInitialJibAngle​(double angle, AngleUnits units)
Sets the initial angle of the crane's jib in the specified angle units.
void setInitialTrolleyPosition​(double trolleyPosition, LengthUnits units)
Sets the initial offset of the crane's trolley in the specified length units.
void setJibLength​(double length, LengthUnits units)
Sets the crane's jib length in the specified length units and updates animation.
void setMovementMode​(JibCraneMovementMode movementMode)
Changes the movement mode on-the-go.
void setObstacle​(boolean isObstacle)
Sets this crane as an obstacle for transporters moving in free space mode.
void setType​(JibCraneDrawingType type)
Sets the type of the crane.
double trolleySpeed​(T agent, boolean isLoaded, SpeedUnits units)
Returns the trolley speed specified by the parameter value of this crane in the specified units.
void updateDynamicProperties()
Updates dynamic properties of this shape only (without structural contents, if any) in a given context.
Method should be overridden for shapes with dynamic properties.
Modifier and Type Method Description

Methods inherited from class com.anylogic.engine.markup.Crane

getX, getXYZ, getY, getZ, notifyDirtyState, setX, setXYZ, setY, setZ

Methods inherited from class com.anylogic.engine.markup.AbstractLevelMarkup

getDrawMode, getLevel, setLevel

Methods inherited from class com.anylogic.engine.markup.MarkupShape

error, getFullName, getOutsideLevelZ, getPresentable, getSpace, initialize, isClickHandled, isPublic, onClick, remove, setDrawMode, setOwner

Methods inherited from class com.anylogic.engine.markup.AbstractMarkup

discardOwner, executeUserAction, findSVGElement, getName, getSVGId, initializeInternal, isVisible, onAggregatorInitialized, onAggregatorVisibilityChanged, removeSVGFromOwner, resetSVGState, setVisible, updateDynamicPropertiesStructural, updateSVGProperties

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Methods inherited from interface com.anylogic.engine.markup.AggregatableAnimationElement

initializeInternal, onAggregatorVisibilityChanged, postInitialize

Methods inherited from interface com.anylogic.engine.markup.material_handling.IMaterialMarkupLibraryDescriptor

getMarkup, setMarkup

Constructor Detail

JibCrane

public JibCrane()

JibCrane

@AnyLogicInternalCodegenAPI
public JibCrane​(Agent owner,
                ShapeDrawMode drawMode,
                boolean isPublic,
                boolean isObstacle,
                com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T> descriptor,
                double x,
                double y,
                double z,
                double jibLengthMeters,
                double craneHeightMeters,
                double jibAngleRadians,
                double trolleyLocationMeters,
                boolean blockedZoneEnabled,
                double blockedZoneStartAngleRadians,
                double blockedZoneAngleRadians,
                java.awt.Color color,
                java.awt.Color cabinColor,
                JibCraneDrawingType type)
This method is internal and shouldn't be called by user.
it may be removed/renamed in future. It is public due to technical reasons.

JibCrane

@Deprecated
public JibCrane​(com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T> d)
Deprecated.
This method is deprecated and will be deleted in future release. Use JibCrane() instead.

Method Detail

isObstacle

public boolean isObstacle()
Returns true if this crane is considered an obstacle by transporters moving in free space mode. Otherwise, returns false.
Returns:
true if this crane is considered an obstacle by transporters moving in free space mode. Otherwise, returns false

setObstacle

public void setObstacle​(boolean isObstacle)
Sets this crane as an obstacle for transporters moving in free space mode.
Parameters:
isObstacle - - if true, the crane is set as an obstacle. Otherwise, not.

updateDynamicProperties

@AnyLogicInternalCodegenAPI
public void updateDynamicProperties()
Description copied from class: AbstractMarkup
Updates dynamic properties of this shape only (without structural contents, if any) in a given context.
Method should be overridden for shapes with dynamic properties. Note that you should call super.updateDynamicProperties() at the end of overridden method
Overrides:
updateDynamicProperties in class AbstractMarkup

isBlockedZoneEnabled

public boolean isBlockedZoneEnabled()
Returns true if the crane has enabled blocked zone and false otherwise.
Returns:
true if the crane has enabled blocked zone and false otherwise

isFailed

public boolean isFailed()
Returns true if the crane is failed and false otherwise.
Specified by:
isFailed in interface com.anylogic.engine.markup.material_handling.IMaterialFallible
Specified by:
isFailed in class Crane<T extends Agent>
Returns:
true if the crane is failed and false otherwise

fail

public void fail()
Sets the crane to failed state
Specified by:
fail in interface com.anylogic.engine.markup.material_handling.IMaterialFallible
Specified by:
fail in class Crane<T extends Agent>

repair

public void repair()
Repairs the crane from failed state
Specified by:
repair in interface com.anylogic.engine.markup.material_handling.IMaterialFallible
Specified by:
repair in class Crane<T extends Agent>

onFailed

public void onFailed()
Calls the crane's onFailed() callback code
Specified by:
onFailed in interface com.anylogic.engine.markup.material_handling.IMaterialFallible
Specified by:
onFailed in class Crane<T extends Agent>

onRepaired

public void onRepaired()
Calls the crane's onRepaired() callback code
Specified by:
onRepaired in interface com.anylogic.engine.markup.material_handling.IMaterialFallible
Specified by:
onRepaired in class Crane<T extends Agent>

trolleySpeed

public double trolleySpeed​(T agent,
                           boolean isLoaded,
                           SpeedUnits units)
Returns the trolley speed specified by the parameter value of this crane in the specified units. Note that this value does not correspond to the actual trolley speed if the carried agent is currently in the MoveByCrane block which has useOperationTime option enabled.
Specified by:
trolleySpeed in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Parameters:
agent - - the item that the crane is going to move. It is null when the crane moves without load.
isLoaded - - a flag that you can use to specify different values for the crane's movement with and without load.
units - - a constant defining the speed units
Returns:
trolley speed specified by the parameter value of this crane

liftingSpeed

public double liftingSpeed​(T agent,
                           boolean isLoaded,
                           SpeedUnits units)
Returns the hoist speed specified by the parameter value of this crane in the specified units. Note that this value does not correspond to the actual hoist speed if carried agent is in the MoveByCrane block which has useOperationTime option enabled.
Specified by:
liftingSpeed in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Parameters:
agent - - the item that the crane is going to move. It is null when the crane moves without load.
isLoaded - - a flag that you can use to specify different values for the crane's movement with and without load.
units - - a constant defining the speed units
Returns:
hoist speed specified by the parameter value of this crane

rotationSpeed

public double rotationSpeed​(T agent,
                            boolean isLoaded,
                            RotationSpeedUnits units)
Returns the jib rotation speed specified by the parameter value of this crane in the specified units. Note that this value does not correspond to actual jib rotation speed if the carried agent is in the MoveByCrane block which has useOperationTime option enabled.
Specified by:
rotationSpeed in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Parameters:
agent - - the item that crane is going to move. It is null when the crane moves without load.
isLoaded - - a flag that you can use to specify different values for the crane's movement with and without load.
units - - a constant defining the speed units
Returns:
jib rotation speed specified by the parameter value of this crane

getCraneHeight

public double getCraneHeight​(LengthUnits units)
Returns the crane's height in the specified length units.
Specified by:
getCraneHeight in class Crane<T extends Agent>
Parameters:
units - - a constant defining the length units
Returns:
crane's height in the specified units

getCraneHeight

public double getCraneHeight()
Returns the crane's height in pixels.
Specified by:
getCraneHeight in class Crane<T extends Agent>
Returns:
crane's height in pixels

getJibLength

public double getJibLength()
Returns the crane's jib length in pixels.
Returns:
crane's jib length in pixels

getJibLength

public double getJibLength​(LengthUnits units)
Returns the crane's jib length in the specified length units.
Parameters:
units - - a constant defining the length units
Returns:
crane's height in the specified units

getBlockedZoneAngle

public double getBlockedZoneAngle​(AngleUnits units)
Returns the delta angle of the crane's blocked zone.
Parameters:
units - - a constant defining the angle units
Returns:
delta angle of the crane's blocked zone in the specified units

getBlockedZoneStartAngle

public double getBlockedZoneStartAngle​(AngleUnits units)
Returns the initial angle of the crane's blocked zone.
Parameters:
units - - a constant defining the angle units
Returns:
initial angle of the crane's blocked zone in the specified units

setCraneHeight

public void setCraneHeight​(double height,
                           LengthUnits units)
Sets the crane's height in the specified length units and updates animation.
Parameters:
height - - the new crane's height
units - - a constant defining the length units

setJibLength

public void setJibLength​(double length,
                         LengthUnits units)
Sets the crane's jib length in the specified length units and updates animation.
Parameters:
lenght - - the new crane's jib length
units - - a constant defining the length units

setBlockedZoneAngle

public void setBlockedZoneAngle​(double angle,
                                AngleUnits units)
Sets the delta angle of the crane's blocked zone in the specified angle units and updates animation.
Parameters:
angle - - the new delta angle of the crane's blocked zone
units - - a constant defining the angle units

setBlockedZoneStartAngle

public void setBlockedZoneStartAngle​(double angle,
                                     AngleUnits units)
Sets the initial angle of the crane's blocked zone in the specified units and updates animation.
Parameters:
angle - - the new initial angle of the crane's blocked zone
units - - a constant defining the angle units

setBlockedZoneEnabled

public void setBlockedZoneEnabled​(boolean blockedZoneEnabled)
Enables the crane's blocked zone if the parameter is true and disables if false

getTrolleySpeed

@Deprecated
public double getTrolleySpeed​(SpeedUnits units)
Deprecated.
- will be deleted in the next release because the crane's motion parameters became dynamic. Use trolleySpeed(Agent, boolean, SpeedUnits) instead

getLiftingSpeed

@Deprecated
public double getLiftingSpeed​(SpeedUnits units)
Deprecated.
- will be deleted in the next release because the crane's motion parameters became dynamic. Use liftingSpeed(Agent, boolean, SpeedUnits) instead

getRotationSpeed

@Deprecated
public double getRotationSpeed​(RotationSpeedUnits units)
Deprecated.
- will be deleted in the next release because the crane's motion parameters became dynamic. Use #rotationSpeed(Agent, boolean, SpeedUnits) instead

getStatisticsStartTime

@AnyLogicInternalAPI
public double getStatisticsStartTime()
Specified by:
getStatisticsStartTime in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Specified by:
getStatisticsStartTime in class Crane<T extends Agent>

getUtilization

public double getUtilization()
Returns the crane utilization: the fraction of time the crane was operating. The returned crane utilization value lies in the range [0..1].
Specified by:
getUtilization in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Specified by:
getUtilization in class Crane<T extends Agent>

resetStats

public void resetStats()
Resets the crane utilization statistics.
Specified by:
resetStats in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Specified by:
resetStats in class Crane<T extends Agent>

getLibraryDescriptor

@AnyLogicInternalAPI
public com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T> getLibraryDescriptor()

contains

public boolean contains​(double px,
                        double py)
Description copied from class: MarkupShape
Test if the shape contains the point with the given coordinates (relative to this shape's container, i.e. in the same system with the coordinates of this shape, x and y)
Specified by:
contains in class MarkupShape
Parameters:
px - the x coordinate relative to this shape's container
py - the y coordinate relative to this shape's container
Returns:
true if the shape contains the point with the given coordinates

setBlockedZone

public void setBlockedZone​(double startAngle,
                           double deltaAngle,
                           AngleUnits units)
Sets the specified blocked zone of the crane in the specified angle units. Note that if the blocked zone is disabled, then it will be enabled by this method.
Parameters:
startAngle - - start angle of the crane's blocked zone
deltaAngle - - delta angle of the crane's blocked zone
units - - a constant defining the angle units

getCurrentHookPosition

public Position getCurrentHookPosition()
Returns the current relative hook position as an instance of Position in pixels. Also updates animation. Position.rotation contains the current jib angle. Use it any time or if x and y equal zero.
Specified by:
getCurrentHookPosition in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Returns:
current relative hook point in pixels with the jib's angle as Position.rotation

getAbsoluteHookPosition

public Position getAbsoluteHookPosition()
Returns the current absolute hook position as an instance of Position in pixels. Also updates animation. Position.rotation contains the current jib angle. Use it any time or if x and y equal zero.
Specified by:
getAbsoluteHookPosition in class Crane<T extends Agent>
Returns:
current absolute hook point in pixels with the jib's angle as Position.rotation

getInitialJibAngle

public double getInitialJibAngle​(AngleUnits units)
Returns the initial jib angle. Angle format is [-pi, pi].
Parameters:
units - - a constant defining the angle units
Returns:
initial jib angle. Angle format is [-pi, pi]

getInitialHookPoint

@AnyLogicInternalAPI
public Position getInitialHookPoint​(LengthUnits units)
Returns the initial hook point in the specified length units.
Specified by:
getInitialHookPoint in class Crane<T extends Agent>
Parameters:
units - - a constant defining the length units
Returns:
initial hook point in the specified LengthUnits

getInitialHookPoint

@AnyLogicInternalAPI
public Position getInitialHookPoint()
Returns the initial hook point in pixels, calculated according to the crane's dimensions and converted to pixels with crane's space.
Specified by:
getInitialHookPoint in class Crane<T extends Agent>
Returns:
initial hook point in pixels

isReady

public boolean isReady()
Returns true if the crane is ready to operate, i.e. idle and not failed.
Specified by:
isReady in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Specified by:
isReady in class Crane<T extends Agent>
Returns:
true if the crane is ready to operate, i.e. idle and not failed

onLoading

public void onLoading​(T agent)
Calls the crane's onLoading() callback code
Specified by:
onLoading in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Specified by:
onLoading in class Crane<T extends Agent>

onUnloading

public void onUnloading​(T agent)
Calls the crane's onUnloading() callback code
Specified by:
onUnloading in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Specified by:
onUnloading in class Crane<T extends Agent>

onSeize

public void onSeize​(T agent)
Specified by:
onSeize in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>

onRelease

public void onRelease​(T agent)
Specified by:
onRelease in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>

setMovementMode

public void setMovementMode​(JibCraneMovementMode movementMode)
Changes the movement mode on-the-go.
Specified by:
setMovementMode in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Parameters:
movementMode - - movement mode of the crane. Possible values are: JIB_CRANE_MOVEMENT_STEP_BY_STEP, JIB_CRANE_MOVEMENT_CONCURRENT

getMovementMode

public JibCraneMovementMode getMovementMode()
Returns movement mode of the crane. Possible values are: JIB_CRANE_MOVEMENT_STEP_BY_STEP, JIB_CRANE_MOVEMENT_CONCURRENT.
Specified by:
getMovementMode in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Returns:
movement mode of the crane. Possible values are: JIB_CRANE_MOVEMENT_STEP_BY_STEP, JIB_CRANE_MOVEMENT_CONCURRENT

getColor

public java.awt.Color getColor()
Returns the crane's color
Returns:
crane's color

setColor

public void setColor​(java.awt.Color color)
Sets the specified color of the crane
Parameters:
color - - specified color of the crane

getCabinColor

public java.awt.Color getCabinColor()
Returns the color of the crane's cabin
Returns:
color of the crane's cabin

setCabinColor

public void setCabinColor​(java.awt.Color cabinColor)
Sets the specified color of the crane's cabin
Parameters:
cabinColor - - specified color. Use null to hide the cabin.

setInitialJibAngle

public void setInitialJibAngle​(double angle,
                               AngleUnits units)
Sets the initial angle of the crane's jib in the specified angle units.
Parameters:
angle - - the new initial angle of the crane's jib
units - - a constant defining the angle units

setInitialTrolleyPosition

public void setInitialTrolleyPosition​(double trolleyPosition,
                                      LengthUnits units)
Sets the initial offset of the crane's trolley in the specified length units.
Parameters:
trolleyPosition - - the new offset of the crane's trolley
units - - a constant defining the length units

setInitialHookPosition

public void setInitialHookPosition​(double hookPosition,
                                   LengthUnits units)
Sets the initial hook position in the specified length units.
Parameters:
hookPosition - - the new height of the crane's hook
units - - a constant defining the length units

getInitialTrolleyPosition

public double getInitialTrolleyPosition​(LengthUnits units)
Returns the initial offset of the crane's trolley in the specified length units.
Parameters:
units - - a constant defining the length units

getInitialHookPosition

public double getInitialHookPosition​(LengthUnits units)
Returns the initial offset of the crane's hook in the specified length units.
Parameters:
units - - a constant defining the length units

getType

public JibCraneDrawingType getType()
Returns the type of the crane.
Possible values are:
JIB_CRANE_INDUSTRIAL
JIB_CRANE_CAT_HEAD
JIB_CRANE_FLAT_TOP
Returns:
type of the crane

setType

public void setType​(JibCraneDrawingType type)
Sets the type of the crane.
Possible values are:
JIB_CRANE_INDUSTRIAL
JIB_CRANE_CAT_HEAD
JIB_CRANE_FLAT_TOP
Parameters:
type - - crane's type

getBoundingRectangle

@AnyLogicInternalAPI
public BoundingRectangle getBoundingRectangle()

isLoaded

public boolean isLoaded()
Returns true if crane loaded. Crane is loaded after loading process finished and until unloading finished.
Specified by:
isLoaded in interface com.anylogic.engine.markup.material_handling.IJibCraneDescriptor<T extends Agent>
Returns:
true if crane loaded. Crane is loaded after loading process finished and until unloading finished
How can we improve this article?