ModelicaAdditions.MultiBody.Examples.Loops

Example of mechanical systems with kinematic loops

ModelicaAdditions.MultiBody.Examples.Loops.Engine1 ModelicaAdditions.MultiBody.Examples.Loops.Engine2 ModelicaAdditions.MultiBody.Examples.Loops.Fourbar1 ModelicaAdditions.MultiBody.Examples.Loops.Fourbar2 ModelicaAdditions.MultiBody.Examples.Loops.TwoLoop ModelicaAdditions.MultiBody.Examples.Loops.Utilities

Information


This package contains multibody models with kinematic loops


ModelicaAdditions.MultiBody.Examples.Loops.Engine1 ModelicaAdditions.MultiBody.Examples.Loops.Engine1

ModelicaAdditions.MultiBody.Examples.Loops.Engine1

Information

Use the following settings:

experiment StopTime=0.2 Interval=0.002 Tolerance=1.E-8


Perform 'simulate' and then see animation in
Animation window.

  Plot the following variables:

  AngVelDegS: Angular velocity of motor shaft [rev/min]
  x         : position of cylinder [m]
  press     : pressure in cylinder [bar]

Parameters

NameDefaultDescription
D0.1
e0.05
L0.2
Load20

Modelica definition

model Engine1 
  extends MultiBody.Examples.Loops.Utilities.Engine;
  MultiBody.Parts.ShapeBody rodBody(
    r={L,0,0}, 
    rCM={L/2,0,0}, 
    m=0.5, 
    I33=0.0018, 
    Width=0.02, 
    Height=0.01);
  MultiBody.CutJoints.ConnectingRod2 rod(L=L, na={0,0,1});
equation 
  connect(crank.frame_b, rod.frame_b);
  connect(rod.frame_a, cyl.frame_b);
  connect(rod.frame_c, rodBody.frame_a);
end Engine1;

ModelicaAdditions.MultiBody.Examples.Loops.Engine2 ModelicaAdditions.MultiBody.Examples.Loops.Engine2

ModelicaAdditions.MultiBody.Examples.Loops.Engine2

Information

Use the following settings:

experiment StopTime=0.2 Interval=0.002 Tolerance=1.E-8


Perform 'simulate' and then see animation in
Animation window.

  Plot the following variables:

  AngVelDegS: Angular velocity of motor shaft [rev/min]
  x         : position of cylinder [m]
  press     : pressure in cylinder [bar]

Parameters

NameDefaultDescription
D0.1
e0.05
L0.2
Load20

Modelica definition

model Engine2 
  extends MultiBody.Examples.Loops.Utilities.Engine;
  MultiBody.CutJoints.Spherical spherical;
  MultiBody.Parts.ShapeBody connectingRod(
    r={-L,0,0}, 
    rCM={-L/2,0,0}, 
    m=0.5, 
    I33=0.0018, 
    Width=0.02, 
    Height=0.01);
  MultiBody.Joints.Universal univ(nx={0,0,1}, ny={0,1,0});
equation 
  connect(crank.frame_b, spherical.frame_a);
  connect(spherical.frame_b, connectingRod.frame_b);
  connect(cyl.frame_b, univ.frame_a);
  connect(univ.frame_b, connectingRod.frame_a);
end Engine2;

ModelicaAdditions.MultiBody.Examples.Loops.Fourbar1 ModelicaAdditions.MultiBody.Examples.Loops.Fourbar1

ModelicaAdditions.MultiBody.Examples.Loops.Fourbar1

Information

Simulate for 1 second (100 output points)

Parameters

NameDefaultDescription
L(sqrt(1 + 0.3*0.3 + 0.1*0.1))Length of connecting rod [m]

Modelica definition

