-
Notifications
You must be signed in to change notification settings - Fork 0
Mechanical Analyses
The geometry informed characteristics encompass the analyses that rely on the tether's construction to be calculate. Each is its own standalone function that can be used to provide more information, but the high-level results can also be viewed using the RoundTetherDesign.tetherDetails()
function.
The RoundTetherDesign class has a calculateMass()
function which traverses the tree layer by layer and calculates the mass from the layer's volume and density of its material. This function is run on construction of the RoundTetherDesign object, but can also be run standalone for more information.
This function has only two, optional, arguments:
- breakdown: Toggles returning a matrix of layer specific mass information for the tether. Defaults to False.
- verbose: Prints the aforementioned matrix in a more human-readable format. Defaults to false.
An example of calculating the mass information for a given tether design with an abbreviated output (which can get quite long) is shown below using the same tether design from the Quick Start page:
from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign
# Construct a kapton insulated copper wire
conductor = Layer("copper", "Conductor", 0.25)
insulator = Wire("electrical", "kapton", "Kapton Wire", 0.15, innerLayer=conductor)
# Arrange the wires in a list
wireList = [insulator, insulator, insulator, insulator]
# Build the layers of the tether
core = Layer("fep", "Core", 0.25, color="black")
memLayer = Layer("fep", "Wires", 0.1, innerLayer=core, memberList=wireList)
strength_layer = Layer("vectran_kuraray_ht", "strength_layer", 0.15, innerLayer=memLayer)
abrasionLayer = Layer("ptfe", "abrasion", 0.2, innerLayer=strength_layer)
# Pass to a tether design object
tether = RoundTetherDesign("Example", abrasionLayer, 100)
# Calculate mass &
mass = tether.calculateMass(breakdown=False, verbose=True)
The strength analysis within the tools is split into two different analyses which define estimates for the upper and lower bounds on the tether's strength, expressed in newtons. Both analyses, unhelixStrength()
and straightRunStrength()
are run automatically when creating a RoundTetherDesign object and correspond to its strengthUpperBound
and strengthLowerBound
members respectively.
The upper bound estimate is the RoundTetherDesign.unhelixStrength()
function, which calculates the breaking force from the yield stress/strain assuming helixed layers would see load only after the tether has stretched some amount. Layers only contribute if their length is less than or equal to the first yield strain reach by the materials. This analysis has two arguments:
- output: Whether to print the analysis results in addition to returning the value. Defaults to True.
- verbose: Whether to include a per-layer breakdown on strength contribution when output is True. Defaults to False.
An example of the unhelixStrength
analysis can be seen below using the example tether design from the quick start section:
from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign
# Construct a kapton insulated copper wire
conductor = Layer("copper", "Conductor", 0.25)
insulator = Wire("electrical", "kapton", "Kapton Wire", 0.15, innerLayer=conductor)
# Arrange the wires in a list
wireList = [insulator, insulator, insulator, insulator]
# Build the layers of the tether
core = Layer("fep", "Core", 0.25, color="black")
memLayer = Layer("fep", "Wires", 0.1, innerLayer=core, memberList=wireList)
strength_layer = Layer("vectran_kuraray_ht", "strength_layer", 0.15, innerLayer=memLayer)
abrasionLayer = Layer("ptfe", "abrasion", 0.2, innerLayer=strength_layer)
# Pass to a tether design object
tether = RoundTetherDesign("Example", abrasionLayer, 100)
# Calculate unhelix strength
strengthUpperBound = tether.unhelixStrength(output=True, verbose=True)
The lower bound estimate of a tether's strength is provided by the RoundTetherDesign.straightRunStrength()
function. This analysis assumes that all layers in a construction see load immediately, without accounting for helixed members. Like the unhelixStrength()
function this has two optional arguments:
- output: Whether to print the analysis results in addition to returning the value. Defaults to True.
- verbose: Whether to include a per-layer breakdown on strength contribution when output is True. Defaults to False.
An example of the straightRunStrength
analysis can be seen below using the example tether design from the quick start section:
from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign
# Construct a kapton insulated copper wire
conductor = Layer("copper", "Conductor", 0.25)
insulator = Wire("electrical", "kapton", "Kapton Wire", 0.15, innerLayer=conductor)
# Arrange the wires in a list
wireList = [insulator, insulator, insulator, insulator]
# Build the layers of the tether
core = Layer("fep", "Core", 0.25, color="black")
memLayer = Layer("fep", "Wires", 0.1, innerLayer=core, memberList=wireList)
strength_layer = Layer("vectran_kuraray_ht", "strength_layer", 0.15, innerLayer=memLayer)
abrasionLayer = Layer("ptfe", "abrasion", 0.2, innerLayer=strength_layer)
# Pass to a tether design object
tether = RoundTetherDesign("Example", abrasionLayer, 100)
# Calculate straight-run strength
strengthLowerBound = tether.straightRunStrength(output=True, verbose=True)
The RoundTetherDesign
class has a function called calculateMinBendRadius()
which estimates the minimum bending radius for a given tether design based on rules of thumb from vendors and the fiber optic association. There are three guidelines used within TetherCAD:
- The MBR should be no smaller than 8 times the overall tether diameter.
- The MBR should be no smaller than 12 times the diameter of the largest electrical wire.
- The MBR should be no smaller than 20 times the diameter of the largest fiber optic wire.
These guidelines are adapted from the following sources: Fiber Optic Association Anixter
The calculateMinBendRadius()
function calculates each of these guidelines and returns the greatest as the minimum bend radius of the tether. This information is calculated on the creation of a RoundTetherDesign
object and is printed with the tetherDetails()
function, but can also be run standalone:
from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign
# Construct a kapton insulated copper wire
conductor = Layer("copper", "Conductor", 0.25)
insulator = Wire("electrical", "kapton", "Kapton Wire", 0.15, innerLayer=conductor)
# Arrange the wires in a list
wireList = [insulator, insulator, insulator, insulator]
# Build the layers of the tether
core = Layer("fep", "Core", 0.25, color="black")
memLayer = Layer("fep", "Wires", 0.1, innerLayer=core, memberList=wireList)
strength_layer = Layer("vectran_kuraray_ht", "strength_layer", 0.15, innerLayer=memLayer)
abrasionLayer = Layer("ptfe", "abrasion", 0.2, innerLayer=strength_layer)
# Pass to a tether design object
tether = RoundTetherDesign("Example", abrasionLayer, 100)
# Calculate minimum bend radius
minBend = tether.calculateMinBendRadius()
print("Min Bend Radius: %f mm" % minBend)