These examples demonstrate the usage of the PlanarMechanics library.
For all these examples the following simulation setup is proposed.
| Name | Description |
|---|---|
| double pendulum | |
| free body on spring | |
| kinematic loop with 4 revolute joints | |
| kinematic loop | |
| a simple pendulum | |
| model of a free crane crab |
MultiBondLib.PlanarMechanics.Examples.DoublePendulum
The model is confronted with its equivalence of the Modelica.Mechanics.MultiBody library.
model DoublePendulum "double pendulum"
extends Modelica.Icons.Example;
PlanarMechanics.Parts.Fixed Fixed1;
PlanarMechanics.Joints.Revolute Revolute1(initType=Modelica.Mechanics.
MultiBody.Types.Init.PositionVelocity);
PlanarMechanics.Parts.FixedTranslation FixedTranslation1(r={2,2});
inner Modelica.Mechanics.MultiBody.World world(nominalLength=5);
Modelica.Mechanics.MultiBody.Parts.Fixed Fixed2(r={0,0,-1});
Modelica.Mechanics.MultiBody.Parts.FixedTranslation FixedTranslation2(r={2,2,
0});
Modelica.Mechanics.MultiBody.Joints.Revolute Revolute2(initType=
Modelica.Mechanics.MultiBody.Types.Init.PositionVelocity);
PlanarMechanics.Joints.Revolute Revolute3(initType=Modelica.Mechanics.
MultiBody.Types.Init.PositionVelocity);
PlanarMechanics.Parts.FixedTranslation FixedTranslation3(r={0,-1.5});
PlanarMechanics.Parts.Body Body3(m=1, J=0);
Modelica.Mechanics.MultiBody.Parts.Body Body4(
m=1,
I_11=0,
I_22=0,
I_33=0);
Modelica.Mechanics.MultiBody.Parts.FixedTranslation FixedTranslation4(r={0,-1.5,
0});
Modelica.Mechanics.MultiBody.Joints.Revolute Revolute4(initType=
Modelica.Mechanics.MultiBody.Types.Init.PositionVelocity);
PlanarMechanics.Parts.Body Body1( J=0, m=2);
Modelica.Mechanics.MultiBody.Parts.Body Body2(
I_11=0,
I_22=0,
I_33=0,
m=2);
inner PlanarMechanics.PlanarWorld planarWorld(nominalLength=5);
equation
connect(Revolute1.frame_a, Fixed1.frame_b);
connect(FixedTranslation1.frame_a, Revolute1.frame_b);
connect(Revolute2.frame_a, Fixed2.frame_b);
connect(Revolute2.frame_b, FixedTranslation2.frame_a);
connect(FixedTranslation3.frame_b, Body3.frame_a);
connect(FixedTranslation3.frame_a, Revolute3.frame_b);
connect(Revolute3.frame_a, FixedTranslation1.frame_b);
connect(Revolute4.frame_b, FixedTranslation4.frame_a);
connect(FixedTranslation4.frame_b, Body4.frame_a);
connect(Revolute4.frame_a, FixedTranslation2.frame_b);
connect(Body1.frame_a, FixedTranslation1.frame_b);
connect(Body2.frame_a, FixedTranslation2.frame_b);
end DoublePendulum;
MultiBondLib.PlanarMechanics.Examples.FreeBody
model FreeBody "free body on spring"
extends Modelica.Icons.Example;
PlanarMechanics.Parts.FixedTranslation FixedTranslation1(r={1,0});
PlanarMechanics.Parts.Fixed Fixed1;
PlanarMechanics.Forces.Spring Spring1( s0=1, c=10);
inner PlanarMechanics.PlanarWorld planarWorld(nominalLength=5);
Parts.Body Body1(
initType=Modelica.Mechanics.MultiBody.Types.Init.PositionVelocity,
m=1,
x_start={1.2,-0.5},
J=0.12);
equation
connect(Spring1.frame_a, Fixed1.frame_b);
connect(Spring1.frame_b, FixedTranslation1.frame_a);
connect(Body1.frame_a, FixedTranslation1.frame_b);
end FreeBody;
MultiBondLib.PlanarMechanics.Examples.KinematicLoop
The planar loop is formed out of four revolutes.
The loop is closed automatically. The loop leads to 2 non-linear equations.
model KinematicLoop "kinematic loop with 4 revolute joints"
extends Modelica.Icons.Example;
PlanarMechanics.Parts.Fixed Fixed1;
PlanarMechanics.Parts.FixedTranslation FixedTranslation1(r={0,1});
PlanarMechanics.Joints.Revolute Revolute1(phi_start=
0,
enforceStates=true,
initType=Modelica.Mechanics.MultiBody.Types.Init.PositionVelocity);
PlanarMechanics.Joints.Revolute Revolute2;
PlanarMechanics.Parts.FixedTranslation FixedTranslation2;
PlanarMechanics.Parts.FixedTranslation FixedTranslation3;
PlanarMechanics.Joints.Revolute Revolute3;
PlanarMechanics.Parts.FixedTranslation FixedTranslation4(r={0,1});
PlanarMechanics.Joints.Revolute Revolute4;
PlanarMechanics.Parts.Body Body1(animation=false);
PlanarMechanics.Parts.Body Body2(animation=false);
PlanarMechanics.Parts.Body Body3(animation=false);
PlanarMechanics.Parts.Body Body4(animation=false);
inner PlanarMechanics.PlanarWorld planarWorld(nominalLength=5,
animateWorld=false,
animateGravity=false);
equation
connect(Revolute1.frame_a, Fixed1.frame_b);
connect(FixedTranslation1.frame_b, Fixed1.frame_b);
connect(Revolute2.frame_b, FixedTranslation1.frame_a);
connect(Revolute1.frame_b, FixedTranslation3.frame_a);
connect(Revolute2.frame_a, FixedTranslation2.frame_a);
connect(FixedTranslation3.frame_b, Revolute3.frame_b);
connect(Revolute3.frame_a, FixedTranslation4.frame_b);
connect(Revolute4.frame_b, FixedTranslation4.frame_a);
connect(Body1.frame_a, FixedTranslation3.frame_b);
connect(Body3.frame_a, FixedTranslation4.frame_a);
connect(Body2.frame_a, FixedTranslation2.frame_b);
connect(Body4.frame_a, Revolute4.frame_a);
connect(FixedTranslation2.frame_b, Revolute4.frame_a);
end KinematicLoop;
MultiBondLib.PlanarMechanics.Examples.KinematicLoop2
The planar loop is formed out of three revolute and one prismatic joint. Attached to this loop is a pendulum that is dissipating its energy through the damper.
The loop is closed automatically. The loop leads to 2 non-linear equations.
model KinematicLoop2 "kinematic loop"
extends Modelica.Icons.Example;
PlanarMechanics.Parts.Fixed Fixed1;
PlanarMechanics.Parts.FixedTranslation FixedTranslation1(r={0,-3});
PlanarMechanics.Parts.FixedTranslation FixedTranslation2(r={0,-3});
PlanarMechanics.Joints.Revolute Revolute1(enforceStates=true);
PlanarMechanics.Joints.Revolute Revolute2;
PlanarMechanics.Joints.Revolute Revolute3;
PlanarMechanics.Joints.Prismatic Prismatic1(
initType=Modelica.Mechanics.MultiBody.Types.Init.PositionVelocity,
v_start=0,
s_start=2,
enforceStates=false,
boxWidth=0.5*planarWorld.defaultJointWidth);
PlanarMechanics.Forces.Spring Spring1(
c=50,
s0=1.6);
PlanarMechanics.Joints.Revolute Revolute4(initType=Modelica.Mechanics.
MultiBody.Types.Init.PositionVelocity, enforceStates=true);
PlanarMechanics.Parts.Body Body2(m=2, J=0.05);
PlanarMechanics.Parts.FixedTranslation FixedTranslation3(r={2,0});
PlanarMechanics.Forces.Damping Damping1(d=2);
inner PlanarMechanics.PlanarWorld planarWorld(nominalLength=5,
enableAnimation=true,
animateWorld=false,
animateGravity=false);
equation
connect(Prismatic1.frame_a, Fixed1.frame_b);
connect(Revolute2.frame_a, Prismatic1.frame_b);
connect(FixedTranslation2.frame_a, Revolute2.frame_b);
connect(Revolute1.frame_b, Fixed1.frame_b);
connect(FixedTranslation1.frame_a, Revolute1.frame_a);
connect(Revolute3.frame_b, FixedTranslation2.frame_b);
connect(Revolute4.frame_a, FixedTranslation2.frame_b);
connect(Revolute4.frame_b, FixedTranslation3.frame_a);
connect(Body2.frame_a, FixedTranslation3.frame_b);
connect(Spring1.frame_a, Revolute1.frame_b);
connect(Spring1.frame_b, Revolute2.frame_a);
connect(Damping1.frame_a, Revolute1.frame_b);
connect(Damping1.frame_b, Revolute2.frame_a);
connect(FixedTranslation1.frame_b, Revolute3.frame_a);
end KinematicLoop2;
MultiBondLib.PlanarMechanics.Examples.PlanarPendulum
The model is confronted with its equivalence of the Modelica.Mechanics.MultiBody library.
model PlanarPendulum "a simple pendulum"
extends Modelica.Icons.Example;
PlanarMechanics.Parts.Fixed Fixed1;
PlanarMechanics.Joints.Revolute Revolute1(initType=Modelica.Mechanics.
MultiBody.Types.Init.PositionVelocity);
PlanarMechanics.Parts.FixedTranslation FixedTranslation1(r={1,3});
PlanarMechanics.Parts.Body Body1(m=1, J=0);
inner Modelica.Mechanics.MultiBody.World world(nominalLength=5,
animateWorld=false,
animateGravity=false);
Modelica.Mechanics.MultiBody.Parts.Fixed Fixed2(r={0,0,-1});
Modelica.Mechanics.MultiBody.Parts.Body Body2(
m=1,
I_11=0,
I_22=0,
I_33=0);
Modelica.Mechanics.MultiBody.Parts.FixedTranslation FixedTranslation2(r={1,3,
0});
Modelica.Mechanics.MultiBody.Joints.Revolute Revolute2(initType=
Modelica.Mechanics.MultiBody.Types.Init.PositionVelocity);
inner PlanarMechanics.PlanarWorld planarWorld(nominalLength=5,
animateWorld=false,
animateGravity=false);
equation
connect(Revolute1.frame_a, Fixed1.frame_b);
connect(FixedTranslation1.frame_b, Body1.frame_a);
connect(FixedTranslation1.frame_a, Revolute1.frame_b);
connect(Revolute2.frame_a, Fixed2.frame_b);
connect(Revolute2.frame_b, FixedTranslation2.frame_a);
connect(FixedTranslation2.frame_b, Body2.frame_a);
end PlanarPendulum;
MultiBondLib.PlanarMechanics.Examples.CraneCrab3
The model is confronted with its equivalence of the Modelica.Mechanics.MultiBody library.
model CraneCrab3 "model of a free crane crab"
extends Modelica.Icons.Example;
PlanarMechanics.Parts.Fixed Fixed1;
PlanarMechanics.Joints.Revolute Revolute1(animation=false, enforceStates=
false,
initType=Modelica.Mechanics.MultiBody.Types.Init.PositionVelocity);
PlanarMechanics.Parts.FixedTranslation FixedTranslation1(r={1,3});
PlanarMechanics.Parts.Body Body1(m=1, J=0);
PlanarMechanics.Parts.Body Body2(m=2, J=0);
PlanarMechanics.Joints.Prismatic Prismatic1(enforceStates=false, initType=
Modelica.Mechanics.MultiBody.Types.Init.PositionVelocity);
inner Modelica.Mechanics.MultiBody.World world(nominalLength=5);
Modelica.Mechanics.MultiBody.Parts.Fixed Fixed2(r={0,0,-1}, animation=
false);
Modelica.Mechanics.MultiBody.Parts.Body Body3(
m=2,
I_11=0,
I_22=0,
I_33=0);
Modelica.Mechanics.MultiBody.Parts.Body Body4(
m=1,
I_11=0,
I_22=0,
I_33=0);
Modelica.Mechanics.MultiBody.Joints.Prismatic Prismatic2(initType=
Modelica.Mechanics.MultiBody.Types.Init.PositionVelocity);
Modelica.Mechanics.MultiBody.Joints.Revolute Revolute2(initType=
Modelica.Mechanics.MultiBody.Types.Init.PositionVelocity);
Modelica.Mechanics.MultiBody.Parts.FixedTranslation FixedTranslation2(r={1,3,
0});
inner PlanarMechanics.PlanarWorld planarWorld(nominalLength=5);
equation
connect(FixedTranslation1.frame_b, Body1.frame_a);
connect(FixedTranslation1.frame_a, Revolute1.frame_b);
connect(Fixed1.frame_b, Prismatic1.frame_a);
connect(Prismatic1.frame_b, Body2.frame_a);
connect(Prismatic1.frame_b, Revolute1.frame_a);
connect(FixedTranslation2.frame_b, Body4.frame_a);
connect(FixedTranslation2.frame_a, Revolute2.frame_b);
connect(Prismatic2.frame_a, Fixed2.frame_b);
connect(Prismatic2.frame_b, Body3.frame_a);
connect(Revolute2.frame_a, Prismatic2.frame_b);
end CraneCrab3;