Cables#

class Cable(**kwds)#
Creates a cable.

The cable receives input/output (Winch, Anchor) elements and a variable number of Pulley elements, wrapping around them in an open-track configuration. If only pulleys are provided, the resulting cable track is closed.

The effects of the longitudinal tension coupling between the track components are represented by a number of bodies, joints, motions and forces. Pulley sliding contact and disengagement are considered.

Warning

To instantiate a Cable, Winch, Pulley and Anchor instances need be present in the model first. For a closed-track assembly, only Pulleys are required (minimum of two), while for an open-track, at least one Pulley is required along with two input/output components (Winch, Anchor).

Note

After creating a Cable passing in a combination of the Winch, Pulley and Anchor, any changes to values of attributes belonging to any of these component instances, will be automatically propagated to the Cable instance, upon sending to the solver or calling Summary on the Cable.

Example

Create an open-track, single-pulley Cable assembly, featuring a Winch and an Anchor.#
from msolve import *
from msolve.machinery.cables.winches import Winch
from msolve.machinery.cables.pulleys import Pulley
from msolve.machinery.cables.anchors import Anchor
from msolve.machinery.cables.cables import Cable

model = Model(output="single_pulley_cable")

ground = Part(ground=True)
global_ref = Marker(body=ground)

Units(mass="KILOGRAM", length="MILLIMETER", time="SECOND", force="NEWTON")
Accgrav(kgrav=-9.81)

winch_base = Part(ip=[5.0, 5.0, 5.0, 0.0, 0.0, 0.0], mass=0.001,
                  cm=Marker(qp=[0.0, 100.0, 600.0], zv=[0.0, 0.0, 1.0], xv=[1.0, 0.0, 0.0]))
pulley_base = Part(ip=[5.0, 5.0, 5.0, 0.0, 0.0, 0.0], mass=0.001,
                   cm=Marker(qp=[600.0, 200.0, 800.0], zv=[0.0, 0.0, 1.0], xv=[1.0, 0.0, 0.0]))
anchor_base = Part(ip=[10000.0, 10000.0, 10000.0, 0.0, 0.0, 0.0], mass=10.0,
                   cm=Marker(qp=[1000.0, 200.0, 300.0], zv=[0.0, 0.0, 1.0], xv=[1.0, 0.0, 0.0]))

winch_rm = Marker(body=winch_base, qp=[0.0, 100.0, 600.0], zv=[0.0, 0.0, 1.0], xv=[1.0, 0.0, 0.0])
pulley_rm = Marker(body=pulley_base, qp=[600.0, 200.0, 800.0], zv=[0.0, 1.0, 0.0], xv=[-1.0, 0.0, 0.0])
anchor_rm = Marker(body=anchor_base, qp=[1000.0, 200.0, 300.0], zv=[0.0, 0.0, 1.0], xv=[1.0, 0.0, 0.0])

jt_winch = Joint(type="FIXED",
                 i=Marker(body=winch_base, qp=[0.0, 100.0, 600.0], zv=[0.0, 0.0, 1.0], xv=[1.0, 0.0, 0.0]),
                 j=Marker(body=ground, qp=[0.0, 100.0, 600.0], zv=[0.0, 0.0, 1.0], xv=[1.0, 0.0, 0.0]))
jt_pull = Joint(type="FIXED",
                i=Marker(body=pulley_base, qp=[600.0, 200.0, 800.0], zv=[0.0, 0.0, 1.0], xv=[1.0, 0.0, 0.0]),
                j=Marker(body=ground, qp=[600.0, 200.0, 800.0], zv=[0.0, 0.0, 1.0], xv=[1.0, 0.0, 0.0]))

winch_0 = Winch(rm=winch_rm, att_body=winch_base,  dc=10.0, radius=50.0, width=100.0, ini_wlength=20000.0,
                motion_type="DoubleStep", amplitude=2.0, date_fwd=1.0, date_rev=3.0, delay=2.0,
                connection_type="Revolute", mass=20.0)

pulley_0 = Pulley(rm=pulley_rm, att_body=pulley_base, dc=10.0, angle=40.0, radius=100.0, depth=15.0,
                  width=35.0, cradius=10.0, mass=2.0, sliding_locking=True, connection_type="Revolute")

anchor_0 = Anchor(rm=anchor_rm, att_body=anchor_base, dc=10.0, gra_size=100.0)

