Dual crane (2-Hook) lifts#
This is a step-by-step description for performing dual crane or 2-Hook lift analysis.
A 2-Hook lift analysis is the same as a single hook lift analysis but with some additional variations (load-cases) performed.
The settings required for a 2-Hook lift are outlined in this section.
Just like for normal lifts, we need a Rigging Analysis
node as well as a Rigging analysis
section in the report.
An example model at the bottom of this section can be copy-pasted into DAVE if you wish to follow along.
Lifted object#
In the rigging-analysis node, select which of the nodes represents the lifted object.
Hoists#
For a dual crane lift the two hoists need to be defined in the Rigging Analysis node:
The first hoist (Bow hoist in this example) will be changed in height during reporting. The second hoist will remain at the same elevation.
If you have only one hoist but do still want to analyze the system as if it was a dual crane lift, for example because one end of the cargo is support on trailers, then select only Hoist 1 and check the “Treat as 2-Hook lift even if only one hoist is present”-box.
Hook elevation difference#
By default DNV prescribes a hook elevation difference of 1.0m or 3 degrees, whichever is governing. The values may be changed by the user.
The analysis will start with the hook elevations as they are when starting the analysis. So minimize the tilt between the cranes before running the analysis. The button “auto elevation hoist 1” can be used to bring the system to a minimum tilt.
From these starting elevations, a hoist 1 will be lowered by the specified amount (default, 1m).
In this new situation the tilt is calculated. If it exceeds the 3 degrees (or any other specified amount) then the elevation difference in meters is governing. If the tilt is less than 3 degrees, then the hoist elevation difference [m] is increased till the specified amount of tilt is reached.
(To enforce one of the values to be governing, simply set the other to a very low value).
Entering a non-default value will list the user defined values in the “global factors” section.
Tilt Axis#
Select the local axis about which the tilt changes if the block heights change.
In the example the object will rotate about its green (Y) axis, so this needs to be set to ‘y’.
Once this is selected, you may use the “Auto elevation hoist 1” button to change the elevation of hoist 1 such that the cargo is at zero tilt. If the cargo is not level at the start of the rigging analysis then this will be done automatically.
Crane slew#
If two cranes are used then the slew on one of those may be released to automatically slew. Checking the “AUTO” box effectively releases the slewing brake of that crane.
Attention: If the cranes are on a ship, and the ship is not level, then the weight of the crane-boom will affect the slewing angle if the brake is released.
Analysis settings#
By default the dual crane analysis will be performed up till a hook-height deviation of 1m or a lifted object tilt of 3 degrees (whichever is reached first).
Again, this variation is performed on the hoist defined as Hoist 1
in the rigging analysis. The other hoist is left unchanged.
In this example the right hoist is hoist 1. The load-cases presented below are the loadcases for maximum and minimum tilt about the y axis of the lifted object.
Example:
# This is an example file for dual-crane lifts,
# you may copy-paste this into DAVE to thet this example model
def solved(number):
return number
this_crane = Crane(s, name = "Bow crane")
this_crane.path = r"res: crane example.crane.csv"
this_crane.position = (50.0,0.0,0.0)
this_crane.rotation = (0.0,0.0,0.0)
this_crane.fixed = (True,True,True,True,True,True)
this_crane.auto_slew = False
this_crane.slew = -90.000
this_crane.jib_angle = 0.000
this_crane.boom_extension = 0.000
this_crane.boom_angle = 30.000
this_crane = Crane(s, name = "Stern crane")
this_crane.path = r"res: crane example.crane.csv"
this_crane.position = (0.0,0.0,0.0)
this_crane.rotation = (0.0,0.0,0.0)
this_crane.fixed = (True,True,True,True,True,True)
this_crane.auto_slew = True
this_crane.slew = -81.925
this_crane.jib_angle = 0.000
this_crane.boom_extension = 0.000
this_crane.boom_angle = 30.000
# code for Lifted Object
s.new_rigidbody(name='Lifted Object',
mass=1000,
cog=(0,
0,
0),
position=(solved(26.979730211969695),
solved(-35.13187227283414),
solved(-20.162995460326606)),
rotation=(solved(0.0105627),
solved(-3.57215e-05),
solved(-0.387525)),
fixed =(False, False, False, False, False, False),
)
liftpoint = LiftPoint(s, 'LP1')
liftpoint.mass=-0.000
liftpoint.cog=(0.000,0.000,0.000)
liftpoint.parent='Lifted Object'
liftpoint.position = (30.000,0.000,6.000)
liftpoint.rotation = (0.000,0.000,0.000)
liftpoint.fixed =(True, True, True, True, True, True)
s['LP1'].footprint = ((0.0, 0.0, 0.0), (0.5, 0.0, 0.0))
liftpoint.offset_h = 0.500
liftpoint.offset_v = 0.300
liftpoint.width = 0.100
liftpoint.diameter = 0.100
liftpoint.liftpoint_type = LiftPointType.PADEYE
liftpoint = LiftPoint(s, 'LP2')
liftpoint.mass=-0.000
liftpoint.cog=(0.000,0.000,0.000)
liftpoint.parent='Lifted Object'
liftpoint.position = (15.000,0.000,6.000)
liftpoint.rotation = (0.000,0.000,0.000)
liftpoint.fixed =(True, True, True, True, True, True)
s['LP2'].footprint = ((0.0, 0.0, 0.0), (0.5, 0.0, 0.0))
liftpoint.offset_h = 0.500
liftpoint.offset_v = 0.300
liftpoint.width = 0.100
liftpoint.diameter = 0.100
liftpoint.liftpoint_type = LiftPointType.PADEYE
liftpoint = LiftPoint(s, 'LP3')
liftpoint.mass=-0.000
liftpoint.cog=(0.000,0.000,0.000)
liftpoint.parent='Lifted Object'
liftpoint.position = (-15.000,0.000,6.000)
liftpoint.rotation = (0.000,0.000,0.000)
liftpoint.fixed =(True, True, True, True, True, True)
s['LP3'].footprint = ((0.0, 0.0, 0.0), (0.5, 0.0, 0.0))
liftpoint.offset_h = 0.500
liftpoint.offset_v = 0.300
liftpoint.width = 0.100
liftpoint.diameter = 0.100
liftpoint.liftpoint_type = LiftPointType.PADEYE
liftpoint = LiftPoint(s, 'LP4')
liftpoint.mass=-0.000
liftpoint.cog=(0.000,0.000,0.000)
liftpoint.parent='Lifted Object'
liftpoint.position = (-30.000,0.000,6.000)
liftpoint.rotation = (0.000,0.000,0.000)
liftpoint.fixed =(True, True, True, True, True, True)
s['LP4'].footprint = ((0.0, 0.0, 0.0), (0.5, 0.0, 0.0))
liftpoint.offset_h = 0.500
liftpoint.offset_v = 0.300
liftpoint.width = 0.100
liftpoint.diameter = 0.100
liftpoint.liftpoint_type = LiftPointType.PADEYE
# code for Visual
s.new_visual(name='Visual',
parent='Lifted Object',
path=r'res: plane_curved.stl',
offset=(0, 0, 0),
rotation=(90, 0, 0),
scale=(1.5, 0.25, 0.4) )
this_hoist = Hoist(s, 'Bow hoist')
this_hoist.load_hook('res: hoist_example.hoist.dave', target = 'Bow crane/hoist_locations/main')
this_hoist.wire_length = 40.070
this_hoist = Hoist(s, 'Stern hoist')
this_hoist.load_hook('res: hoist_example.hoist.dave', target = 'Stern crane/hoist_locations/main')
this_hoist.wire_length = 40.000
r = RiggingString(s, name = "system",
upper = ("Stern hoist/Block2p/prong3_sheave"),
lower = ("LP4/circle"))
model = """
cables:
- EA: -1
MBL_total: -1
diameter: 20.0
eyeA_length: 0.0
eyeB_length: 0.0
kgm: -1
label: '#4 Remarks'
length: 15.0
length_definition: Ultimate length
n_points: 3
rigging_analysis_data:
consequence: 1.3
lifting: 1.2
material: 1.5
termination: 1.0
wear_and_application: 1
routing:
- false
- false
spliceA_length: 0.0
spliceB_length: 0.0
type: Grommet
wire_type: Steel IWRC
connections:
- do_reverse_optimum: false
from:
i_cable: 0
i_point: 0
kind: cable
to:
i_circle: 0
kind: circle
- do_reverse_optimum: false
from:
i_circle: 1
kind: circle
to:
i_shackle: 0
kind: shackle
location: bottom
- do_reverse_optimum: false
from:
i_cable: 0
i_point: 2
kind: cable
to:
i_shackle: 0
kind: shackle
location: top
linear_L0: null
linear_info: Not linearized yet
linear_k: null
linear_weight: null
shackles:
- kind: GP800
label: '#8 '
orientation: 0
"""
r.load_model(model)
r.full_representation = True
r = RiggingString(s, name = "system2",
upper = ("Stern hoist/Block2p/prong1_sheave"),
lower = ("LP3/circle"))
model = """
cables:
- EA: -1
MBL_total: -1
diameter: 20.0
eyeA_length: 0.0
eyeB_length: 0.0
kgm: -1
label: '#1 Remarks'
length: 15.0
length_definition: Ultimate length
n_points: 3
rigging_analysis_data:
consequence: 1.3
lifting: 1.2
material: 1.5
termination: 1.0
wear_and_application: 1
routing:
- false
- false
spliceA_length: 0.0
spliceB_length: 0.0
type: Grommet
wire_type: Steel IWRC
connections:
- do_reverse_optimum: false
from:
i_cable: 0
i_point: 0
kind: cable
to:
i_circle: 0
kind: circle
- do_reverse_optimum: false
from:
i_circle: 1
kind: circle
to:
i_shackle: 0
kind: shackle
location: bottom
- do_reverse_optimum: false
from:
i_cable: 0
i_point: 2
kind: cable
to:
i_shackle: 0
kind: shackle
location: top
linear_L0: null
linear_info: Not linearized yet
linear_k: null
linear_weight: null
shackles:
- kind: GP800
label: '#7 '
orientation: 0
"""
r.load_model(model)
r.full_representation = True
r = RiggingString(s, name = "system3",
upper = ("Bow hoist/Block2p/prong3_sheave"),
lower = ("LP2/circle"))
model = """
cables:
- EA: -1
MBL_total: -1
diameter: 20.0
eyeA_length: 0.0
eyeB_length: 0.0
kgm: -1
label: '#2 Remarks'
length: 15.0
length_definition: Ultimate length
n_points: 3
rigging_analysis_data:
consequence: 1.3
lifting: 1.2
material: 1.5
termination: 1.0
wear_and_application: 1
routing:
- false
- false
spliceA_length: 0.0
spliceB_length: 0.0
type: Grommet
wire_type: Steel IWRC
connections:
- do_reverse_optimum: false
from:
i_cable: 0
i_point: 0
kind: cable
to:
i_circle: 0
kind: circle
- do_reverse_optimum: false
from:
i_circle: 1
kind: circle
to:
i_shackle: 0
kind: shackle
location: bottom
- do_reverse_optimum: false
from:
i_cable: 0
i_point: 2
kind: cable
to:
i_shackle: 0
kind: shackle
location: top
linear_L0: null
linear_info: Not linearized yet
linear_k: null
linear_weight: null
shackles:
- kind: GP800
label: '#6 '
orientation: 0
"""
r.load_model(model)
r.full_representation = True
r = RiggingString(s, name = "system4",
upper = ("Bow hoist/Block2p/prong1_sheave"),
lower = ("LP1/circle"))
model = """
cables:
- EA: -1
MBL_total: -1
diameter: 20.0
eyeA_length: 0.0
eyeB_length: 0.0
kgm: -1
label: '#3 Remarks'
length: 15.0
length_definition: Ultimate length
n_points: 3
rigging_analysis_data:
consequence: 1.3
lifting: 1.2
material: 1.5
termination: 1.0
wear_and_application: 1
routing:
- true
- true
spliceA_length: 0.0
spliceB_length: 0.0
type: Grommet
wire_type: Steel IWRC
connections:
- do_reverse_optimum: false
from:
i_cable: 0
i_point: 0
kind: cable
to:
i_circle: 0
kind: circle
- do_reverse_optimum: false
from:
i_circle: 1
kind: circle
to:
i_shackle: 0
kind: shackle
location: bottom
- do_reverse_optimum: false
from:
i_cable: 0
i_point: 2
kind: cable
to:
i_shackle: 0
kind: shackle
location: top
linear_L0: null
linear_info: Not linearized yet
linear_k: null
linear_weight: null
shackles:
- kind: GP800
label: '#5 '
orientation: 0
"""
r.load_model(model)
r.full_representation = True
# Rigging Analysis
ra = RiggingAnalysis(s, "Rigging Analysis")
ra.WCF = 1
ra.COGIF = 1
ra.DAF = 1
ra.SKEW = 1
ra.YAW = 1
ra.enforce_dual_crane = False
ra.lifted_object = s["Lifted Object"]
ra.hoist1 = s["Bow hoist"]
ra.hoist2 = s["Stern hoist"]
ra.dual_crane_tilt_axis = "y"
# Reports
# Exporting report report
report_contents = r"""
- author: DAVE Manual
date: ''
name: report
number: DUAL-CRANE-EXAMPLE
project: Example projects
store_intermediate_results_folder: null
title: Report title
type: General_report_data
version: '1.0'
- AutoSkew: false
DefaultDelta: 2.0
DoFriction: true
FrictionConfiguration:
system/Grommet1: -1
system2/Grommet1: -1
system3/Grommet1: -1
system4/Grommet1: -1
pairs: []
smart: true
type: RiggingAnalysisSection
"""
s.reports.append(Report(s,yml=report_contents))