This package contains multibody models with kinematic loops
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]
Name | Default | Description |
---|---|---|
D | 0.1 | |
e | 0.05 | |
L | 0.2 | |
Load | 20 |
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;
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]
Name | Default | Description |
---|---|---|
D | 0.1 | |
e | 0.05 | |
L | 0.2 | |
Load | 20 |
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;
Simulate for 1 second (100 output points)
Name | Default | Description |
---|---|---|
L | (sqrt(1 + 0.3*0.3 + 0.1*0.1)) | Length of connecting rod [m] |
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;
Simulate for 1 second (100 output points)
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;
Use experiment StopTime=1.6 NumberOfIntervals=200 Perform 'simulate' and then see animation in Animation window. plot j1.q and j1.qd
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;