model Fourbar1 
  extends Modelica.Icons.Example;
  package SIunits = Modelica.SIunits ;
  parameter SIunits.Length L=(sqrt(1 + 0.3*0.3 + 0.1*0.1)) 
    "Length of connecting rod";
  output SIunits.Angle j1q "angle of revolute joint j1";
  output SIunits.Position j2q "distance of prismatic joint j2";
  output SIunits.AngularVelocity j1qd 
    "axis speed of revolute joint j1";
  output SIunits.Velocity j2qd "axis velocity of prismatic joint j2"
    ;
  ModelicaAdditions.MultiBody.Parts.InertialSystem inertial;
  ModelicaAdditions.MultiBody.Joints.Revolute j1(
    n={1,0,0}, 
    qd(start=20), 
    startValueFixed=true);
  ModelicaAdditions.MultiBody.Joints.Prismatic j2(n={1,0,0});
  ModelicaAdditions.MultiBody.Parts.CylinderBody b1(r={0,0.5,0.1}, Radius=
        0.05);
  ModelicaAdditions.MultiBody.Parts.CylinderBody b2(r={0,0.2,0}, Radius=
        0.05);
  ModelicaAdditions.MultiBody.Parts.BoxBody b0(
    r={1,0,0}, 
    Width=0.01, 
    Height=0.01, 
    Material={0,0,1,0.5});
  ModelicaAdditions.MultiBody.Parts.CylinderBody b3(r={L,0,0}, Radius=0.05)
    ;
  ModelicaAdditions.MultiBody.CutJoints.ConnectingRod2 barC(L=L, na={0,1,0}
    );
equation 
  connect(inertial.frame_b, b0.frame_a);
  connect(b0.frame_b, j2.frame_a);
  connect(j2.frame_b, b2.frame_a);
  connect(j1.frame_b, b1.frame_a);
  connect(j1.frame_a, inertial.frame_b);
  connect(b1.frame_b, barC.frame_b);
  connect(barC.frame_a, b2.frame_b);
  connect(b3.frame_a, barC.frame_c);
  j1q = j1.q;
  j2q = j2.q;
  j1qd = j1.qd;
  j2qd = j2.qd;
end Fourbar1;

ModelicaAdditions.MultiBody.Examples.Loops.Fourbar2 ModelicaAdditions.MultiBody.Examples.Loops.Fourbar2

ModelicaAdditions.MultiBody.Examples.Loops.Fourbar2

Information

Simulate for 1 second (100 output points)

Modelica definition

model Fourbar2 
  extends Modelica.Icons.Example;
  package SIunits = Modelica.SIunits ;
  output SIunits.Angle j1q "angle of revolute joint j1";
  output SIunits.Position j2q "distance of prismatic joint j2";
  output SIunits.AngularVelocity j1qd 
    "axis speed of revolute joint j1";
  output SIunits.Velocity j2qd "axis velocity of prismatic joint j2"
    ;
  ModelicaAdditions.MultiBody.Parts.InertialSystem inertial;
  ModelicaAdditions.MultiBody.Joints.Revolute j1(
    n={1,0,0}, 
    qd(start=20), 
    startValueFixed=true);
  ModelicaAdditions.MultiBody.Joints.Prismatic j2(n={1,0,0});
  ModelicaAdditions.MultiBody.Parts.CylinderBody b1(r={0,0.5,0.1}, Radius=
        0.05);
  ModelicaAdditions.MultiBody.Parts.CylinderBody b2(r={0,0.2,0}, Radius=
        0.05);
  ModelicaAdditions.MultiBody.Parts.BoxBody b0(
    r={1,0,0}, 
    Width=0.01, 
    Height=0.01, 
    Material={0,0,1,0.5});
  ModelicaAdditions.MultiBody.CutJoints.Spherical sphereC;
  ModelicaAdditions.MultiBody.Parts.CylinderBody b3(
    r={-1,0.3,0.1}, 
    Radius=0.05, 
    Material={0,1,0,0.5});
  ModelicaAdditions.MultiBody.Joints.Revolute rev(n={0,1,0});
  ModelicaAdditions.MultiBody.Joints.Revolute rev1;
equation 
  connect(inertial.frame_b, b0.frame_a);
  connect(b0.frame_b, j2.frame_a);
  connect(j2.frame_b, b2.frame_a);
  connect(b1.frame_b, sphereC.frame_a);
  connect(j1.frame_b, b1.frame_a);
  connect(rev.frame_a, b2.frame_b);
  connect(rev.frame_b, rev1.frame_a);
  connect(b3.frame_b, sphereC.frame_b);
  connect(rev1.frame_b, b3.frame_a);
  connect(inertial.frame_b, j1.frame_a);
  j1q = j1.q;
  j2q = j2.q;
  j1qd = j1.qd;
  j2qd = j2.qd;