cable_0 = Cable(rm=global_ref, components=[winch_0, pulley_0, anchor_0], liftoff_coeff=0.001,
                ini_preload=9810.0, damping_ratio=1.0, cable_mass=1.0, stiffness=100000.0, dc=10.0,
                contact_stiffness=10000.0, contact_exponent=1.0, contact_damping=100.0, contact_depth=0.1,
                contact_mu=0.5, contact_vt=1.0, force_graphics=True, frc_gra_scale=0.01)

Name

Type

Symbol

Required

Default

Modifiable

active

Bool

True

\(\checkmark\)

cable_mass

Double

\(m\)

1.0

components

Reference - MachineryComponent [0]

contact_damping

Double

\(c\)

100.0

contact_depth

Double

\(d\)

0.1

contact_exponent

Double

\(e\)

1.0

contact_mu

Double

\(\mu\)

0.5

contact_stiffness

Double

\(k\)

10000.0

contact_vt

Double

\(v_{t}\)

1.0

damping_ratio

Double

1.0

dc

Double

\(d_{c}\)

10.0

force_graphics

Bool

False

frc_gra_scale

Double

0.01

id

Int

Auto

ini_preload

Double

9810.0

ini_vel

Double

0.0

label

Str

liftoff_coeff

Double

0.001

name

Str

rm

Reference - Marker

\(\checkmark\)

stiffness

Double

\(K\)

100000.0

active#

Defines the state of the object.

Type=Bool, Default=True, Modifiable

cable_mass#

The cable mass.

Type=Double, Default=1.0

components#

Type=Reference (MachineryComponent) [0]

contact_damping#

The contact damping.

Type=Double, Default=100.0

contact_depth#

The contact depth.

Type=Double, Default=0.1

contact_exponent#

Type=Double, Default=1.0

contact_mu#

The contact friction.

Type=Double, Default=0.5

contact_stiffness#

The contact stiffness.

Type=Double, Default=10000.0

contact_vt#

The contact transition velocity.

Type=Double, Default=1.0

damping_ratio#

Type=Double, Default=1.0

dc#

The diameter of the cable wrapped around the pulley.

Type=Double, Default=10.0

force_graphics#

Type=Bool, Default=False

frc_gra_scale#

Type=Double, Default=0.01

id#

The id of the object.

Type=Int

ini_preload#

The initial preload of the cable.

Type=Double, Default=9810.0

ini_vel#

The initial velocity.

Type=Double, Default=0.0

label#

The label of the composite element.

Type=Str

liftoff_coeff#

The lift-off coefficient of the cable.

Type=Double, Default=0.001

name#

Defines a nametag for the object.

Type=Str

rm#

The reference marker of the composite element.

Type=Reference (Marker), Required

stiffness#

The stiffness of the cable.

Type=Double, Default=100000.0

class Winch(**kwds)#
Creates a winch.

A winch element can be used to attach one end of a cable, wrapping or unwrapping it around itself, in a winding or unwinding motion accordingly:

Name

Type

Symbol

Required

Default

Modifiable

active

Bool

True

\(\checkmark\)

amplitude

Double

\(A\)

0

att_body

Reference - Part

\(\checkmark\)

connection

Reference - Connection

connection_type

Enum

REVOLUTE

date_fwd

Double

\(T_{f}\)

0

date_rev

Double

\(T_{r}\)

0

dc

Double

10.0

delay

Double

\(T_{d}\)

0

id

Int

Auto

ini_wlength

Double

10000.0

label

Str

mass

Double

\(m\)

0.0

motion_function

Str

0

motion_type

Enum

DoubleStep

name

Str

radius

Double

\(R\)

\(\checkmark\)

rm

Reference - Marker

\(\checkmark\)

width

Double

\(W\)

20.0

active#

Defines the state of the object.

Type=Bool, Default=True, Modifiable

amplitude#

The amplitude of the winch motion defined in number of revolutions.Used only when motion_type is set to ‘DoubleStep’.

Type=Double, Default=0

att_body#

The part to which the winch is attached.

Type=Reference (Part), Required, Default=base_body

connection#

Connection related.

Type=Reference (Connection)

connection_type#

The type of joint used to constrain the winch to the attachment body.

Type=Enum, Default=REVOLUTE

Permitted values are:

  • CYLINDRICAL

  • REVOLUTE

date_fwd#

The start time for the winding step function of the winch. Used only when motion_type is set to ‘DoubleStep’.

Type=Double, Default=0

date_rev#

