$(instance)Spring Icon

Spring

Linear 1D translational spring

This component extends from PartialCompliant

Usage

Spring(c, s_rel0=0)

Parameters:

NameDescriptionUnitsDefault value
cSpring ConstantN/m
s_rel0Unstretched spring lengthm0

Connectors

Variables

NameDescriptionUnits
s_relRelative distance between flange_b and flange_am
fForces between the flangesN

Behavior

\[ \begin{align} \mathtt{s\_rel}\left( t \right) &= \mathtt{flange\_b.s}\left( t \right) - \mathtt{flange\_a.s}\left( t \right) \\ \mathtt{flange\_b.f}\left( t \right) &= f\left( t \right) \\ \mathtt{flange\_a.f}\left( t \right) &= - f\left( t \right) \\ f\left( t \right) &= c \left( - \mathtt{s\_rel0} + \mathtt{s\_rel}\left( t \right) \right) \end{align} \]

Source

# Linear 1D translational spring
component Spring
  extends PartialCompliant
  # Spring Constant
  parameter c::TranslationalSpringConstant
  # Unstretched spring length
  parameter s_rel0::Distance = 0
relations
  f = c*(s_rel-s_rel0)
metadata {
  "JuliaSim": {"icons": {"default": "jsml://TranslationalComponents/Spring.svg"}}
}
end
Flattened Source
# Linear 1D translational spring
component Spring
  flange_a = Flange() [{
    "JuliaSim": {"placement": {"icon": {"x1": -50, "y1": 450, "x2": 50, "y2": 550}}}
  }]
  flange_b = Flange() [{
    "JuliaSim": {"placement": {"icon": {"x1": 950, "y1": 450, "x2": 1050, "y2": 550}}}
  }]
  # Relative distance between `flange_b` and `flange_a`
  variable s_rel::Distance
  # Forces between the flanges
  variable f::JSML.Force
  # Spring Constant
  parameter c::TranslationalSpringConstant
  # Unstretched spring length
  parameter s_rel0::Distance = 0
relations
  s_rel = flange_b.s-flange_a.s
  flange_b.f = f
  flange_a.f = -f
  f = c*(s_rel-s_rel0)
metadata {
  "JuliaSim": {"icons": {"default": "jsml://TranslationalComponents/Spring.svg"}}
}
end

Test Cases