diff --git a/Modelica/Mechanics/Translational/Components/IdealGear.mo b/Modelica/Mechanics/Translational/Components/IdealGear.mo
new file mode 100644
index 0000000000..4475aa8b52
--- /dev/null
+++ b/Modelica/Mechanics/Translational/Components/IdealGear.mo
@@ -0,0 +1,64 @@
+within Modelica.Mechanics.Translational.Components;
+model IdealGear "Ideal gear without mass"
+ extends Modelica.Mechanics.Translational.Interfaces.PartialElementaryTwoFlangesAndSupport2;
+ parameter Real ratio(start=1)
+ "Transmission ratio (flange_a.s/flange_b.s)";
+
+equation
+ s_a = ratio*s_b;
+ 0 = ratio*flange_a.f + flange_b.f;
+
+ annotation (
+ Documentation(info="
+
+This element characterizes any type of gear which is fixed in the
+ground and which has one driving flange and one driven flange.
+The gear is ideal, i.e., it does not have mass, elasticity, damping
+or backlash. If these effects have to be considered, the gear has to be
+connected to other elements in an appropriate way.
+
+"),
+ Icon(
+ coordinateSystem(preserveAspectRatio=true,
+ extent={{-100,-100},{100,100}}),
+ graphics={ Line(points={{70,0},{100,0}}, color={0,127,0}),
+ Line(points={{-100,0},{-70,0}},color={0,127,0}),
+ Ellipse(
+ extent={{-38,38},{38,-38}},
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid,
+ lineColor={95,95,95}),
+ Ellipse(
+ extent={{-16,16},{16,-16}},
+ fillColor={255,255,255},
+ fillPattern=FillPattern.Solid,
+ lineColor={95,95,95}),
+ Polygon(
+ points={{76,-10},{76,0},{76,24},{-42,24},{-42,16},{56,16},{66,-10},{76,-10}},
+ lineColor={0,127,0},
+ fillColor={160,215,160},
+ fillPattern=FillPattern.Solid),
+ Line(
+ points={{0,-54},{0,0}},
+ color={0,127,0}),
+ Line(
+ points={{0,-100},{0,-78}},
+ color={0,127,0}),
+ Ellipse(
+ extent={{-4,4},{4,-4}},
+ lineColor={0,127,0},
+ fillColor={160,215,160},
+ fillPattern=FillPattern.Solid),
+ Text(
+ extent={{-150,100},{150,60}},
+ textColor={0,0,255},
+ textString="%name"),
+ Text(
+ extent={{-100,-50},{100,-80}},
+ textString="ratio=%ratio"),
+ Polygon(
+ points={{50,48},{50,38},{-52,38},{-66,-10},{-76,-10},{-76,48},{50,48}},
+ lineColor={95,95,95},
+ fillColor={131,175,131},
+ fillPattern=FillPattern.Solid)}));
+end IdealGear;
diff --git a/Modelica/Mechanics/Translational/Components/package.order b/Modelica/Mechanics/Translational/Components/package.order
index 0fe3ef587b..9c6d1783fd 100644
--- a/Modelica/Mechanics/Translational/Components/package.order
+++ b/Modelica/Mechanics/Translational/Components/package.order
@@ -7,6 +7,7 @@ SpringDamper
ElastoGap
SupportFriction
Brake
+IdealGear
IdealGearR2T
IdealRollingWheel
RollingResistance
diff --git a/Modelica/Mechanics/Translational/Examples/GearGrounded.mo b/Modelica/Mechanics/Translational/Examples/GearGrounded.mo
new file mode 100644
index 0000000000..5220ab8d41
--- /dev/null
+++ b/Modelica/Mechanics/Translational/Examples/GearGrounded.mo
@@ -0,0 +1,61 @@
+within Modelica.Mechanics.Translational.Examples;
+model GearGrounded "Translational grounded gear"
+ extends Modelica.Icons.Example;
+
+ Sources.Force force annotation (Placement(transformation(extent={{-70,-10},{-50,10}})));
+ Components.IdealGear idealGear(
+ ratio=1.6,
+ useSupport=true) annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ Components.Mass mass1(
+ m=0.1) annotation (Placement(transformation(extent={{-40,-10},{-20,10}})));
+ Components.Mass mass2(
+ m=7,
+ s(fixed=true, start=0),
+ v(fixed=true, start=0)) annotation (Placement(transformation(extent={{20,-10},{40,10}})));
+ Components.SpringDamper springDamper(
+ c=160,
+ d=10,
+ s_rel0=0.1) annotation (Placement(transformation(extent={{50,-10},{70,10}})));
+ Components.SpringDamper springDamperSupport(
+ s_rel(fixed=true),
+ v_rel(fixed=true),
+ c=800,
+ d=50) annotation (Placement(transformation(extent={{-40,-50},{-20,-30}})));
+ Blocks.Sources.Ramp ramp(
+ height=10,
+ duration=0.6,
+ offset=springDamper.s_rel0*springDamper.c/idealGear.ratio,
+ startTime=0.3)
+ annotation (Placement(transformation(extent={{-100,-10},{-80,10}})));
+ Components.Fixed fixed annotation (Placement(transformation(extent={{-70,-50},{-50,-30}})));
+ Components.Fixed fixed1 annotation (Placement(transformation(extent={{70,-10},{90,10}})));
+equation
+ connect(mass1.flange_b, idealGear.flange_a) annotation (Line(points={{-20,0},{-10,0}}, color={0,127,0}));
+ connect(idealGear.flange_b, mass2.flange_a) annotation (Line(points={{10,0},{20,0}}, color={0,127,0}));
+ connect(ramp.y, force.f) annotation (Line(points={{-79,0},{-72,0}}, color={0,0,127}));
+ connect(force.flange, mass1.flange_a) annotation (Line(points={{-50,0},{-40,0}}, color={0,127,0}));
+ connect(fixed.flange, springDamperSupport.flange_a) annotation (Line(points={{-60,-40},{-40,-40}}, color={0,127,0}));
+ connect(springDamperSupport.flange_b, idealGear.support) annotation (Line(points={{-20,-40},{0,-40},{0,-10}}, color={0,127,0}));
+ connect(mass2.flange_b, springDamper.flange_a) annotation (Line(points={{40,0},{50,0}}, color={0,127,0}));
+ connect(springDamper.flange_b, fixed1.flange) annotation (Line(points={{70,0},{80,0}}, color={0,127,0}));
+ annotation (
+ experiment(
+ StopTime=3.0,
+ Interval=0.001),
+ Documentation(info="
+
+The flange_a
of the ideal gear is driven by an external ramp-formed
+force.
+Via the elastically mounted gear the translational energy is transmitted to
+a load mass where a preload force of springDamper
acts against
+the external force.
+For ratio idealGear.ratio > 1
the driven flange
+flange_b
performs smaler movement then the driving flange
+flange_a
.
+
+
+Simulate for 3 seconds and plot e.g. the position of masses:
+mass1.s
, mass2.s
+
+"));
+end GearGrounded;
diff --git a/Modelica/Mechanics/Translational/Examples/package.order b/Modelica/Mechanics/Translational/Examples/package.order
index aa645c0dc7..110cbc949e 100644
--- a/Modelica/Mechanics/Translational/Examples/package.order
+++ b/Modelica/Mechanics/Translational/Examples/package.order
@@ -4,6 +4,7 @@ WhyArrows
Accelerate
CompareBrakingForce
Damper
+GearGrounded
Oscillator
Sensors
Friction
diff --git a/Modelica/Resources/Reference/Modelica/Mechanics/Translational/Examples/FirstGrounded/comparisonSignals.txt b/Modelica/Resources/Reference/Modelica/Mechanics/Translational/Examples/FirstGrounded/comparisonSignals.txt
new file mode 100644
index 0000000000..eb59732ec4
--- /dev/null
+++ b/Modelica/Resources/Reference/Modelica/Mechanics/Translational/Examples/FirstGrounded/comparisonSignals.txt
@@ -0,0 +1,5 @@
+time
+damper.s_rel
+damper.v_rel
+mass3.s
+mass3.v
diff --git a/ModelicaTest/Resources/Reference/ModelicaTest/Translational/GearAndLever/comparisonSignals.txt b/ModelicaTest/Resources/Reference/ModelicaTest/Translational/GearAndLever/comparisonSignals.txt
new file mode 100644
index 0000000000..0a4d38e596
--- /dev/null
+++ b/ModelicaTest/Resources/Reference/ModelicaTest/Translational/GearAndLever/comparisonSignals.txt
@@ -0,0 +1,10 @@
+time
+inertia1.phi
+inertia1.w
+inertia3.phi
+inertia3.w
+mass1.s
+mass1.v
+mass3.s
+mass3.v
+
diff --git a/ModelicaTest/Translational.mo b/ModelicaTest/Translational.mo
index d278f28245..00395ca460 100644
--- a/ModelicaTest/Translational.mo
+++ b/ModelicaTest/Translational.mo
@@ -383,4 +383,116 @@ extends Modelica.Icons.ExamplesPackage;
connect(position1.flange, supportFriction2.flange_a) annotation (Line(points={{10,0},{46,0}}, color={0,127,0}));
annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(coordinateSystem(preserveAspectRatio=false)));
end TestFrictionPosition;
+
+ model IdealGears
+ extends Modelica.Icons.Example;
+
+ constant Real tol=Modelica.Constants.eps;
+
+ Modelica.Blocks.Math.Add errVel(k2=-1) annotation (Placement(transformation(extent={{80,60},{100,80}})));
+ Modelica.Blocks.Math.Add errPos(k2=-1) annotation (Placement(transformation(extent={{80,-60},{100,-40}})));
+ Modelica.Mechanics.Rotational.Sources.Torque torque(useSupport=false) annotation (Placement(
+ transformation(extent={{-58,80},{-38,100}})));
+ Modelica.Mechanics.Rotational.Components.Inertia inertia1(J=1.2) annotation (Placement(
+ transformation(extent={{-30,80},{-10,100}})));
+ Modelica.Mechanics.Rotational.Components.IdealGear idealGearR(
+ ratio=-0.4,
+ useSupport=false) annotation (Placement(transformation(extent={{0,80},{20,100}})));
+ Modelica.Mechanics.Rotational.Components.Inertia inertia2(
+ J=2,
+ phi(fixed=true, start=0),
+ w(fixed=true, start=0)) annotation (Placement(transformation(extent={{30,80},{50,100}})));
+ Modelica.Blocks.Sources.Sine sine(amplitude=1, f=3)
+ annotation (Placement(transformation(extent={{-100,50},{-80,70}})));
+ Modelica.Mechanics.Translational.Sources.Force force annotation (Placement(transformation(extent={{-60,40},{-40,60}})));
+ Modelica.Mechanics.Translational.Components.Mass mass1(m=1.2) annotation (Placement(transformation(extent={{-30,40},{-10,60}})));
+ Modelica.Mechanics.Translational.Components.IdealGear idealGearT(
+ ratio=idealGearR.ratio,
+ useSupport=false) annotation (Placement(transformation(extent={{0,40},{20,60}})));
+ Modelica.Mechanics.Translational.Components.Mass mass2(
+ m=2,
+ s(fixed=true),
+ v(fixed=true)) annotation (Placement(transformation(extent={{30,40},{50,60}})));
+ Modelica.Mechanics.Rotational.Sources.Torque torque1(useSupport=false) annotation (Placement(
+ transformation(extent={{-58,-10},{-38,10}})));
+ Modelica.Mechanics.Rotational.Components.Inertia inertia3(J=1.2) annotation (Placement(
+ transformation(extent={{-30,-10},{-10,10}})));
+ Modelica.Mechanics.Rotational.Components.IdealGear idealGearR1(
+ ratio=1.4,
+ useSupport=true) annotation (Placement(transformation(extent={{0,-10},{20,10}})));
+ Modelica.Mechanics.Rotational.Components.Inertia inertia4(
+ J=2,
+ phi(fixed=true, start=0),
+ w(fixed=true, start=0)) annotation (Placement(transformation(extent={{30,-10},{50,10}})));
+ Modelica.Mechanics.Translational.Sources.Force force1 annotation (Placement(transformation(extent={{-60,-100},{-40,-80}})));
+ Modelica.Mechanics.Translational.Components.Mass mass3(m=1.2) annotation (Placement(transformation(extent={{-30,-100},{-10,-80}})));
+ Modelica.Mechanics.Translational.Components.IdealGear idealGearT1(
+ useSupport=true,
+ ratio=idealGearR1.ratio) annotation (Placement(transformation(extent={{0,-80},{20,-100}})));
+ Modelica.Mechanics.Translational.Components.Mass mass4(
+ m=2,
+ s(fixed=true),
+ v(fixed=true)) annotation (Placement(transformation(extent={{30,-100},{50,-80}})));
+ Modelica.Mechanics.Rotational.Components.Fixed fixedR annotation (Placement(transformation(extent={{-60,-40},{-40,-20}})));
+ Modelica.Mechanics.Rotational.Components.SpringDamper springDamperR(
+ c=20,
+ d=2.2,
+ phi_rel(fixed=true),
+ w_rel(fixed=true)) annotation (Placement(transformation(extent={{-30,-40},{-10,-20}})));
+ Modelica.Mechanics.Translational.Components.Fixed fixedT annotation (Placement(transformation(extent={{-60,-70},{-40,-50}})));
+ Modelica.Mechanics.Translational.Components.SpringDamper springDamperT(
+ s_rel(fixed=true),
+ v_rel(fixed=true),
+ c=20,
+ d=2.2) annotation (Placement(transformation(extent={{-32,-70},{-12,-50}})));
+ Modelica.Mechanics.Rotational.Sensors.SpeedSensor speedSensorR1 annotation (Placement(transformation(extent={{54,80},{74,100}})));
+ Modelica.Mechanics.Translational.Sensors.SpeedSensor speedSensorT1 annotation (Placement(transformation(extent={{54,40},{74,60}})));
+ Modelica.Mechanics.Rotational.Sensors.AngleSensor angleSensor annotation (Placement(transformation(extent={{20,-40},{40,-20}})));
+ Modelica.Mechanics.Translational.Sensors.PositionSensor positionSensor annotation (Placement(transformation(extent={{20,-70},{40,-50}})));
+ Modelica.Blocks.Sources.Sine sine1(
+ amplitude=sine.amplitude,
+ f=sine.f,
+ phase=sine.phase,
+ continuous=sine.continuous,
+ offset=sine.offset,
+ startTime=sine.startTime)
+ annotation (Placement(transformation(extent={{-100,-60},{-80,-40}})));
+ equation
+ assert(abs(errVel.y) < tol,
+ "Velocity of rotational and translational component must be equal (less then tolerance)");
+ assert(abs(errPos.y) < tol,
+ "Position of rotational and translational component must be equal (less then tolerance)");
+
+ connect(inertia1.flange_b, idealGearR.flange_a) annotation (Line(points={{-10,90},{0,90}}));
+ connect(idealGearR.flange_b, inertia2.flange_a) annotation (Line(points={{20,90},{30,90}}));
+ connect(sine.y,torque. tau)
+ annotation (Line(points={{-79,60},{-72,60},{-72,90},{-60,90}}, color={0,0,127}));
+ connect(torque.flange,inertia1. flange_a) annotation (Line(
+ points={{-38,90},{-30,90}}));
+ connect(force.flange, mass1.flange_a) annotation (Line(points={{-40,50},{-30,50}}, color={0,127,0}));
+ connect(mass1.flange_b,idealGearT. flange_a) annotation (Line(points={{-10,50},{0,50}}, color={0,127,0}));
+ connect(idealGearT.flange_b, mass2.flange_a) annotation (Line(points={{20,50},{30,50}}, color={0,127,0}));
+ connect(inertia3.flange_b, idealGearR1.flange_a) annotation (Line(points={{-10,0},{0,0}}));
+ connect(idealGearR1.flange_b, inertia4.flange_a) annotation (Line(points={{20,0},{30,0}}));
+ connect(sine.y, torque1.tau) annotation (Line(points={{-79,60},{-72,60},{-72,0},{-60,0}}, color={0,0,127}));
+ connect(torque1.flange, inertia3.flange_a) annotation (Line(points={{-38,0},{-30,0}}));
+ connect(force1.flange, mass3.flange_a) annotation (Line(points={{-40,-90},{-30,-90}}, color={0,127,0}));
+ connect(mass3.flange_b,idealGearT1. flange_a) annotation (Line(points={{-10,-90},{0,-90}}, color={0,127,0}));
+ connect(idealGearT1.flange_b, mass4.flange_a) annotation (Line(points={{20,-90},{30,-90}}, color={0,127,0}));
+ connect(fixedR.flange, springDamperR.flange_a) annotation (Line(points={{-50,-30},{-30,-30}}, color={0,0,0}));
+ connect(springDamperR.flange_b, idealGearR1.support) annotation (Line(points={{-10,-30},{10,-30},{10,-10}}, color={0,0,0}));
+ connect(fixedT.flange, springDamperT.flange_a) annotation (Line(points={{-50,-60},{-32,-60}}, color={0,127,0}));
+ connect(springDamperT.flange_b,idealGearT1. support) annotation (Line(points={{-12,-60},{10,-60},{10,-80}}, color={0,127,0}));
+ connect(inertia2.flange_b, speedSensorR1.flange) annotation (Line(points={{50,90},{54,90}}, color={0,0,0}));
+ connect(mass2.flange_b, speedSensorT1.flange) annotation (Line(points={{50,50},{54,50}}, color={0,127,0}));
+ connect(speedSensorR1.w, errVel.u1) annotation (Line(points={{75,90},{78,90},{78,76}}, color={0,0,127}));
+ connect(speedSensorT1.v, errVel.u2) annotation (Line(points={{75,50},{78,50},{78,64}}, color={0,0,127}));
+ connect(springDamperR.flange_b, angleSensor.flange) annotation (Line(points={{-10,-30},{20,-30}}, color={0,0,0}));
+ connect(springDamperT.flange_b, positionSensor.flange) annotation (Line(points={{-12,-60},{20,-60}}, color={0,127,0}));
+ connect(angleSensor.phi, errPos.u1) annotation (Line(points={{41,-30},{70,-30},{70,-44},{78,-44}}, color={0,0,127}));
+ connect(positionSensor.s, errPos.u2) annotation (Line(points={{41,-60},{70,-60},{70,-56},{78,-56}}, color={0,0,127}));
+ connect(sine1.y, force.f) annotation (Line(points={{-79,-50},{-68,-50},{-68,50},{-62,50}}, color={0,0,127}));
+ connect(sine1.y, force1.f) annotation (Line(points={{-79,-50},{-68,-50},{-68,-90},{-62,-90}}, color={0,0,127}));
+ annotation (experiment(StopTime=1.1));
+ end IdealGears;
end Translational;