The start time for the unwinding step function of the winch. Used only when motion_type is set to ‘DoubleStep’.

Type=Double, Default=0

dc#

The diameter of the cable wrapped around the winch.

Type=Double, Default=10.0

delay#

Type=Double, Default=0

id#

The id of the object.

Type=Int

ini_wlength#

The initial wrapped length of the winch.

Type=Double, Default=10000.0

label#

A string describing the object.

Type=Str

mass#

The mass.

Type=Double, Default=0.0

motion_function#

The user defined expression for the winch motion. Used only when motion_type is set to ‘Used Defined’.

Type=Str, Default=0

motion_type#

The type of user input for the definition of the winch motion.

Type=Enum, Default=DoubleStep

Permitted values are:

  • DoubleStep

  • UserDefined

name#

Defines a nametag for the object.

Type=Str

radius#

The winch radius.

Type=Double, Required, Default=50.0

rm#

Reference marker, used for positioning.

Type=Reference (Marker), Required

width#

The winch axial width.

Type=Double, Default=20.0

class Pulley(**kwds)#
Creates a pulley.

A pulley element, that a cable wraps around, can be used to change the direction of the load applied to the cable.

The Pulley is defined by the following dimensions (see Comment 2):

Geometry of a pulley.

Pulley profile geometry.#

Name

Type

Symbol

Required

Default

Modifiable

active

Bool

True

\(\checkmark\)

angle

Double

\(A\)

40.0

att_body

Reference - Part

\(\checkmark\)

connection

Reference - Connection

connection_type

Enum

REVOLUTE

cradius

Double

\(C\)

7.5

dc

Double

\(d_{c}\)

10.0

depth

Double

\(D\)

10.0

id

Int

Auto

label

Str

mass

Double

\(m\)

0.0

name

Str

radius

Double

\(R\)

100.0

rm

Reference - Marker

\(\checkmark\)

sliding_locking

Bool

True

width

Double

\(W\)

40.0

active#

Defines the state of the object.

Type=Bool, Default=True, Modifiable

angle#

The profile angle of the pulley.

Type=Double, Default=40.0

att_body#

The part to which the pulley is attached.

Type=Reference (Part), Required, Default=base_body

connection#

Connection related.

Type=Reference (Connection)

connection_type#

The type of joint used to constrain the pulley to the attachment body.

Type=Enum, Default=REVOLUTE

Permitted values are:

  • CYLINDRICAL

  • REVOLUTE

cradius#

The profile radius of the pulley.

Type=Double, Default=7.5

dc#

The diameter of the cable wrapped around the pulley.

Type=Double, Default=10.0

depth#

The profile depth of the pulley.

Type=Double, Default=10.0

id#

The id of the object.

Type=Int

label#

A string describing the object.

Type=Str

mass#

The mass.

Type=Double, Default=0.0

name#

Defines a nametag for the object.

Type=Str

radius#

The pulley radius.

Type=Double, Default=100.0

rm#

Reference marker, used for positioning.

Type=Reference (Marker), Required

sliding_locking#

Sliding locking activation flag.

Type=Bool, Default=True

width#

The profile width of the pulley.

Type=Double, Default=40.0

class Anchor(**kwds)#
Creates an Anchor.

An anchor element can be used to attach one end of a cable, and represents a fixed connection between the anchor and the attaching body:

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

att_body

Reference - Part

\(\checkmark\)

connection

Reference - Connection

dc

Double

10.0

density

Double

0.0

gra_size

Double

100.0

id

Int

Auto

label

Str

mass

Double

0.0

name

Str

rm

Reference - Marker

\(\checkmark\)

wradius

Double

0.0

active#

Defines the state of the object.

Type=Bool, Default=True, Modifiable

att_body#

The part to which the anchor is attached.

Type=Reference (Part), Required, Default=base_body

connection#

Connection related.

Type=Reference (Connection)

dc#

The diameter of the cable wrapped around the pulley.

Type=Double, Default=10.0

density#

The density.

Type=Double, Default=0.0

gra_size#

The graphic radius of the anchor.

Type=Double, Default=100.0

id#

The id of the object.

Type=Int

label#

A string describing the object.

Type=Str

mass#

The mass.

Type=Double, Default=0.0

name#

Defines a nametag for the object.

Type=Str

rm#

Reference marker, used for positioning.

Type=Reference (Marker), Required

wradius#

The wrapped radius of the anchor.

Type=Double, Default=0.0