mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			5282 lines
		
	
	
		
			220 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			5282 lines
		
	
	
		
			220 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
within Modelica.Mechanics;
 | 
						|
package Translational
 | 
						|
  "Library to model 1-dimensional, translational mechanical systems"
 | 
						|
  extends Modelica.Icons.Package;
 | 
						|
  import SI = Modelica.SIunits;
 | 
						|
 | 
						|
  package Examples "Demonstration examples of the components of this package"
 | 
						|
 | 
						|
    extends Modelica.Icons.ExamplesPackage;
 | 
						|
 | 
						|
    model SignConvention "Examples for the used sign conventions."
 | 
						|
      extends Modelica.Icons.Example;
 | 
						|
      Translational.Components.Mass mass1(L=1,
 | 
						|
        s(fixed=true),
 | 
						|
        v(fixed=true),
 | 
						|
        m=1)                                      annotation (Placement(
 | 
						|
            transformation(extent={{40,60},{60,80}}, rotation=0)));
 | 
						|
      Translational.Sources.Force force1
 | 
						|
                                 annotation (Placement(transformation(extent={{
 | 
						|
                -4,60},{16,80}}, rotation=0)));
 | 
						|
      Modelica.Blocks.Sources.Constant constant1(k=1)
 | 
						|
                                 annotation (Placement(transformation(extent={{
 | 
						|
                -44,60},{-24,80}}, rotation=0)));
 | 
						|
      Translational.Components.Mass mass2(L=1,
 | 
						|
        s(fixed=true),
 | 
						|
        v(fixed=true),
 | 
						|
        m=1)                                      annotation (Placement(
 | 
						|
            transformation(extent={{40,0},{60,20}}, rotation=0)));
 | 
						|
      Translational.Sources.Force force2
 | 
						|
                                 annotation (Placement(transformation(extent={{
 | 
						|
                -4,20},{16,40}}, rotation=0)));
 | 
						|
      Modelica.Blocks.Sources.Constant constant2(k=1)
 | 
						|
                                 annotation (Placement(transformation(extent={{
 | 
						|
                -44,20},{-24,40}}, rotation=0)));
 | 
						|
      Translational.Components.Mass mass3(L=1,
 | 
						|
        s(fixed=true),
 | 
						|
        v(fixed=true),
 | 
						|
        m=1)                                      annotation (Placement(
 | 
						|
            transformation(extent={{-40,-40},{-20,-20}}, rotation=0)));
 | 
						|
      Translational.Sources.Force force3(useSupport=true)
 | 
						|
                                 annotation (Placement(transformation(extent={{
 | 
						|
                20,-40},{0,-20}}, rotation=0)));
 | 
						|
      Modelica.Blocks.Sources.Constant constant3(k=1)
 | 
						|
                                 annotation (Placement(transformation(extent={{
 | 
						|
                60,-40},{40,-20}}, rotation=0)));
 | 
						|
      Translational.Components.Fixed fixed
 | 
						|
                  annotation (Placement(transformation(extent={{0,-60},{20,-40}})));
 | 
						|
    equation
 | 
						|
      connect(constant1.y,force1. f) annotation (Line(points={{-23,70},{-6,70}},
 | 
						|
            color={0,0,127}));
 | 
						|
      connect(constant2.y,force2. f) annotation (Line(points={{-23,30},{-6,30}},
 | 
						|
            color={0,0,127}));
 | 
						|
      connect(constant3.y,force3. f) annotation (Line(points={{39,-30},{22,-30}},
 | 
						|
            color={0,0,127}));
 | 
						|
      connect(force1.flange, mass1.flange_a)    annotation (Line(
 | 
						|
          points={{16,70},{40,70}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(force2.flange, mass2.flange_b)    annotation (Line(
 | 
						|
          points={{16,30},{70,30},{70,10},{60,10}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(mass3.flange_b, force3.flange)    annotation (Line(
 | 
						|
          points={{-20,-30},{0,-30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(fixed.flange, force3.support) annotation (Line(
 | 
						|
          points={{10,-50},{10,-40}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (Documentation(info="<html>
 | 
						|
<p>
 | 
						|
If all arrows point in the same direction a positive force
 | 
						|
results in a positive acceleration a, velocity v and position s.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
For a force of 1 N and a mass of 1 Kg this leads to
 | 
						|
</p>
 | 
						|
<pre>
 | 
						|
        a = 1 m/s2
 | 
						|
        v = 1 m/s after 1 s (SlidingMass1.v)
 | 
						|
        s = 0.5 m after 1 s (SlidingMass1.s)
 | 
						|
</pre>
 | 
						|
<p>
 | 
						|
The acceleration is not available for plotting.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
System 1) and 2) are equivalent. It doesn't matter whether the
 | 
						|
force pushes at flange_a in system 1 or pulls at flange_b in system 2.
 | 
						|
</p><p>
 | 
						|
It is of course possible to ignore the arrows and connect the models
 | 
						|
in an arbitrary way. But then it is hard see in what direction the
 | 
						|
force acts.
 | 
						|
</p><p>
 | 
						|
In the third system the two arrows are opposed which means that the
 | 
						|
force acts in the opposite direction (in the same direction as in
 | 
						|
the two other examples).
 | 
						|
</p>
 | 
						|
</html>"), Diagram(coordinateSystem(preserveAspectRatio=true,  extent={{-100,-100},{
 | 
						|
                100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-100,80},{-82,60}},
 | 
						|
              textString="1)",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Text(
 | 
						|
              extent={{-100,40},{-82,20}},
 | 
						|
              textString="2)",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Text(
 | 
						|
              extent={{-100,-20},{-82,-40}},
 | 
						|
              textString="3)",
 | 
						|
              lineColor={0,0,255})}),
 | 
						|
        experiment(StopTime=1.0, Interval=0.001));
 | 
						|
    end SignConvention;
 | 
						|
 | 
						|
    model InitialConditions "Setting of initial conditions"
 | 
						|
 | 
						|
      extends Modelica.Icons.Example;
 | 
						|
 | 
						|
      Translational.Components.Fixed fixed2(        s0=1)
 | 
						|
                                       annotation (Placement(transformation(
 | 
						|
              extent={{-100,60},{-80,80}}, rotation=0)));
 | 
						|
      Translational.Components.Spring s2(        s_rel0=2, c=1e3)
 | 
						|
                                               annotation (Placement(
 | 
						|
            transformation(extent={{-60,60},{-40,80}}, rotation=0)));
 | 
						|
      Translational.Components.Mass m3(           L=3, s(start=4.5, fixed=true),
 | 
						|
        v(fixed=true),
 | 
						|
        m=1)                                          annotation (Placement(
 | 
						|
            transformation(extent={{-20,60},{0,80}}, rotation=0)));
 | 
						|
      Translational.Components.SpringDamper sd2(        s_rel0=4, c=111,
 | 
						|
        d=1)                                          annotation (Placement(
 | 
						|
            transformation(extent={{20,60},{40,80}}, rotation=0)));
 | 
						|
      Translational.Components.Mass m4(           L=5, s(start=12.5, fixed=true),
 | 
						|
        v(fixed=true),
 | 
						|
        m=1)                                           annotation (Placement(
 | 
						|
            transformation(extent={{60,60},{80,80}}, rotation=0)));
 | 
						|
 | 
						|
      Translational.Components.Fixed fixed1(        s0=-1)
 | 
						|
                                        annotation (Placement(transformation(
 | 
						|
              extent={{-100,-20},{-80,0}}, rotation=0)));
 | 
						|
      Translational.Components.Spring s1(
 | 
						|
        s_rel0=1,
 | 
						|
        c=1e3,
 | 
						|
        s_rel(start=1, fixed=true))
 | 
						|
                        annotation (Placement(transformation(extent={{-58,-20},
 | 
						|
                {-38,0}}, rotation=0)));
 | 
						|
      Translational.Components.Mass m1(           L=1, v(fixed=true),
 | 
						|
        m=1)                            annotation (Placement(transformation(
 | 
						|
              extent={{-20,-20},{0,0}}, rotation=0)));
 | 
						|
      Translational.Components.SpringDamper sd1(
 | 
						|
        s_rel0=1,
 | 
						|
        c=111,
 | 
						|
        s_rel(start=1, fixed=true),
 | 
						|
        v_rel(fixed=true),
 | 
						|
        d=1)            annotation (Placement(transformation(extent={{20,-20},{
 | 
						|
                40,0}}, rotation=0)));
 | 
						|
      Translational.Components.Mass m2(           L=2, m=1)
 | 
						|
                                        annotation (Placement(transformation(
 | 
						|
              extent={{60,-20},{80,0}}, rotation=0)));
 | 
						|
    equation
 | 
						|
      connect(s2.flange_a, fixed2.flange) annotation (Line(
 | 
						|
          points={{-60,70},{-90,70}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(s1.flange_a, fixed1.flange) annotation (Line(
 | 
						|
          points={{-58,-10},{-90,-10}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(m1.flange_a, s1.flange_b) annotation (Line(
 | 
						|
          points={{-20,-10},{-38,-10}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(sd1.flange_a, m1.flange_b) annotation (Line(
 | 
						|
          points={{20,-10},{0,-10}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(m2.flange_a, sd1.flange_b) annotation (Line(
 | 
						|
          points={{60,-10},{40,-10}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(m4.flange_a, sd2.flange_b) annotation (Line(
 | 
						|
          points={{60,70},{40,70}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(sd2.flange_a, m3.flange_b) annotation (Line(
 | 
						|
          points={{20,70},{0,70}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(m3.flange_a, s2.flange_b) annotation (Line(
 | 
						|
          points={{-20,70},{-40,70}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
There are several ways to set initial conditions.
 | 
						|
In the first system the position of the mass m3 was defined
 | 
						|
by using the modifier s(start=4.5), the position of m4 by s(start=12.5).
 | 
						|
These positions were chosen such that the system is a rest. To calculate
 | 
						|
these values start at the left (Fixed1) with a value of 1 m. The spring
 | 
						|
has an unstretched length of 2 m and m3 an length of 3 m, which leads to
 | 
						|
</p>
 | 
						|
 | 
						|
<pre>
 | 
						|
        1   m (fixed1)
 | 
						|
      + 2   m (spring s2)
 | 
						|
      + 3/2 m (half of the length of mass m3)
 | 
						|
      -------
 | 
						|
        4,5 m = s(start = 4.5) for m3
 | 
						|
      + 3/2 m (half of the length of mass m3)
 | 
						|
      + 4   m (springDamper 2)
 | 
						|
      + 5/2 m (half of length of mass m4)
 | 
						|
      -------
 | 
						|
       12,5 m = s(start = 12.5) for m4
 | 
						|
</pre>
 | 
						|
 | 
						|
<p>
 | 
						|
This selection of initial conditions has the effect that Dymola selects
 | 
						|
those variables (m3.s and m4.s) as state variables.
 | 
						|
In the second example the length of the springs are given as start values
 | 
						|
but they cannot be used as state for pure springs (only for the spring/damper
 | 
						|
combination). In this case the system is not at rest.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
<IMG src=\"modelica://Modelica/Resources/Images/Mechanics/Translational/InitialConditions.png\">
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),
 | 
						|
        experiment(StopTime=5.0, Interval=0.001));
 | 
						|
    end InitialConditions;
 | 
						|
 | 
						|
    model WhyArrows "Use of arrows in Mechanics.Translational"
 | 
						|
 | 
						|
      extends Modelica.Icons.Example;
 | 
						|
 | 
						|
      Translational.Components.Fixed fixed
 | 
						|
                                 annotation (Placement(transformation(extent={{
 | 
						|
                -20,20},{0,40}}, rotation=0)));
 | 
						|
      Translational.Components.Rod rod1(        L=1)
 | 
						|
                                  annotation (Placement(transformation(extent={
 | 
						|
                {-48,20},{-28,40}}, rotation=0)));
 | 
						|
      Translational.Components.Rod rod2(        L=1)
 | 
						|
                                  annotation (Placement(transformation(extent={
 | 
						|
                {20,20},{40,40}}, rotation=0)));
 | 
						|
      Translational.Components.Rod rod3(        L=1)
 | 
						|
                                  annotation (Placement(transformation(extent={
 | 
						|
                {-30,58},{-50,78}}, rotation=0)));
 | 
						|
      Translational.Sensors.PositionSensor positionSensor2 annotation (Placement(
 | 
						|
            transformation(extent={{60,20},{80,40}}, rotation=0)));
 | 
						|
      Translational.Sensors.PositionSensor positionSensor1 annotation (Placement(
 | 
						|
            transformation(extent={{-60,20},{-80,40}}, rotation=0)));
 | 
						|
      Translational.Sensors.PositionSensor positionSensor3 annotation (Placement(
 | 
						|
            transformation(extent={{-60,58},{-80,78}}, rotation=0)));
 | 
						|
      Translational.Components.Fixed fixed1(        s0=-1.9)
 | 
						|
                                          annotation (Placement(transformation(
 | 
						|
              extent={{-100,-60},{-80,-40}}, rotation=0)));
 | 
						|
      Translational.Components.Spring spring1(        s_rel0=2, c=11)
 | 
						|
                                                   annotation (Placement(
 | 
						|
            transformation(extent={{-80,-60},{-60,-40}}, rotation=0)));
 | 
						|
      Translational.Components.Mass mass1(
 | 
						|
        L=2,
 | 
						|
        s(fixed=true),
 | 
						|
        v(fixed=true),
 | 
						|
        m=1)                                      annotation (Placement(
 | 
						|
            transformation(extent={{-50,-60},{-30,-40}}, rotation=0)));
 | 
						|
      Translational.Components.Fixed fixed2(        s0=-1.9)
 | 
						|
                                          annotation (Placement(transformation(
 | 
						|
              extent={{0,-60},{20,-40}}, rotation=0)));
 | 
						|
      Translational.Components.Spring spring2(        s_rel0=2, c=11)
 | 
						|
                                                   annotation (Placement(
 | 
						|
            transformation(extent={{30,-60},{50,-40}}, rotation=0)));
 | 
						|
      Translational.Components.Mass inertia2(           L=2,
 | 
						|
        m=1,
 | 
						|
        s(fixed=true),
 | 
						|
        v(fixed=true))                            annotation (Placement(
 | 
						|
            transformation(extent={{80,-60},{60,-40}}, rotation=0)));
 | 
						|
    equation
 | 
						|
      connect(spring1.flange_b, mass1.flange_b)        annotation (Line(points={{-60,-50},
 | 
						|
              {-60,-72},{-30,-72},{-30,-50}},            color={0,191,0}));
 | 
						|
      connect(spring2.flange_b, inertia2.flange_b)     annotation (Line(points={{50,-50},
 | 
						|
              {60,-50}},           color={0,191,0}));
 | 
						|
      connect(rod3.flange_b,positionSensor3. flange) annotation (Line(
 | 
						|
          points={{-50,68},{-60,68}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(rod1.flange_a,positionSensor1. flange) annotation (Line(
 | 
						|
          points={{-48,30},{-60,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(rod1.flange_b, fixed.flange)  annotation (Line(
 | 
						|
          points={{-28,30},{-10,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(rod3.flange_a, fixed.flange)  annotation (Line(
 | 
						|
          points={{-30,68},{-10,68},{-10,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(fixed.flange, rod2.flange_a)  annotation (Line(
 | 
						|
          points={{-10,30},{20,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(rod2.flange_b,positionSensor2. flange) annotation (Line(
 | 
						|
          points={{40,30},{60,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(fixed1.flange,spring1. flange_a) annotation (Line(
 | 
						|
          points={{-90,-50},{-80,-50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(fixed2.flange,spring2. flange_a) annotation (Line(
 | 
						|
          points={{10,-50},{30,-50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
When using the models of the translational sublibrary
 | 
						|
it is recommended to make sure that all arrows point in
 | 
						|
the same direction because then all component have the
 | 
						|
same reference system.
 | 
						|
In the example the distance from flange_a of Rod1 to flange_b
 | 
						|
of Rod2 is 2 m. The distance from flange_a of Rod1 to flange_b
 | 
						|
of Rod3 is also 2 m though it is difficult to see that. Without
 | 
						|
the arrows it would be almost impossible to notice.
 | 
						|
That all arrows point in the same direction is a sufficient
 | 
						|
condition for an easy use of the library. There are cases
 | 
						|
where horizontally flipped models can be used without
 | 
						|
problems.
 | 
						|
</p>
 | 
						|
</html>"),     Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-84,10},{88,2}},
 | 
						|
              lineColor={0,0,255},
 | 
						|
              textString="positionSensor2.s = positionSensor3.s"),
 | 
						|
            Text(
 | 
						|
              extent={{-78,-4},{86,-12}},
 | 
						|
              lineColor={0,0,255},
 | 
						|
              textString="positionSensor3.s <>positionSensor1.s"),
 | 
						|
            Text(
 | 
						|
              extent={{-82,-80},{92,-88}},
 | 
						|
              textString="Both systems are equivalent",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Line(
 | 
						|
              points={{-90,-28},{90,-28}},
 | 
						|
              thickness=0.5,
 | 
						|
              color={0,0,255})}),
 | 
						|
        experiment(StopTime=1.0, Interval=0.001));
 | 
						|
    end WhyArrows;
 | 
						|
 | 
						|
    model Accelerate "Use of model accelerate."
 | 
						|
 | 
						|
      extends Modelica.Icons.Example;
 | 
						|
      Translational.Sources.Accelerate accelerate
 | 
						|
                                           annotation (Placement(transformation(
 | 
						|
              extent={{-40,20},{-20,40}}, rotation=0)));
 | 
						|
      Translational.Components.Mass mass(L=1, m=1)
 | 
						|
                                                  annotation (Placement(
 | 
						|
            transformation(extent={{0,20},{20,40}},  rotation=0)));
 | 
						|
      Modelica.Blocks.Sources.Constant constantAcc(k=1)
 | 
						|
                                                 annotation (Placement(transformation(extent={{-80,20},
 | 
						|
                {-60,40}},          rotation=0)));
 | 
						|
    equation
 | 
						|
      connect(accelerate.flange, mass.flange_a)    annotation (Line(
 | 
						|
          points={{-20,30},{0,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(constantAcc.y, accelerate.a_ref) annotation (Line(
 | 
						|
          points={{-59,30},{-42,30}},
 | 
						|
          color={0,0,127},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Demonstrate usage of component Sources.Accelerate by moving a massing
 | 
						|
with a predefined acceleration.
 | 
						|
</p>
 | 
						|
</html>"),        experiment(StopTime=1.0, Interval=0.001));
 | 
						|
    end Accelerate;
 | 
						|
 | 
						|
    model Damper "Use of damper models."
 | 
						|
 | 
						|
      extends Modelica.Icons.Example;
 | 
						|
 | 
						|
      Translational.Components.Mass mass1(
 | 
						|
        L=1,
 | 
						|
        s(start=3, fixed=true),
 | 
						|
        v(start=10, fixed=true),
 | 
						|
        m=1)        annotation (Placement(transformation(extent={{-80,60},{-60,
 | 
						|
                80}}, rotation=0)));
 | 
						|
      Translational.Components.Damper damper1(        d=25)
 | 
						|
                                         annotation (Placement(transformation(
 | 
						|
              extent={{-20,60},{0,80}}, rotation=0)));
 | 
						|
      Translational.Components.Fixed fixed1(        s0=4.5)
 | 
						|
                                         annotation (Placement(transformation(
 | 
						|
              extent={{22,60},{42,80}}, rotation=0)));
 | 
						|
      Translational.Components.Mass mass2(
 | 
						|
        L=1,
 | 
						|
        s(start=3, fixed=true),
 | 
						|
        v(start=10, fixed=true),
 | 
						|
        m=1)        annotation (Placement(transformation(extent={{-80,0},{-60,
 | 
						|
                20}}, rotation=0)));
 | 
						|
      Translational.Components.Damper damper2(        d=25)
 | 
						|
                                         annotation (Placement(transformation(
 | 
						|
              extent={{-20,0},{0,20}}, rotation=0)));
 | 
						|
      Translational.Components.Fixed fixed2(        s0=4.5)
 | 
						|
                                         annotation (Placement(transformation(
 | 
						|
              extent={{20,0},{40,20}}, rotation=0)));
 | 
						|
      Translational.Components.Mass mass3(
 | 
						|
        L=1,
 | 
						|
        s(start=3, fixed=true),
 | 
						|
        v(start=10, fixed=true),
 | 
						|
        m=1)        annotation (Placement(transformation(extent={{-80,-60},{-60,
 | 
						|
                -40}}, rotation=0)));
 | 
						|
      Translational.Components.Fixed fixed3(        s0=4.5)
 | 
						|
                                         annotation (Placement(transformation(
 | 
						|
              extent={{20,-60},{40,-40}}, rotation=0)));
 | 
						|
      Translational.Components.Spring spring2(        s_rel0=1, c=1)
 | 
						|
                                             annotation (Placement(
 | 
						|
            transformation(extent={{-20,-20},{0,0}}, rotation=0)));
 | 
						|
      Translational.Components.SpringDamper springDamper3(        s_rel0=1, d=25,
 | 
						|
        c=1)                                                   annotation (Placement(
 | 
						|
            transformation(extent={{-20,-60},{0,-40}}, rotation=0)));
 | 
						|
    equation
 | 
						|
      connect(mass1.flange_b, damper1.flange_a)        annotation (Line(points=
 | 
						|
              {{-60,70},{-20,70}}, color={0,191,0}));
 | 
						|
      connect(mass2.flange_b, damper2.flange_a)        annotation (Line(points={{-60,10},
 | 
						|
              {-20,10}},           color={0,191,0}));
 | 
						|
      connect(damper2.flange_b,spring2. flange_b) annotation (Line(points={{0,
 | 
						|
              10},{0,-10}}, color={0,191,0}));
 | 
						|
      connect(damper2.flange_a,spring2. flange_a) annotation (Line(points={{-20,
 | 
						|
              10},{-20,-10}}, color={0,191,0}));
 | 
						|
      connect(mass3.flange_b, springDamper3.flange_a)        annotation (Line(
 | 
						|
            points={{-60,-50},{-20,-50}}, color={0,191,0}));
 | 
						|
      connect(damper1.flange_b, fixed1.flange) annotation (Line(
 | 
						|
          points={{0,70},{32,70}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(damper2.flange_b, fixed2.flange) annotation (Line(
 | 
						|
          points={{0,10},{30,10}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(springDamper3.flange_b, fixed3.flange) annotation (Line(
 | 
						|
          points={{0,-50},{30,-50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Demonstrate usage of damper components in different variants.
 | 
						|
</p>
 | 
						|
</html>"),
 | 
						|
        experiment(StopTime=1.0, Interval=0.001));
 | 
						|
    end Damper;
 | 
						|
 | 
						|
    model Oscillator "Oscillator demonstrates the use of initial conditions."
 | 
						|
 | 
						|
      extends Modelica.Icons.Example;
 | 
						|
 | 
						|
      Translational.Components.Mass mass1(
 | 
						|
        L=1,
 | 
						|
        s(start=-0.5, fixed=true),
 | 
						|
        v(start=0, fixed=true),
 | 
						|
        m=1)          annotation (Placement(transformation(extent={{-20,40},{0,
 | 
						|
                60}}, rotation=0)));
 | 
						|
      Translational.Components.Spring spring1(        s_rel0=1, c=10000)
 | 
						|
                                                      annotation (Placement(
 | 
						|
            transformation(extent={{20,40},{40,60}}, rotation=0)));
 | 
						|
      Translational.Components.Fixed fixed1(        s0=1)
 | 
						|
                                         annotation (Placement(transformation(
 | 
						|
              extent={{60,40},{80,60}}, rotation=0)));
 | 
						|
      Translational.Sources.Force force1
 | 
						|
                                 annotation (Placement(transformation(extent={{
 | 
						|
                -60,40},{-40,60}}, rotation=0)));
 | 
						|
      Modelica.Blocks.Sources.Sine sine1(freqHz=15.9155) annotation (Placement(transformation(
 | 
						|
              extent={{-100,40},{-80,60}}, rotation=0)));
 | 
						|
      Translational.Components.Mass mass2(
 | 
						|
        L=1,
 | 
						|
        s(start=-0.5, fixed=true),
 | 
						|
        v(start=0, fixed=true),
 | 
						|
        m=1)          annotation (Placement(transformation(extent={{-20,-60},{0,
 | 
						|
                -40}}, rotation=0)));
 | 
						|
      Translational.Components.Spring spring2(        s_rel0=1, c=10000)
 | 
						|
                                                      annotation (Placement(
 | 
						|
            transformation(extent={{20,-60},{40,-40}}, rotation=0)));
 | 
						|
      Translational.Components.Fixed fixed2(        s0=1)
 | 
						|
                                         annotation (Placement(transformation(
 | 
						|
              extent={{60,-60},{80,-40}}, rotation=0)));
 | 
						|
      Translational.Sources.Force force2
 | 
						|
                                 annotation (Placement(transformation(extent={{
 | 
						|
                -60,-60},{-40,-40}}, rotation=0)));
 | 
						|
      Modelica.Blocks.Sources.Sine sine2(freqHz=15.9155) annotation (Placement(transformation(
 | 
						|
              extent={{-100,-60},{-80,-40}}, rotation=0)));
 | 
						|
      Translational.Components.Damper damper1(        d=10)
 | 
						|
                                         annotation (Placement(transformation(
 | 
						|
              extent={{20,-36},{40,-16}}, rotation=0)));
 | 
						|
    equation
 | 
						|
      connect(mass1.flange_b, spring1.flange_a)        annotation (Line(points=
 | 
						|
              {{0,50},{20,50}}, color={0,191,0}));
 | 
						|
      connect(spring2.flange_a,damper1. flange_a) annotation (Line(points={{20,
 | 
						|
              -50},{20,-26}}, color={0,191,0}));
 | 
						|
      connect(mass2.flange_b, spring2.flange_a)        annotation (Line(points=
 | 
						|
              {{0,-50},{20,-50}}, color={0,191,0}));
 | 
						|
      connect(damper1.flange_b,spring2. flange_b) annotation (Line(points={{40,
 | 
						|
              -26},{40,-50}}, color={0,191,0}));
 | 
						|
      connect(sine1.y,force1. f) annotation (Line(points={{-79,50},{-62,50}},
 | 
						|
            color={0,0,127}));
 | 
						|
      connect(sine2.y,force2. f) annotation (Line(points={{-79,-50},{-62,-50}},
 | 
						|
            color={0,0,127}));
 | 
						|
      connect(spring1.flange_b, fixed1.flange) annotation (Line(
 | 
						|
          points={{40,50},{70,50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(force2.flange, mass2.flange_a)    annotation (Line(
 | 
						|
          points={{-40,-50},{-20,-50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(force1.flange, mass1.flange_a)    annotation (Line(
 | 
						|
          points={{-40,50},{-20,50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(spring2.flange_b, fixed2.flange) annotation (Line(
 | 
						|
          points={{40,-50},{70,-50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
A spring - mass system is a mechanical oscillator. If no
 | 
						|
damping is included and the system is excited at resonance
 | 
						|
frequency infinite amplitudes will result.
 | 
						|
The resonant frequency is given by
 | 
						|
omega_res = sqrt(c / m)
 | 
						|
with:
 | 
						|
</p>
 | 
						|
 | 
						|
<pre>
 | 
						|
      c spring stiffness
 | 
						|
      m mass
 | 
						|
</pre>
 | 
						|
 | 
						|
<p>
 | 
						|
To make sure that the system is initially at rest the initial
 | 
						|
conditions s(start=0) and v(start=0) for the SlidingMass
 | 
						|
are set.
 | 
						|
If damping is added the amplitudes are bounded.
 | 
						|
</p>
 | 
						|
</html>"),
 | 
						|
        experiment(StopTime=1.0, Interval=0.001));
 | 
						|
    end Oscillator;
 | 
						|
 | 
						|
    model Sensors "Sensors for translational systems."
 | 
						|
      import Modelica;
 | 
						|
 | 
						|
      extends Modelica.Icons.Example;
 | 
						|
 | 
						|
      Translational.Sensors.ForceSensor forceSensor  annotation (Placement(
 | 
						|
            transformation(extent={{-34,40},{-14,60}},
 | 
						|
                                                     rotation=0)));
 | 
						|
      Translational.Sensors.SpeedSensor speedSensor1 annotation (Placement(
 | 
						|
            transformation(extent={{40,-40},{60,-20}}, rotation=0)));
 | 
						|
      Translational.Sensors.PositionSensor positionSensor1 annotation (Placement(
 | 
						|
            transformation(extent={{40,0},{60,20}}, rotation=0)));
 | 
						|
      Translational.Sensors.AccSensor accSensor1 annotation (Placement(
 | 
						|
            transformation(extent={{40,-80},{60,-60}}, rotation=0)));
 | 
						|
      Translational.Components.Mass mass(L=1,
 | 
						|
        s(fixed=true),
 | 
						|
        v(fixed=true),
 | 
						|
        m=1)                                      annotation (Placement(
 | 
						|
            transformation(extent={{20,40},{40,60}}, rotation=0)));
 | 
						|
      Translational.Sources.Force force
 | 
						|
                                 annotation (Placement(transformation(extent={{-64,40},
 | 
						|
                {-44,60}},         rotation=0)));
 | 
						|
      Modelica.Blocks.Sources.Sine sineForce(amplitude=10, freqHz=4)
 | 
						|
                                                                 annotation (Placement(
 | 
						|
            transformation(extent={{-100,40},{-80,60}}, rotation=0)));
 | 
						|
      Translational.Sensors.PositionSensor positionSensor2 annotation (Placement(
 | 
						|
            transformation(extent={{60,40},{80,60}}, rotation=0)));
 | 
						|
      Modelica.Mechanics.Translational.Sensors.MultiSensor multiSensor
 | 
						|
        annotation (Placement(transformation(extent={{-8,40},{12,60}})));
 | 
						|
    equation
 | 
						|
      connect(sineForce.y, force.f)
 | 
						|
                                 annotation (Line(points={{-79,50},{-66,50}},
 | 
						|
            color={0,0,127}));
 | 
						|
      connect(forceSensor.flange_a, force.flange)   annotation (Line(
 | 
						|
          points={{-34,50},{-44,50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(mass.flange_a, positionSensor1.flange)         annotation (Line(
 | 
						|
          points={{20,50},{20,10},{40,10}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(mass.flange_a, speedSensor1.flange)         annotation (Line(
 | 
						|
          points={{20,50},{20,-30},{40,-30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(mass.flange_a, accSensor1.flange)         annotation (Line(
 | 
						|
          points={{20,50},{20,-70},{40,-70}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(mass.flange_b, positionSensor2.flange)         annotation (Line(
 | 
						|
          points={{40,50},{60,50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(forceSensor.flange_b, multiSensor.flange_a) annotation (Line(
 | 
						|
          points={{-14,50},{-8,50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(multiSensor.flange_b, mass.flange_a) annotation (Line(
 | 
						|
          points={{12,50},{20,50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
These sensors measure
 | 
						|
</p>
 | 
						|
 | 
						|
<pre>
 | 
						|
   force f in N
 | 
						|
   position s in m
 | 
						|
   velocity v in m/s
 | 
						|
   acceleration a in m/s2
 | 
						|
</pre>
 | 
						|
 | 
						|
<p>
 | 
						|
The measured velocity and acceleration is independent on
 | 
						|
the flange the sensor is connected to. The position
 | 
						|
depends on the flange (flange_a or flange_b) and the
 | 
						|
length L of the component.
 | 
						|
Plot PositionSensor1.s, PositionSensor2.s and SlidingMass1.s
 | 
						|
to see the difference.
 | 
						|
</p>
 | 
						|
</html>"),
 | 
						|
        experiment(StopTime=1.0, Interval=0.001));
 | 
						|
    end Sensors;
 | 
						|
 | 
						|
    model Friction "Use of model Stop"
 | 
						|
      extends Modelica.Icons.Example;
 | 
						|
      Modelica.Mechanics.Translational.Components.MassWithStopAndFriction stop1(
 | 
						|
                                               L=1,
 | 
						|
        s(fixed=true),
 | 
						|
        v(fixed=true),
 | 
						|
        smax=25,
 | 
						|
        smin=-25,
 | 
						|
        m=1,
 | 
						|
        F_prop=1,
 | 
						|
        F_Coulomb=5,
 | 
						|
        F_Stribeck=10,
 | 
						|
        fexp=2)                     annotation (Placement(transformation(extent={{20,60},
 | 
						|
                {40,80}},         rotation=0)));
 | 
						|
      Translational.Sources.Force force
 | 
						|
                                 annotation (Placement(transformation(extent={{-20,60},
 | 
						|
                {0,80}},         rotation=0)));
 | 
						|
      Modelica.Blocks.Sources.Sine sineForce(amplitude=25, freqHz=0.25)
 | 
						|
                                                                    annotation (Placement(
 | 
						|
            transformation(extent={{-60,60},{-40,80}},
 | 
						|
                                                     rotation=0)));
 | 
						|
      Modelica.Mechanics.Translational.Components.MassWithStopAndFriction stop2(
 | 
						|
        L=1,
 | 
						|
        smax=0.9,
 | 
						|
        smin=-0.9,
 | 
						|
        F_Coulomb=3,
 | 
						|
        F_Stribeck=5,
 | 
						|
        s(start=0, fixed=true),
 | 
						|
        m=1,
 | 
						|
        F_prop=1,
 | 
						|
        fexp=2,
 | 
						|
        v(start=-5, fixed=true))
 | 
						|
                     annotation (Placement(transformation(extent={{42,-60},{62,
 | 
						|
                -40}},
 | 
						|
              rotation=0)));
 | 
						|
      Translational.Components.Spring spring(s_rel0=1, c=500)
 | 
						|
                                                    annotation (Placement(
 | 
						|
            transformation(extent={{2,-60},{22,-40}},
 | 
						|
                                                    rotation=0)));
 | 
						|
      Translational.Components.Fixed fixed2(s0=-1.75)
 | 
						|
                                           annotation (Placement(transformation(
 | 
						|
              extent={{-40,-60},{-20,-40}},
 | 
						|
                                        rotation=0)));
 | 
						|
      Translational.Sources.Force force2
 | 
						|
                                 annotation (Placement(transformation(extent={{-22,0},
 | 
						|
                {-2,20}},        rotation=0)));
 | 
						|
      Components.Mass mass(
 | 
						|
        m=1,
 | 
						|
        L=1,
 | 
						|
        s(fixed=true),
 | 
						|
        v(fixed=true))
 | 
						|
        annotation (Placement(transformation(extent={{10,0},{30,20}})));
 | 
						|
      Components.SupportFriction supportFriction(f_pos=
 | 
						|
            Examples.Utilities.GenerateStribeckFrictionTable(
 | 
						|
                F_prop=1,
 | 
						|
                F_Coulomb=5,
 | 
						|
                F_Stribeck=10,
 | 
						|
                fexp=2,
 | 
						|
                v_max=12,
 | 
						|
                nTable=50))
 | 
						|
        annotation (Placement(transformation(extent={{40,0},{60,20}})));
 | 
						|
    equation
 | 
						|
      connect(spring.flange_b, stop2.flange_a)  annotation (Line(points={{22,-50},
 | 
						|
              {42,-50}},color={0,191,0}));
 | 
						|
      connect(sineForce.y, force.f)
 | 
						|
        annotation (Line(points={{-39,70},{-22,70}},
 | 
						|
                                                  color={0,0,127}));
 | 
						|
      connect(spring.flange_a, fixed2.flange) annotation (Line(
 | 
						|
          points={{2,-50},{-30,-50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(force.flange, stop1.flange_a) annotation (Line(
 | 
						|
          points={{0,70},{20,70}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(force2.flange, mass.flange_a) annotation (Line(
 | 
						|
          points={{-2,10},{10,10}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(mass.flange_b, supportFriction.flange_a) annotation (Line(
 | 
						|
          points={{30,10},{40,10}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(sineForce.y, force2.f) annotation (Line(
 | 
						|
          points={{-39,70},{-30,70},{-30,10},{-24,10}},
 | 
						|
          color={0,0,127},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (
 | 
						|
        Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-100,80},{-80,60}},
 | 
						|
              textString="1)",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Text(
 | 
						|
              extent={{-100,20},{-80,0}},
 | 
						|
              textString="2)",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Text(
 | 
						|
              extent={{-100,-40},{-80,-60}},
 | 
						|
              lineColor={0,0,255},
 | 
						|
              textString="3)")}),
 | 
						|
        Documentation(info="<html>
 | 
						|
<ol>
 | 
						|
<li> Simulate and then plot stop1.f as a function of stop1.v
 | 
						|
     This gives the Stribeck curve.</li>
 | 
						|
<li> The same model is also available by modeling the system with a Mass and
 | 
						|
     a SupportFriction model. The SupportFriction model defines the friction characteristic
 | 
						|
     with a table. The table is constructed with function
 | 
						|
     Examples.Utilities.GenerateStribeckFrictionTable(..) to generate the
 | 
						|
     same friction characteristic as with stop1.
 | 
						|
     The simulation results of stop1 and of model mass are therefore identical.</li>
 | 
						|
<li> Model stop2 gives an example for a hard stop. However there
 | 
						|
     can arise some problems with the used modeling approach (use of
 | 
						|
     <b>reinit</b>(..), convergence problems). In this case use the ElastoGap
 | 
						|
     to model a stop (see example Preload).</li>
 | 
						|
</ol>
 | 
						|
</html>"),
 | 
						|
        experiment(StopTime=5.0, Interval=0.001));
 | 
						|
    end Friction;
 | 
						|
 | 
						|
    model PreLoad "Preload of a spool using ElastoGap models."
 | 
						|
 | 
						|
      extends Modelica.Icons.Example;
 | 
						|
 | 
						|
      Translational.Components.ElastoGap innerContactA(
 | 
						|
        c=1000e3,
 | 
						|
        d=250,
 | 
						|
        s_rel0=0.001)
 | 
						|
               annotation (Placement(transformation(extent={{-70,20},{-50,40}},
 | 
						|
              rotation=0)));
 | 
						|
      Translational.Components.ElastoGap innerContactB(
 | 
						|
        c=1000e3,
 | 
						|
        d=250,
 | 
						|
        s_rel0=0.001)
 | 
						|
               annotation (                                          Placement(
 | 
						|
            transformation(extent={{50,20},{70,40}}, rotation=0)));
 | 
						|
      Translational.Components.Mass spool(
 | 
						|
        L=0.19,
 | 
						|
        m=0.150,
 | 
						|
        s(start=0.01475, fixed=true),
 | 
						|
        v(fixed=true))     annotation (Placement(transformation(extent={{0,-40},
 | 
						|
                {40,0}},  rotation=0)));
 | 
						|
      Translational.Components.Fixed fixedLe(        s0=-0.0955)
 | 
						|
                                               annotation (Placement(
 | 
						|
            transformation(extent={{-10,-10},{10,10}}, rotation=270,
 | 
						|
            origin={-80,90})));
 | 
						|
      Translational.Components.Mass springPlateA(
 | 
						|
        m=10e-3,
 | 
						|
        L=0.002,
 | 
						|
        s(start=-0.093, fixed=true),
 | 
						|
        v(fixed=true))   annotation (Placement(transformation(extent={{-38,60},
 | 
						|
                {-18,80}}, rotation=0)));
 | 
						|
      Translational.Components.Mass springPlateB(
 | 
						|
        m=10e-3,
 | 
						|
        s(start=-0.06925, fixed=true),
 | 
						|
        L=0.002,
 | 
						|
        v(fixed=true))      annotation (
 | 
						|
          Placement(transformation(extent={{20,60},{40,80}}, rotation=0)));
 | 
						|
      Translational.Components.Spring spring(        c=20e3, s_rel0=0.025)
 | 
						|
        annotation (Placement(transformation(extent={{-10,60},{10,80}},rotation=
 | 
						|
               0)));
 | 
						|
      Translational.Components.ElastoGap outerContactA(
 | 
						|
        c=1000e3,
 | 
						|
        d=250,
 | 
						|
        s_rel0=0.0015)
 | 
						|
               annotation (Placement(transformation(extent={{-70,60},{-50,80}},
 | 
						|
              rotation=0)));
 | 
						|
      Translational.Components.ElastoGap outerContactB(
 | 
						|
        c=1000e3,
 | 
						|
        d=250,
 | 
						|
        s_rel0=0.0015) annotation (Placement(transformation(extent={{50,60},{70,
 | 
						|
                80}}, rotation=0)));
 | 
						|
      Translational.Components.Rod rod1(        L=0.007)
 | 
						|
                                     annotation (Placement(transformation(
 | 
						|
              extent={{-40,30},{-20,50}}, rotation=0)));
 | 
						|
      Translational.Components.Damper friction(        d=2500)
 | 
						|
                                            annotation (Placement(
 | 
						|
            transformation(
 | 
						|
            origin={-80,50},
 | 
						|
            extent={{-10,-10},{10,10}},
 | 
						|
            rotation=270)));
 | 
						|
      Translational.Sources.Force force
 | 
						|
                                 annotation (Placement(transformation(extent={{-38,-30},
 | 
						|
                {-18,-10}},          rotation=0)));
 | 
						|
      Translational.Components.Rod housing(        L=0.0305)
 | 
						|
                                           annotation (Placement(transformation(
 | 
						|
              extent={{-10,80},{10,100}},
 | 
						|
                                        rotation=0)));
 | 
						|
      Translational.Components.Rod rod3(        L=0.00575)
 | 
						|
                                        annotation (Placement(transformation(
 | 
						|
              extent={{-40,-2},{-20,18}}, rotation=0)));
 | 
						|
      Translational.Components.Rod rod4(        L=0.00575)
 | 
						|
                                        annotation (Placement(transformation(
 | 
						|
              extent={{20,-2},{40,18}}, rotation=0)));
 | 
						|
      Translational.Components.Rod rod2(        L=0.007)
 | 
						|
                                     annotation (Placement(transformation(
 | 
						|
              extent={{20,30},{40,50}}, rotation=0)));
 | 
						|
      Modelica.Blocks.Sources.Sine sineForce(amplitude=150, freqHz=0.01)
 | 
						|
        annotation (Placement(transformation(extent={{-78,-30},{-58,-10}},
 | 
						|
              rotation=0)));
 | 
						|
    equation
 | 
						|
      connect(outerContactA.flange_b,springPlateA. flange_a) annotation (Line(
 | 
						|
            points={{-50,70},{-38,70}}, color={0,191,0}));
 | 
						|
      connect(springPlateA.flange_b,spring. flange_a) annotation (Line(points={{-18,70},
 | 
						|
              {-18,70},{-10,70}},color={0,191,0}));
 | 
						|
      connect(spring.flange_b,springPlateB. flange_a) annotation (Line(points={{10,70},
 | 
						|
              {20,70}},         color={0,191,0}));
 | 
						|
      connect(springPlateB.flange_b,outerContactB. flange_a) annotation (Line(
 | 
						|
            points={{40,70},{40,70},{50,70}},
 | 
						|
                                      color={0,191,0}));
 | 
						|
      connect(outerContactB.flange_b,housing. flange_b) annotation (Line(points={{70,70},
 | 
						|
              {70,90},{10,90}},         color={0,191,0}));
 | 
						|
      connect(springPlateA.flange_b,rod1. flange_a) annotation (Line(points={{-18,70},
 | 
						|
              {-18,52},{-40,52},{-40,40}},         color={0,191,0}));
 | 
						|
      connect(innerContactA.flange_a,rod3. flange_a) annotation (Line(points={{-70,30},
 | 
						|
              {-80,30},{-80,8},{-40,8}},         color={0,191,0}));
 | 
						|
      connect(innerContactA.flange_b,rod1. flange_b) annotation (Line(points={{-50,30},
 | 
						|
              {-20,30},{-20,40}},                  color={0,191,0}));
 | 
						|
      connect(rod2.flange_a,innerContactB. flange_a) annotation (Line(points={{20,40},
 | 
						|
              {20,30},{50,30}},        color={0,191,0}));
 | 
						|
      connect(rod4.flange_b,innerContactB. flange_b) annotation (Line(points={{40,8},{
 | 
						|
              70,8},{70,30}},                color={0,191,0}));
 | 
						|
      connect(friction.flange_b,rod3. flange_a) annotation (Line(points={{-80,40},
 | 
						|
              {-80,8},{-40,8}},     color={0,191,0}));
 | 
						|
      connect(rod3.flange_b,rod4. flange_a) annotation (Line(points={{-20,8},{
 | 
						|
              20,8}}, color={0,191,0}));
 | 
						|
      connect(rod2.flange_b,springPlateB. flange_a) annotation (Line(points={{40,40},
 | 
						|
              {40,52},{20,52},{20,70}},        color={0,191,0}));
 | 
						|
      connect(spool.flange_a,rod4. flange_a) annotation (Line(points={{0,-20},{
 | 
						|
              0,8},{20,8}}, color={0,191,0}));
 | 
						|
      connect(sineForce.y, force.f)
 | 
						|
                                 annotation (Line(points={{-57,-20},{-46,-20},{
 | 
						|
              -40,-20}},
 | 
						|
            color={0,0,127}));
 | 
						|
      connect(force.flange, spool.flange_a) annotation (Line(
 | 
						|
          points={{-18,-20},{0,-20}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(outerContactA.flange_a, fixedLe.flange) annotation (Line(
 | 
						|
          points={{-70,70},{-80,70},{-80,90}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(housing.flange_a, fixedLe.flange) annotation (Line(
 | 
						|
          points={{-10,90},{-80,90}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(friction.flange_a, fixedLe.flange) annotation (Line(
 | 
						|
          points={{-80,60},{-80,90}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (
 | 
						|
        Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-92,-72},{90,-80}},
 | 
						|
              textString="positive force => spool moves in positive direction ",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Text(
 | 
						|
              extent={{-48,-52},{42,-60}},
 | 
						|
              textString="Simulate for 100 s",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Text(
 | 
						|
              extent={{-100,-62},{88,-70}},
 | 
						|
              lineColor={0,0,255},
 | 
						|
              textString="plot spool.s as a function of force.f")}),
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
When designing hydraulic valves it is often necessary to hold the spool in
 | 
						|
a certain position as long as an external force is below a threshold value.
 | 
						|
If this force exceeds the threshold value a linear relation between force
 | 
						|
and position is desired.
 | 
						|
There are designs that need only one spring to accomplish this task. Using
 | 
						|
the ElastoGap elements this design can be modelled easily.
 | 
						|
Drawing of spool.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
<IMG src=\"modelica://Modelica/Resources/Images/Mechanics/Translational/PreLoad.png\"><br>
 | 
						|
<IMG src=\"modelica://Modelica/Resources/Images/Mechanics/Translational/PreLoad3.png\"><br>
 | 
						|
<IMG src=\"modelica://Modelica/Resources/Images/Mechanics/Translational/PreLoad4.png\"><br>
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
Spool position s as a function of working force f.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
<IMG src=\"modelica://Modelica/Resources/Images/Mechanics/Translational/PreLoad2.png\">
 | 
						|
</p>
 | 
						|
</html>"),
 | 
						|
        experiment(StopTime=100, Interval=0.1));
 | 
						|
    end PreLoad;
 | 
						|
 | 
						|
    model ElastoGap "Demonstrate usage of ElastoGap"
 | 
						|
    extends Modelica.Icons.Example;
 | 
						|
      Components.Fixed fixed
 | 
						|
        annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
 | 
						|
      Components.Rod rod1(L=2)
 | 
						|
        annotation (Placement(transformation(extent={{-40,-10},{-20,10}})));
 | 
						|
      Components.Rod rod2(L=2)
 | 
						|
        annotation (Placement(transformation(extent={{20,-10},{40,10}})));
 | 
						|
      Components.SpringDamper springDamper1(
 | 
						|
        c=10,
 | 
						|
        s_rel0=1,
 | 
						|
        s_rel(fixed=false, start=1),
 | 
						|
        d=1.5)
 | 
						|
        annotation (Placement(transformation(extent={{-40,20},{-20,40}})));
 | 
						|
      Components.SpringDamper springDamper2(
 | 
						|
        c=10,
 | 
						|
        s_rel0=1,
 | 
						|
        s_rel(fixed=false, start=1),
 | 
						|
        d=1.5)
 | 
						|
        annotation (Placement(transformation(extent={{20,20},{40,40}})));
 | 
						|
      Components.Mass mass1(
 | 
						|
        s(fixed=true, start=2),
 | 
						|
        L=0,
 | 
						|
        m=1,
 | 
						|
        v(fixed=true))
 | 
						|
             annotation (Placement(transformation(extent={{-10,20},{10,40}})));
 | 
						|
      Components.ElastoGap elastoGap1(
 | 
						|
        c=10,
 | 
						|
        s_rel(fixed=false, start=1.5),
 | 
						|
        s_rel0=1.5,
 | 
						|
        d=1.5)
 | 
						|
        annotation (Placement(transformation(extent={{-40,-40},{-20,-20}})));
 | 
						|
      Components.ElastoGap elastoGap2(
 | 
						|
        c=10,
 | 
						|
        s_rel(fixed=false, start=1.5),
 | 
						|
        s_rel0=1.5,
 | 
						|
        d=1.5)
 | 
						|
        annotation (Placement(transformation(extent={{20,-40},{40,-20}})));
 | 
						|
      Components.Mass mass2(
 | 
						|
        s(fixed=true, start=2),
 | 
						|
        L=0,
 | 
						|
        m=1,
 | 
						|
        v(fixed=true))
 | 
						|
             annotation (Placement(transformation(extent={{-10,-40},{10,-20}})));
 | 
						|
      parameter SI.TranslationalDampingConstant d=1.5 "Damping constant";
 | 
						|
    equation
 | 
						|
 | 
						|
      connect(rod1.flange_b, fixed.flange) annotation (Line(
 | 
						|
          points={{-20,0},{0,0}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(fixed.flange, rod2.flange_a) annotation (Line(
 | 
						|
          points={{0,0},{20,0}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(springDamper1.flange_a, rod1.flange_a) annotation (Line(
 | 
						|
          points={{-40,30},{-48,30},{-48,0},{-40,0}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(springDamper2.flange_b, rod2.flange_b) annotation (Line(
 | 
						|
          points={{40,30},{50,30},{50,0},{40,0}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(springDamper1.flange_b, mass1.flange_a) annotation (Line(
 | 
						|
          points={{-20,30},{-10,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(mass1.flange_b, springDamper2.flange_a) annotation (Line(
 | 
						|
          points={{10,30},{20,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(rod1.flange_a, elastoGap1.flange_a) annotation (Line(
 | 
						|
          points={{-40,0},{-48,0},{-48,-30},{-40,-30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(rod2.flange_b, elastoGap2.flange_b) annotation (Line(
 | 
						|
          points={{40,0},{50,0},{50,-30},{40,-30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(elastoGap1.flange_b, mass2.flange_a) annotation (Line(
 | 
						|
          points={{-20,-30},{-10,-30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(mass2.flange_b, elastoGap2.flange_a) annotation (Line(
 | 
						|
          points={{10,-30},{20,-30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This model demonstrates the effect of ElastoGaps on eigenfrequency:<br>
 | 
						|
Plot mass1.s and mass2.s as well as mass1.v and mass2.v<br><br>
 | 
						|
mass1 is moved by both spring forces all the time.<br>
 | 
						|
Since elastoGap1 lifts off at s > -0.5 m and elastoGap2 lifts off s < +0.5 m,
 | 
						|
mass2 moves freely as long as -0.5 m < s < +0.5 m.
 | 
						|
</p>
 | 
						|
</html>"),
 | 
						|
        experiment(StopTime=1.0, Interval=0.01));
 | 
						|
    end ElastoGap;
 | 
						|
 | 
						|
    model Brake "Demonstrate braking of a translational moving mass"
 | 
						|
      extends Modelica.Icons.Example;
 | 
						|
 | 
						|
      Modelica.Mechanics.Translational.Components.Brake brake(fn_max=1, useSupport=
 | 
						|
            false)
 | 
						|
        annotation (Placement(transformation(extent={{6,40},{26,20}})));
 | 
						|
      Modelica.Mechanics.Translational.Components.Mass mass1(m=1,
 | 
						|
        s(fixed=true),
 | 
						|
        v(start=1, fixed=true))
 | 
						|
        annotation (Placement(transformation(extent={{-34,20},{-14,40}})));
 | 
						|
      Modelica.Blocks.Sources.Step step(startTime=0.1, height=2)
 | 
						|
        annotation (Placement(transformation(extent={{-10,-10},{10,10}},
 | 
						|
            rotation=0,
 | 
						|
            origin={-24,-10})));
 | 
						|
      Modelica.Mechanics.Translational.Components.Brake brake1(
 | 
						|
                                                              fn_max=1, useSupport=
 | 
						|
            true)
 | 
						|
        annotation (Placement(transformation(extent={{6,-60},{26,-40}})));
 | 
						|
      Modelica.Mechanics.Translational.Components.Mass mass2(m=1,
 | 
						|
        s(fixed=true),
 | 
						|
        v(start=1, fixed=true))
 | 
						|
        annotation (Placement(transformation(extent={{-34,-60},{-14,-40}})));
 | 
						|
      Modelica.Mechanics.Translational.Components.Fixed fixed
 | 
						|
        annotation (Placement(transformation(extent={{6,-80},{26,-60}})));
 | 
						|
    equation
 | 
						|
      connect(mass1.flange_b, brake.flange_a)
 | 
						|
                                             annotation (Line(
 | 
						|
          points={{-14,30},{6,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(step.y, brake.f_normalized) annotation (Line(
 | 
						|
          points={{-13,-10},{16,-10},{16,19}},
 | 
						|
          color={0,0,127},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(mass2.flange_b, brake1.flange_a)
 | 
						|
                                             annotation (Line(
 | 
						|
          points={{-14,-50},{6,-50}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(step.y, brake1.f_normalized) annotation (Line(
 | 
						|
          points={{-13,-10},{16,-10},{16,-39}},
 | 
						|
          color={0,0,127},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(fixed.flange, brake1.support) annotation (Line(
 | 
						|
          points={{16,-70},{16,-60}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This model consists of a mass with an initial velocity of 1 m/s.
 | 
						|
After 0.1 s, a brake is activated and it is shown that the mass decelerates until
 | 
						|
it arrives at rest and remains at rest. Two versions of this system are present,
 | 
						|
one where the brake is implicitly grounded and one where it is explicitly grounded.
 | 
						|
</p>
 | 
						|
</html>"),
 | 
						|
        experiment(StopTime=2.0, Interval=0.001));
 | 
						|
    end Brake;
 | 
						|
 | 
						|
    model HeatLosses "Demonstrate the modeling of heat losses"
 | 
						|
     extends Modelica.Icons.Example;
 | 
						|
      Components.Mass mass1(
 | 
						|
        m=1,
 | 
						|
        s(fixed=true),
 | 
						|
        L=0.1,
 | 
						|
        v(fixed=true))
 | 
						|
        annotation (Placement(transformation(extent={{-60,20},{-40,40}})));
 | 
						|
      Components.SpringDamper springDamper(
 | 
						|
        s_rel(fixed=true),
 | 
						|
        v_rel(fixed=true),
 | 
						|
        c=100,
 | 
						|
        d=10,
 | 
						|
        useHeatPort=true)
 | 
						|
              annotation (Placement(transformation(extent={{-30,20},{-10,40}})));
 | 
						|
      Components.Damper damper(d=10, useHeatPort=true)
 | 
						|
        annotation (Placement(transformation(extent={{-10,10},{10,-10}},
 | 
						|
            rotation=-90,
 | 
						|
            origin={-60,-10})));
 | 
						|
      Components.ElastoGap elastoGap(
 | 
						|
        c=100,
 | 
						|
        d=20,
 | 
						|
        s_rel0=-0.02,
 | 
						|
        useHeatPort=true)
 | 
						|
        annotation (Placement(transformation(extent={{-90,-10},{-70,10}})));
 | 
						|
      Components.Fixed fixed1
 | 
						|
        annotation (Placement(transformation(extent={{-70,-40},{-50,-20}})));
 | 
						|
      Sources.Force force
 | 
						|
        annotation (Placement(transformation(extent={{-90,20},{-70,40}})));
 | 
						|
      Blocks.Sources.Sine sine1(freqHz=1, amplitude=20)
 | 
						|
        annotation (Placement(transformation(extent={{-120,20},{-100,40}})));
 | 
						|
      Components.Mass mass2(
 | 
						|
        m=1,
 | 
						|
        L=0.1,
 | 
						|
        s(fixed=false),
 | 
						|
        v(fixed=false))
 | 
						|
        annotation (Placement(transformation(extent={{0,20},{20,40}})));
 | 
						|
      Components.SupportFriction supportFriction(useHeatPort=true)
 | 
						|
        annotation (Placement(transformation(extent={{30,20},{50,40}})));
 | 
						|
      Components.Spring spring(c=100, s_rel(fixed=true))
 | 
						|
        annotation (Placement(transformation(extent={{60,20},{80,40}})));
 | 
						|
      Components.Mass mass3(
 | 
						|
        m=1,
 | 
						|
        L=0.1,
 | 
						|
        s(fixed=false),
 | 
						|
        v(fixed=true))
 | 
						|
        annotation (Placement(transformation(extent={{90,20},{110,40}})));
 | 
						|
      Components.Brake brake(fn_max=10, useHeatPort=true)
 | 
						|
        annotation (Placement(transformation(extent={{120,20},{140,40}})));
 | 
						|
      Blocks.Sources.Sine sine2(amplitude=10, freqHz=2)
 | 
						|
        annotation (Placement(transformation(extent={{100,50},{120,70}})));
 | 
						|
      Components.MassWithStopAndFriction massWithStopAndFriction(
 | 
						|
        L=0.1,
 | 
						|
        m=1,
 | 
						|
        F_prop=0.5,
 | 
						|
        F_Coulomb=1,
 | 
						|
        F_Stribeck=2,
 | 
						|
        fexp=2,
 | 
						|
        smin=0,
 | 
						|
        smax=0.4,
 | 
						|
        v(fixed=true),
 | 
						|
        useHeatPort=true)
 | 
						|
        annotation (Placement(transformation(extent={{180,20},{200,40}})));
 | 
						|
      Thermal.HeatTransfer.Components.Convection convection
 | 
						|
        annotation (Placement(transformation(extent={{-10,-40},{10,-60}})));
 | 
						|
      Blocks.Sources.Constant const(k=20)
 | 
						|
        annotation (Placement(transformation(extent={{-30,-90},{-10,-70}})));
 | 
						|
      Thermal.HeatTransfer.Celsius.FixedTemperature TAmbient(T=25)
 | 
						|
        "Ambient temperature"
 | 
						|
        annotation (Placement(transformation(extent={{40,-60},{20,-40}})));
 | 
						|
      Components.Fixed fixed2
 | 
						|
        annotation (Placement(transformation(extent={{-120,-10},{-100,10}})));
 | 
						|
      Components.SpringDamper springDamper1(
 | 
						|
        c=10000,
 | 
						|
        d=1000,
 | 
						|
        useHeatPort=true,
 | 
						|
        s_rel(fixed=true))
 | 
						|
        annotation (Placement(transformation(extent={{150,20},{170,40}})));
 | 
						|
    equation
 | 
						|
 | 
						|
      connect(mass1.flange_b, springDamper.flange_a)
 | 
						|
                                                    annotation (Line(
 | 
						|
          points={{-40,30},{-30,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(sine1.y, force.f) annotation (Line(
 | 
						|
          points={{-99,30},{-92,30}},
 | 
						|
          color={0,0,127},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(force.flange, mass1.flange_a) annotation (Line(
 | 
						|
          points={{-70,30},{-60,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(mass1.flange_a, damper.flange_a) annotation (Line(
 | 
						|
          points={{-60,30},{-60,0}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(damper.flange_b, fixed1.flange) annotation (Line(
 | 
						|
          points={{-60,-20},{-60,-30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(springDamper.flange_b, mass2.flange_a) annotation (Line(
 | 
						|
          points={{-10,30},{0,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(mass2.flange_b, supportFriction.flange_a) annotation (Line(
 | 
						|
          points={{20,30},{30,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(supportFriction.flange_b, spring.flange_a) annotation (Line(
 | 
						|
          points={{50,30},{60,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(spring.flange_b, mass3.flange_a) annotation (Line(
 | 
						|
          points={{80,30},{90,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(mass3.flange_b, brake.flange_a) annotation (Line(
 | 
						|
          points={{110,30},{120,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(sine2.y, brake.f_normalized) annotation (Line(
 | 
						|
          points={{121,60},{130,60},{130,41}},
 | 
						|
          color={0,0,127},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(elastoGap.flange_b, mass1.flange_a) annotation (Line(
 | 
						|
          points={{-70,0},{-60,0},{-60,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(const.y,convection. Gc) annotation (Line(
 | 
						|
          points={{-9,-80},{0,-80},{0,-60}},
 | 
						|
          color={0,0,127},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(TAmbient.port,convection. fluid) annotation (Line(
 | 
						|
          points={{20,-50},{10,-50}},
 | 
						|
          color={191,0,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(elastoGap.flange_a, fixed2.flange) annotation (Line(
 | 
						|
          points={{-90,0},{-110,0}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(elastoGap.heatPort, convection.solid) annotation (Line(
 | 
						|
          points={{-90,-10},{-90,-50},{-10,-50}},
 | 
						|
          color={191,0,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(damper.heatPort, convection.solid) annotation (Line(
 | 
						|
          points={{-50,0},{-50,-50},{-10,-50}},
 | 
						|
          color={191,0,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(springDamper.heatPort, convection.solid) annotation (Line(
 | 
						|
          points={{-30,20},{-30,-50},{-10,-50}},
 | 
						|
          color={191,0,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(supportFriction.heatPort, convection.solid) annotation (Line(
 | 
						|
          points={{30,20},{30,0},{-30,0},{-30,-50},{-10,-50}},
 | 
						|
          color={191,0,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(brake.heatPort, convection.solid) annotation (Line(
 | 
						|
          points={{120,20},{120,0},{-30,0},{-30,-50},{-10,-50}},
 | 
						|
          color={191,0,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(massWithStopAndFriction.heatPort, convection.solid) annotation (
 | 
						|
          Line(
 | 
						|
          points={{180,20},{180,0},{-30,0},{-30,-50},{-10,-50}},
 | 
						|
          color={191,0,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(brake.flange_b, springDamper1.flange_a) annotation (Line(
 | 
						|
          points={{140,30},{150,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(springDamper1.flange_b, massWithStopAndFriction.flange_a)
 | 
						|
        annotation (Line(
 | 
						|
          points={{170,30},{180,30}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(springDamper1.heatPort, convection.solid) annotation (Line(
 | 
						|
          points={{150,20},{150,0},{-30,0},{-30,-50},{-10,-50}},
 | 
						|
          color={191,0,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This model demonstrates how to model the dissipated power of a Translational model,
 | 
						|
by enabling the heatPort of all components and connecting these heatPorts via
 | 
						|
a convection element to the environment. The total heat flow generated by the
 | 
						|
elements and transported to the environment
 | 
						|
is present in variable convection.fluid.
 | 
						|
</p>
 | 
						|
</html>"),
 | 
						|
        experiment(StopTime=2.0, Interval=0.001),
 | 
						|
        Diagram(coordinateSystem(extent={{-120,-100},{200,100}},
 | 
						|
              preserveAspectRatio=false)));
 | 
						|
    end HeatLosses;
 | 
						|
 | 
						|
    package Utilities "Utility classes used by the Example models"
 | 
						|
      extends Modelica.Icons.UtilitiesPackage;
 | 
						|
      function GenerateStribeckFrictionTable
 | 
						|
        "Generate Stribeck friction table for example Friction for the SupportFriction"
 | 
						|
         extends Modelica.Icons.Function;
 | 
						|
         input Real F_prop(final unit="N.s/m", final min=0)
 | 
						|
          "Velocity dependent friction coefficient";
 | 
						|
         input Modelica.SIunits.Force F_Coulomb
 | 
						|
          "Constant friction: Coulomb force";
 | 
						|
         input Modelica.SIunits.Force F_Stribeck "Stribeck effect";
 | 
						|
         input Real fexp(final unit="s/m", final min=0) "Exponential decay";
 | 
						|
         input Real v_max "Generate table from v=0 ... v_max";
 | 
						|
         input Integer nTable(min=2)=100 "Number of table points";
 | 
						|
         output Real table[nTable,2] "Friction table";
 | 
						|
      algorithm
 | 
						|
         for i in 1:nTable loop
 | 
						|
            table[i,1] :=v_max*(i - 1)/(nTable - 1);
 | 
						|
            table[i,2] :=F_Coulomb + F_prop*table[i, 1] +
 | 
						|
                         F_Stribeck*exp(-fexp*table[i, 1]);
 | 
						|
         end for;
 | 
						|
        annotation (Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Returns a table with the friction characteristic table[nTable,2] = [0, f1; ....; v_max, fn], where the first
 | 
						|
column is the velocity v in the range 0..v_max and the second column is the friction force
 | 
						|
according to the Stribeck curve:
 | 
						|
</p>
 | 
						|
<pre>
 | 
						|
  F_Coulomb + F_prop*v + F_Stribeck*exp(-fexp*v);
 | 
						|
</pre>
 | 
						|
 | 
						|
</html>"));
 | 
						|
      end GenerateStribeckFrictionTable;
 | 
						|
      annotation (Documentation(info="<html>
 | 
						|
<p>Utility models and functions used in the Examples</p>
 | 
						|
</html>"));
 | 
						|
    end Utilities;
 | 
						|
    annotation (
 | 
						|
      Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This package contains example models to demonstrate the usage of the
 | 
						|
Translational package. Open the models and
 | 
						|
simulate them according to the provided description in the models.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"));
 | 
						|
  end Examples;
 | 
						|
 | 
						|
  package Components "Components for 1D translational mechanical drive trains"
 | 
						|
    extends Modelica.Icons.Package;
 | 
						|
 | 
						|
    model Fixed "Fixed flange"
 | 
						|
      parameter SI.Position s0=0 "Fixed offset position of housing";
 | 
						|
 | 
						|
      Interfaces.Flange_b flange   annotation (Placement(transformation(
 | 
						|
            origin={0,0},
 | 
						|
            extent={{-10,10},{10,-10}},
 | 
						|
            rotation=180)));
 | 
						|
    equation
 | 
						|
      flange.s = s0;
 | 
						|
      annotation (
 | 
						|
        Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-80,-40},{80,-40}}, color={0,0,0}),
 | 
						|
            Line(points={{80,-40},{40,-80}}, color={0,0,0}),
 | 
						|
            Line(points={{40,-40},{0,-80}}, color={0,0,0}),
 | 
						|
            Line(points={{0,-40},{-40,-80}}, color={0,0,0}),
 | 
						|
            Line(points={{-40,-40},{-80,-80}}, color={0,0,0}),
 | 
						|
            Line(points={{0,-40},{0,-10}}, color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,-90},{150,-130}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255})}),
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
The <i>flange</i> of a 1D translational mechanical system <i>fixed</i>
 | 
						|
at an position s0 in the <i>housing</i>. May be used:
 | 
						|
</p>
 | 
						|
<ul>
 | 
						|
<li> to connect a compliant element, such as a spring or a damper,
 | 
						|
     between a sliding mass and the housing.
 | 
						|
<li> to fix a rigid element, such as a sliding mass, at a specific
 | 
						|
     position.
 | 
						|
</ul>
 | 
						|
 | 
						|
</html>"));
 | 
						|
    end Fixed;
 | 
						|
 | 
						|
    model Mass "Sliding mass with inertia"
 | 
						|
      parameter SI.Mass m(min=0, start=1) "Mass of the sliding mass";
 | 
						|
      parameter StateSelect stateSelect=StateSelect.default
 | 
						|
        "Priority to use s and v as states" annotation(Dialog(tab="Advanced"));
 | 
						|
      extends Translational.Interfaces.PartialRigid(L=0,s(start=0, stateSelect=stateSelect));
 | 
						|
      SI.Velocity v(start=0, stateSelect=stateSelect)
 | 
						|
        "Absolute velocity of component";
 | 
						|
      SI.Acceleration a(start=0) "Absolute acceleration of component";
 | 
						|
 | 
						|
    equation
 | 
						|
      v = der(s);
 | 
						|
      a = der(v);
 | 
						|
      m*a = flange_a.f + flange_b.f;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Sliding mass with <i>inertia, without friction</i> and two rigidly connected flanges.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
The sliding mass has the length L, the position coordinate s is in the middle.
 | 
						|
Sign convention: A positive force at flange flange_a moves the sliding mass in the positive direction.
 | 
						|
A negative force at flange flange_a moves the sliding mass to the negative direction.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-100,0},{-55,0}}, color={0,127,0}),
 | 
						|
            Line(points={{55,0},{100,0}}, color={0,127,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-55,-30},{56,30}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Sphere,
 | 
						|
              fillColor={255,255,255}),
 | 
						|
            Polygon(
 | 
						|
              points={{50,-90},{20,-80},{20,-100},{50,-90}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-60,-90},{20,-90}}, color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,85},{150,45}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,-45},{150,-75}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="m=%m")}),
 | 
						|
        Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-100,0},{-55,0}}, color={0,127,0}),
 | 
						|
            Line(points={{55,0},{100,0}}, color={0,127,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-55,-30},{55,30}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Sphere,
 | 
						|
              fillColor={255,255,255}),
 | 
						|
            Polygon(
 | 
						|
              points={{50,-90},{20,-80},{20,-100},{50,-90}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-60,-90},{20,-90}}, color={0,0,0}),
 | 
						|
            Line(points={{-100,-29},{-100,-61}}, color={0,0,0}),
 | 
						|
            Line(points={{100,-61},{100,-28}}, color={0,0,0}),
 | 
						|
            Line(points={{-98,-60},{98,-60}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{-101,-60},{-96,-59},{-96,-61},{-101,-60}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Polygon(
 | 
						|
              points={{100,-60},{95,-61},{95,-59},{100,-60}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-44,-41},{51,-57}},
 | 
						|
              textString="Length L",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Line(points={{0,30},{0,53}}, color={0,0,0}),
 | 
						|
            Line(points={{-72,40},{1,40}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{-7,42},{-7,38},{-1,40},{-7,42}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-61,53},{-9,42}},
 | 
						|
              textString="Position s",
 | 
						|
              lineColor={0,0,255})}));
 | 
						|
    end Mass;
 | 
						|
 | 
						|
    model Rod "Rod without inertia"
 | 
						|
      extends Translational.Interfaces.PartialRigid;
 | 
						|
 | 
						|
    equation
 | 
						|
      0 = flange_a.f + flange_b.f;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Rod <i>without inertia</i> and two rigidly connected flanges.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-100,0},{-55,0}}, color={0,127,0}),
 | 
						|
            Line(points={{53,0},{99,0}}, color={0,127,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{50,-90},{20,-80},{20,-100},{50,-90}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-60,-90},{20,-90}}, color={0,0,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-55,10},{53,-10}},
 | 
						|
              lineColor={160,160,164},
 | 
						|
              fillColor={192,192,192},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-150,80},{150,40}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,-30},{150,-60}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="L=%L")}),
 | 
						|
        Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-100,0},{-55,0}}, color={0,127,0}),
 | 
						|
            Line(points={{54,0},{100,0}}, color={0,127,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{50,-90},{20,-80},{20,-100},{50,-90}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-60,-90},{20,-90}}, color={0,0,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-55,3},{53,-4}},
 | 
						|
              lineColor={160,160,164},
 | 
						|
              fillColor={192,192,192},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-100,-29},{-100,-61}}, color={0,0,0}),
 | 
						|
            Line(points={{100,-61},{100,-28}}, color={0,0,0}),
 | 
						|
            Line(points={{-98,-60},{98,-60}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{-101,-60},{-96,-59},{-96,-61},{-101,-60}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Polygon(
 | 
						|
              points={{100,-60},{95,-61},{95,-59},{100,-60}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-44,-41},{51,-57}},
 | 
						|
              textString="Length L",
 | 
						|
              lineColor={0,0,255})}));
 | 
						|
    end Rod;
 | 
						|
 | 
						|
    model Spring "Linear 1D translational spring"
 | 
						|
      extends Translational.Interfaces.PartialCompliant;
 | 
						|
      parameter SI.TranslationalSpringConstant c(final min=0, start = 1)
 | 
						|
        "Spring constant";
 | 
						|
      parameter SI.Distance s_rel0=0 "Unstretched spring length";
 | 
						|
 | 
						|
    equation
 | 
						|
      f = c*(s_rel - s_rel0);
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
A <i>linear 1D translational spring</i>. The component can be connected either
 | 
						|
between two sliding masses, or between
 | 
						|
a sliding mass and the housing (model Fixed), to describe
 | 
						|
a coupling of the sliding mass with the housing via a spring.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-60,-90},{20,-90}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{50,-90},{20,-80},{20,-100},{50,-90}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-150,90},{150,50}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Line(points={{-98,0},{-60,0},{-44,-30},{-16,30},{14,-30},{44,30},{
 | 
						|
                  60,0},{100,0}},color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,-45},{150,-75}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="c=%c")}),
 | 
						|
        Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-100,0},{-100,65}}, color={128,128,128}),
 | 
						|
            Line(points={{100,0},{100,65}}, color={128,128,128}),
 | 
						|
            Line(points={{-100,60},{100,60}}, color={128,128,128}),
 | 
						|
            Polygon(
 | 
						|
              points={{90,63},{100,60},{90,57},{90,63}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-56,66},{36,81}},
 | 
						|
              lineColor={0,0,255},
 | 
						|
              textString="s_rel"),
 | 
						|
            Line(points={{-86,0},{-60,0},{-44,-30},{-16,30},{14,-30},{44,30},{
 | 
						|
                  60,0},{84,0}}, color={0,0,0})}));
 | 
						|
    end Spring;
 | 
						|
 | 
						|
    model Damper "Linear 1D translational damper"
 | 
						|
      extends Translational.Interfaces.PartialCompliantWithRelativeStates;
 | 
						|
      parameter SI.TranslationalDampingConstant d(final min=0, start = 0)
 | 
						|
        "Damping constant";
 | 
						|
      extends
 | 
						|
        Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT;
 | 
						|
    equation
 | 
						|
      f = d*v_rel;
 | 
						|
      lossPower = f*v_rel;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
<i>Linear, velocity dependent damper</i> element. It can be either connected
 | 
						|
between a sliding mass and the housing (model Fixed), or
 | 
						|
between two sliding masses.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-90,0},{-60,0}}, color={0,0,0}),
 | 
						|
            Line(points={{-60,-30},{-60,30}}, color={0,0,0}),
 | 
						|
            Line(points={{-60,-30},{60,-30}}, color={0,0,0}),
 | 
						|
            Line(points={{-60,30},{60,30}}, color={0,0,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-60,30},{30,-30}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={192,192,192},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{30,0},{90,0}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{50,-90},{20,-80},{20,-100},{50,-90}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-60,-90},{20,-90}}, color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,90},{150,50}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,-45},{150,-75}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="d=%d"),
 | 
						|
            Line(visible=useHeatPort,
 | 
						|
              points={{-100,-100},{-100,-20},{-14,-20}},
 | 
						|
              color={191,0,0},
 | 
						|
              pattern=LinePattern.Dot,
 | 
						|
              smooth=Smooth.None)}),
 | 
						|
        Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-90,0},{-60,0}}, color={0,0,0}),
 | 
						|
            Line(points={{-60,-30},{-60,30}}, color={0,0,0}),
 | 
						|
            Line(points={{-60,-30},{60,-30}}, color={0,0,0}),
 | 
						|
            Line(points={{-60,30},{60,30}}, color={0,0,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-60,30},{30,-30}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={192,192,192},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{30,0},{90,0}}, color={0,0,0}),
 | 
						|
            Line(points={{-50,60},{50,60}}, color={128,128,128}),
 | 
						|
            Polygon(
 | 
						|
              points={{50,63},{60,60},{50,57},{50,63}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-58,68},{42,78}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              textString="der(s_rel)")}));
 | 
						|
    end Damper;
 | 
						|
 | 
						|
    model SpringDamper "Linear 1D translational spring and damper in parallel"
 | 
						|
      extends Translational.Interfaces.PartialCompliantWithRelativeStates;
 | 
						|
      parameter SI.TranslationalSpringConstant c(final min=0, start = 1)
 | 
						|
        "Spring constant";
 | 
						|
      parameter SI.TranslationalDampingConstant d(final min=0, start = 1)
 | 
						|
        "Damping constant";
 | 
						|
      parameter SI.Position s_rel0=0 "Unstretched spring length";
 | 
						|
      extends
 | 
						|
        Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT;
 | 
						|
    protected
 | 
						|
      Modelica.SIunits.Force f_c "Spring force";
 | 
						|
      Modelica.SIunits.Force f_d "Damping force";
 | 
						|
    equation
 | 
						|
      f_c = c*(s_rel - s_rel0);
 | 
						|
      f_d = d*v_rel;
 | 
						|
      f = f_c + f_d;
 | 
						|
      lossPower = f_d*v_rel;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
A <i>spring and damper element connected in parallel</i>.
 | 
						|
The component can be
 | 
						|
connected either between two sliding masses to describe the elasticity
 | 
						|
and damping, or between a sliding mass and the housing (model Fixed),
 | 
						|
to describe a coupling of the sliding mass with the housing via a spring/damper.
 | 
						|
</p>
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-80,40},{-60,40},{-45,10},{-15,70},{15,10},{45,70},{
 | 
						|
                  60,40},{80,40}}, color={0,0,0}),
 | 
						|
            Line(points={{-80,40},{-80,-70}}, color={0,0,0}),
 | 
						|
            Line(points={{-80,-70},{-52,-70}}, color={0,0,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-52,-49},{38,-91}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={192,192,192},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-52,-49},{68,-49}}, color={0,0,0}),
 | 
						|
            Line(points={{-51,-91},{69,-91}}, color={0,0,0}),
 | 
						|
            Line(points={{38,-70},{80,-70}}, color={0,0,0}),
 | 
						|
            Line(points={{80,40},{80,-70}}, color={0,0,0}),
 | 
						|
            Line(points={{-90,0},{-80,0}}, color={0,0,0}),
 | 
						|
            Line(points={{80,0},{90,0}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{53,-18},{23,-8},{23,-28},{53,-18}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-57,-18},{23,-18}}, color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,120},{150,80}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,-135},{150,-165}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="d=%d"),
 | 
						|
            Text(
 | 
						|
              extent={{-150,-100},{150,-130}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="c=%c"),
 | 
						|
            Line(visible=useHeatPort,
 | 
						|
              points={{-100,-100},{-100,-80},{-5,-80}},
 | 
						|
              color={191,0,0},
 | 
						|
              pattern=LinePattern.Dot,
 | 
						|
              smooth=Smooth.None)}),
 | 
						|
        Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(
 | 
						|
              points={{-80,32},{-58,32},{-43,2},{-13,62},{17,2},{47,62},{62,32},
 | 
						|
                  {80,32}},
 | 
						|
              color={0,0,0},
 | 
						|
              thickness=0.5),
 | 
						|
            Line(points={{-100,31},{-100,96}}, color={128,128,128}),
 | 
						|
            Line(points={{100,29},{100,94}}, color={128,128,128}),
 | 
						|
            Line(points={{-98,82},{100,82}}, color={128,128,128}),
 | 
						|
            Polygon(
 | 
						|
              points={{90,85},{100,82},{90,79},{90,85}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-63,83},{46,103}},
 | 
						|
              lineColor={0,0,255},
 | 
						|
              textString="s_rel"),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-52,-28},{38,-72}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={192,192,192},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-51,-72},{69,-72}}, color={0,0,0}),
 | 
						|
            Line(points={{-52,-28},{68,-28}}, color={0,0,0}),
 | 
						|
            Line(points={{38,-50},{80,-50}}, color={0,0,0}),
 | 
						|
            Line(points={{-80,-50},{-52,-50}}, color={0,0,0}),
 | 
						|
            Line(points={{-80,32},{-80,-50}}, color={0,0,0}),
 | 
						|
            Line(points={{80,32},{80,-50}}, color={0,0,0}),
 | 
						|
            Line(points={{-90,0},{-80,0}}, color={0,0,0}),
 | 
						|
            Line(points={{90,0},{80,0}}, color={0,0,0})}));
 | 
						|
    end SpringDamper;
 | 
						|
 | 
						|
    model ElastoGap "1D translational spring damper combination with gap"
 | 
						|
      extends
 | 
						|
        Modelica.Mechanics.Translational.Interfaces.PartialCompliantWithRelativeStates;
 | 
						|
      parameter SI.TranslationalSpringConstant c(final min=0, start=1)
 | 
						|
        "Spring constant";
 | 
						|
      parameter SI.TranslationalDampingConstant d(final min=0, start=1)
 | 
						|
        "Damping constant";
 | 
						|
      parameter SI.Position s_rel0=0 "Unstretched spring length";
 | 
						|
      parameter Real n(final min=1) = 1
 | 
						|
        "Exponent of spring force ( f_c = -c*|s_rel-s_rel0|^n )";
 | 
						|
      extends
 | 
						|
        Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT;
 | 
						|
 | 
						|
    /*
 | 
						|
Please note that initialization might fail due to the nonlinear spring characteristic
 | 
						|
(spring force is zero for s_rel > s_rel0)
 | 
						|
if a positive force is acting on the element and no other force balances this force
 | 
						|
(e.g., when setting both initial velocity and acceleration to 0)
 | 
						|
*/
 | 
						|
      Boolean contact "=true, if contact, otherwise no contact";
 | 
						|
    protected
 | 
						|
      Modelica.SIunits.Force f_c "Spring force";
 | 
						|
      Modelica.SIunits.Force f_d2 "Linear damping force";
 | 
						|
      Modelica.SIunits.Force f_d
 | 
						|
        "Linear damping force which is limited by spring force (|f_d| <= |f_c|)";
 | 
						|
    equation
 | 
						|
      // Modify contact force, so that it is only "pushing" and not
 | 
						|
      // "pulling/sticking" and that it is continuous
 | 
						|
      contact = s_rel < s_rel0;
 | 
						|
      f_c  = smooth(1, noEvent( if contact then -c*abs(s_rel - s_rel0)^n else 0));
 | 
						|
      f_d2 = if contact then d*v_rel else 0;
 | 
						|
      f_d  = smooth(0, noEvent( if contact then (if f_d2 <  f_c then  f_c else
 | 
						|
                                                 if f_d2 > -f_c then -f_c else f_d2) else 0));
 | 
						|
      f = f_c + f_d;
 | 
						|
      lossPower = f_d*v_rel;
 | 
						|
      annotation (
 | 
						|
         Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This component models a spring damper combination that can lift off.
 | 
						|
It can be connected between a sliding mass and the housing (model
 | 
						|
<a href=\"modelica://Modelica.Mechanics.Translational.Components.Fixed\">Fixed</a>),
 | 
						|
to describe the contact of a sliding mass with the housing.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
As long as s_rel > s_rel0, no force is exerted (s_rel = flange_b.s - flange_a.s).
 | 
						|
If s_rel ≤ s_rel0, the contact force is basically computed with a linear
 | 
						|
spring/damper characteristic. With parameter n≥1 (exponent of spring force),
 | 
						|
a nonlinear spring force can be modeled:
 | 
						|
</p>
 | 
						|
 | 
						|
<pre>
 | 
						|
   desiredContactForce = c*|s_rel - s_rel0|^n + d*<b>der</b>(s_rel)
 | 
						|
</pre>
 | 
						|
 | 
						|
<p>
 | 
						|
Note, Hertzian contact is described by:
 | 
						|
</p>
 | 
						|
<ul>
 | 
						|
<li> Contact between two metallic spheres: n=1.5</li>
 | 
						|
<li> Contact between two metallic plates: n=1</li>
 | 
						|
</ul>
 | 
						|
 | 
						|
<p>
 | 
						|
The above force law leads to the following difficulties:
 | 
						|
</p>
 | 
						|
 | 
						|
<ol>
 | 
						|
<li> If the damper force becomes larger as the spring force and with opposite sign,
 | 
						|
     the contact force would be \"pulling/sticking\" which is unphysical, since during
 | 
						|
     contact only pushing forces can occur.</li>
 | 
						|
 | 
						|
<li> When contact occurs with a non-zero relative speed (which is the usual
 | 
						|
     situation), the damping force has a non-zero value and therefore the contact
 | 
						|
     force changes discontinuously at s_rel = s_rel0. Again, this is not physical
 | 
						|
     because the force can only change continuously. (Note, this component is not an
 | 
						|
     idealized model where a steep characteristic is approximated by a discontinuity,
 | 
						|
     but it shall model the steep characteristic.)</li>
 | 
						|
</ol>
 | 
						|
 | 
						|
<p>
 | 
						|
In the literature there are several proposals to fix problem (2). Especially, often
 | 
						|
the following model is used (see, e.g.,
 | 
						|
Lankarani, Nikravesh: Continuous Contact Force Models for Impact
 | 
						|
Analysis in Multibody Systems, Nonlinear Dynamics 5, pp. 193-207, 1994,
 | 
						|
<a href=\"http://www.springerlink.com/content/h50x61270q06p65n/fulltext.pdf\">pdf-download</a>):
 | 
						|
</p>
 | 
						|
 | 
						|
<pre>
 | 
						|
   f = c*s_rel^n + (d*s_rel^n)*<b>der</b>(s_rel)
 | 
						|
</pre>
 | 
						|
 | 
						|
<p>
 | 
						|
However, this and other models proposed in literature violate
 | 
						|
issue (1), i.e., unphysical pulling forces can occur (if d*<b>der</b>(s_rel)
 | 
						|
becomes large enough). Note, if the force law is of the form \"f = f_c + f_d\", then a
 | 
						|
necessary condition is that |f_d| ≤ |f_c|, otherwise (1) and (2) are violated.
 | 
						|
For this reason, the most simplest approach is used in the ElastoGap model
 | 
						|
to fix both problems by using this necessary condition in the force law directly.
 | 
						|
If s_rel0 = 0, the equations are:
 | 
						|
</p>
 | 
						|
 | 
						|
<pre>
 | 
						|
    <b>if</b> s_rel ≥ 0 <b>then</b>
 | 
						|
       f = 0;    // contact force
 | 
						|
    <b>else</b>
 | 
						|
       f_c  = -c*|s_rel|^n;          // contact spring force (Hertzian contact force)
 | 
						|
       f_d2 = d*<b>der</b>(s_rel);         // linear contact damper force
 | 
						|
       f_d  = <b>if</b> f_d2 <  f_c <b>then</b>  f_c <b>else</b>
 | 
						|
              <b>if</b> f_d2 > -f_c <b>then</b> -f_c <b>else</b> f_d2;  // bounded damper force
 | 
						|
       f    = f_c + f_d;            // contact force
 | 
						|
    <b>end if</b>;
 | 
						|
</pre>
 | 
						|
 | 
						|
<p>
 | 
						|
Note, since |f_d| ≤ |f_c|, pulling forces cannot occur and the contact force
 | 
						|
is always continuous, especially around the start of the penetration at s_rel = s_rel0.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
In the next figure, a typical simulation with the ElastoGap model is shown
 | 
						|
(<a href=\"modelica://Modelica.Mechanics.Translational.Examples.ElastoGap\">Examples.ElastoGap</a>)
 | 
						|
where the different effects are visualized:
 | 
						|
</p>
 | 
						|
 | 
						|
<ol>
 | 
						|
<li> Curve 1 (elastoGap1.f) is the unmodified contact force, i.e., the linear spring/damper
 | 
						|
     characteristic. A pulling/sticking force is present at the end of the contact.</li>
 | 
						|
<li> Curve 2 (elastoGap2.f) is the contact force, where the force is explicitly set to
 | 
						|
     zero when pulling/sticking occurs. The contact force is discontinuous when contact starts.</li>
 | 
						|
<li> Curve 3 (elastoGap3.f) is the ElastoGap model of this library. No discontinuity and no
 | 
						|
     pulling/sticking occurs.</li>
 | 
						|
</ol>
 | 
						|
 | 
						|
<p>
 | 
						|
<img src=\"modelica://Modelica/Resources/Images/Mechanics/Translational/ElastoGap1.png\">
 | 
						|
</p>
 | 
						|
</html>"),        Diagram(coordinateSystem(
 | 
						|
          preserveAspectRatio=false,
 | 
						|
          extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-100,0},{-50,0}}, color={0,127,0}),
 | 
						|
            Line(
 | 
						|
              points={{-48,34},{-48,-46}},
 | 
						|
              color={0,0,0},
 | 
						|
              thickness=1),
 | 
						|
            Line(points={{8,40},{8,2}}, color={0,0,0}),
 | 
						|
            Line(points={{-2,0},{38,0},{38,44},{-2,44}}, color={0,0,0}),
 | 
						|
            Line(points={{38,22},{72,22}}, color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              points={{-12,-38},{-12,20}},
 | 
						|
              color={0,0,0},
 | 
						|
              thickness=1),
 | 
						|
            Line(points={{-12,22},{8,22}}, color={0,0,0}),
 | 
						|
            Line(points={{-12,-38},{-2,-38}}, color={0,0,0}),
 | 
						|
            Line(points={{72,0},{100,0}}, color={0,127,0}),
 | 
						|
            Line(points={{72,22},{72,-42}}, color={0,0,0}),
 | 
						|
            Line(points={{-2,-38},{10,-28},{22,-48},{38,-28},{50,-48},{64,-28},
 | 
						|
                  {72,-40}}, color={0,0,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{8,44},{38,0}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={192,192,192},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-64,-80},{64,-64}},
 | 
						|
              lineColor={0,0,255},
 | 
						|
              textString="s_rel"),
 | 
						|
            Line(points={{-100,-29},{-100,-61}}, color={0,0,0}),
 | 
						|
            Line(points={{100,-61},{100,-28}}, color={0,0,0}),
 | 
						|
            Line(points={{-98,-60},{98,-60}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{-101,-60},{-96,-59},{-96,-61},{-101,-60}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Polygon(
 | 
						|
              points={{100,-60},{95,-61},{95,-59},{100,-60}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid)}),
 | 
						|
        Icon(coordinateSystem(
 | 
						|
          preserveAspectRatio=true,
 | 
						|
          extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-98,0},{-48,0}}, color={0,127,0}),
 | 
						|
            Line(
 | 
						|
              points={{-48,38},{-48,-38}},
 | 
						|
              color={0,0,0},
 | 
						|
              thickness=1),
 | 
						|
            Line(points={{8,-10},{8,-48}},
 | 
						|
                                        color={0,0,0}),
 | 
						|
            Line(points={{-2,-50},{38,-50},{38,-6},{-2,-6}},
 | 
						|
                                                         color={0,0,0}),
 | 
						|
            Line(points={{38,-28},{72,-28}},
 | 
						|
                                           color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              points={{-12,-38},{-12,36}},
 | 
						|
              color={0,0,0},
 | 
						|
              thickness=1),
 | 
						|
            Line(points={{-12,-28},{8,-28}},
 | 
						|
                                           color={0,0,0}),
 | 
						|
            Line(points={{-12,24},{-6,24}},   color={0,0,0}),
 | 
						|
            Line(points={{72,0},{98,0}}, color={0,127,0}),
 | 
						|
            Line(points={{72,22},{72,-42}}, color={0,0,0}),
 | 
						|
            Line(points={{-6,24},{6,34},{18,14},{34,34},{46,14},{60,34},{68,22}},
 | 
						|
                             color={0,0,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{8,-6},{38,-50}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={192,192,192},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-52,-70},{28,-70}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{58,-70},{28,-60},{28,-80},{58,-70}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-150,100},{150,60}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255},
 | 
						|
              pattern=LinePattern.Dot),
 | 
						|
            Text(
 | 
						|
              extent={{-150,-125},{150,-95}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="c=%c"),
 | 
						|
            Text(
 | 
						|
              extent={{-150,-160},{150,-130}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="d=%d"),
 | 
						|
            Line(points={{68,22},{72,22}},    color={0,0,0}),
 | 
						|
            Line(visible=useHeatPort,
 | 
						|
              points={{-100,-100},{-100,-44},{22,-44},{22,-28}},
 | 
						|
              color={191,0,0},
 | 
						|
              pattern=LinePattern.Dot,
 | 
						|
              smooth=Smooth.None)}));
 | 
						|
    end ElastoGap;
 | 
						|
 | 
						|
    model SupportFriction "Coulomb friction in support"
 | 
						|
 | 
						|
      extends
 | 
						|
        Modelica.Mechanics.Translational.Interfaces.PartialElementaryTwoFlangesAndSupport2;
 | 
						|
      extends
 | 
						|
        Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT;
 | 
						|
 | 
						|
      parameter Real f_pos[:, 2]=[0, 1]
 | 
						|
        "[v, f] Positive sliding friction characteristic (v>=0)";
 | 
						|
      parameter Real peak(final min=1) = 1
 | 
						|
        "peak*f_pos[1,2] = Maximum friction force for v==0";
 | 
						|
      extends Translational.Interfaces.PartialFriction;
 | 
						|
 | 
						|
      SI.Position s;
 | 
						|
      SI.Force f "Friction force";
 | 
						|
      SI.Velocity v "Absolute velocity of flange_a and flange_b";
 | 
						|
      SI.Acceleration a "Absolute acceleration of flange_a and flange_b";
 | 
						|
    equation
 | 
						|
      // Constant auxiliary variables
 | 
						|
      f0 = Modelica.Math.tempInterpol1(0, f_pos, 2);
 | 
						|
      f0_max = peak*f0;
 | 
						|
      free = false;
 | 
						|
 | 
						|
      s = flange_a.s - s_support;
 | 
						|
      flange_a.s = flange_b.s;
 | 
						|
 | 
						|
    // velocity and acceleration of flanges
 | 
						|
      v = der(s);
 | 
						|
      a = der(v);
 | 
						|
      v_relfric = v;
 | 
						|
      a_relfric = a;
 | 
						|
 | 
						|
    // Friction force
 | 
						|
      flange_a.f + flange_b.f - f = 0;
 | 
						|
 | 
						|
    // Friction force
 | 
						|
      f = if locked then sa*unitForce else
 | 
						|
         (if startForward then          Modelica.Math.tempInterpol1( v, f_pos, 2) else
 | 
						|
          if startBackward then        -Modelica.Math.tempInterpol1(-v, f_pos, 2) else
 | 
						|
          if pre(mode) == Forward then  Modelica.Math.tempInterpol1( v, f_pos, 2) else
 | 
						|
                                       -Modelica.Math.tempInterpol1(-v, f_pos, 2));
 | 
						|
 | 
						|
      lossPower = f*v_relfric;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This element describes <b>Coulomb friction</b> in <b>support</b>,
 | 
						|
i.e., a frictional force acting between a flange and the housing.
 | 
						|
The positive sliding friction force \"f\" has to be defined
 | 
						|
by table \"f_pos\" as function of the absolute velocity \"v\".
 | 
						|
E.g.
 | 
						|
</p>
 | 
						|
<pre>
 | 
						|
       v |   f
 | 
						|
      ---+-----
 | 
						|
       0 |   0
 | 
						|
       1 |   2
 | 
						|
       2 |   5
 | 
						|
       3 |   8
 | 
						|
</pre>
 | 
						|
<p>
 | 
						|
gives the following table:
 | 
						|
</p>
 | 
						|
<pre>
 | 
						|
   f_pos = [0, 0; 1, 2; 2, 5; 3, 8];
 | 
						|
</pre>
 | 
						|
<p>
 | 
						|
Currently, only linear interpolation in the table is supported.
 | 
						|
Outside of the table, extrapolation through the last
 | 
						|
two table entries is used. It is assumed that the negative
 | 
						|
sliding friction force has the same characteristic with negative
 | 
						|
values. Friction is modelled in the following way:
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
When the absolute velocity \"v\" is not zero, the friction force
 | 
						|
is a function of v and of a constant normal force. This dependency
 | 
						|
is defined via table f_pos and can be determined by measurements,
 | 
						|
e.g., by driving the gear with constant velocity and measuring the
 | 
						|
needed driving force (= friction force).
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
When the absolute velocity becomes zero, the elements
 | 
						|
connected by the friction element become stuck, i.e., the absolute
 | 
						|
position remains constant. In this phase the friction force is
 | 
						|
calculated from a force balance due to the requirement, that
 | 
						|
the absolute acceleration shall be zero.  The elements begin
 | 
						|
to slide when the friction force exceeds a threshold value,
 | 
						|
called the maximum static friction force, computed via:
 | 
						|
</p>
 | 
						|
<pre>
 | 
						|
   maximum_static_friction = <b>peak</b> * sliding_friction(v=0)  (<b>peak</b> >= 1)
 | 
						|
</pre>
 | 
						|
<p>
 | 
						|
This procedure is implemented in a \"clean\" way by state events and
 | 
						|
leads to continuous/discrete systems of equations if friction elements
 | 
						|
are dynamically coupled which have to be solved by appropriate
 | 
						|
numerical methods. The method is described in:
 | 
						|
</p>
 | 
						|
<dl>
 | 
						|
<dt>Otter M., Elmqvist H., and Mattsson S.E. (1999):
 | 
						|
<dd><b>Hybrid Modeling in Modelica based on the Synchronous
 | 
						|
    Data Flow Principle</b>. CACSD'99, Aug. 22.-26, Hawaii.
 | 
						|
</dl>
 | 
						|
<p>
 | 
						|
More precise friction models take into account the elasticity of the
 | 
						|
material when the two elements are \"stuck\", as well as other effects,
 | 
						|
like hysteresis. This has the advantage that the friction element can
 | 
						|
be completely described by a differential equation without events. The
 | 
						|
drawback is that the system becomes stiff (about 10-20 times slower
 | 
						|
simulation) and that more material constants have to be supplied which
 | 
						|
requires more sophisticated identification. For more details, see the
 | 
						|
following references, especially (Armstrong and Canudas de Witt 1996):
 | 
						|
</p>
 | 
						|
<dl>
 | 
						|
<dt>Armstrong B. (1991):
 | 
						|
<dd><b>Control of Machines with Friction</b>. Kluwer Academic
 | 
						|
    Press, Boston MA.<br><br>
 | 
						|
<dt>Armstrong B., and Canudas de Wit C. (1996):
 | 
						|
<dd><b>Friction Modeling and Compensation.</b>
 | 
						|
    The Control Handbook, edited by W.S.Levine, CRC Press,
 | 
						|
    pp. 1369-1382.<br><br>
 | 
						|
<dt>Canudas de Wit C., Olsson H., Astroem K.J., and Lischinsky P. (1995):
 | 
						|
<dd><b>A new model for control of systems with friction.</b>
 | 
						|
    IEEE Transactions on Automatic Control, Vol. 40, No. 3, pp. 419-425.<br><br>
 | 
						|
</dl>
 | 
						|
 | 
						|
</html>"), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100,100}}),
 | 
						|
                        graphics={
 | 
						|
            Rectangle(
 | 
						|
              extent={{-90,10},{90,-10}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={215,215,215},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Ellipse(
 | 
						|
              extent={{-48,-10},{-28,-30}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              fillPattern=FillPattern.Sphere,
 | 
						|
              fillColor={175,175,175}),
 | 
						|
            Ellipse(
 | 
						|
              extent={{-10,-10},{10,-30}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              fillPattern=FillPattern.Sphere,
 | 
						|
              fillColor={175,175,175}),
 | 
						|
            Ellipse(
 | 
						|
              extent={{30,-10},{50,-30}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              fillPattern=FillPattern.Sphere,
 | 
						|
              fillColor={175,175,175}),
 | 
						|
            Polygon(
 | 
						|
              points={{-60,-30},{60,-30},{60,-12},{80,-12},{80,-50},{-80,-50},{
 | 
						|
                  -80,-12},{-60,-12},{-60,-30}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              fillPattern=FillPattern.Solid,
 | 
						|
              smooth=Smooth.None,
 | 
						|
              fillColor={175,175,175}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,100},{150,60}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Line(points={{-10,-85},{-5,-80}}, color={0,0,0}),
 | 
						|
            Line(points={{-5,-90},{5,-80}}, color={0,0,0}),
 | 
						|
            Line(points={{-10,-90},{0,-80}}, color={0,0,0}),
 | 
						|
            Line(points={{0,-90},{10,-80}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{-60,-50},{-20,-80},{20,-80},{60,-50},{-60,-50}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              smooth=Smooth.None,
 | 
						|
              fillColor={175,175,175},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Ellipse(
 | 
						|
              extent={{-50,30},{-30,10}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              fillPattern=FillPattern.Sphere,
 | 
						|
              fillColor={175,175,175}),
 | 
						|
            Ellipse(
 | 
						|
              extent={{-10,30},{10,10}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              fillPattern=FillPattern.Sphere,
 | 
						|
              fillColor={175,175,175}),
 | 
						|
            Ellipse(
 | 
						|
              extent={{30,30},{50,10}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              fillPattern=FillPattern.Sphere,
 | 
						|
              fillColor={175,175,175}),
 | 
						|
            Polygon(
 | 
						|
              points={{-60,30},{60,30},{60,12},{80,12},{80,50},{-80,50},{-80,12},
 | 
						|
                  {-60,12},{-60,30}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              fillPattern=FillPattern.Solid,
 | 
						|
              smooth=Smooth.None,
 | 
						|
              fillColor={175,175,175}),
 | 
						|
            Line(visible=useHeatPort,
 | 
						|
              points={{-100,-100},{-100,-20},{0,-20}},
 | 
						|
              color={191,0,0},
 | 
						|
              pattern=LinePattern.Dot,
 | 
						|
              smooth=Smooth.None)}));
 | 
						|
    end SupportFriction;
 | 
						|
 | 
						|
    model Brake "Brake based on Coulomb friction"
 | 
						|
 | 
						|
      extends
 | 
						|
        Modelica.Mechanics.Translational.Interfaces.PartialElementaryTwoFlangesAndSupport2;
 | 
						|
      extends
 | 
						|
        Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT;
 | 
						|
      parameter Real mue_pos[:, 2]=[0, 0.5]
 | 
						|
        "[v, f] Positive sliding friction characteristic (v>=0)";
 | 
						|
      parameter Real peak(final min=1) = 1
 | 
						|
        "peak*mue_pos[1,2] = Maximum friction force for v==0";
 | 
						|
      parameter Real cgeo(final min=0) = 1
 | 
						|
        "Geometry constant containing friction distribution assumption";
 | 
						|
      parameter SI.Force fn_max(final min=0, start=1) "Maximum normal force";
 | 
						|
      extends Translational.Interfaces.PartialFriction;
 | 
						|
 | 
						|
      SI.Position s;
 | 
						|
      SI.Force f "Brake friction force";
 | 
						|
      SI.Velocity v "Absolute velocity of flange_a and flange_b";
 | 
						|
      SI.Acceleration a "Absolute acceleration of flange_a and flange_b";
 | 
						|
 | 
						|
      Real mue0 "Friction coefficient for v=0 and forward sliding";
 | 
						|
      SI.Force fn "Normal force (=fn_max*f_normalized)";
 | 
						|
 | 
						|
      // Constant auxiliary variable
 | 
						|
      Modelica.Blocks.Interfaces.RealInput f_normalized
 | 
						|
        "Normalized force signal 0..1 (normal force = fn_max*f_normalized; brake is active if > 0)"
 | 
						|
        annotation (Placement(transformation(
 | 
						|
            origin={0,110},
 | 
						|
            extent={{20,-20},{-20,20}},
 | 
						|
            rotation=90)));
 | 
						|
    equation
 | 
						|
      mue0 = Modelica.Math.tempInterpol1(0, mue_pos, 2);
 | 
						|
 | 
						|
      s = s_a;
 | 
						|
      s = s_b;
 | 
						|
 | 
						|
      // velocity and acceleration of flanges flange_a and flange_b
 | 
						|
      v = der(s);
 | 
						|
      a = der(v);
 | 
						|
      v_relfric = v;
 | 
						|
      a_relfric = a;
 | 
						|
 | 
						|
      // Friction force, normal force and friction force for v_rel=0
 | 
						|
      flange_a.f + flange_b.f - f = 0;
 | 
						|
      fn = fn_max*f_normalized;
 | 
						|
      f0 = mue0*cgeo*fn;
 | 
						|
      f0_max = peak*f0;
 | 
						|
      free = fn <= 0;
 | 
						|
 | 
						|
      // Friction force
 | 
						|
      f = if locked then sa*unitForce else
 | 
						|
          if free then   0 else
 | 
						|
          cgeo*fn*(if startForward then          Modelica.Math.tempInterpol1( v, mue_pos, 2) else
 | 
						|
                   if startBackward then        -Modelica.Math.tempInterpol1(-v, mue_pos, 2) else
 | 
						|
                   if pre(mode) == Forward then  Modelica.Math.tempInterpol1( v, mue_pos, 2) else
 | 
						|
                                                -Modelica.Math.tempInterpol1(-v, mue_pos, 2));
 | 
						|
 | 
						|
      lossPower = f*v_relfric;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This component models a <b>brake</b>, i.e., a component where a frictional
 | 
						|
force is acting between the housing and a flange and a controlled normal
 | 
						|
force presses the flange to the housing in order to increase friction.
 | 
						|
The normal force fn has to be provided as input signal f_normalized in a normalized form
 | 
						|
(0 ≤ f_normalized ≤ 1),
 | 
						|
fn = fn_max*f_normalized, where fn_max has to be provided as parameter.
 | 
						|
Friction in the brake is modelled in the following way:
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
When the absolute velocity \"v\" is not zero, the friction force
 | 
						|
is a function of the velocity dependent friction coefficient  mue(v) , of
 | 
						|
the normal force \"fn\", and of a geometry constant \"cgeo\" which takes into
 | 
						|
account the geometry of the device and the assumptions on the friction
 | 
						|
distributions:
 | 
						|
</p>
 | 
						|
<pre>
 | 
						|
        frictional_force = <b>cgeo</b> * <b>mue</b>(v) * <b>fn</b>
 | 
						|
</pre>
 | 
						|
<p>
 | 
						|
   Typical values of coefficients of friction:
 | 
						|
</p>
 | 
						|
<pre>
 | 
						|
      dry operation   :  <b>mue</b> = 0.2 .. 0.4
 | 
						|
      operating in oil:  <b>mue</b> = 0.05 .. 0.1
 | 
						|
</pre>
 | 
						|
<p>
 | 
						|
    The positive part of the friction characteristic <b>mue</b>(v),
 | 
						|
    v >= 0, is defined via table mue_pos (first column = v,
 | 
						|
    second column = mue). Currently, only linear interpolation in
 | 
						|
    the table is supported.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
   When the absolute velocity becomes zero, the elements
 | 
						|
   connected by the friction element become stuck, i.e., the absolute
 | 
						|
   position remains constant. In this phase the friction force is
 | 
						|
   calculated from a force balance due to the requirement, that
 | 
						|
   the absolute acceleration shall be zero.  The elements begin
 | 
						|
   to slide when the friction force exceeds a threshold value,
 | 
						|
   called the  maximum static friction force, computed via:
 | 
						|
</p>
 | 
						|
<pre>
 | 
						|
       frictional_force = <b>peak</b> * <b>cgeo</b> * <b>mue</b>(w=0) * <b>fn</b>   (<b>peak</b> >= 1)
 | 
						|
</pre>
 | 
						|
<p>
 | 
						|
This procedure is implemented in a \"clean\" way by state events and
 | 
						|
leads to continuous/discrete systems of equations if friction elements
 | 
						|
are dynamically coupled. The method is described in:
 | 
						|
</p>
 | 
						|
<dl>
 | 
						|
<dt>Otter M., Elmqvist H., and Mattsson S.E. (1999):
 | 
						|
<dd><b>Hybrid Modeling in Modelica based on the Synchronous
 | 
						|
    Data Flow Principle</b>. CACSD'99, Aug. 22.-26, Hawaii.
 | 
						|
</dl>
 | 
						|
<p>
 | 
						|
More precise friction models take into account the elasticity of the
 | 
						|
material when the two elements are \"stuck\", as well as other effects,
 | 
						|
like hysteresis. This has the advantage that the friction element can
 | 
						|
be completely described by a differential equation without events. The
 | 
						|
drawback is that the system becomes stiff (about 10-20 times slower
 | 
						|
simulation) and that more material constants have to be supplied which
 | 
						|
requires more sophisticated identification. For more details, see the
 | 
						|
following references, especially (Armstrong and Canudas de Witt 1996):
 | 
						|
</p>
 | 
						|
<dl>
 | 
						|
<dt>Armstrong B. (1991):
 | 
						|
<dd><b>Control of Machines with Friction</b>. Kluwer Academic
 | 
						|
    Press, Boston MA.<br><br>
 | 
						|
<dt>Armstrong B., and Canudas de Wit C. (1996):
 | 
						|
<dd><b>Friction Modeling and Compensation.</b>
 | 
						|
    The Control Handbook, edited by W.S.Levine, CRC Press,
 | 
						|
    pp. 1369-1382.<br><br>
 | 
						|
<dt>Canudas de Wit C., Olsson H., Astroem K.J., and Lischinsky P. (1995):
 | 
						|
<dd><b>A new model for control of systems with friction.</b>
 | 
						|
    IEEE Transactions on Automatic Control, Vol. 40, No. 3, pp. 419-425.<br><br>
 | 
						|
</dl>
 | 
						|
</html>"), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100,100}}),
 | 
						|
                        graphics={
 | 
						|
            Rectangle(
 | 
						|
              extent={{-90,10},{90,-10}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={215,215,215},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-20,30},{20,20}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-20,-20},{20,-30}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Polygon(
 | 
						|
              points={{0,-30},{10,-50},{-10,-50},{0,-30}},
 | 
						|
              lineColor={0,0,127},
 | 
						|
              fillColor={0,0,127},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Polygon(
 | 
						|
              points={{10,50},{-10,50},{0,30},{10,50}},
 | 
						|
              lineColor={0,0,127},
 | 
						|
              fillColor={0,0,127},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(
 | 
						|
              points={{0,90},{0,50}},
 | 
						|
              color={0,0,0},
 | 
						|
              smooth=Smooth.None),
 | 
						|
            Rectangle(
 | 
						|
              extent={{20,28},{30,22}},
 | 
						|
              lineColor={175,175,175},
 | 
						|
              fillColor={175,175,175},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Rectangle(
 | 
						|
              extent={{20,-22},{30,-28}},
 | 
						|
              lineColor={175,175,175},
 | 
						|
              fillColor={175,175,175},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Rectangle(
 | 
						|
              extent={{30,28},{36,-102}},
 | 
						|
              lineColor={175,175,175},
 | 
						|
              fillColor={175,175,175},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Rectangle(
 | 
						|
              extent={{14,-96},{30,-102}},
 | 
						|
              lineColor={175,175,175},
 | 
						|
              fillColor={175,175,175},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(
 | 
						|
              points={{0,-50},{0,-60},{-40,-50},{-40,48},{0,60},{0,90}},
 | 
						|
              color={0,0,0},
 | 
						|
              smooth=Smooth.None),
 | 
						|
            Text(
 | 
						|
              extent={{-150,-120},{150,-160}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Line(visible=useHeatPort,
 | 
						|
              points={{-100,-102},{-100,-16},{0,-16}},
 | 
						|
              color={191,0,0},
 | 
						|
              pattern=LinePattern.Dot,
 | 
						|
              smooth=Smooth.None)}));
 | 
						|
    end Brake;
 | 
						|
 | 
						|
    model IdealGearR2T
 | 
						|
      "Gearbox transforming rotational into translational motion"
 | 
						|
      extends Modelica.Mechanics.Rotational.Components.IdealGearR2T;
 | 
						|
      annotation (Documentation(info="<html>
 | 
						|
<p>Couples rotational and translational motion, like a toothed wheel with a toothed rack, specifying the ratio of rotational / translational motion.</p>
 | 
						|
</html>"));
 | 
						|
    end IdealGearR2T;
 | 
						|
 | 
						|
    model IdealRollingWheel
 | 
						|
      "Simple 1-dim. model of an ideal rolling wheel without inertia"
 | 
						|
      extends Modelica.Mechanics.Rotational.Components.IdealRollingWheel;
 | 
						|
      annotation (Documentation(info="<html>
 | 
						|
<p>Couples rotational and translational motion, like an ideal rolling wheel, specifying the wheel radius.</p>
 | 
						|
</html>"));
 | 
						|
    end IdealRollingWheel;
 | 
						|
 | 
						|
    model InitializeFlange
 | 
						|
      "Initializes a flange with pre-defined position, speed and acceleration (usually, this is reference data from a control bus)"
 | 
						|
      extends Modelica.Blocks.Icons.Block;
 | 
						|
      parameter Boolean use_s_start = true
 | 
						|
        "= true, if initial position is defined by input s_start, otherwise not initialized";
 | 
						|
      parameter Boolean use_v_start = true
 | 
						|
        "= true, if initial speed is defined by input v_start, otherwise not initialized";
 | 
						|
      parameter Boolean use_a_start = true
 | 
						|
        "= true, if initial acceleration is defined by input a_start, otherwise not initialized";
 | 
						|
 | 
						|
      parameter StateSelect stateSelect=StateSelect.default
 | 
						|
        "Priority to use flange angle and speed as states";
 | 
						|
 | 
						|
      Modelica.Blocks.Interfaces.RealInput s_start(unit="m") if use_s_start
 | 
						|
        "Initial position of flange"
 | 
						|
        annotation (Placement(transformation(extent={{-140,40},{-100,80}},
 | 
						|
              rotation=0)));
 | 
						|
      Modelica.Blocks.Interfaces.RealInput v_start(unit="m/s") if use_v_start
 | 
						|
        "Initial speed of flange"
 | 
						|
        annotation (Placement(transformation(extent={{-140,-20},{-100,20}},
 | 
						|
              rotation=0)));
 | 
						|
      Modelica.Blocks.Interfaces.RealInput a_start(unit="m/s2") if use_a_start
 | 
						|
        "Initial angular acceleration of flange"
 | 
						|
        annotation (Placement(transformation(extent={{-140,-80},{-100,-40}},
 | 
						|
              rotation=0)));
 | 
						|
      Interfaces.Flange_b flange "Flange that is initialized" annotation (Placement(
 | 
						|
            transformation(extent={{90,-10},{110,10}}, rotation=0)));
 | 
						|
 | 
						|
      Modelica.SIunits.Position s_flange(stateSelect=stateSelect)=flange.s
 | 
						|
        "Flange position";
 | 
						|
      Modelica.SIunits.Velocity v_flange(stateSelect=stateSelect)= der(s_flange)
 | 
						|
        "= der(s_flange)";
 | 
						|
 | 
						|
    protected
 | 
						|
      encapsulated model Set_s_start "Set s_start"
 | 
						|
        import Modelica;
 | 
						|
        extends Modelica.Blocks.Icons.Block;
 | 
						|
        Modelica.Blocks.Interfaces.RealInput s_start(unit="m") "Start position"
 | 
						|
        annotation (HideResult=true, Placement(transformation(extent={{-140,-20},{
 | 
						|
                -100,20}}, rotation=0)));
 | 
						|
 | 
						|
        Modelica.Mechanics.Translational.Interfaces.Flange_b flange
 | 
						|
                                                               annotation (Placement(
 | 
						|
            transformation(extent={{90,-10},{110,10}}, rotation=0)));
 | 
						|
      initial equation
 | 
						|
        flange.s = s_start;
 | 
						|
      equation
 | 
						|
        flange.f = 0;
 | 
						|
 | 
						|
      end Set_s_start;
 | 
						|
 | 
						|
      encapsulated model Set_v_start "Set v_start"
 | 
						|
        import Modelica;
 | 
						|
        extends Modelica.Blocks.Icons.Block;
 | 
						|
        Modelica.Blocks.Interfaces.RealInput v_start(unit="m/s") "Start velocity"
 | 
						|
        annotation (HideResult=true, Placement(transformation(extent={{-140,-20},{
 | 
						|
                -100,20}}, rotation=0)));
 | 
						|
 | 
						|
        Modelica.Mechanics.Translational.Interfaces.Flange_b flange
 | 
						|
                                                               annotation (Placement(
 | 
						|
            transformation(extent={{90,-10},{110,10}}, rotation=0)));
 | 
						|
      initial equation
 | 
						|
        der(flange.s) = v_start;
 | 
						|
      equation
 | 
						|
        flange.f = 0;
 | 
						|
 | 
						|
      end Set_v_start;
 | 
						|
 | 
						|
      encapsulated model Set_a_start "Set a_start"
 | 
						|
        import Modelica;
 | 
						|
        extends Modelica.Blocks.Icons.Block;
 | 
						|
        Modelica.Blocks.Interfaces.RealInput a_start(unit="m/s2") "Start acceleration"
 | 
						|
        annotation (HideResult=true, Placement(transformation(extent={{-140,-20},{
 | 
						|
                -100,20}}, rotation=0)));
 | 
						|
 | 
						|
        Modelica.Mechanics.Translational.Interfaces.Flange_b flange(s(stateSelect=StateSelect.avoid))
 | 
						|
            annotation (Placement(
 | 
						|
            transformation(extent={{90,-10},{110,10}}, rotation=0)));
 | 
						|
        Modelica.SIunits.Velocity v = der(flange.s)        annotation(HideResult=true);
 | 
						|
      initial equation
 | 
						|
        der(v) = a_start;
 | 
						|
      equation
 | 
						|
        flange.f = 0;
 | 
						|
 | 
						|
      end Set_a_start;
 | 
						|
 | 
						|
      encapsulated model Set_flange_f "Set flange_f to zero"
 | 
						|
        import Modelica;
 | 
						|
        extends Modelica.Blocks.Icons.Block;
 | 
						|
        Modelica.Mechanics.Translational.Interfaces.Flange_b flange
 | 
						|
            annotation (Placement(
 | 
						|
            transformation(extent={{90,-10},{110,10}}, rotation=0)));
 | 
						|
      equation
 | 
						|
        flange.f = 0;
 | 
						|
      end Set_flange_f;
 | 
						|
    protected
 | 
						|
      Set_s_start set_s_start if use_s_start annotation (Placement(
 | 
						|
            transformation(extent={{-20,50},{0,70}}, rotation=0)));
 | 
						|
      Set_v_start set_v_start if use_v_start
 | 
						|
                              annotation (Placement(transformation(extent={{-20,
 | 
						|
                -10},{0,10}}, rotation=0)));
 | 
						|
      Set_a_start set_a_start if use_a_start
 | 
						|
                              annotation (Placement(transformation(extent={{-20,
 | 
						|
                -70},{0,-50}}, rotation=0)));
 | 
						|
      Set_flange_f set_flange_f annotation (Placement(transformation(extent={
 | 
						|
                {20,-100},{40,-80}}, rotation=0)));
 | 
						|
    equation
 | 
						|
      connect(set_s_start.flange, flange) annotation (Line(
 | 
						|
          points={{0,60},{60,60},{60,0},{100,0}},
 | 
						|
          color={0,0,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(set_v_start.flange, flange) annotation (Line(
 | 
						|
          points={{0,0},{100,0}},
 | 
						|
          color={0,0,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(set_a_start.flange, flange) annotation (Line(
 | 
						|
          points={{0,-60},{60,-60},{60,0},{100,0}},
 | 
						|
          color={0,0,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(set_flange_f.flange, flange) annotation (Line(
 | 
						|
          points={{40,-90},{60,-90},{60,0},{100,0}},
 | 
						|
          color={0,0,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(s_start, set_s_start.s_start) annotation (Line(
 | 
						|
          points={{-120,60},{-22,60}},
 | 
						|
          color={0,0,127},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(v_start, set_v_start.v_start) annotation (Line(
 | 
						|
          points={{-120,0},{-22,0}},
 | 
						|
          color={0,0,127},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(a_start, set_a_start.a_start) annotation (Line(
 | 
						|
          points={{-120,-60},{-22,-60}},
 | 
						|
          color={0,0,127},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,
 | 
						|
                -100},{100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-94,74},{68,46}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="s_start"),
 | 
						|
            Text(
 | 
						|
              extent={{-94,16},{70,-14}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="v_start"),
 | 
						|
            Text(
 | 
						|
              extent={{-94,-46},{66,-74}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="a_start")}),
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This component is used to optionally initialize the position, speed,
 | 
						|
and/or acceleration of the flange to which this component
 | 
						|
is connected. Via parameters use_s_start, use_v_start, use_a_start
 | 
						|
the corresponding input signals s_start, v_start, a_start are conditionally
 | 
						|
activated. If an input is activated, the corresponding flange property
 | 
						|
is initialized with the input value at start time.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
For example, if \"use_s_start = true\", then flange.s is initialized
 | 
						|
with the value of the input signal \"s_start\" at the start time.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
Additionally, it is optionally possible to define the \"StateSelect\"
 | 
						|
attribute of the flange position and the flange speed via parameter
 | 
						|
\"stateSelection\".
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
This component is especially useful when the initial values of a flange
 | 
						|
shall be set according to reference signals of a controller that are
 | 
						|
provided via a signal bus.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"));
 | 
						|
    end InitializeFlange;
 | 
						|
 | 
						|
    model MassWithStopAndFriction
 | 
						|
      "Sliding mass with hard stop and Stribeck friction"
 | 
						|
      extends PartialFrictionWithStop;
 | 
						|
      SI.Velocity v(start=0, stateSelect = StateSelect.always)
 | 
						|
        "Absolute velocity of flange_a and flange_b";
 | 
						|
      SI.Acceleration a(start=0)
 | 
						|
        "Absolute acceleration of flange_a and flange_b";
 | 
						|
      parameter Modelica.SIunits.Mass m(start=1) "Mass";
 | 
						|
      parameter Real F_prop(final unit="N.s/m", final min=0, start = 1)
 | 
						|
        "Velocity dependent friction";
 | 
						|
      parameter Modelica.SIunits.Force F_Coulomb(start=5)
 | 
						|
        "Constant friction: Coulomb force";
 | 
						|
      parameter Modelica.SIunits.Force F_Stribeck(start=10) "Stribeck effect";
 | 
						|
      parameter Real fexp(final unit="s/m", final min=0, start = 2)
 | 
						|
        "Exponential decay";
 | 
						|
    extends
 | 
						|
        Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT;
 | 
						|
      Integer stopped;
 | 
						|
    encapsulated partial model PartialFrictionWithStop
 | 
						|
        "Base model of Coulomb friction elements with stop"
 | 
						|
 | 
						|
        import SI = Modelica.SIunits;
 | 
						|
        import Modelica.Mechanics.Translational.Interfaces.PartialRigid;
 | 
						|
      parameter SI.Position smax(start= 25)
 | 
						|
          "Right stop for (right end of) sliding mass";
 | 
						|
      parameter SI.Position smin(start=-25)
 | 
						|
          "Left stop for (left end of) sliding mass";
 | 
						|
      parameter SI.Velocity v_small=1e-3
 | 
						|
          "Relative velocity near to zero (see model info text)"
 | 
						|
         annotation(Dialog(tab="Advanced"));
 | 
						|
    // Equations to define the following variables have to be defined in subclasses
 | 
						|
      SI.Velocity v_relfric "Relative velocity between frictional surfaces";
 | 
						|
      SI.Acceleration a_relfric
 | 
						|
          "Relative acceleration between frictional surfaces";
 | 
						|
      SI.Force f
 | 
						|
          "Friction force (positive, if directed in opposite direction of v_rel)";
 | 
						|
      SI.Force f0 "Friction force for v=0 and forward sliding";
 | 
						|
      SI.Force f0_max "Maximum friction force for v=0 and locked";
 | 
						|
      Boolean free "true, if frictional element is not active";
 | 
						|
    // Equations to define the following variables are given in this class
 | 
						|
      Real sa(unit="1")
 | 
						|
          "Path parameter of friction characteristic f = f(a_relfric)";
 | 
						|
      Boolean startForward(start=false, fixed=true)
 | 
						|
          "= true, if v_rel=0 and start of forward sliding or v_rel > v_small";
 | 
						|
      Boolean startBackward(start=false, fixed=true)
 | 
						|
          "= true, if v_rel=0 and start of backward sliding or v_rel < -v_small";
 | 
						|
      Boolean locked(start=false) "true, if v_rel=0 and not sliding";
 | 
						|
      extends PartialRigid(s(start=0, stateSelect = StateSelect.always));
 | 
						|
      constant Integer Unknown=3 "Value of mode is not known";
 | 
						|
      constant Integer Free=2 "Element is not active";
 | 
						|
      constant Integer Forward=1 "v_rel > 0 (forward sliding)";
 | 
						|
      constant Integer Stuck=0
 | 
						|
          "v_rel = 0 (forward sliding, locked or backward sliding)";
 | 
						|
      constant Integer Backward=-1 "v_rel < 0 (backward sliding)";
 | 
						|
      Integer mode(
 | 
						|
        final min=Backward,
 | 
						|
        final max=Unknown,
 | 
						|
        start=Unknown, fixed=true);
 | 
						|
      protected
 | 
						|
      constant SI.Acceleration unitAcceleration = 1 annotation(HideResult=true);
 | 
						|
      constant SI.Force unitForce = 1 annotation(HideResult=true);
 | 
						|
    equation
 | 
						|
    /* Friction characteristic
 | 
						|
   (locked is introduced to help the Modelica translator determining
 | 
						|
   the different structural configurations,
 | 
						|
   if for each configuration special code shall be generated)
 | 
						|
*/
 | 
						|
      startForward = pre(mode) == Stuck and (sa > f0_max/unitForce and s < (smax - L/2) or
 | 
						|
            pre(startForward) and sa > f0/unitForce and s < (smax - L/2)) or pre(mode)
 | 
						|
         == Backward and v_relfric > v_small or initial() and (v_relfric > 0);
 | 
						|
      startBackward = pre(mode) == Stuck and (sa < -f0_max/unitForce and s > (smin + L/2) or
 | 
						|
            pre(startBackward) and sa < -f0/unitForce and s > (smin + L/2)) or pre(mode)
 | 
						|
         == Forward and v_relfric < -v_small or initial() and (v_relfric < 0);
 | 
						|
      locked = not free and
 | 
						|
        not (pre(mode) == Forward or startForward or pre(mode) == Backward or startBackward);
 | 
						|
 | 
						|
      a_relfric/unitAcceleration = if locked then               0 else
 | 
						|
                                   if free then                 sa else
 | 
						|
                                   if startForward then         sa - f0_max/unitForce else
 | 
						|
                                   if startBackward then        sa + f0_max/unitForce else
 | 
						|
                                   if pre(mode) == Forward then sa - f0_max/unitForce else
 | 
						|
                                                                sa + f0_max/unitForce;
 | 
						|
 | 
						|
    /* Friction torque has to be defined in a subclass. Example for a clutch:
 | 
						|
   f = if locked then sa else
 | 
						|
       if free then   0 else
 | 
						|
       cgeo*fn*(if startForward then          Math.tempInterpol1( v_relfric, mue_pos, 2) else
 | 
						|
                if startBackward then        -Math.tempInterpol1(-v_relfric, mue_pos, 2) else
 | 
						|
                if pre(mode) == Forward then  Math.tempInterpol1( v_relfric, mue_pos, 2) else
 | 
						|
                                             -Math.tempInterpol1(-v_relfric, mue_pos, 2));
 | 
						|
*/
 | 
						|
    // finite state machine to determine configuration
 | 
						|
      mode = if free then Free else
 | 
						|
        (if (pre(mode) == Forward  or pre(mode) == Free or startForward)  and v_relfric > 0 and s < (smax - L/2) then
 | 
						|
           Forward else
 | 
						|
         if (pre(mode) == Backward or pre(mode) == Free or startBackward) and v_relfric < 0 and s > (smin + L/2) then
 | 
						|
           Backward else
 | 
						|
           Stuck);
 | 
						|
      annotation (Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Basic model for Coulomb friction that models the stuck phase in a reliable way.<br>
 | 
						|
Additionally, a left and right stop are handled.
 | 
						|
</p>
 | 
						|
</html>"));
 | 
						|
    end PartialFrictionWithStop;
 | 
						|
    equation
 | 
						|
      // Constant auxiliary variables
 | 
						|
      f0 = (F_Coulomb + F_Stribeck);
 | 
						|
      f0_max = f0*1.001;
 | 
						|
      free = f0 <= 0 and F_prop <= 0 and s > smin + L/2 and s < smax - L/2;
 | 
						|
      // Velocity and acceleration of flanges
 | 
						|
      v = der(s);
 | 
						|
      a = der(v);
 | 
						|
      v_relfric = v;
 | 
						|
      a_relfric = a;
 | 
						|
    // Equilibrium of forces
 | 
						|
      0 = flange_a.f + flange_b.f - f - m*der(v);
 | 
						|
    // Friction force
 | 
						|
      f = if locked then sa*unitForce else
 | 
						|
          if free then   0 else
 | 
						|
                        (if startForward then         F_prop*v + F_Coulomb + F_Stribeck else
 | 
						|
                         if startBackward then        F_prop*v - F_Coulomb - F_Stribeck else
 | 
						|
                         if pre(mode) == Forward then F_prop*v + F_Coulomb + F_Stribeck*exp(-fexp*abs(v)) else
 | 
						|
                                                      F_prop*v - F_Coulomb - F_Stribeck*exp(-fexp*abs(v)));
 | 
						|
      lossPower = f*v_relfric;
 | 
						|
    equation
 | 
						|
      when (initial()) then
 | 
						|
        assert(s > smin + L/2 or s >= smin + L/2 and v >= 0,
 | 
						|
          "Error in initialization of hard stop. (s - L/2) must be >= smin\n"+
 | 
						|
          "(s=" + String(s) + ", L=" + String(L) + ", smin=" + String(smin) + ")");
 | 
						|
        assert(s < smax - L/2 or s <= smax - L/2 and v <= 0,
 | 
						|
          "Error in initialization of hard stop. (s + L/2) must be <= smax\n"+
 | 
						|
          "(s=" + String(s) + ", L=" + String(L) + ", smax=" + String(smax) + ")");
 | 
						|
      end when;
 | 
						|
 | 
						|
      // Define events for hard stops and reinitialize the state variables velocity v and position s
 | 
						|
      stopped = if s <= smin + L/2 then -1 else if s >= smax - L/2 then +1 else 0;
 | 
						|
      when stopped <> 0 then
 | 
						|
        reinit(s, if stopped < 0 then smin + L/2 else smax - L/2);
 | 
						|
        reinit(v, 0);
 | 
						|
      end when;
 | 
						|
    /*
 | 
						|
Version 1:
 | 
						|
 | 
						|
  when not (s < smax - L/2) then
 | 
						|
    reinit(s, smax - L/2);
 | 
						|
    if (not initial() or v>0) then
 | 
						|
      reinit(v, 0);
 | 
						|
    end if;
 | 
						|
  end when;
 | 
						|
 | 
						|
  when not (s > smin + L/2) then
 | 
						|
    reinit(s, smin + L/2);
 | 
						|
    if (not initial() or v<0) then
 | 
						|
      reinit(v, 0);
 | 
						|
    end if;
 | 
						|
  end when;
 | 
						|
 | 
						|
Version 2:
 | 
						|
        stopped := if s <= smin + L/2 then -1 else if s >= smax - L/2 then +1 else 0;
 | 
						|
      when (initial()) then
 | 
						|
        assert(s > smin + L/2 or s >= smin + L/2 and v >= 0,
 | 
						|
          "Error in initialization of hard stop. (s - L/2) must be >= smin\n"+
 | 
						|
          "(s=" + String(s) + ", L=" + String(L) + ", smin=" + String(smin) + ")");
 | 
						|
        assert(s < smax - L/2 or s <= smax - L/2 and v <= 0,
 | 
						|
          "Error in initialization of hard stop. (s + L/2) must be <= smax\n"+
 | 
						|
          "(s=" + String(s) + ", L=" + String(L) + ", smax=" + String(smax) + ")");
 | 
						|
      end when;
 | 
						|
      when stopped <> 0 then
 | 
						|
        reinit(s, if stopped < 0 then smin + L/2 else smax - L/2);
 | 
						|
        if (not initial() or stopped*v>0) then
 | 
						|
           reinit(v, 0);
 | 
						|
        end if;
 | 
						|
      end when;
 | 
						|
*/
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>This element describes the <i>Stribeck friction characteristics</i> of a sliding mass,
 | 
						|
i. e. the frictional force acting between the sliding mass and the support. Included is a
 | 
						|
<i>hard stop</i> for the position. </p>
 | 
						|
<p>
 | 
						|
The surface is fixed and there is friction between sliding mass and surface.
 | 
						|
The frictional force f is given for positive velocity v by:
 | 
						|
</p>
 | 
						|
<blockquote><pre>
 | 
						|
f = F_Coulomb + F_prop * v + F_Stribeck * exp (-fexp * v)
 | 
						|
</pre></blockquote>
 | 
						|
 | 
						|
<p>
 | 
						|
<IMG src=\"modelica://Modelica/Resources/Images/Mechanics/Translational/Stribeck.png\">
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
The distance between the left and the right connector is given by parameter L.
 | 
						|
The position of the center of gravity, coordinate s, is in the middle between
 | 
						|
the two flanges.</p>
 | 
						|
<p>
 | 
						|
There are hard stops at smax and smin, i. e. if
 | 
						|
<i><code>flange_a.s >= smin</code></i> and <i><code>flange_b.s <= xmax </code></i> the sliding mass can move freely.</p>
 | 
						|
<p>When the absolute velocity becomes zero, the sliding mass becomes stuck, i.e., the absolute position remains constant. In this phase the
 | 
						|
friction force is calculated from a force balance due to the requirement that the
 | 
						|
absolute acceleration shall be zero. The elements begin to slide when the friction
 | 
						|
force exceeds a threshold value, called the maximum static friction force, computed via:</p>
 | 
						|
<blockquote><pre>
 | 
						|
   maximum_static_friction =  F_Coulomb + F_Stribeck
 | 
						|
</pre></blockquote>
 | 
						|
<p>
 | 
						|
<font color=\"#ff0000\"> <b>This requires the states Stop.s and Stop.v</b> </font>. If these states are eliminated during the index reduction
 | 
						|
the model will not work. To avoid this any inertias should be connected via springs
 | 
						|
to the Stop element, other sliding masses, dampers or hydraulic chambers must be avoided.</p>
 | 
						|
<p>For more details of the used friction model see the following reference: </p>
 | 
						|
 | 
						|
<dl>
 | 
						|
<dt>Beater P. (1999):</dt>
 | 
						|
<dd><a href=\"http://www.springer.de/cgi-bin/search_book.pl?isbn=3-540-65444-5\">
 | 
						|
Entwurf hydraulischer Maschinen</a>. Springer Verlag Berlin Heidelberg New York.</dd>
 | 
						|
</dl>
 | 
						|
 | 
						|
<P>The friction model is implemented in a \"clean\" way by state events and leads to
 | 
						|
continuous/discrete systems of equations which have to be solved by appropriate
 | 
						|
numerical methods. The method is described in: </P>
 | 
						|
 | 
						|
<dl>
 | 
						|
<dt>Otter M., Elmqvist H., and Mattsson S.E. (1999):</dt>
 | 
						|
<dd><i>Hybrid Modeling in Modelica based on the Synchronous Data Flow Principle</i>.
 | 
						|
    CACSD'99, Aug. 22.-26, Hawaii. </dd>
 | 
						|
</dl>
 | 
						|
 | 
						|
<P>More precise friction models take into account the elasticity of the material when
 | 
						|
the two elements are \"stuck\", as well as other effects, like hysteresis. This has
 | 
						|
the advantage that the friction element can be completely described by a differential
 | 
						|
equation without events. The drawback is that the system becomes stiff (about 10-20 times
 | 
						|
slower simulation) and that more material constants have to be supplied which requires more
 | 
						|
sophisticated identification. For more details, see the following references, especially
 | 
						|
(Armstrong and Canudas de Witt 1996): </P>
 | 
						|
<dl>
 | 
						|
<dt>
 | 
						|
Armstrong B. (1991):</dt>
 | 
						|
<DD><i>Control of Machines with Friction</i>. Kluwer Academic Press, Boston MA.<BR>
 | 
						|
</DD>
 | 
						|
<DT>Armstrong B., and Canudas de Wit C. (1996): </DT>
 | 
						|
<DD><i>Friction Modeling and Compensation.</i> The Control Handbook, edited by W.S.Levine, CRC Press, pp. 1369-1382.<BR>
 | 
						|
</DD>
 | 
						|
<DT>Canudas de Wit C., Olsson H., Astroem K.J., and Lischinsky P. (1995): </DT>
 | 
						|
<DD>A<i> new model for control of systems with friction.</i> IEEE Transactions on Automatic Control, Vol. 40, No. 3, pp. 419-425.<BR>
 | 
						|
</DD>
 | 
						|
</DL>
 | 
						|
 | 
						|
<h4>Optional heatPort</h4>
 | 
						|
<p>
 | 
						|
The dissipated energy is transported in form of heat to the optional heatPort connector
 | 
						|
that can be enabled via parameter \"useHeatPort\". Independently whether the heatPort is
 | 
						|
or is not enabled, the dissipated power is defined with variable \"lossPower\".
 | 
						|
If contact occurs at the hard stops, the lossPower is not correctly modelled
 | 
						|
at this time instant, because the hard stop would introduce a Dirac impulse
 | 
						|
in the lossPower due to the discontinuously changing kinetic energy of the mass
 | 
						|
(lossPower is the derivative of the kinetic energy at the time instant of the impact).
 | 
						|
</p>
 | 
						|
 | 
						|
</html>",   revisions="<html>
 | 
						|
<h4>Release Notes:</h4>
 | 
						|
<ul>
 | 
						|
<li><i>First Version from December 7, 1999 by P. Beater (based on Rotational.BearingFriction)</i> </li>
 | 
						|
<li><i>July 14, 2001 by P. Beater, assert on initialization added, diagram modified </i> </li>
 | 
						|
<li><i>October 11, 2001, by Hans Olsson, Dassault Systèmes AB, modified assert to handle start at stops,
 | 
						|
modified event logic such if you have friction parameters equal to zero you do not get events
 | 
						|
between the stops.</i> </li>
 | 
						|
<li><i>June 10, 2002 by P. Beater, StateSelect.always for variables s and v (instead of fixed=true). </i> </li>
 | 
						|
</ul>
 | 
						|
</html>"),
 | 
						|
        Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Polygon(
 | 
						|
              points={{80,-100},{50,-90},{50,-110},{80,-100}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-30,-100},{50,-100}}, color={0,0,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-30,30},{35,-35}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Sphere,
 | 
						|
              fillColor={255,255,255}),
 | 
						|
            Line(points={{-90,0},{-30,0}}, color={0,127,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-70,-45},{74,-60}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={192,192,192},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-63,-15},{-55,-45}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Rectangle(
 | 
						|
              extent={{60,-16},{69,-45}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{35,0},{90,0}}, color={0,127,0}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,80},{150,40}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Line(points={{-50,-90},{-30,-70}}, color={0,0,0}),
 | 
						|
            Line(points={{-30,-70},{30,-70}}, color={0,0,0}),
 | 
						|
            Line(points={{-30,-90},{-10,-70}}, color={0,0,0}),
 | 
						|
            Line(points={{-10,-90},{10,-70}}, color={0,0,0}),
 | 
						|
            Line(points={{10,-90},{30,-70}}, color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,-110},{150,-140}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="m=%m"),
 | 
						|
            Line(visible=useHeatPort,
 | 
						|
              points={{-100,-100},{-100,-40},{3,-40}},
 | 
						|
              color={191,0,0},
 | 
						|
              pattern=LinePattern.Dot,
 | 
						|
              smooth=Smooth.None)}),
 | 
						|
        Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Polygon(
 | 
						|
              points={{50,-75},{20,-65},{20,-85},{50,-75}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-60,-75},{20,-75}}, color={0,0,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-30,26},{35,-9}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Sphere,
 | 
						|
              fillColor={255,255,255}),
 | 
						|
            Line(points={{-90,0},{-30,0}}, color={0,127,0}),
 | 
						|
            Line(points={{35,0},{90,0}}, color={0,127,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-68,-14},{76,-29}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={192,192,192},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-119,43},{-111,17}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(
 | 
						|
              points={{-111,43},{-111,50}},
 | 
						|
              color={0,0,0},
 | 
						|
              pattern=LinePattern.Solid,
 | 
						|
              thickness=0.25,
 | 
						|
              arrow={Arrow.None,Arrow.None}),
 | 
						|
            Line(
 | 
						|
              points={{-151,49},{-113,49}},
 | 
						|
              color={0,0,0},
 | 
						|
              pattern=LinePattern.Solid,
 | 
						|
              thickness=0.25,
 | 
						|
              arrow={Arrow.None,Arrow.None}),
 | 
						|
            Text(
 | 
						|
              extent={{-149,51},{-126,60}},
 | 
						|
              textString="s min",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Polygon(
 | 
						|
              points={{-121,52},{-111,49},{-121,46},{-121,52}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Rectangle(
 | 
						|
              extent={{124,42},{132,17}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(
 | 
						|
              points={{124,39},{124,87}},
 | 
						|
              color={0,0,0},
 | 
						|
              pattern=LinePattern.Solid,
 | 
						|
              thickness=0.25,
 | 
						|
              arrow={Arrow.None,Arrow.None}),
 | 
						|
            Line(
 | 
						|
              points={{-19,78},{121,78}},
 | 
						|
              color={0,0,0},
 | 
						|
              pattern=LinePattern.Solid,
 | 
						|
              thickness=0.25,
 | 
						|
              arrow={Arrow.None,Arrow.None}),
 | 
						|
            Text(
 | 
						|
              extent={{-17,83},{6,92}},
 | 
						|
              textString="s max",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Polygon(
 | 
						|
              points={{114,81},{124,78},{114,75},{114,81}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(
 | 
						|
              points={{5,26},{5,63}},
 | 
						|
              color={0,0,0},
 | 
						|
              pattern=LinePattern.Solid,
 | 
						|
              thickness=0.25,
 | 
						|
              arrow={Arrow.None,Arrow.None}),
 | 
						|
            Line(
 | 
						|
              points={{-77,58},{-1,58}},
 | 
						|
              color={0,0,0},
 | 
						|
              pattern=LinePattern.Solid,
 | 
						|
              thickness=0.25,
 | 
						|
              arrow={Arrow.None,Arrow.None}),
 | 
						|
            Text(
 | 
						|
              extent={{-75,60},{-38,71}},
 | 
						|
              textString="Position s",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Polygon(
 | 
						|
              points={{-5,61},{5,58},{-5,55},{-5,61}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-100,-10},{-100,-60}}, color={0,0,0}),
 | 
						|
            Line(points={{100,-10},{100,-60}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{90,-47},{100,-50},{90,-53},{90,-47}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Polygon(
 | 
						|
              points={{-90,-47},{-90,-53},{-100,-50},{-90,-47}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={0,0,0},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-90,-50},{92,-50}}, color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{-11,-46},{26,-36}},
 | 
						|
              textString="Length L",
 | 
						|
              lineColor={0,0,255})}));
 | 
						|
    end MassWithStopAndFriction;
 | 
						|
 | 
						|
    model RelativeStates "Definition of relative state variables"
 | 
						|
      extends Translational.Interfaces.PartialTwoFlanges;
 | 
						|
      parameter StateSelect stateSelect=StateSelect.prefer
 | 
						|
        "Priority to use the relative angle and relative speed as states";
 | 
						|
      SI.Position s_rel(start=0, stateSelect=StateSelect.prefer)
 | 
						|
        "Relative position used as state variable";
 | 
						|
      SI.Velocity v_rel(start=0, stateSelect=StateSelect.prefer)
 | 
						|
        "Relative velocity used as state variable";
 | 
						|
      SI.Acceleration a_rel(start=0) "Relative angular acceleration";
 | 
						|
 | 
						|
    equation
 | 
						|
      s_rel = flange_b.s - flange_a.s;
 | 
						|
      v_rel = der(s_rel);
 | 
						|
      a_rel = der(v_rel);
 | 
						|
      flange_a.f = 0;
 | 
						|
      flange_b.f = 0;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Usually, the absolute position and the absolute velocity of
 | 
						|
Modelica.Mechanics.Translational.Inertia models are used as state variables.
 | 
						|
In some circumstances, relative quantities are better suited, e.g.,
 | 
						|
because it may be easier to supply initial values.
 | 
						|
In such cases, model <b>RelativeStates</b> allows the definition of state variables
 | 
						|
in the following way:
 | 
						|
</p>
 | 
						|
<ul>
 | 
						|
<li> Connect an instance of this model between two flange connectors.</li>
 | 
						|
<li> The <b>relative position</b> and the <b>relative velocity</b>
 | 
						|
     between the two connectors are used as <b>state variables</b>.
 | 
						|
</ul>
 | 
						|
<p>
 | 
						|
An example is given in the next figure
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
<IMG src=\"modelica://Modelica/Resources/Images/Mechanics/Translational/relativeStates2.png\" ALT=\"relativeStates2\">
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
Here, the relative position and the relative velocity between
 | 
						|
the two masses are used as state variables. Additionally, the
 | 
						|
simulator selects either the absolute position and absolute
 | 
						|
velocity of model mass1 or of model mass2 as state variables.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Ellipse(
 | 
						|
              extent={{-40,40},{40,-40}},
 | 
						|
              lineColor={0,255,255},
 | 
						|
              fillColor={0,255,255},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-40,40},{40,-40}},
 | 
						|
              textString="S",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Line(
 | 
						|
              points={{-92,0},{-42,0}},
 | 
						|
              color={0,0,0},
 | 
						|
              pattern=LinePattern.Dot),
 | 
						|
            Line(
 | 
						|
              points={{40,0},{90,0}},
 | 
						|
              color={0,0,0},
 | 
						|
              pattern=LinePattern.Dot),
 | 
						|
            Text(
 | 
						|
              extent={{-150,90},{150,50}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255})}),
 | 
						|
        Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Ellipse(
 | 
						|
              extent={{-40,40},{40,-40}},
 | 
						|
              lineColor={0,255,255},
 | 
						|
              fillColor={0,255,255},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-40,40},{40,-40}},
 | 
						|
              textString="S",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Line(
 | 
						|
              points={{40,0},{90,0}},
 | 
						|
              color={0,0,0},
 | 
						|
              pattern=LinePattern.Dash),
 | 
						|
            Line(points={{-100,-10},{-100,-80}}, color={160,160,164}),
 | 
						|
            Line(points={{100,-10},{100,-80}}, color={160,160,164}),
 | 
						|
            Polygon(
 | 
						|
              points={{80,-65},{80,-55},{100,-60},{80,-65}},
 | 
						|
              lineColor={160,160,164},
 | 
						|
              fillColor={160,160,164},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-100,-60},{80,-60}}, color={160,160,164}),
 | 
						|
            Text(
 | 
						|
              extent={{-30,-70},{30,-90}},
 | 
						|
              textString="w_rel",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Line(points={{-76,80},{-5,80}}, color={128,128,128}),
 | 
						|
            Polygon(
 | 
						|
              points={{14,80},{-6,85},{-6,75},{14,80}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{18,87},{86,74}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              textString="moving direction"),
 | 
						|
            Line(
 | 
						|
              points={{-90,0},{-40,0}},
 | 
						|
              color={0,0,0},
 | 
						|
              pattern=LinePattern.Dash)}));
 | 
						|
    end RelativeStates;
 | 
						|
    annotation (Icon(coordinateSystem(preserveAspectRatio = true, extent = {{-100,-100},{100,100}}), graphics = {
 | 
						|
        Rectangle(
 | 
						|
          origin = {11.5,31.183},
 | 
						|
          lineColor = {64,64,64},
 | 
						|
          fillColor = {255,255,255},
 | 
						|
          fillPattern = FillPattern.Sphere,
 | 
						|
          extent = {{-67,-66},{44,-6}})}),                     Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This package contains basic components 1D mechanical translational drive trains.
 | 
						|
</p>
 | 
						|
</html>"));
 | 
						|
  end Components;
 | 
						|
 | 
						|
  package Sensors "Sensors for 1-dim. translational mechanical quantities"
 | 
						|
 | 
						|
    extends Modelica.Icons.SensorsPackage;
 | 
						|
 | 
						|
    model PositionSensor "Ideal sensor to measure the absolute position"
 | 
						|
      extends Translational.Interfaces.PartialAbsoluteSensor;
 | 
						|
      Modelica.Blocks.Interfaces.RealOutput s(unit="m")
 | 
						|
        "Absolute position of flange as output signal"
 | 
						|
                                    annotation (Placement(transformation(extent={{100,-11},
 | 
						|
                {120,9}},            rotation=0), iconTransformation(extent={{100,
 | 
						|
                -10},{120,10}})));
 | 
						|
 | 
						|
    equation
 | 
						|
      s = flange.s;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Measures the <i>absolute position s</i> of a flange in an ideal way and provides the result as
 | 
						|
output signals (to be further processed with blocks of the
 | 
						|
Modelica.Blocks library).
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={Line(points={{-70,0},{-90,0}}, color={0,0,0}),
 | 
						|
              Text(
 | 
						|
              extent={{80,-28},{114,-62}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="s")}));
 | 
						|
    end PositionSensor;
 | 
						|
 | 
						|
    model SpeedSensor "Ideal sensor to measure the absolute velocity"
 | 
						|
      extends Translational.Interfaces.PartialAbsoluteSensor;
 | 
						|
      Modelica.Blocks.Interfaces.RealOutput v(unit="m/s")
 | 
						|
        "Absolute velocity of flange as output signal"
 | 
						|
           annotation (Placement(transformation(extent={{100,-10},{120,10}},
 | 
						|
              rotation=0)));
 | 
						|
 | 
						|
    equation
 | 
						|
      v = der(flange.s);
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Measures the <i>absolute velocity v</i> of a flange in an ideal way and provides the result as
 | 
						|
output signals (to be further processed with blocks of the
 | 
						|
Modelica.Blocks library).
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={Line(points={{-70,0},{-90,0}}, color={0,0,0}),
 | 
						|
              Text(
 | 
						|
              extent={{80,-28},{111,-61}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="v")}));
 | 
						|
    end SpeedSensor;
 | 
						|
 | 
						|
    model AccSensor "Ideal sensor to measure the absolute acceleration"
 | 
						|
      extends Translational.Interfaces.PartialAbsoluteSensor;
 | 
						|
      SI.Velocity v "Absolute velocity of flange";
 | 
						|
      Modelica.Blocks.Interfaces.RealOutput a(unit="m/s2")
 | 
						|
        "Absolute acceleration of flange as output signal"
 | 
						|
           annotation (Placement(transformation(extent={{100,-10},{120,10}},
 | 
						|
              rotation=0)));
 | 
						|
 | 
						|
    equation
 | 
						|
      v = der(flange.s);
 | 
						|
      a = der(v);
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Measures the <i>absolute acceleration a</i>
 | 
						|
of a flange in an ideal way and provides the result as
 | 
						|
output signals (to be further processed with blocks of the
 | 
						|
Modelica.Blocks library).
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={Line(points={{-70,0},{-90,0}}, color={0,0,0}),
 | 
						|
              Text(
 | 
						|
              extent={{80,-28},{115,-60}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="a")}));
 | 
						|
    end AccSensor;
 | 
						|
 | 
						|
    model RelPositionSensor "Ideal sensor to measure the relative position"
 | 
						|
      extends Translational.Interfaces.PartialRelativeSensor;
 | 
						|
      Modelica.Blocks.Interfaces.RealOutput s_rel(unit="m")
 | 
						|
        "Distance between two flanges (= flange_b.s - flange_a.s) as output signal"
 | 
						|
                                    annotation (Placement(transformation(extent={{-10,-10},
 | 
						|
                {10,10}},            rotation=270,
 | 
						|
            origin={0,-110})));
 | 
						|
 | 
						|
    equation
 | 
						|
      s_rel = flange_b.s - flange_a.s;
 | 
						|
      0 = flange_a.f;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Measures the <i>relative position s</i> of a flange in an ideal way and provides the result as
 | 
						|
output signals (to be further processed with blocks of the
 | 
						|
Modelica.Blocks library).
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-70,0},{-90,0}}, color={0,0,0}),
 | 
						|
            Line(points={{70.4,0},{100,0}}, color={0,0,127}),
 | 
						|
            Text(
 | 
						|
              extent={{8,-68},{42,-102}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="s"),
 | 
						|
            Line(points={{0,-99},{0,-60}}, color={0,0,127})}));
 | 
						|
    end RelPositionSensor;
 | 
						|
 | 
						|
    model RelSpeedSensor "Ideal sensor to measure the relative speed"
 | 
						|
      extends Translational.Interfaces.PartialRelativeSensor;
 | 
						|
      SI.Position s_rel
 | 
						|
        "Distance between the two flanges (flange_b.s - flange_a.s)";
 | 
						|
      Modelica.Blocks.Interfaces.RealOutput v_rel(unit="m/s")
 | 
						|
        "Relative velocity between two flanges (= der(flange_b.s) - der(flange_a.s)) as output signal"
 | 
						|
                                    annotation (Placement(transformation(extent={{-10,-10},
 | 
						|
                {10,10}},            rotation=270,
 | 
						|
            origin={0,-110})));
 | 
						|
 | 
						|
    equation
 | 
						|
      s_rel = flange_b.s - flange_a.s;
 | 
						|
      v_rel = der(s_rel);
 | 
						|
      0 = flange_a.f;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Measures the <i>relative speed v</i> of a flange in an ideal way and provides the result as
 | 
						|
output signals (to be further processed with blocks of the
 | 
						|
Modelica.Blocks library).
 | 
						|
</p>
 | 
						|
 | 
						|
</html>",     revisions=
 | 
						|
             "<html>
 | 
						|
<p><b>Release Notes:</b></p>
 | 
						|
<ul>
 | 
						|
<li><i>First Version from August 26, 1999 by P. Beater</i> </li>
 | 
						|
</ul>
 | 
						|
</html>"),
 | 
						|
        Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-70,0},{-90,0}}, color={0,0,0}),
 | 
						|
            Line(points={{70.4,0},{100,0}}, color={0,0,127}),
 | 
						|
            Text(
 | 
						|
              extent={{8,-68},{42,-102}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="v"),
 | 
						|
            Line(points={{0,-100},{0,-61}}, color={0,0,127})}));
 | 
						|
    end RelSpeedSensor;
 | 
						|
 | 
						|
    model RelAccSensor "Ideal sensor to measure the relative acceleration"
 | 
						|
      extends Translational.Interfaces.PartialRelativeSensor;
 | 
						|
      SI.Position s_rel
 | 
						|
        "Distance between the two flanges (flange_b.s - flange_a.s)";
 | 
						|
      SI.Velocity v_rel
 | 
						|
        "Relative velocity between the two flanges (der(flange_b.s) - der(flange_a.s))";
 | 
						|
      Modelica.Blocks.Interfaces.RealOutput a_rel(unit="m/s2")
 | 
						|
        "Relative acceleration between two flanges (= der(v_rel)) as output signal"
 | 
						|
                                    annotation (Placement(transformation(extent={{-10,-10},
 | 
						|
                {10,10}},            rotation=270,
 | 
						|
            origin={0,-110})));
 | 
						|
 | 
						|
    equation
 | 
						|
      s_rel = flange_b.s - flange_a.s;
 | 
						|
      v_rel = der(s_rel);
 | 
						|
      a_rel = der(v_rel);
 | 
						|
      0 = flange_a.f;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Measures the <i>relative acceleration a</i> of a flange in an ideal way and provides the result as
 | 
						|
output signals (to be further processed with blocks of the
 | 
						|
Modelica.Blocks library).
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-70,0},{-90,0}}, color={0,0,0}),
 | 
						|
            Line(points={{70.4,0},{100,0}}, color={0,0,127}),
 | 
						|
            Text(
 | 
						|
              extent={{7,-68},{41,-102}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="a"),
 | 
						|
            Line(points={{0,-99},{0,-60}}, color={0,0,127})}));
 | 
						|
    end RelAccSensor;
 | 
						|
 | 
						|
    model ForceSensor "Ideal sensor to measure the force between two flanges"
 | 
						|
      extends Translational.Interfaces.PartialRelativeSensor;
 | 
						|
      Modelica.Blocks.Interfaces.RealOutput f(unit="N")
 | 
						|
        "Force in flange_a and flange_b (f = flange_a.f = -flange_b.f) as output signal"
 | 
						|
         annotation (Placement(transformation(
 | 
						|
            origin={-80,-110},
 | 
						|
            extent={{10,-10},{-10,10}},
 | 
						|
            rotation=90)));
 | 
						|
    equation
 | 
						|
      flange_a.s = flange_b.s;
 | 
						|
      flange_a.f = f;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Measures the <i>cut-force between two flanges</i> in an ideal way
 | 
						|
and provides the result as output signal (to be further processed
 | 
						|
with blocks of the Modelica.Blocks library).
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-40,-70},{40,-120}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="f"),
 | 
						|
            Line(points={{-70,0},{-90,0}}, color={0,0,0}),
 | 
						|
            Line(points={{70,0},{90,0}}, color={0,0,0}),
 | 
						|
            Line(points={{-80,-100},{-80,0}}, color={0,0,127})}));
 | 
						|
    end ForceSensor;
 | 
						|
 | 
						|
    model PowerSensor
 | 
						|
      "Ideal sensor to measure the power between two flanges (= flange_a.f*der(flange_a.s))"
 | 
						|
      extends Translational.Interfaces.PartialRelativeSensor;
 | 
						|
      Modelica.Blocks.Interfaces.RealOutput power(unit="W")
 | 
						|
        "Power in flange flange_a as output signal"
 | 
						|
         annotation (Placement(transformation(
 | 
						|
            origin={-80,-110},
 | 
						|
            extent={{10,-10},{-10,10}},
 | 
						|
            rotation=90)));
 | 
						|
    equation
 | 
						|
      flange_a.s = flange_b.s;
 | 
						|
      power = flange_a.f*der(flange_a.s);
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Measures the <b>power between two flanges</b> in an ideal way
 | 
						|
and provides the result as output signal <b>power</b>
 | 
						|
(to be further processed with blocks of the Modelica.Blocks library).
 | 
						|
</p>
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-75,-79},{67,-119}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="power"),
 | 
						|
            Line(points={{-70,0},{-90,0}}, color={0,0,0}),
 | 
						|
            Line(points={{70,0},{90,0}}, color={0,0,0}),
 | 
						|
            Line(points={{-80,-100},{-80,0}}, color={0,0,127})}));
 | 
						|
    end PowerSensor;
 | 
						|
 | 
						|
    model MultiSensor
 | 
						|
      "Ideal sensor to measure the absolute velocity, force and power between two flanges"
 | 
						|
      extends Translational.Interfaces.PartialRelativeSensor;
 | 
						|
      Modelica.Blocks.Interfaces.RealOutput power(unit="W")
 | 
						|
        "Power in flange flange_a as output signal"
 | 
						|
         annotation (Placement(transformation(
 | 
						|
            origin={-60,-110},
 | 
						|
            extent={{10,-10},{-10,10}},
 | 
						|
            rotation=90)));
 | 
						|
      Modelica.Blocks.Interfaces.RealOutput f(unit="N")
 | 
						|
        "Force in flange_a and flange_b (f = flange_a.f = -flange_b.f) as output signal"
 | 
						|
         annotation (Placement(transformation(
 | 
						|
            extent={{10,-10},{-10,10}},
 | 
						|
            rotation=90,
 | 
						|
            origin={0,-110})));
 | 
						|
     Modelica.Blocks.Interfaces.RealOutput v(unit="m/s")
 | 
						|
        "Absolute velocity of flange as output signal as output signal"
 | 
						|
           annotation (Placement(transformation(
 | 
						|
            extent={{-10,-10},{10,10}},
 | 
						|
            rotation=-90,
 | 
						|
            origin={60,-110})));
 | 
						|
    equation
 | 
						|
      flange_a.s = flange_b.s;
 | 
						|
      f = flange_a.f;
 | 
						|
      v = der(flange_a.s);
 | 
						|
      power = f*v;
 | 
						|
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Measures the <b>absolute velocity</b> of a flange_a, the <b>cut-force</b> and <b>power</b> between two flanges in an
 | 
						|
ideal way and provides the results as output signals <b>v</b>, <b>f</b> and <b>power</b>, respectively. </p>
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-146,-70},{-56,-100}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="power"),
 | 
						|
            Line(points={{-70,0},{-90,0}}, color={0,0,0}),
 | 
						|
            Line(points={{70,0},{90,0}}, color={0,0,0}),
 | 
						|
            Line(points={{-60,-100},{-60,-60}},
 | 
						|
                                              color={0,0,127}),
 | 
						|
            Text(
 | 
						|
              extent={{-28,-71},{52,-101}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="f"),
 | 
						|
            Line(points={{0,-100},{0,-60}},   color={0,0,127}),
 | 
						|
            Line(points={{60,-100},{60,-60}}, color={0,0,127}),
 | 
						|
            Text(
 | 
						|
              extent={{60,-70},{114,-101}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="v")}));
 | 
						|
    end MultiSensor;
 | 
						|
    annotation (
 | 
						|
      Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100,
 | 
						|
              100}}), graphics={
 | 
						|
          Line(points={{-56,-61},{-56,-81}}, color={0,0,0}),
 | 
						|
          Line(points={{-36,-61},{-36,-81}}, color={0,0,0}),
 | 
						|
          Line(points={{-16,-61},{-16,-81}}, color={0,0,0}),
 | 
						|
          Line(points={{4,-61},{4,-81}}, color={0,0,0}),
 | 
						|
          Line(points={{24,-61},{24,-81}}, color={0,0,0}),
 | 
						|
          Line(points={{44,-61},{44,-81}}, color={0,0,0})}),
 | 
						|
      Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This package contains ideal sensor components that provide
 | 
						|
the connector variables as signals for further processing with the
 | 
						|
Modelica.Blocks library.
 | 
						|
</p>
 | 
						|
</html>"));
 | 
						|
  end Sensors;
 | 
						|
 | 
						|
  package Sources "Sources to drive 1D translational mechanical components"
 | 
						|
    extends Modelica.Icons.SourcesPackage;
 | 
						|
 | 
						|
    model Position
 | 
						|
      "Forced movement of a flange according to a reference position"
 | 
						|
      extends
 | 
						|
        Modelica.Mechanics.Translational.Interfaces.PartialElementaryOneFlangeAndSupport2
 | 
						|
        ( s(stateSelect=if exact then StateSelect.default else StateSelect.prefer));
 | 
						|
      parameter Boolean exact=false
 | 
						|
        "true/false exact treatment/filtering the input signal";
 | 
						|
      parameter SI.Frequency f_crit=50
 | 
						|
        "if exact=false, critical frequency of filter to filter input signal" annotation(Dialog(enable=not exact));
 | 
						|
      SI.Velocity v(start=0, stateSelect=if exact then StateSelect.default else StateSelect.prefer)
 | 
						|
        "If exact=false, absolute velocity of flange_b else dummy";
 | 
						|
      SI.Acceleration a(start=0)
 | 
						|
        "If exact=false, absolute acceleration of flange_b else dummy";
 | 
						|
      Modelica.Blocks.Interfaces.RealInput s_ref(unit="m")
 | 
						|
        "Reference position of flange as input signal" annotation (Placement(
 | 
						|
            transformation(extent={{-140,-20},{-100,20}}, rotation=0)));
 | 
						|
    protected
 | 
						|
      parameter Modelica.SIunits.AngularFrequency w_crit=2*Modelica.Constants.pi*f_crit
 | 
						|
        "Critical frequency";
 | 
						|
      constant Real af=1.3617 "s coefficient of Bessel filter";
 | 
						|
      constant Real bf=0.6180 "s*s coefficient of Bessel filter";
 | 
						|
 | 
						|
    initial equation
 | 
						|
      if not exact then
 | 
						|
        s = s_ref;
 | 
						|
      end if;
 | 
						|
    equation
 | 
						|
      if exact then
 | 
						|
        s = s_ref;
 | 
						|
        v = 0;
 | 
						|
        a = 0;
 | 
						|
      else
 | 
						|
        // Filter: a = s_ref*S^2/(1 + (af/w_crit)*S + (bf/w_crit^2)*S^2)
 | 
						|
        v = der(s);
 | 
						|
        a = der(v);
 | 
						|
        a = ((s_ref - s)*w_crit - af*v)*(w_crit/bf);
 | 
						|
      end if;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<HTML>
 | 
						|
<p>
 | 
						|
The input signal <b>s_ref</b> defines the <b>reference
 | 
						|
position</b> in [m]. Flange <b>flange_b</b> is <b>forced</b>
 | 
						|
to move relative to the support connector according to this reference motion. According to parameter
 | 
						|
<b>exact</b> (default = <b>false</b>), this is done in the following way:
 | 
						|
<ol>
 | 
						|
<li><b>exact=true</b><br>
 | 
						|
    The reference position is treated <b>exactly</b>. This is only possible, if
 | 
						|
    the input signal is defined by an analytical function which can be
 | 
						|
    differentiated at least twice. If this prerequisite is fulfilled,
 | 
						|
    the Modelica translator will differentiate the input signal twice
 | 
						|
    in order to compute the reference acceleration of the flange.</li>
 | 
						|
<li><b>exact=false</b><br>
 | 
						|
    The reference position is <b>filtered</b> and the second derivative
 | 
						|
    of the filtered curve is used to compute the reference acceleration
 | 
						|
    of the flange. This second derivative is <b>not</b> computed by
 | 
						|
    numerical differentiation but by an appropriate realization of the
 | 
						|
    filter. For filtering, a second order Bessel filter is used.
 | 
						|
    The critical frequency (also called cut-off frequency) of the
 | 
						|
    filter is defined via parameter <b>f_crit</b> in [Hz]. This value
 | 
						|
    should be selected in such a way that it is higher as the essential
 | 
						|
    low frequencies in the signal.</li>
 | 
						|
</ol>
 | 
						|
<p>
 | 
						|
The input signal can be provided from one of the signal generator
 | 
						|
blocks of the block library Modelica.Blocks.Sources.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-56,-36},{-178,-66}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="s_ref"),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-100,20},{100,-20}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={215,215,215},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{150,60},{-150,100}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Line(points={{0,52},{0,32}}, color={0,0,0}),
 | 
						|
            Line(points={{-29,32},{30,32}}, color={0,0,0}),
 | 
						|
            Line(points={{-30,-32},{30,-32}}, color={0,0,0}),
 | 
						|
            Line(points={{0,-32},{0,-100}}, color={0,0,0}),
 | 
						|
            Line(points={{30,-42},{20,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{30,-32},{10,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{20,-32},{0,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{10,-32},{-10,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{0,-32},{-20,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{-10,-32},{-30,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{-20,-32},{-30,-42}}, color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{144,-30},{30,-60}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="exact="),
 | 
						|
            Text(
 | 
						|
              extent={{134,-68},{22,-96}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="%exact")}));
 | 
						|
    end Position;
 | 
						|
 | 
						|
    model Speed "Forced movement of a flange according to a reference speed"
 | 
						|
      extends
 | 
						|
        Modelica.Mechanics.Translational.Interfaces.PartialElementaryOneFlangeAndSupport2
 | 
						|
        (       s(start=0, fixed=true, stateSelect=StateSelect.prefer));
 | 
						|
      parameter Boolean exact=false
 | 
						|
        "true/false exact treatment/filtering the input signal";
 | 
						|
      parameter SI.Frequency f_crit=50
 | 
						|
        "if exact=false, critical frequency of filter to filter input signal" annotation(Dialog(enable=not exact));
 | 
						|
      SI.Velocity v(stateSelect=if exact then StateSelect.default else StateSelect.prefer)
 | 
						|
        "Absolute velocity of flange_b";
 | 
						|
      SI.Acceleration a
 | 
						|
        "If exact=false, absolute acceleration of flange_b else dummy";
 | 
						|
      Modelica.Blocks.Interfaces.RealInput v_ref(unit="m/s")
 | 
						|
        "Reference speed of flange as input signal" annotation (Placement(
 | 
						|
            transformation(extent={{-140,-20},{-100,20}}, rotation=0)));
 | 
						|
 | 
						|
    protected
 | 
						|
      parameter Modelica.SIunits.AngularFrequency w_crit=2*Modelica.Constants.pi*f_crit
 | 
						|
        "Critical frequency";
 | 
						|
    initial equation
 | 
						|
      if not exact then
 | 
						|
        v = v_ref;
 | 
						|
      end if;
 | 
						|
    equation
 | 
						|
      v = der(s);
 | 
						|
      if exact then
 | 
						|
        v = v_ref;
 | 
						|
        a = 0;
 | 
						|
      else
 | 
						|
        // Filter: a = v_ref/(1 + (1/w_crit)*s)
 | 
						|
        a = der(v);
 | 
						|
        a = (v_ref - v)*w_crit;
 | 
						|
      end if;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<HTML>
 | 
						|
<p>
 | 
						|
The input signal <b>v_ref</b> defines the <b>reference
 | 
						|
speed</b> in [m/s]. Flange <b>flange_b</b> is <b>forced</b>
 | 
						|
to move relative to the support connector  according to this reference motion. According to parameter
 | 
						|
<b>exact</b> (default = <b>false</b>), this is done in the following way:
 | 
						|
<ol>
 | 
						|
<li><b>exact=true</b><br>
 | 
						|
    The reference speed is treated <b>exactly</b>. This is only possible, if
 | 
						|
    the input signal is defined by an analytical function which can be
 | 
						|
    differentiated at least once. If this prerequisite is fulfilled,
 | 
						|
    the Modelica translator will differentiate the input signal once
 | 
						|
    in order to compute the reference acceleration of the flange.</li>
 | 
						|
<li><b>exact=false</b><br>
 | 
						|
    The reference speed is <b>filtered</b> and the first derivative
 | 
						|
    of the filtered curve is used to compute the reference acceleration
 | 
						|
    of the flange. This first derivative is <b>not</b> computed by
 | 
						|
    numerical differentiation but by an appropriate realization of the
 | 
						|
    filter. For filtering, a first order filter is used.
 | 
						|
    The critical frequency (also called cut-off frequency) of the
 | 
						|
    filter is defined via parameter <b>f_crit</b> in [Hz]. This value
 | 
						|
    should be selected in such a way that it is higher as the essential
 | 
						|
    low frequencies in the signal.</li>
 | 
						|
</ol>
 | 
						|
<p>
 | 
						|
The input signal can be provided from one of the signal generator
 | 
						|
blocks of the block library Modelica.Blocks.Sources.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-54,-36},{-174,-68}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="v_ref"),
 | 
						|
            Line(points={{-30,-32},{30,-32}}, color={0,0,0}),
 | 
						|
            Line(points={{0,-32},{0,-100}}, color={0,0,0}),
 | 
						|
            Line(points={{30,-42},{20,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{30,-32},{10,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{20,-32},{0,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{10,-32},{-10,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{0,-32},{-20,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{-10,-32},{-30,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{-20,-32},{-30,-42}}, color={0,0,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-100,20},{100,-20}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={215,215,215},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-29,32},{30,32}}, color={0,0,0}),
 | 
						|
            Line(points={{0,52},{0,32}}, color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{150,60},{-150,100}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Text(
 | 
						|
              extent={{146,-38},{32,-64}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="exact="),
 | 
						|
            Text(
 | 
						|
              extent={{140,-76},{22,-102}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="%exact")}));
 | 
						|
    end Speed;
 | 
						|
 | 
						|
    model Accelerate
 | 
						|
      "Forced movement of a flange according to an acceleration signal"
 | 
						|
       extends
 | 
						|
        Modelica.Mechanics.Translational.Interfaces.PartialElementaryOneFlangeAndSupport2
 | 
						|
        (s(start=0, fixed=true, stateSelect=StateSelect.prefer));
 | 
						|
      SI.Velocity v(start=0, fixed=true, stateSelect=StateSelect.prefer)
 | 
						|
        "Absolute velocity of flange_b";
 | 
						|
      SI.Acceleration a "Absolute acceleration of flange_b";
 | 
						|
 | 
						|
      Modelica.Blocks.Interfaces.RealInput a_ref(unit="m/s2")
 | 
						|
        "Absolute acceleration of flange as input signal"
 | 
						|
         annotation (Placement(transformation(extent={{-140,-20},{-100,20}},
 | 
						|
              rotation=0)));
 | 
						|
 | 
						|
    equation
 | 
						|
      v = der(s);
 | 
						|
      a = der(v);
 | 
						|
      a = a_ref;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
The input signal <b>a</b> in [m/s2] moves the 1D translational flange
 | 
						|
connector flange_b with a predefined <i>acceleration</i>, i.e., the flange
 | 
						|
is <i>forced</i> to move relative to the support connector  with this acceleration. The velocity and the
 | 
						|
position of the flange are also predefined and are determined by
 | 
						|
integration of the acceleration.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
The acceleration \"a(t)\" can be provided from one of the signal generator
 | 
						|
blocks of the block library Modelica.Blocks.Source.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-56,-40},{-166,-68}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="a_ref"),
 | 
						|
            Line(points={{-30,-32},{30,-32}}, color={0,0,0}),
 | 
						|
            Line(points={{0,-32},{0,-100}}, color={0,0,0}),
 | 
						|
            Line(points={{30,-42},{20,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{30,-32},{10,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{20,-32},{0,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{10,-32},{-10,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{0,-32},{-20,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{-10,-32},{-30,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{-20,-32},{-30,-42}}, color={0,0,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-100,20},{100,-20}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={215,215,215},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-29,32},{30,32}}, color={0,0,0}),
 | 
						|
            Line(points={{0,52},{0,32}}, color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{150,60},{-150,100}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255})}));
 | 
						|
    end Accelerate;
 | 
						|
 | 
						|
    model Move
 | 
						|
      "Forced movement of a flange according to a position, velocity and acceleration signal"
 | 
						|
       extends
 | 
						|
        Modelica.Mechanics.Translational.Interfaces.PartialElementaryOneFlangeAndSupport2;
 | 
						|
      Modelica.Blocks.Interfaces.RealInput u[3]
 | 
						|
        "Position, velocity and acceleration of flange as input signals"
 | 
						|
        annotation (Placement(transformation(extent={{-140,-20},{-100,20}},
 | 
						|
              rotation=0)));
 | 
						|
    protected
 | 
						|
      function position
 | 
						|
         extends Modelica.Icons.Function;
 | 
						|
         input Real q_qd_qdd[3]
 | 
						|
          "Required values for position, speed, acceleration";
 | 
						|
         input Real dummy
 | 
						|
          "Just to have one input signal that should be differentiated to avoid possible problems in the Modelica tool (is not used)";
 | 
						|
         output Real q;
 | 
						|
      algorithm
 | 
						|
        q :=q_qd_qdd[1];
 | 
						|
        annotation (derivative(noDerivative=q_qd_qdd) = position_der,
 | 
						|
            InlineAfterIndexReduction=true);
 | 
						|
      end position;
 | 
						|
 | 
						|
      function position_der
 | 
						|
         extends Modelica.Icons.Function;
 | 
						|
         input Real q_qd_qdd[3]
 | 
						|
          "Required values for position, speed, acceleration";
 | 
						|
         input Real dummy
 | 
						|
          "Just to have one input signal that should be differentiated to avoid possible problems in the Modelica tool (is not used)";
 | 
						|
         input Real dummy_der;
 | 
						|
         output Real qd;
 | 
						|
      algorithm
 | 
						|
        qd :=q_qd_qdd[2];
 | 
						|
        annotation (derivative(noDerivative=q_qd_qdd, order=2) = position_der2,
 | 
						|
            InlineAfterIndexReduction=true);
 | 
						|
      end position_der;
 | 
						|
 | 
						|
      function position_der2
 | 
						|
         extends Modelica.Icons.Function;
 | 
						|
         input Real q_qd_qdd[3]
 | 
						|
          "Required values for position, speed, acceleration";
 | 
						|
         input Real dummy
 | 
						|
          "Just to have one input signal that should be differentiated to avoid possible problems in the Modelica tool (is not used)";
 | 
						|
         input Real dummy_der;
 | 
						|
         input Real dummy_der2;
 | 
						|
         output Real qdd;
 | 
						|
      algorithm
 | 
						|
        qdd :=q_qd_qdd[3];
 | 
						|
      end position_der2;
 | 
						|
    equation
 | 
						|
      s = position(u,time);
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Flange <b>flange_b</b> is <b>forced</b> to move relative to the support connector  with a predefined motion
 | 
						|
according to the input signals:
 | 
						|
</p>
 | 
						|
<pre>
 | 
						|
    u[1]: position of flange
 | 
						|
    u[2]: velocity of flange
 | 
						|
    u[3]: acceleration of flange
 | 
						|
</pre>
 | 
						|
<p>
 | 
						|
The user has to guarantee that the input signals are consistent to each other,
 | 
						|
i.e., that u[2] is the derivative of u[1] and that
 | 
						|
u[3] is the derivative of u. There are, however,
 | 
						|
also applications where by purpose these conditions do not hold. For example,
 | 
						|
if only the position dependent terms of a mechanical system shall be
 | 
						|
calculated, one may provide position = position(t) and set the velocity
 | 
						|
and the acceleration to zero.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
The input signals can be provided from one of the signal generator
 | 
						|
blocks of the block library Modelica.Blocks.Sources.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),        Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-192,-38},{-32,-70}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="s,v,a"),
 | 
						|
            Line(points={{-30,-32},{30,-32}}, color={0,0,0}),
 | 
						|
            Line(points={{0,-32},{0,-100}}, color={0,0,0}),
 | 
						|
            Line(points={{30,-42},{20,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{30,-32},{10,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{20,-32},{0,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{10,-32},{-10,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{0,-32},{-20,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{-10,-32},{-30,-52}}, color={0,0,0}),
 | 
						|
            Line(points={{-20,-32},{-30,-42}}, color={0,0,0}),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-100,20},{100,-20}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={215,215,215},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{0,52},{0,32}}, color={0,0,0}),
 | 
						|
            Line(points={{-29,32},{30,32}}, color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{150,60},{-150,100}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255})}));
 | 
						|
    end Move;
 | 
						|
 | 
						|
    model Force
 | 
						|
      "External force acting on a drive train element as input signal"
 | 
						|
      extends
 | 
						|
        Modelica.Mechanics.Translational.Interfaces.PartialElementaryOneFlangeAndSupport2;
 | 
						|
      Modelica.Blocks.Interfaces.RealInput f(unit="N") "Driving force as input signal"
 | 
						|
                                        annotation (Placement(transformation(
 | 
						|
              extent={{-140,-20},{-100,20}}, rotation=0)));
 | 
						|
 | 
						|
    equation
 | 
						|
      flange.f = -f;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
The input signal \"f\" in [N] characterizes an <i>external
 | 
						|
force</i> which acts (with positive sign) at a flange,
 | 
						|
i.e., the component connected to the flange is driven by force f.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
Input signal f can be provided from one of the signal generator
 | 
						|
blocks of Modelica.Blocks.Source.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Polygon(
 | 
						|
              points={{-100,10},{20,10},{20,41},{90,0},{20,-41},{20,-10},{-100,
 | 
						|
                  -10},{-100,10}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={215,215,215},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Text(
 | 
						|
              extent={{-150,-32},{-80,-62}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="f"),
 | 
						|
            Text(
 | 
						|
              extent={{-150,90},{150,50}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Line(points={{-30,-60},{30,-60}}, color={0,0,0}),
 | 
						|
            Line(points={{0,-60},{0,-101}}, color={0,0,0}),
 | 
						|
            Line(points={{-30,-80},{-10,-60}}, color={0,0,0}),
 | 
						|
            Line(points={{-10,-80},{10,-60}}, color={0,0,0}),
 | 
						|
            Line(points={{10,-80},{30,-60}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{-61,-50},{-30,-40},{-30,-60},{-61,-50}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-31,-50},{50,-50}}, color={0,0,0}),
 | 
						|
            Line(points={{-50,-80},{-30,-60}}, color={0,0,0})}));
 | 
						|
    end Force;
 | 
						|
 | 
						|
    model Force2 "Input signal acting as torque on two flanges"
 | 
						|
      extends Translational.Interfaces.PartialTwoFlanges;
 | 
						|
      Modelica.Blocks.Interfaces.RealInput f(unit="N") "Driving force as input signal"
 | 
						|
                                        annotation (Placement(transformation(
 | 
						|
              extent={{-20,-20},{20,20}},    rotation=270,
 | 
						|
            origin={0,60}), iconTransformation(
 | 
						|
            extent={{-20,-20},{20,20}},
 | 
						|
            rotation=270,
 | 
						|
            origin={0,40})));
 | 
						|
 | 
						|
    equation
 | 
						|
      flange_a.f =  f;
 | 
						|
      flange_b.f = -f;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
The input signal \"f\" in [N] characterizes an <i>external
 | 
						|
force</i> which acts (with positive sign) at both flanges,
 | 
						|
i.e., the components connected to these flanges are driven by force f.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
Input signal s can be provided from one of the signal generator
 | 
						|
blocks of Modelica.Blocks.Source.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Text(
 | 
						|
              extent={{-150,-40},{150,-80}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255}),
 | 
						|
            Polygon(
 | 
						|
              points={{90,0},{60,-30},{60,-10},{10,-10},{10,10},{60,10},{60,31},
 | 
						|
                  {90,0}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              smooth=Smooth.None,
 | 
						|
              fillColor={215,215,215},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Polygon(
 | 
						|
              points={{-90,0},{-60,30},{-60,10},{-10,10},{-10,-10},{-60,-10},{-60,
 | 
						|
                  -30},{-90,0}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              smooth=Smooth.None,
 | 
						|
              fillColor={215,215,215},
 | 
						|
              fillPattern=FillPattern.Solid)}));
 | 
						|
    end Force2;
 | 
						|
 | 
						|
    model LinearSpeedDependentForce "Linear dependency of force versus speed"
 | 
						|
      extends Modelica.Mechanics.Translational.Interfaces.PartialForce;
 | 
						|
      parameter Modelica.SIunits.Force f_nominal
 | 
						|
        "Nominal force (if negative, force is acting as load)";
 | 
						|
      parameter Boolean ForceDirection=true
 | 
						|
        "Same direction of force in both directions of movement";
 | 
						|
      parameter Modelica.SIunits.Velocity v_nominal(min=Modelica.Constants.eps)
 | 
						|
        "Nominal speed";
 | 
						|
      Modelica.SIunits.Velocity v
 | 
						|
        "Velocity of flange with respect to support (= der(s))";
 | 
						|
 | 
						|
    equation
 | 
						|
      v = der(s);
 | 
						|
      if ForceDirection then
 | 
						|
        f = -f_nominal*abs(v/v_nominal);
 | 
						|
      else
 | 
						|
        f = -f_nominal*(v/v_nominal);
 | 
						|
      end if;
 | 
						|
      annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,
 | 
						|
                -100},{100,100}}), graphics={Line(points={{-100,-100},{100,100}},
 | 
						|
                color={0,0,255})}), Documentation(info="<HTML>
 | 
						|
<p>
 | 
						|
Model of force, linearly dependent on velocity of flange.<br>
 | 
						|
Parameter ForceDirection chooses whether direction of force is the same in both directions of movement or not.
 | 
						|
</p>
 | 
						|
</HTML>"));
 | 
						|
    end LinearSpeedDependentForce;
 | 
						|
 | 
						|
    model QuadraticSpeedDependentForce
 | 
						|
      "Quadratic dependency of force versus speed"
 | 
						|
      extends Modelica.Mechanics.Translational.Interfaces.PartialForce;
 | 
						|
      parameter Modelica.SIunits.Force f_nominal
 | 
						|
        "Nominal force (if negative, force is acting as load)";
 | 
						|
      parameter Boolean ForceDirection=true
 | 
						|
        "Same direction of force in both directions of movement";
 | 
						|
      parameter Modelica.SIunits.Velocity v_nominal(min=Modelica.Constants.eps)
 | 
						|
        "Nominal speed";
 | 
						|
      Modelica.SIunits.Velocity v
 | 
						|
        "Velocity of flange with respect to support (= der(s))";
 | 
						|
    equation
 | 
						|
      v = der(s);
 | 
						|
      if ForceDirection then
 | 
						|
        f = -f_nominal*(v/v_nominal)^2;
 | 
						|
      else
 | 
						|
        f = -f_nominal*smooth(1, if v >= 0 then (v/v_nominal)^2 else -(v/v_nominal)^2);
 | 
						|
      end if;
 | 
						|
      annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100,100}}), graphics={
 | 
						|
              Line(points={{-100,-100},{-80,-98},{-60,-92},{-40,-82},{-20,-68},{0,-50},{20,-28},{40,-2},{60,28},{80,62},{100,100}},
 | 
						|
                   color={0,0,127},
 | 
						|
                   smooth=Smooth.Bezier)}),Documentation(info="<HTML>
 | 
						|
<p>
 | 
						|
Model of force, quadratic dependent on velocity of flange.<br>
 | 
						|
Parameter ForceDirection chooses whether direction of force is the same in both directions of movement or not.
 | 
						|
</p>
 | 
						|
</HTML>"));
 | 
						|
    end QuadraticSpeedDependentForce;
 | 
						|
 | 
						|
    model ConstantForce "Constant force, not dependent on speed"
 | 
						|
      extends Modelica.Mechanics.Translational.Interfaces.PartialForce;
 | 
						|
      parameter Modelica.SIunits.Force f_constant
 | 
						|
        "Nominal force (if negative, force is acting as load)";
 | 
						|
    equation
 | 
						|
      f = -f_constant;
 | 
						|
      annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,
 | 
						|
                -100},{100,100}}), graphics={Line(points={{-100,0},{98,0}},
 | 
						|
                color={0,0,255}), Text(
 | 
						|
              extent={{-118,58},{126,34}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="%f_constant")}),
 | 
						|
                               Documentation(info="<HTML>
 | 
						|
<p>
 | 
						|
Model of constant force, not dependent on velocity of flange.<br>
 | 
						|
Positive force acts accelerating.
 | 
						|
</p>
 | 
						|
</HTML>"));
 | 
						|
    end ConstantForce;
 | 
						|
 | 
						|
    model ConstantSpeed "Constant speed, not dependent on force"
 | 
						|
      extends Modelica.Mechanics.Translational.Interfaces.PartialForce;
 | 
						|
      parameter Modelica.SIunits.Velocity v_fixed
 | 
						|
        "Fixed speed (if negative, force is acting as load)";
 | 
						|
      Modelica.SIunits.Velocity v
 | 
						|
        "Velocity of flange with respect to support (= der(s))";
 | 
						|
    equation
 | 
						|
      v = der(s);
 | 
						|
      v = v_fixed;
 | 
						|
      annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,
 | 
						|
                -100},{100,100}}), graphics={Line(points={{0,-100},{0,100}},
 | 
						|
                color={0,0,255}), Text(
 | 
						|
              extent={{-120,60},{124,36}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="%v_fixed")}),
 | 
						|
                                    Documentation(info="<HTML>
 | 
						|
<p>
 | 
						|
Model of <b>fixed</b> velocity of flange, not dependent on force.
 | 
						|
</p>
 | 
						|
</HTML>"));
 | 
						|
    end ConstantSpeed;
 | 
						|
 | 
						|
    model ForceStep "Constant force, not dependent on speed"
 | 
						|
      extends Modelica.Mechanics.Translational.Interfaces.PartialForce;
 | 
						|
      parameter Modelica.SIunits.Force stepForce(start=1)
 | 
						|
        "Height of force step (if negative, force is acting as load)";
 | 
						|
      parameter Modelica.SIunits.Force offsetForce(start=0) "Offset of force";
 | 
						|
      parameter Modelica.SIunits.Time startTime=0
 | 
						|
        "Force = offset for time < startTime";
 | 
						|
    equation
 | 
						|
      f = -offsetForce - (if time < startTime then 0 else stepForce);
 | 
						|
      annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,
 | 
						|
                -100},{100,100}}), graphics={Line(points={{-80,-60},{0,-60},{0,
 | 
						|
                  60},{80,60}}, color={0,0,255}), Text(
 | 
						|
              extent={{0,-40},{100,-60}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              textString="time")}), Documentation(info="<HTML>
 | 
						|
<p>
 | 
						|
Model of a force step at time .<br>
 | 
						|
Positive force acts accelerating.
 | 
						|
</p>
 | 
						|
</HTML>"));
 | 
						|
    end ForceStep;
 | 
						|
 | 
						|
    annotation (                 Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This package contains ideal sources to drive 1D mechanical translational drive trains.
 | 
						|
</p>
 | 
						|
</html>"));
 | 
						|
  end Sources;
 | 
						|
 | 
						|
  package Interfaces
 | 
						|
    "Interfaces for 1-dim. translational mechanical components"
 | 
						|
      extends Modelica.Icons.InterfacesPackage;
 | 
						|
 | 
						|
    connector Flange_a
 | 
						|
      "(left) 1D translational flange (flange axis directed INTO cut plane, e. g. from left to right)"
 | 
						|
 | 
						|
      SI.Position s "Absolute position of flange";
 | 
						|
      flow SI.Force f "Cut force directed into flange";
 | 
						|
      annotation(defaultComponentName = "flange_a",
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a flange for 1D translational mechanical systems. In the cut plane of
 | 
						|
the flange a unit vector n, called flange axis, is defined which is directed
 | 
						|
INTO the cut plane, i. e. from left to right. All vectors in the cut plane are
 | 
						|
resolved with respect to
 | 
						|
this unit vector. E.g. force f characterizes a vector which is directed in
 | 
						|
the direction of n with value equal to f. When this flange is connected to
 | 
						|
other 1D translational flanges, this means that the axes vectors of the connected
 | 
						|
flanges are identical.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
The following variables are transported through this connector:
 | 
						|
</p>
 | 
						|
<pre>
 | 
						|
  s: Absolute position of the flange in [m]. A positive translation
 | 
						|
     means that the flange is translated along the flange axis.
 | 
						|
  f: Cut-force in direction of the flange axis in [N].
 | 
						|
</pre>
 | 
						|
</html>"),     Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{
 | 
						|
                100,100}}), graphics={Rectangle(
 | 
						|
              extent={{-100,-100},{100,100}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={0,127,0},
 | 
						|
              fillPattern=FillPattern.Solid)}),
 | 
						|
        Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},
 | 
						|
                {100,100}}), graphics={Rectangle(
 | 
						|
              extent={{-40,-40},{40,40}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={0,127,0},
 | 
						|
              fillPattern=FillPattern.Solid), Text(
 | 
						|
              extent={{-160,110},{40,50}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              textString="%name")}));
 | 
						|
    end Flange_a;
 | 
						|
 | 
						|
    connector Flange_b
 | 
						|
      "(right) 1D translational flange (flange axis directed OUT OF cut plane)"
 | 
						|
 | 
						|
      SI.Position s "Absolute position of flange";
 | 
						|
      flow SI.Force f "Cut force directed into flange";
 | 
						|
      annotation(defaultComponentName = "flange_b",
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a flange for 1D translational mechanical systems. In the cut plane of
 | 
						|
the flange a unit vector n, called flange axis, is defined which is directed
 | 
						|
OUT OF the cut plane. All vectors in the cut plane are resolved with respect to
 | 
						|
this unit vector. E.g. force f characterizes a vector which is directed in
 | 
						|
the direction of n with value equal to f. When this flange is connected to
 | 
						|
other 1D translational flanges, this means that the axes vectors of the connected
 | 
						|
flanges are identical.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
The following variables are transported through this connector:
 | 
						|
<pre>
 | 
						|
  s: Absolute position of the flange in [m]. A positive translation
 | 
						|
     means that the flange is translated along the flange axis.
 | 
						|
  f: Cut-force in direction of the flange axis in [N].
 | 
						|
</pre>
 | 
						|
</html>"),     Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100,100}}), graphics={
 | 
						|
          Rectangle(
 | 
						|
            extent={{-100,-100},{100,100}},
 | 
						|
            lineColor={0,127,0},
 | 
						|
            fillColor={255,255,255},
 | 
						|
            fillPattern=FillPattern.Solid)}),
 | 
						|
        Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={Rectangle(
 | 
						|
              extent={{-40,-40},{40,40}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={255,255,255},
 | 
						|
              fillPattern=FillPattern.Solid), Text(
 | 
						|
              extent={{-40,110},{160,50}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              textString="%name")}));
 | 
						|
    end Flange_b;
 | 
						|
 | 
						|
    connector Support "Support/housing 1D translational flange"
 | 
						|
 | 
						|
      SI.Position s "Absolute position of flange";
 | 
						|
      flow SI.Force f "Cut force directed into flange";
 | 
						|
      annotation (Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,
 | 
						|
                -100},{100,100}}), graphics={
 | 
						|
            Rectangle(
 | 
						|
              extent={{-60,60},{60,-60}},
 | 
						|
              fillColor={175,175,175},
 | 
						|
              fillPattern=FillPattern.Solid,
 | 
						|
              pattern=LinePattern.None),
 | 
						|
            Text(
 | 
						|
              extent={{-160,110},{40,50}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              textString="%name"),
 | 
						|
            Rectangle(
 | 
						|
              extent={{-40,-40},{40,40}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={0,127,0},
 | 
						|
              fillPattern=FillPattern.Solid)}), Icon(coordinateSystem(
 | 
						|
              preserveAspectRatio=true, extent={{-100,-100},{100,100}}),
 | 
						|
            graphics={Rectangle(
 | 
						|
              extent={{-150,150},{150,-150}},
 | 
						|
              fillColor={175,175,175},
 | 
						|
              fillPattern=FillPattern.Solid,
 | 
						|
              pattern=LinePattern.None), Rectangle(
 | 
						|
              extent={{-90,-90},{90,90}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={0,127,0},
 | 
						|
              fillPattern=FillPattern.Solid)}),
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>This is a connector for 1-dim. rotational mechanical systems and models the support or housing of a shaft. The following variables are defined in this connector:</p>
 | 
						|
<table cellspacing=\"0\" cellpadding=\"2\" border=\"1\"><tr>
 | 
						|
<td valign=\"top\"><h4>s</h4></td>
 | 
						|
<td valign=\"top\"><p>Absolute position of the support/housing in [m]</p></td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
<td valign=\"top\"><h4>f</h4></td>
 | 
						|
<td valign=\"top\"><p>Reaction force in the support/housing in [N]</p></td>
 | 
						|
</tr>
 | 
						|
</table>
 | 
						|
<p><br/>The support connector is usually defined as conditional connector. It is most convenient to utilize it</p>
 | 
						|
<ul>
 | 
						|
<li>For models to be build graphically (i.e., the model is build up by drag-and-drop from elementary components):<br/><a href=\"modelica://Modelica.Mechanics.Translational.Interfaces.PartialOneFlangeAndSupport\">PartialOneFlangeAndSupport</a>,<br/><a href=\"modelica://Modelica.Mechanics.Translational.Interfaces.PartialTwoFlangesAndSupport\">PartialTwoFlangesAndSupport</a>, <br/>  </li>
 | 
						|
<li>For models to be build textually (i.e., elementary models):<br/><a href=\"modelica://Modelica.Mechanics.Translational.Interfaces.PartialElementaryOneFlangeAndSupport\">PartialElementaryOneFlangeAndSupport</a>,<br/><a href=\"modelica://Modelica.Mechanics.Translational.Interfaces.PartialElementaryTwoFlangesAndSupport\">PartialElementaryTwoFlangesAndSupport</a>,<br/><a href=\"modelica://Modelica.Mechanics.Translational.Interfaces.PartialElementaryRotationalToTranslational\">PartialElementaryRotationalToTranslational</a>. </li>
 | 
						|
</ul>
 | 
						|
</html>"));
 | 
						|
    end Support;
 | 
						|
 | 
						|
    model InternalSupport
 | 
						|
      "Adapter model to utilize conditional support connector"
 | 
						|
      input SI.Force f
 | 
						|
        "External support force (must be computed via force balance in model where InternalSupport is used; = flange.f)";
 | 
						|
      SI.Position s "External support position (= flange.s)";
 | 
						|
      Flange_a flange
 | 
						|
        "Internal support flange (must be connected to the conditional support connector for useSupport=true and to conditional fixed model for useSupport=false)"
 | 
						|
        annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
 | 
						|
    equation
 | 
						|
      flange.f = f;
 | 
						|
      flange.s = s;
 | 
						|
      annotation ( Icon(coordinateSystem(
 | 
						|
              preserveAspectRatio=true, extent={{-100,-100},{100,100}}),
 | 
						|
            graphics={Text(
 | 
						|
              extent={{-200,80},{200,40}},
 | 
						|
              lineColor={0,0,255},
 | 
						|
              textString="%name"), Rectangle(
 | 
						|
              extent={{-20,20},{20,-20}},
 | 
						|
              lineColor={0,127,0},
 | 
						|
              fillColor={175,175,175},
 | 
						|
              fillPattern=FillPattern.Solid)}),
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is an adapter model to utilize a conditional support connector
 | 
						|
in an elementary component, i.e., where the component equations are
 | 
						|
defined textually:
 | 
						|
</p>
 | 
						|
 | 
						|
<ul>
 | 
						|
<li> If <i>useSupport = true</i>, the flange has to be connected to the conditional
 | 
						|
     support connector.</li>
 | 
						|
<li> If <i>useSupport = false</i>, the flange has to be connected to the conditional
 | 
						|
     fixed model.</li>
 | 
						|
</ul>
 | 
						|
 | 
						|
<p>
 | 
						|
Variable <b>f</b> is defined as <b>input</b> and must be provided when using
 | 
						|
this component as a modifier (computed via a force balance in
 | 
						|
the model where InternalSupport is used). Usually, model InternalSupport is
 | 
						|
utilized via the partial models:
 | 
						|
</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<a href=\"modelica://Modelica.Mechanics.Translational.Interfaces.PartialElementaryOneFlangeAndSupport\">
 | 
						|
PartialElementaryOneFlangeAndSupport</a>,<br>
 | 
						|
<a href=\"modelica://Modelica.Mechanics.Translational.Interfaces.PartialElementaryTwoFlangesAndSupport\">
 | 
						|
PartialElementaryTwoFlangesAndSupport</a>,<br>
 | 
						|
<a href=\"modelica://Modelica.Mechanics.Translational.Interfaces.PartialElementaryRotationalToTranslational\">
 | 
						|
PartialElementaryRotationalToTranslational</a>.
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>
 | 
						|
Note, the support position can always be accessed as internalSupport.s, and
 | 
						|
the support force can always be accessed as internalSupport.f.
 | 
						|
</p>
 | 
						|
</html>"));
 | 
						|
    end InternalSupport;
 | 
						|
 | 
						|
    partial model PartialTwoFlanges
 | 
						|
      "Component with two translational 1D flanges"
 | 
						|
 | 
						|
      Flange_a flange_a
 | 
						|
        "(left) driving flange (flange axis directed in to cut plane, e. g. from left to right)"
 | 
						|
         annotation (Placement(transformation(extent={{-110,-10},{-90,10}},
 | 
						|
              rotation=0)));
 | 
						|
      Flange_b flange_b
 | 
						|
        "(right) driven flange (flange axis directed out of cut plane)"
 | 
						|
        annotation (Placement(transformation(extent={{90,-10},{110,10}},
 | 
						|
              rotation=0)));
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a 1D translational component with two flanges.
 | 
						|
It is used e.g., to built up parts of a drive train consisting
 | 
						|
of several base components.
 | 
						|
</p>
 | 
						|
</html>"));
 | 
						|
    end PartialTwoFlanges;
 | 
						|
 | 
						|
    partial model PartialOneFlangeAndSupport
 | 
						|
      "Partial model for a component with one translational 1-dim. shaft flange and a support used for graphical modeling, i.e., the model is build up by drag-and-drop from elementary components"
 | 
						|
      parameter Boolean useSupport=false
 | 
						|
        "= true, if support flange enabled, otherwise implicitly grounded"
 | 
						|
          annotation(Evaluate=true, HideResult=true, choices(checkBox=true));
 | 
						|
      Flange_b flange "Flange of component"
 | 
						|
        annotation (Placement(transformation(extent={{90,-10},{110,10}}, rotation=0)));
 | 
						|
      Support support if useSupport "Support/housing of component"
 | 
						|
        annotation (Placement(transformation(extent={{-10,-110},{10,-90}})));
 | 
						|
    protected
 | 
						|
      Support internalSupport
 | 
						|
        "Internal support/housing of component (either connected to support, if useSupport=true, or connected to fixed, if useSupport=false)"
 | 
						|
        annotation (Placement(transformation(extent={{-3,-83},{3,-77}})));
 | 
						|
      Components.Fixed fixed if not useSupport
 | 
						|
        "Fixed support/housing, if not useSupport"
 | 
						|
        annotation (Placement(transformation(extent={{10,-94},{30,-74}})));
 | 
						|
    equation
 | 
						|
      connect(fixed.flange, internalSupport) annotation (Line(
 | 
						|
          points={{20,-84},{20,-80},{0,-80}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(internalSupport, support) annotation (Line(
 | 
						|
          points={{0,-80},{0,-100}},
 | 
						|
          pattern=LinePattern.None,
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a 1-dim. translational component with one flange and a support/housing.
 | 
						|
It is used e.g., to build up parts of a drive train graphically consisting
 | 
						|
of several components.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
If <i>useSupport=true</i>, the support connector is conditionally enabled
 | 
						|
and needs to be connected.<br>
 | 
						|
If <i>useSupport=false</i>, the support connector is conditionally disabled
 | 
						|
and instead the component is internally fixed to ground.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={Text(
 | 
						|
              extent={{-38,-98},{-6,-96}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              textString="(if useSupport)"), Text(
 | 
						|
              extent={{21,-95},{61,-96}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              textString="(if not useSupport)")}),
 | 
						|
        Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{
 | 
						|
                100,100}}), graphics={
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-50,-120},{-30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-120},{-10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-10,-120},{10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{10,-120},{30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-100},{30,-100}},
 | 
						|
              color={0,0,0})}));
 | 
						|
    end PartialOneFlangeAndSupport;
 | 
						|
 | 
						|
    partial model PartialTwoFlangesAndSupport
 | 
						|
      "Partial model for a component with two translational 1-dim. shaft flanges and a support used for graphical modeling, i.e., the model is build up by drag-and-drop from elementary components"
 | 
						|
      parameter Boolean useSupport=false
 | 
						|
        "= true, if support flange enabled, otherwise implicitly grounded"
 | 
						|
          annotation(Evaluate=true, HideResult=true, choices(checkBox=true));
 | 
						|
      Flange_a flange_a "Flange of left end"
 | 
						|
        annotation (Placement(transformation(extent={{-110,-10}, {-90,10}}, rotation=0)));
 | 
						|
      Flange_b flange_b "Flange of right end"
 | 
						|
        annotation (Placement(transformation(extent={{90,-10},{110,10}}, rotation=0)));
 | 
						|
      Support support if useSupport "Support/housing of component"
 | 
						|
        annotation (Placement(transformation(extent={{-10,-110},{10,-90}})));
 | 
						|
    protected
 | 
						|
      Support internalSupport
 | 
						|
        "Internal support/housing of component (either connected to support, if useSupport=true, or connected to fixed, if useSupport=false)"
 | 
						|
        annotation (Placement(transformation(extent={{-3,-83},{3,-77}})));
 | 
						|
      Components.Fixed fixed if not useSupport
 | 
						|
        "Fixed support/housing, if not useSupport"
 | 
						|
        annotation (Placement(transformation(extent={{10,-97},{30,-77}})));
 | 
						|
    equation
 | 
						|
      connect(fixed.flange, internalSupport) annotation (Line(
 | 
						|
          points={{20,-87},{20,-80},{0,-80}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(internalSupport, support) annotation (Line(
 | 
						|
          points={{0,-80},{0,-100}},
 | 
						|
          pattern=LinePattern.None,
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a 1-dim. translational component with two flanges and a support/housing.
 | 
						|
It is used e.g., to build up parts of a drive train graphically consisting
 | 
						|
of several components.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
If <i>useSupport=true</i>, the support connector is conditionally enabled
 | 
						|
and needs to be connected.<br>
 | 
						|
If <i>useSupport=false</i>, the support connector is conditionally disabled
 | 
						|
and instead the component is internally fixed to ground.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={Text(
 | 
						|
              extent={{-38,-98},{-6,-96}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              textString="(if useSupport)"), Text(
 | 
						|
              extent={{24,-97},{64,-98}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              textString="(if not useSupport)")}),
 | 
						|
        Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{
 | 
						|
                100,100}}), graphics={
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-50,-120},{-30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-120},{-10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-10,-120},{10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{10,-120},{30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-100},{30,-100}},
 | 
						|
              color={0,0,0})}));
 | 
						|
    end PartialTwoFlangesAndSupport;
 | 
						|
 | 
						|
    partial model PartialRigid
 | 
						|
      "Rigid connection of two translational 1D flanges"
 | 
						|
      SI.Position s
 | 
						|
        "Absolute position of center of component (s = flange_a.s + L/2 = flange_b.s - L/2)";
 | 
						|
      parameter SI.Length L(start=0)
 | 
						|
        "Length of component, from left flange to right flange (= flange_b.s - flange_a.s)";
 | 
						|
      Flange_a flange_a "Left flange of translational component"
 | 
						|
         annotation (Placement(transformation(extent={{-110,-10},{-90,10}},
 | 
						|
              rotation=0)));
 | 
						|
      Flange_b flange_b "Right flange of translational component"
 | 
						|
         annotation (Placement(transformation(extent={{90,-10},{110,10}},
 | 
						|
              rotation=0)));
 | 
						|
    equation
 | 
						|
      flange_a.s = s - L/2;
 | 
						|
      flange_b.s = s + L/2;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a 1-dim. translational component with two <i>rigidly</i> connected flanges.
 | 
						|
The fixed distance between the left and the right flange is defined by parameter \"L\".
 | 
						|
The forces at the right and left flange can be different.
 | 
						|
It is used e.g., to built up sliding masses.
 | 
						|
</p>
 | 
						|
</html>"));
 | 
						|
    end PartialRigid;
 | 
						|
 | 
						|
    partial model PartialCompliant
 | 
						|
      "Compliant connection of two translational 1D flanges"
 | 
						|
 | 
						|
      Flange_a flange_a
 | 
						|
        "Left flange of compliant 1-dim. translational component"
 | 
						|
         annotation (Placement(transformation(extent={{-110,-10},{-90,10}},
 | 
						|
              rotation=0)));
 | 
						|
      Flange_b flange_b
 | 
						|
        "Right flange of compliant 1-dim. translational component"
 | 
						|
        annotation (Placement(transformation(extent={{90,-10},{110,10}},
 | 
						|
              rotation=0)));
 | 
						|
      SI.Position s_rel(start=0)
 | 
						|
        "Relative distance (= flange_b.s - flange_a.s)";
 | 
						|
      SI.Force f
 | 
						|
        "Force between flanges (positive in direction of flange axis R)";
 | 
						|
 | 
						|
    equation
 | 
						|
      s_rel = flange_b.s - flange_a.s;
 | 
						|
      flange_b.f = f;
 | 
						|
      flange_a.f = -f;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a 1D translational component with a <i>compliant </i>connection of two
 | 
						|
translational 1D flanges where inertial effects between the two
 | 
						|
flanges are not included. The absolute value of the force at the left and the right
 | 
						|
flange is the same. It is used to built up springs, dampers etc.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={Polygon(
 | 
						|
              points={{50,-90},{20,-80},{20,-100},{50,-90}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid), Line(points={{-60,-90},{20,-90}},
 | 
						|
                color={0,0,0})}));
 | 
						|
    end PartialCompliant;
 | 
						|
 | 
						|
    partial model PartialCompliantWithRelativeStates
 | 
						|
      "Base model for the compliant connection of two translational 1-dim. shaft flanges where the relative position and relative velocities are used as states"
 | 
						|
 | 
						|
      parameter StateSelect stateSelect=StateSelect.prefer
 | 
						|
        "Priority to use phi_rel and w_rel as states"
 | 
						|
      annotation(HideResult=true, Dialog(tab="Advanced"));
 | 
						|
      parameter SI.Distance s_nominal=1e-4
 | 
						|
        "Nominal value of s_rel (used for scaling)"   annotation(Dialog(tab="Advanced"));
 | 
						|
 | 
						|
      SI.Position s_rel(start=0, stateSelect=stateSelect, nominal=s_nominal)
 | 
						|
        "Relative distance (= flange_b.s - flange_a.s)";
 | 
						|
      SI.Velocity v_rel(start=0, stateSelect=stateSelect)
 | 
						|
        "Relative velocity (= der(s_rel))";
 | 
						|
 | 
						|
      SI.Force f "Forces between flanges (= flange_b.f)";
 | 
						|
      Translational.Interfaces.Flange_a flange_a
 | 
						|
        "Left flange of compliant 1-dim. translational component"
 | 
						|
        annotation (Placement(transformation(extent={{-110,-10},{-90,10}},
 | 
						|
              rotation=0)));
 | 
						|
      Translational.Interfaces.Flange_b flange_b
 | 
						|
        "Right flange of compliant 1-dim. translational component"
 | 
						|
        annotation (Placement(transformation(extent={{90,-10},{110,10}},
 | 
						|
              rotation=0)));
 | 
						|
 | 
						|
    equation
 | 
						|
      s_rel = flange_b.s - flange_a.s;
 | 
						|
      v_rel = der(s_rel);
 | 
						|
      flange_b.f =  f;
 | 
						|
      flange_a.f = -f;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a 1-dim. translational component with a compliant connection of two
 | 
						|
translational 1-dim. flanges where inertial effects between the two
 | 
						|
flanges are neglected. The basic assumption is that the cut-forces
 | 
						|
of the two flanges sum-up to zero, i.e., they have the same absolute value
 | 
						|
but opposite sign: flange_a.f + flange_b.f = 0. This base class
 | 
						|
is used to built up force elements such as springs, dampers, friction.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
The difference to base class \"PartialCompliant\" is that the relative
 | 
						|
distance and the relative velocity are defined as preferred states.
 | 
						|
The reason is that for a large class of drive trains,
 | 
						|
the absolute position is quickly increasing during operation.
 | 
						|
Numerically, it is better to use relative distances between drive train components
 | 
						|
because they remain in a limited size. For this reason, StateSelect.prefer
 | 
						|
is set for the relative distance of this component.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
In order to improve the numerics, a nominal value for the relative distance
 | 
						|
should be set, since drive train distances are in a small order and
 | 
						|
then step size control of the integrator is practically switched off for
 | 
						|
such a variable. A default nominal value of s_nominal = 1e-4 is defined.
 | 
						|
This nominal value might also be computed from other values, such
 | 
						|
as \"s_nominal = f_nominal / c\" for a spring, if f_nominal
 | 
						|
and c have more meaningful values for the user.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"));
 | 
						|
    end PartialCompliantWithRelativeStates;
 | 
						|
 | 
						|
    partial model PartialElementaryOneFlangeAndSupport
 | 
						|
      "Obsolete partial model. Use PartialElementaryOneFlangeAndSupport2."
 | 
						|
      extends Modelica.Icons.ObsoleteModel;
 | 
						|
 | 
						|
      parameter Boolean useSupport=false
 | 
						|
        "= true, if support flange enabled, otherwise implicitly grounded"
 | 
						|
          annotation(Evaluate=true, HideResult=true, choices(checkBox=true));
 | 
						|
      Modelica.SIunits.Length s
 | 
						|
        "Distance between flange and support (= flange.s - support.s)";
 | 
						|
      Flange_b flange "Flange of component"
 | 
						|
        annotation (Placement(transformation(extent={{90,-10},{110,10}},
 | 
						|
              rotation=0)));
 | 
						|
 | 
						|
    protected
 | 
						|
      InternalSupport internalSupport(f=-flange.f)
 | 
						|
        "Internal support/housing of component as a model with connector flange (flange is either connected to support, if useSupport=true, or connected to fixed, if useSupport=false)"
 | 
						|
        annotation (Placement(transformation(extent={{-10,-90},{10,-70}})));
 | 
						|
      Components.Fixed fixed if not useSupport
 | 
						|
        "Fixed support/housing, if not useSupport"
 | 
						|
        annotation (Placement(transformation(extent={{10,-97},{30,-77}})));
 | 
						|
    public
 | 
						|
      Support support if useSupport "Support/housing of component"
 | 
						|
        annotation (Placement(transformation(extent={{-10,-110},{10,-90}})));
 | 
						|
    equation
 | 
						|
      s = flange.s - internalSupport.s;
 | 
						|
      connect(internalSupport.flange, support) annotation (Line(
 | 
						|
          points={{0,-80},{0,-100}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(fixed.flange, internalSupport.flange) annotation (Line(
 | 
						|
          points={{20,-87},{20,-80},{0,-80}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a 1-dim. translational component with one flange and a support/housing.
 | 
						|
It is used to build up elementary components of a drive train with
 | 
						|
equations in the text layer.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
If <i>useSupport=true</i>, the support connector is conditionally enabled
 | 
						|
and needs to be connected.<br>
 | 
						|
If <i>useSupport=false</i>, the support connector is conditionally disabled
 | 
						|
and instead the component is internally fixed to ground.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Diagram(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={Text(
 | 
						|
              extent={{-38,-98},{-6,-96}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              textString="(if useSupport)"), Text(
 | 
						|
              extent={{24,-97},{64,-98}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              textString="(if not useSupport)")}),
 | 
						|
        Icon(coordinateSystem(preserveAspectRatio=true,  extent={{-100,-100},{
 | 
						|
                100,100}}), graphics={
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-50,-120},{-30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-120},{-10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-10,-120},{10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{10,-120},{30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-100},{30,-100}},
 | 
						|
              color={0,0,0})}));
 | 
						|
    end PartialElementaryOneFlangeAndSupport;
 | 
						|
 | 
						|
    partial model PartialElementaryOneFlangeAndSupport2
 | 
						|
      "Partial model for a component with one translational 1-dim. shaft flange and a support used for textual modeling, i.e., for elementary models"
 | 
						|
      parameter Boolean useSupport=false
 | 
						|
        "= true, if support flange enabled, otherwise implicitly grounded"
 | 
						|
          annotation(Evaluate=true, HideResult=true, choices(checkBox=true));
 | 
						|
      Modelica.SIunits.Length s
 | 
						|
        "Distance between flange and support (= flange.s - support.s)";
 | 
						|
      Flange_b flange "Flange of component"
 | 
						|
        annotation (Placement(transformation(extent={{90,-10},{110,10}},
 | 
						|
              rotation=0)));
 | 
						|
      Support support(s=s_support, f=-flange.f) if useSupport
 | 
						|
        "Support/housing of component"
 | 
						|
        annotation (Placement(transformation(extent={{-10,-110},{10,-90}})));
 | 
						|
    protected
 | 
						|
      Modelica.SIunits.Length s_support "Absolute position of support flange";
 | 
						|
    equation
 | 
						|
      s = flange.s - s_support;
 | 
						|
      if not useSupport then
 | 
						|
        s_support = 0;
 | 
						|
      end if;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a 1-dim. translational component with one flange and a support/housing.
 | 
						|
It is used to build up elementary components of a drive train with
 | 
						|
equations in the text layer.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
If <i>useSupport=true</i>, the support connector is conditionally enabled
 | 
						|
and needs to be connected.<br>
 | 
						|
If <i>useSupport=false</i>, the support connector is conditionally disabled
 | 
						|
and instead the component is internally fixed to ground.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),        Icon(coordinateSystem(preserveAspectRatio=true,  extent={{-100,-100},{
 | 
						|
                100,100}}), graphics={
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-50,-120},{-30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-120},{-10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-10,-120},{10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{10,-120},{30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-100},{30,-100}},
 | 
						|
              color={0,0,0})}));
 | 
						|
    end PartialElementaryOneFlangeAndSupport2;
 | 
						|
 | 
						|
    partial model PartialElementaryTwoFlangesAndSupport
 | 
						|
      "Obsolete partial model. Use PartialElementaryTwoFlangesAndSupport2."
 | 
						|
      extends Modelica.Icons.ObsoleteModel;
 | 
						|
      parameter Boolean useSupport=false
 | 
						|
        "= true, if support flange enabled, otherwise implicitly grounded"
 | 
						|
          annotation(Evaluate=true, HideResult=true, choices(checkBox=true));
 | 
						|
      Flange_a flange_a "Flange of left shaft"
 | 
						|
        annotation (Placement(transformation(extent={{-110,-10},{-90,10}}, rotation=0)));
 | 
						|
      Flange_b flange_b "Flange of right shaft"
 | 
						|
        annotation (Placement(transformation(extent={{90,-10},{110,10}}, rotation=0)));
 | 
						|
      Modelica.SIunits.Length s_a "Distance between left flange and support";
 | 
						|
      Modelica.SIunits.Length s_b "Distance between right flange and support";
 | 
						|
    protected
 | 
						|
      InternalSupport internalSupport(f=-flange_a.f - flange_b.f)
 | 
						|
        "Internal support/housing of component as a model with connector flange (flange is either connected to support, if useSupport=true, or connected to fixed, if useSupport=false)"
 | 
						|
        annotation (Placement(transformation(extent={{-10,-90},{10,-70}})));
 | 
						|
      Components.Fixed fixed if not useSupport
 | 
						|
        "Fixed support/housing, if not useSupport"
 | 
						|
        annotation (Placement(transformation(extent={{10,-97},{30,-77}})));
 | 
						|
    public
 | 
						|
      Support support if useSupport "Support/housing of component"
 | 
						|
        annotation (Placement(transformation(extent={{-10,-110},{10,-90}})));
 | 
						|
    equation
 | 
						|
      s_a = flange_a.s - internalSupport.s;
 | 
						|
      s_b = flange_b.s - internalSupport.s;
 | 
						|
      connect(internalSupport.flange, support) annotation (Line(
 | 
						|
          points={{0,-80},{0,-100}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      connect(fixed.flange, internalSupport.flange) annotation (Line(
 | 
						|
          points={{20,-87},{20,-80},{0,-80}},
 | 
						|
          color={0,127,0},
 | 
						|
          smooth=Smooth.None));
 | 
						|
      annotation (Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a 1-dim. translational component with two flanges and an additional support.
 | 
						|
It is used e.g., to build up elementary ideal gear components. The component
 | 
						|
contains the force balance, i.e., the sum of the forces of the connectors
 | 
						|
is zero (therefore, components that are based on PartialGear cannot have
 | 
						|
a mass). The support connector needs to be connected
 | 
						|
to avoid the unphysical behavior that the
 | 
						|
support force is required to be zero (= the default value, if the
 | 
						|
connector is not connected).
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),     Diagram(coordinateSystem(preserveAspectRatio=true,  extent={{-100,-100},
 | 
						|
                {100,100}}), graphics={Text(
 | 
						|
              extent={{-38,-98},{-6,-96}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              textString="(if useSupport)"), Text(
 | 
						|
              extent={{24,-97},{64,-98}},
 | 
						|
              lineColor={95,95,95},
 | 
						|
              textString="(if not useSupport)")}),
 | 
						|
        Icon(coordinateSystem(preserveAspectRatio=true,  extent={{-100,-100},{
 | 
						|
                100,100}}), graphics={
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-50,-120},{-30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-120},{-10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-10,-120},{10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{10,-120},{30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-100},{30,-100}},
 | 
						|
              color={0,0,0})}));
 | 
						|
    end PartialElementaryTwoFlangesAndSupport;
 | 
						|
 | 
						|
    partial model PartialElementaryTwoFlangesAndSupport2
 | 
						|
      "Partial model for a component with one translational 1-dim. shaft flange and a support used for textual modeling, i.e., for elementary models"
 | 
						|
      parameter Boolean useSupport=false
 | 
						|
        "= true, if support flange enabled, otherwise implicitly grounded"
 | 
						|
          annotation(Evaluate=true, HideResult=true, choices(checkBox=true));
 | 
						|
      Flange_a flange_a "Flange of left shaft"
 | 
						|
        annotation (Placement(transformation(extent={{-110,-10},{-90,10}}, rotation=0)));
 | 
						|
      Flange_b flange_b "Flange of right shaft"
 | 
						|
        annotation (Placement(transformation(extent={{90,-10},{110,10}}, rotation=0)));
 | 
						|
      Support support(s=s_support, f = -flange_a.f - flange_b.f) if useSupport
 | 
						|
        "Support/housing of component"
 | 
						|
        annotation (Placement(transformation(extent={{-10,-110},{10,-90}})));
 | 
						|
      Modelica.SIunits.Length s_a "Distance between left flange and support";
 | 
						|
      Modelica.SIunits.Length s_b "Distance between right flange and support";
 | 
						|
    protected
 | 
						|
      Modelica.SIunits.Length s_support "Absolute position of support flange";
 | 
						|
    equation
 | 
						|
      s_a = flange_a.s - s_support;
 | 
						|
      s_b = flange_b.s - s_support;
 | 
						|
      if not useSupport then
 | 
						|
         s_support = 0;
 | 
						|
      end if;
 | 
						|
 | 
						|
      annotation (Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a 1-dim. translational component with two flanges and an additional support.
 | 
						|
It is used e.g., to build up elementary ideal gear components. The component
 | 
						|
contains the force balance, i.e., the sum of the forces of the connectors
 | 
						|
is zero (therefore, components that are based on PartialGear cannot have
 | 
						|
a mass). The support connector needs to be connected
 | 
						|
to avoid the unphysical behavior that the
 | 
						|
support force is required to be zero (= the default value, if the
 | 
						|
connector is not connected).
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"),        Icon(coordinateSystem(preserveAspectRatio=true,  extent={{-100,-100},{
 | 
						|
                100,100}}), graphics={
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-50,-120},{-30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-120},{-10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-10,-120},{10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{10,-120},{30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-100},{30,-100}},
 | 
						|
              color={0,0,0})}));
 | 
						|
    end PartialElementaryTwoFlangesAndSupport2;
 | 
						|
 | 
						|
    partial model PartialElementaryRotationalToTranslational
 | 
						|
      "Partial model to transform rotational into translational motion"
 | 
						|
      extends
 | 
						|
        Modelica.Mechanics.Rotational.Interfaces.PartialElementaryRotationalToTranslational;
 | 
						|
      annotation (Documentation(info="<html>
 | 
						|
<p>This is a 1-dim. rotational component with</p>
 | 
						|
<ul>
 | 
						|
<li>one rotational flange, </li>
 | 
						|
<li>one rotational support/housing, </li>
 | 
						|
<li>one translational flange, and </li>
 | 
						|
<li>one translational support/housing </li>
 | 
						|
</ul>
 | 
						|
<p>This model is used to build up elementary components of a drive train transforming rotational into translational motion with equations in the text layer.</p>
 | 
						|
<p>If <i>useSupportR=true</i>, the rotational support connector is conditionally enabled and needs to be connected.</p>
 | 
						|
<p>If <i>useSupportR=false</i>, the rotational support connector is conditionally disabled and instead the rotational part is internally fixed to ground.</p>
 | 
						|
<p>If <i>useSupportT=true</i>, the translational support connector is conditionally enabled and needs to be connected.</p>
 | 
						|
<p>If <i>useSupportT=false</i>, the translational support connector is conditionally disabled and instead the translational part is internally fixed to ground.</p>
 | 
						|
</html>"));
 | 
						|
    end PartialElementaryRotationalToTranslational;
 | 
						|
 | 
						|
  partial model PartialForce
 | 
						|
      "Partial model of a force acting at the flange (accelerates the flange)"
 | 
						|
    extends PartialElementaryOneFlangeAndSupport2;
 | 
						|
    Modelica.SIunits.Force f "Accelerating force acting at flange (= flange.f)";
 | 
						|
  equation
 | 
						|
    f = flange.f;
 | 
						|
    annotation (
 | 
						|
      Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100,
 | 
						|
                100}}), graphics={
 | 
						|
            Rectangle(
 | 
						|
              extent={{-96,96},{96,-96}},
 | 
						|
              lineColor={255,255,255},
 | 
						|
              fillColor={255,255,255},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{0,-60},{0,-100}}, color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,140},{150,100}},
 | 
						|
              lineColor={0,0,255},
 | 
						|
              textString="%name"),
 | 
						|
            Line(points={{-78,80},{51,80}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{81,80},{51,90},{51,70},{81,80}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-52,-60},{77,-60}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{-82,-60},{-51,-50},{-51,-70},{-82,-60}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-50,-120},{-30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-120},{-10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-10,-120},{10,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{10,-120},{30,-100}},
 | 
						|
              color={0,0,0}),
 | 
						|
            Line(
 | 
						|
              visible=not useSupport,
 | 
						|
              points={{-30,-100},{30,-100}},
 | 
						|
              color={0,0,0})}),
 | 
						|
      Documentation(info="<HTML>
 | 
						|
<p>
 | 
						|
Partial model of force that accelerates the flange.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
If <i>useSupport=true</i>, the support connector is conditionally enabled
 | 
						|
and needs to be connected.<br>
 | 
						|
If <i>useSupport=false</i>, the support connector is conditionally disabled
 | 
						|
and instead the component is internally fixed to ground.
 | 
						|
</p>
 | 
						|
</HTML>"));
 | 
						|
  end PartialForce;
 | 
						|
 | 
						|
    partial model PartialAbsoluteSensor
 | 
						|
      "Device to measure a single absolute flange variable"
 | 
						|
 | 
						|
      extends Modelica.Icons.TranslationalSensor;
 | 
						|
 | 
						|
      Interfaces.Flange_a flange
 | 
						|
        "Flange to be measured (flange axis directed in to cut plane, e. g. from left to right)"
 | 
						|
         annotation (Placement(transformation(extent={{-110,-10},{-90,10}},
 | 
						|
              rotation=0)));
 | 
						|
 | 
						|
    equation
 | 
						|
      0 = flange.f;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is the superclass of a 1D translational component with one flange and one
 | 
						|
output signal in order to measure an absolute kinematic quantity in the flange
 | 
						|
and to provide the measured signal as output signal for further processing
 | 
						|
with the Modelica.Blocks blocks.
 | 
						|
</p>
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-100,-90},{-20,-90}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{10,-90},{-20,-80},{-20,-100},{10,-90}},
 | 
						|
              lineColor={128,128,128},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-70,0},{-90,0}}, color={0,0,0}),
 | 
						|
            Line(points={{70,0},{100,0}}, color={0,0,127}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,80},{150,40}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255})}));
 | 
						|
    end PartialAbsoluteSensor;
 | 
						|
 | 
						|
    partial model PartialRelativeSensor
 | 
						|
      "Device to measure a single relative variable between two flanges"
 | 
						|
 | 
						|
      extends Modelica.Icons.TranslationalSensor;
 | 
						|
 | 
						|
      Interfaces.Flange_a flange_a
 | 
						|
        "(left) driving flange (flange axis directed in to cut plane, e. g. from left to right)"
 | 
						|
         annotation (Placement(transformation(extent={{-110,-10},{-90,10}},
 | 
						|
              rotation=0)));
 | 
						|
      Interfaces.Flange_b flange_b
 | 
						|
        "(right) driven flange (flange axis directed out of cut plane)"
 | 
						|
        annotation (Placement(transformation(extent={{90,-10},{110,10}},
 | 
						|
              rotation=0)));
 | 
						|
 | 
						|
    equation
 | 
						|
      0 = flange_a.f + flange_b.f;
 | 
						|
      annotation (
 | 
						|
        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This is a superclass for 1D translational components with two rigidly connected
 | 
						|
flanges and one output signal in order to measure relative kinematic quantities
 | 
						|
between the two flanges or the cut-force in the flange and
 | 
						|
to provide the measured signal as output signal for further processing
 | 
						|
with the Modelica.Blocks blocks.
 | 
						|
</p>
 | 
						|
</html>"),     Icon(coordinateSystem(
 | 
						|
            preserveAspectRatio=true,
 | 
						|
            extent={{-100,-100},{100,100}}), graphics={
 | 
						|
            Line(points={{-51,34},{29,34}}, color={0,0,0}),
 | 
						|
            Polygon(
 | 
						|
              points={{59,34},{29,44},{29,24},{59,34}},
 | 
						|
              lineColor={0,0,0},
 | 
						|
              fillColor={128,128,128},
 | 
						|
              fillPattern=FillPattern.Solid),
 | 
						|
            Line(points={{-70,0},{-90,0}}, color={0,0,0}),
 | 
						|
            Line(points={{70,0},{90,0}}, color={0,0,0}),
 | 
						|
            Text(
 | 
						|
              extent={{-150,100},{150,60}},
 | 
						|
              textString="%name",
 | 
						|
              lineColor={0,0,255})}));
 | 
						|
    end PartialRelativeSensor;
 | 
						|
 | 
						|
    partial model PartialFriction "Base model of Coulomb friction elements"
 | 
						|
 | 
						|
    //extends Translational.Interfaces.PartialRigid;
 | 
						|
      parameter SI.Velocity v_small=1e-3
 | 
						|
        "Relative velocity near to zero (see model info text)"
 | 
						|
         annotation(Dialog(tab="Advanced"));
 | 
						|
    // Equations to define the following variables have to be defined in subclasses
 | 
						|
      SI.Velocity v_relfric "Relative velocity between frictional surfaces";
 | 
						|
      SI.Acceleration a_relfric
 | 
						|
        "Relative acceleration between frictional surfaces";
 | 
						|
    //SI.Force f "Friction force (positive, if directed in opposite direction of v_rel)";
 | 
						|
      SI.Force f0 "Friction force for v=0 and forward sliding";
 | 
						|
      SI.Force f0_max "Maximum friction force for v=0 and locked";
 | 
						|
      Boolean free "true, if frictional element is not active";
 | 
						|
    // Equations to define the following variables are given in this class
 | 
						|
      Real sa(unit="1")
 | 
						|
        "Path parameter of friction characteristic f = f(a_relfric)";
 | 
						|
      Boolean startForward(start=false, fixed=true)
 | 
						|
        "true, if v_rel=0 and start of forward sliding";
 | 
						|
      Boolean startBackward(start=false, fixed=true)
 | 
						|
        "true, if v_rel=0 and start of backward sliding";
 | 
						|
      Boolean locked(start=false) "true, if v_rel=0 and not sliding";
 | 
						|
      constant Integer Unknown=3 "Value of mode is not known";
 | 
						|
      constant Integer Free=2 "Element is not active";
 | 
						|
      constant Integer Forward=1 "v_rel > 0 (forward sliding)";
 | 
						|
      constant Integer Stuck=0
 | 
						|
        "v_rel = 0 (forward sliding, locked or backward sliding)";
 | 
						|
      constant Integer Backward=-1 "v_rel < 0 (backward sliding)";
 | 
						|
      Integer mode(
 | 
						|
        final min=Backward,
 | 
						|
        final max=Unknown,
 | 
						|
        start=Unknown, fixed=true);
 | 
						|
    protected
 | 
						|
      constant SI.Acceleration unitAcceleration = 1 annotation(HideResult=true);
 | 
						|
      constant SI.Force unitForce = 1 annotation(HideResult=true);
 | 
						|
    equation
 | 
						|
    /* Friction characteristic
 | 
						|
   (locked is introduced to help the Modelica translator determining
 | 
						|
   the different structural configurations,
 | 
						|
   if for each configuration special code shall be generated)
 | 
						|
*/
 | 
						|
      startForward = pre(mode) == Stuck and (sa > f0_max/unitForce or pre(startForward)
 | 
						|
         and sa > f0/unitForce) or pre(mode) == Backward and v_relfric > v_small or
 | 
						|
        initial() and (v_relfric > 0);
 | 
						|
      startBackward = pre(mode) == Stuck and (sa < -f0_max/unitForce or pre(
 | 
						|
        startBackward) and sa < -f0/unitForce) or pre(mode) == Forward and v_relfric <
 | 
						|
        -v_small or initial() and (v_relfric < 0);
 | 
						|
      locked = not free and not (pre(mode) == Forward or startForward or pre(
 | 
						|
        mode) == Backward or startBackward);
 | 
						|
 | 
						|
      a_relfric/unitAcceleration = if locked then               0 else
 | 
						|
                                   if free then                 sa else
 | 
						|
                                   if startForward then         sa - f0_max/unitForce else
 | 
						|
                                   if startBackward then        sa + f0_max/unitForce else
 | 
						|
                                   if pre(mode) == Forward then sa - f0_max/unitForce else
 | 
						|
                                                                sa + f0_max/unitForce;
 | 
						|
 | 
						|
    /* Friction torque has to be defined in a subclass. Example for a clutch:
 | 
						|
   f = if locked then sa else
 | 
						|
       if free then   0 else
 | 
						|
       cgeo*fn*(if startForward then          Math.tempInterpol1( v_relfric, mue_pos, 2) else
 | 
						|
                if startBackward then        -Math.tempInterpol1(-v_relfric, mue_pos, 2) else
 | 
						|
                if pre(mode) == Forward then  Math.tempInterpol1( v_relfric, mue_pos, 2) else
 | 
						|
                                             -Math.tempInterpol1(-v_relfric, mue_pos, 2));
 | 
						|
*/
 | 
						|
    // finite state machine to determine configuration
 | 
						|
      mode = if free then Free else
 | 
						|
        (if (pre(mode) == Forward  or pre(mode) == Free or startForward)  and v_relfric > 0 then
 | 
						|
           Forward else
 | 
						|
         if (pre(mode) == Backward or pre(mode) == Free or startBackward) and v_relfric < 0 then
 | 
						|
           Backward else
 | 
						|
           Stuck);
 | 
						|
      annotation (Documentation(info="<html>
 | 
						|
<p>
 | 
						|
Basic model for Coulomb friction that models the stuck phase in a reliable way.
 | 
						|
</p>
 | 
						|
</html>"));
 | 
						|
    end PartialFriction;
 | 
						|
 | 
						|
    annotation (Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This package contains connectors and partial models for 1-dim.
 | 
						|
translational mechanical components. The components of this package can
 | 
						|
only be used as basic building elements for models.
 | 
						|
</p>
 | 
						|
 | 
						|
</html>"));
 | 
						|
  end Interfaces;
 | 
						|
 | 
						|
  annotation (
 | 
						|
    Icon(coordinateSystem(preserveAspectRatio = true, extent = {{-100,-100},{100,100}}), graphics = {
 | 
						|
      Line(
 | 
						|
        origin = {14,53},
 | 
						|
        points = {{-84,-73},{66,-73}}),
 | 
						|
      Rectangle(
 | 
						|
        origin = {14,53},
 | 
						|
        lineColor = {64,64,64},
 | 
						|
        fillColor = {192,192,192},
 | 
						|
        fillPattern = FillPattern.Sphere,
 | 
						|
        extent = {{-81,-65},{-8,-22}}),Line(visible = true,
 | 
						|
        origin = {14,53},
 | 
						|
        points = {{-8,-43},{-1,-43},{6,-64},{17,-23},{29,-65},{40,-23},{50,-44},{61,-44}}),
 | 
						|
      Line(
 | 
						|
        origin = {14,53},
 | 
						|
        points = {{-59,-73},{-84,-93}}),
 | 
						|
      Line(
 | 
						|
        origin = {14,53},
 | 
						|
        points = {{-11,-73},{-36,-93}}),
 | 
						|
      Line(
 | 
						|
        origin = {14,53},
 | 
						|
        points = {{-34,-73},{-59,-93}}),
 | 
						|
      Line(
 | 
						|
        origin = {14,53},
 | 
						|
        points = {{14,-73},{-11,-93}}),
 | 
						|
      Line(
 | 
						|
        origin = {14,53},
 | 
						|
        points = {{39,-73},{14,-93}}),
 | 
						|
      Line(
 | 
						|
        origin = {14,53},
 | 
						|
        points = {{63,-73},{38,-93}})}),
 | 
						|
                                                        Documentation(info="<html>
 | 
						|
<p>
 | 
						|
This package contains components to model <i>1-dimensional translational
 | 
						|
mechanical</i> systems.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
The <i>filled</i> and <i>non-filled green squares</i> at the left and
 | 
						|
right side of a component represent <i>mechanical flanges</i>.
 | 
						|
Drawing a line between such squares means that the corresponding
 | 
						|
flanges are <i>rigidly attached</i> to each other. The components of this
 | 
						|
library can be usually connected together in an arbitrary way. E.g. it is
 | 
						|
possible to connect two springs or two sliding masses with inertia directly
 | 
						|
together.
 | 
						|
<p> The only <i>connection restriction</i> is that the Coulomb friction
 | 
						|
elements (e.g., MassWithStopAndFriction) should be only connected
 | 
						|
together provided a compliant element, such as a spring, is in between.
 | 
						|
The reason is that otherwise the frictional force is not uniquely
 | 
						|
defined if the elements are stuck at the same time instant (i.e., there
 | 
						|
does not exist a unique solution) and some simulation systems may not be
 | 
						|
able to handle this situation, since this leads to a singularity during
 | 
						|
simulation. It can only be resolved in a \"clean way\" by combining the
 | 
						|
two connected friction elements into
 | 
						|
one component and resolving the ambiguity of the frictional force in the
 | 
						|
stuck mode.
 | 
						|
</p>
 | 
						|
<p> Another restriction arises if the hard stops in model MassWithStopAndFriction are used, i. e.
 | 
						|
the movement of the mass is limited by a stop at smax or smin.
 | 
						|
<font color=\"#ff0000\"> <b>This requires the states Stop.s and Stop.v</b> </font>. If these states are eliminated during the index reduction
 | 
						|
the model will not work. To avoid this any inertias should be connected via springs
 | 
						|
to the Stop element, other sliding masses, dampers or hydraulic chambers must be avoided.</p>
 | 
						|
<p>
 | 
						|
In the <i>icon</i> of every component an <i>arrow</i> is displayed in grey
 | 
						|
color. This arrow characterizes the coordinate system in which the vectors
 | 
						|
of the component are resolved. It is directed into the positive
 | 
						|
translational direction (in the mathematical sense).
 | 
						|
In the flanges of a component, a coordinate system is rigidly attached
 | 
						|
to the flange. It is called <i>flange frame</i> and is directed in parallel
 | 
						|
to the component coordinate system. As a result, e.g., the positive
 | 
						|
cut-force of a \"left\" flange (flange_a) is directed into the flange, whereas
 | 
						|
the positive cut-force of a \"right\" flange (flange_b) is directed out of the
 | 
						|
flange. A flange is described by a Modelica connector containing
 | 
						|
the following variables:
 | 
						|
</p>
 | 
						|
<pre>
 | 
						|
   Modelica.SIunits.Position s    \"Absolute position of flange\";
 | 
						|
   <b>flow</b> Modelica.SIunits.Force f  \"Cut-force in the flange\";
 | 
						|
</pre>
 | 
						|
 | 
						|
<p>
 | 
						|
This library is designed in a fully object oriented way in order that
 | 
						|
components can be connected together in every meaningful combination
 | 
						|
(e.g., direct connection of two springs or two shafts with inertia).
 | 
						|
As a consequence, most models lead to a system of
 | 
						|
differential-algebraic equations of <i>index 3</i> (= constraint
 | 
						|
equations have to be differentiated twice in order to arrive at
 | 
						|
a state space representation) and the Modelica translator or
 | 
						|
the simulator has to cope with this system representation.
 | 
						|
According to our present knowledge, this requires that the
 | 
						|
Modelica translator is able to symbolically differentiate equations
 | 
						|
(otherwise it is e.g., not possible to provide consistent initial
 | 
						|
conditions; even if consistent initial conditions are present, most
 | 
						|
numerical DAE integrators can cope at most with index 2 DAEs).
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
In version 3.2 of the Modelica Standard Library, all <b>dissipative</b> components
 | 
						|
of the Translational library got an optional <b>heatPort</b> connector to which the
 | 
						|
dissipated energy is transported in form of heat. This connector is enabled
 | 
						|
via parameter \"useHeatPort\". If the heatPort connector is enabled,
 | 
						|
it must be connected, and if it is not enabled, it must not be connected.
 | 
						|
Independently, whether the heatPort is enabled or not,
 | 
						|
the dissipated power is available from the new variable \"<b>lossPower</b>\" (which is
 | 
						|
positive if heat is flowing out of the heatPort). For an example, see
 | 
						|
<a href=\"modelica://Modelica.Mechanics.Translational.Examples.HeatLosses\">Examples.HeatLosses</a>.
 | 
						|
</p>
 | 
						|
 | 
						|
<dl>
 | 
						|
<dt><b>Library Officer</b>
 | 
						|
<dd><a href=\"http://www.robotic.dlr.de/Martin.Otter/\">Martin Otter</a> <br>
 | 
						|
    Deutsches Zentrum für Luft und Raumfahrt e.V. (DLR)<br>
 | 
						|
    Institut für Robotik und Mechatronik (DLR-RM)<br>
 | 
						|
    Abteilung Systemdynamik und Regelungstechnik<br>
 | 
						|
    Postfach 1116<br>
 | 
						|
    D-82230 Wessling<br>
 | 
						|
    Germany<br>
 | 
						|
    email: <A HREF=\"mailto:Martin.Otter@dlr.de\">Martin.Otter@dlr.de</A><br><br>
 | 
						|
</dl>
 | 
						|
 | 
						|
<p>
 | 
						|
<b>Contributors to this library:</b>
 | 
						|
</p>
 | 
						|
 | 
						|
<ul>
 | 
						|
<li> Main author until 2006:<br>
 | 
						|
     Peter Beater <br>
 | 
						|
     Universität Paderborn, Abteilung Soest<br>
 | 
						|
     Fachbereich Maschinenbau/Automatisierungstechnik<br>
 | 
						|
     Lübecker Ring 2 <br>
 | 
						|
     D 59494 Soest <br>
 | 
						|
     Germany <br>
 | 
						|
     email: <A HREF=\"mailto:info@beater.de\">info@beater.de</A><br><br>
 | 
						|
     </li>
 | 
						|
 | 
						|
<li> <a href=\"http://www.haumer.at/\">Anton Haumer</a><br>
 | 
						|
     Technical Consulting & Electrical Engineering<br>
 | 
						|
     A-3423 St.Andrae-Woerdern, Austria<br>
 | 
						|
     email: <a href=\"mailto:a.haumer@haumer.at\">a.haumer@haumer.at</a><br><br></li>
 | 
						|
 | 
						|
<li> <a href=\"http://www.robotic.dlr.de/Martin.Otter/\">Martin Otter</a> (DLR-RM)</li>
 | 
						|
</ul>
 | 
						|
 | 
						|
<p>
 | 
						|
Copyright © 1998-2013, Modelica Association, Anton Haumer and Universität Paderborn, FB 12.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
<i>This Modelica package is <u>free</u> software and the use is completely at <u>your own risk</u>; it can be redistributed and/or modified under the terms of the Modelica License 2. For license conditions (including the disclaimer of warranty) see <a href=\"modelica://Modelica.UsersGuide.ModelicaLicense2\">Modelica.UsersGuide.ModelicaLicense2</a> or visit <a href=\"https://www.modelica.org/licenses/ModelicaLicense2\"> https://www.modelica.org/licenses/ModelicaLicense2</a>.</i>
 | 
						|
</p>
 | 
						|
</html>", revisions="<html>
 | 
						|
<ul>
 | 
						|
<li><i>Version 1.2.0 2010-07-22</i>
 | 
						|
       by Anton Haumer and Martin Otter<br>
 | 
						|
       heatPort introduced for all dissipative elements, and
 | 
						|
       text in icons improved.
 | 
						|
       <br></li>
 | 
						|
 | 
						|
<li><i>Version 1.1.0 2007-11-16</i>
 | 
						|
       by Anton Haumer<br>
 | 
						|
       Redesign for Modelica 3.0-compliance<br>
 | 
						|
       Added new components according to Mechanics.Rotational library
 | 
						|
       <br></li>
 | 
						|
 | 
						|
<li><i>Version 1.01 (July 18, 2001)</i>
 | 
						|
       by Peter Beater <br>
 | 
						|
       Assert statement added to \"Stop\", small bug fixes in examples.
 | 
						|
       <br></li>
 | 
						|
 | 
						|
<li><i>Version 1.0 (January 5, 2000)</i>
 | 
						|
       by Peter Beater <br>
 | 
						|
       Realized a first version based on Modelica library Mechanics.Rotational
 | 
						|
       by Martin Otter and an existing Dymola library onedof.lib by Peter Beater.</li>
 | 
						|
</ul>
 | 
						|
</html>"));
 | 
						|
end Translational;
 |