end Fourbar2;

ModelicaAdditions.MultiBody.Examples.Loops.TwoLoop ModelicaAdditions.MultiBody.Examples.Loops.TwoLoop

ModelicaAdditions.MultiBody.Examples.Loops.TwoLoop

Information

Use

experiment StopTime=1.6 NumberOfIntervals=200

Perform 'simulate' and then see animation in
Animation window.

plot j1.q and j1.qd

Modelica definition

model TwoLoop 
  MultiBody.Parts.InertialSystem inertial;
  MultiBody.Joints.Revolute j1(n={0,0,1}, startValueFixed=true);
  MultiBody.Parts.CylinderBody b1(r={0.1,0.5,-0.5}, Radius=0.02);
  MultiBody.CutJoints.ConnectingRod2 j2(L=1.1, na={1,0,0});
  MultiBody.Parts.CylinderBody b2(
    r={1.1,0,0}, 
    Radius=0.02, 
    Material={0,1,0,0.5});
  MultiBody.Parts.ShapeBody b3(
    r={-0.2,0,0}, 
    Width=0.04, 
    Height=0.04, 
    Material={0,0,1,0.5});
  MultiBody.Joints.Prismatic j3(n={1,0,0});
  MultiBody.Parts.ShapeBody b5(
    r={1.8,0,0}, 
    Width=0.02, 
    Height=0.02, 
    Material={0.5,0.5,0.5,0.5});
  MultiBody.Parts.CylinderBody b6(r={0,-0.3,0}, Radius=0.03);
  MultiBody.Joints.Prismatic j5(n={0,0,1});
  MultiBody.Parts.ShapeBody b7(
    r={0,0,-0.3}, 
    Width=0.03, 
    Height=0.03, 
    Material={0,1,0,0.5});
  MultiBody.CutJoints.Spherical j4;
  MultiBody.Joints.Revolute j6(n={-1,0,0});
  MultiBody.Joints.Revolute j7(n={0,1,0});
  MultiBody.Parts.ShapeBody b4(
    r={0,0,0.5}, 
    Width=0.02, 
    Height=0.02, 
    Material={0.5,0.5,0.5,0.5});
  MultiBody.Parts.Shape shape(
    LengthDirection={0,0,0.4}, 
    Width=0.02, 
    Height=0.02);
  MultiBody.Parts.FrameAxes frame(nx={1,-1,1});
  Modelica.Mechanics.Rotational.Torque torque;
  Modelica.Mechanics.Rotational.IdealGear gear(ratio=10);
  Modelica.Mechanics.Rotational.Inertia shaft(J=0.5);
  Modelica.Blocks.Sources.Constant constIn(k={10});
  MultiBody.Parts.FrameTranslation b8(r={-0.8,0,0});
equation 
  connect(b1.frame_a, j1.frame_b);
  connect(j2.frame_c, b2.frame_a);
  connect(b1.frame_b, j2.frame_a);
  connect(b5.frame_b, j3.frame_a);
  connect(b6.frame_b, j4.frame_b);
  connect(j5.frame_b, b6.frame_a);
  connect(b7.frame_b, j5.frame_a);
  connect(j6.frame_b, b7.frame_a);
  connect(j7.frame_b, j6.frame_a);
  connect(b5.frame_b, b4.frame_a);
  connect(b4.frame_b, j7.frame_a);
  connect(inertial.frame_b, frame.frame_a);
  connect(constIn.outPort, torque.inPort);
  connect(torque.flange_b, gear.flange_a);
  connect(gear.flange_b, shaft.flange_a);
  connect(shaft.flange_b, j1.axis);
  connect(j3.frame_b, j4.frame_a);
  connect(j3.frame_b, b3.frame_a);
  connect(b3.frame_b, j2.frame_b);
  connect(frame.frame_b, b8.frame_a);
  connect(b8.frame_b, b5.frame_a);
  connect(b8.frame_b, j1.frame_a);
  connect(j5.frame_b, shape.frame_a);
end TwoLoop;

HTML-documentation generated by Dymola Tue Jun 20 22:20:56 2000 .