These examples demonstrate the usage of multi bond graphs.
For all these examples the following simulation setup is proposed.
| Name | Description |
|---|---|
| models of an electric circuit | |
| multibond graph of a planar pendulum | |
| multibond graph of a free crane crab | |
| multibond graph of a free crane crab |
MultiBondLib.Examples.ElectricCircuit
model ElectricCircuit "models of an electric circuit"
extends Modelica.Icons.Example;
import SI = Modelica.SIunits;
SI.Voltage Vleft_Single "voltage on the left hand side of the C-field";
SI.Voltage Vright_Single "voltage on the right hand side of the C-field";
SI.Voltage Vleft_Multi "voltage on the left hand side of the C-field";
SI.Voltage Vright_Multi "voltage on the right hand side of the C-field";
protected
Bonds.MultiBond MultiBond1;
Passive.R R1(R={30,75});
BondLib.Passive.R R_right(R=75);
BondLib.Passive.C C_middle(C=0.025);
BondLib.Bonds.Bond Bond2;
BondLib.Bonds.Bond Bond3;
BondLib.Bonds.Bond Bond4;
BondLib.Bonds.Bond Bond1;
inner Defaults MBG_defaults(n=2);
BondLib.Junctions.J1p3 J1p3_1;
BondLib.Passive.C C_left(C=0.02);
BondLib.Junctions.J0p3 J0p3_2;
BondLib.Bonds.Bond Bond5;
BondLib.Bonds.Bond Bond6;
BondLib.Passive.C C_right(C=0.05);
BondLib.Bonds.Bond Bond7;
Bonds.MultiBond MultiBond2;
Bonds.MultiBond MultiBond5;
Passive.CF CF1(C=[0.045,-0.025; -0.025,0.075]);
BondLib.Bonds.Bond Bond8;
BondLib.Junctions.J0p4 J0p4_1;
BondLib.Passive.R R_left(R=30);
BondLib.Sources.Sf Sf_left(f0=0.5);
Junctions.J0 J0_1;
Sources.Sf Sf1(f0={0.5,0});
equation
Vleft_Single = R_left.e;
Vright_Single = R_right.e;
Vleft_Multi = R1.e[1];
Vright_Multi = R1.e[2];
connect(MultiBond2.MultiBondCon2, CF1.MultiBondCon1);
connect(C_left.BondCon1, Bond4.BondCon2);
connect(J1p3_1.BondCon2, Bond5.BondCon1);
connect(J1p3_1.BondCon3, Bond3.BondCon1);
connect(J1p3_1.BondCon1, Bond2.BondCon2);
connect(Bond3.BondCon2, C_middle.BondCon1);
connect(J0p3_2.BondCon1, Bond5.BondCon2);
connect(J0p3_2.BondCon3, Bond7.BondCon1);
connect(J0p3_2.BondCon2, Bond6.BondCon1);
connect(Bond6.BondCon2, R_right.BondCon1);
connect(C_right.BondCon1, Bond7.BondCon2);
connect(Bond8.BondCon1, J0p4_1.BondCon4);
connect(J0p4_1.BondCon2, Bond2.BondCon1);
connect(J0p4_1.BondCon3, Bond4.BondCon1);
connect(J0p4_1.BondCon1, Bond1.BondCon2);
connect(R_left.BondCon1, Bond8.BondCon2);
connect(Sf_left.BondCon1, Bond1.BondCon1);
connect(R1.MultiBondCon1, MultiBond5.MultiBondCon2);
connect(J0_1.MultiBondCon1, MultiBond1.MultiBondCon2);
connect(J0_1.MultiBondCon3, MultiBond5.MultiBondCon1);
connect(J0_1.MultiBondCon2, MultiBond2.MultiBondCon1);
connect(Sf1.MultiBondCon1, MultiBond1.MultiBondCon1);
end ElectricCircuit;
MultiBondLib.Examples.PlanarPendulum
model PlanarPendulum "multibond graph of a planar pendulum"
extends Modelica.Icons.Example;
import SI = Modelica.SIunits;
SI.Angle phi "angle of the pendulum";
SI.Velocity vx "x-velocity of the point mass";
SI.Velocity vy "y-velocity of the point mass";
protected
Junctions.J1 J1_2(n=3);
Sources.Se gravity(n=3, e0={0,-9.81,0});
Passive.I mass(n=3, I={1,1,0});
Bonds.MultiBond MultiBond6;
Bonds.MultiBond MultiBond7;
Junctions.J1 J1_1(n=3);
Sources.Sf Fixation(n=2, f0={0});
Sources.Se NoTorque(e0={0}, n=1);
Compositions.Composition Composition1(nA=2, nB=1);
Bonds.MultiBond MultiBond1(n=2);
Bonds.MultiBond MultiBond2(n=1);
Bonds.MultiBond MultiBond3;
Bonds.MultiBond MultiBond4;
Bonds.MultiBond MultiBond5;
PlanarMechanics.AdditionalMBG.translationalTF rod(d={1,-3});
Sensors.Dq Angle(n=3, q_start={0,0,0});
Bonds.MultiBond MultiBond8;
inner Defaults MBG_defaults(n=3);
equation
phi = Angle.q[3];
vx = mass.f[1];
vy = mass.f[2];
connect(MultiBond7.MultiBondCon2, J1_2.MultiBondCon1);
connect(MultiBond7.MultiBondCon1, gravity.MultiBondCon1);
connect(MultiBond6.MultiBondCon2, mass.MultiBondCon1);
connect(MultiBond6.MultiBondCon1, J1_2.MultiBondCon2);
connect(MultiBond1.MultiBondCon2, Composition1.MultiBondCon1);
connect(MultiBond1.MultiBondCon1, Fixation.MultiBondCon1);
connect(MultiBond2.MultiBondCon2, Composition1.MultiBondCon2);
connect(MultiBond2.MultiBondCon1, NoTorque.MultiBondCon1);
connect(MultiBond3.MultiBondCon2, J1_1.MultiBondCon1);
connect(MultiBond3.MultiBondCon1, Composition1.MultiBondCon3);
connect(MultiBond4.MultiBondCon1, J1_1.MultiBondCon3);
connect(MultiBond5.MultiBondCon2, J1_2.MultiBondCon4);
connect(MultiBond4.MultiBondCon2, rod.MultiBondCon1);
connect(rod.MultiBondCon2, MultiBond5.MultiBondCon1);
connect(Angle.q[3], rod.phi);
connect(MultiBond8.MultiBondCon2, Angle.MultiBondCon1);
connect(MultiBond8.MultiBondCon1, J1_1.MultiBondCon2);
end PlanarPendulum;
MultiBondLib.Examples.CraneCrab1
model CraneCrab1 "multibond graph of a free crane crab"
extends Modelica.Icons.Example;
import SI = Modelica.SIunits;
SI.Position x1 "x-position of the crab";
SI.Position x2 "x-position of the pendulum";
SI.Position y2 "y-position of the pendulum";
SI.Angle phi2 "angle of the pendulum";
protected
Junctions.J1 J1_2(n=3);
Sources.Se gravity1(n=3, e0={0,-9.81,0});
Passive.I mass1(n=3, I={1,1,1});
Bonds.MultiBond MultiBond6(n=3);
Bonds.MultiBond MultiBond7(n=3);
Sources.Sf Wall(f0={0}, n=3);
PlanarMechanics.AdditionalMBG.translationalTF translationalTF1(d={1,0});
Sources.Se Prismatic(n=1, e0={0});
Junctions.J1 J1_3(n=1);
Bonds.MultiBond MultiBond2(n=1);
Bonds.MultiBond MultiBond3(n=1);
PlanarMechanics.AdditionalMBG.prismaticTF prismaticTF1(d={1,0});
Junctions.J0Partial J0Partial1(
n=3,
nPartial=2,
order={1,2,3});
Bonds.MultiBond MultiBond4;
Bonds.MultiBond MultiBond5;
Bonds.MultiBond MultiBond8(n=2);
Sensors.Dq JointLength(n=1, q_start={0},
f(stateSelect=StateSelect.always));
Bonds.MultiBond MultiBond9;
Bonds.MultiBond MultiBond10;
Junctions.J0Partial J0Partial2(
n=3,
nPartial=1,
order={3,1,2});
Sources.Se revolute(n=1, e0={0});
Bonds.MultiBond MultiBond11(n=1);
Bonds.MultiBond MultiBond12;
PlanarMechanics.AdditionalMBG.translationalTF rod(d={1,-3});
Bonds.MultiBond MultiBond14;
Junctions.J1 J1_5(n=3);
Passive.I mass2(n=3, I={1,1,0});
Bonds.MultiBond MultiBond15;
Sources.Se gravity2(n=3, e0={0,-9.81,0});
Bonds.MultiBond MultiBond16;
PlanarMechanics.AdditionalMBG.Translation Translation1(d={1,0});
PlanarMechanics.AdditionalMBG.Translation Translation2(d={1,-3});
Modelica.Blocks.Sources.Constant Constant1[3](k={0,0,0});
Junctions.J1 J1_6(n=1);
Bonds.MultiBond MultiBond17(n=1);
Sensors.Dq revoluteAngle(n=1, q_start={0},
q(stateSelect=StateSelect.always),
f(stateSelect=StateSelect.always));
Bonds.MultiBond MultiBond13(
n=1);
Bonds.MultiBond MultiBond18(
n=1);
inner Defaults MBG_defaults(n=3);
PlanarMechanics.AdditionalMBG.Translation Translation3(d={1,0});
Interfaces.RealSignal q1[3];
equation
x1 = JointLength.q[1];
{x2,y2,phi2} = q1;
connect(MultiBond7.MultiBondCon1, gravity1.MultiBondCon1);
connect(MultiBond6.MultiBondCon2, mass1.MultiBondCon1);
connect(MultiBond2.MultiBondCon1, Prismatic.MultiBondCon1);
connect(prismaticTF1.MultiBondConA, MultiBond3.MultiBondCon2);
connect(MultiBond4.MultiBondCon1, translationalTF1.MultiBondCon2);
connect(MultiBond4.MultiBondCon2, J0Partial1.MultiBondCon1);
connect(MultiBond5.MultiBondCon1, J0Partial1.MultiBondCon2);
connect(MultiBond5.MultiBondCon2, J1_2.MultiBondCon1);
connect(MultiBond8.MultiBondCon2, J0Partial1.MultiBondCon3);
connect(prismaticTF1.MultiBondConB, MultiBond8.MultiBondCon1);
connect(MultiBond7.MultiBondCon2, J1_2.MultiBondCon3);
connect(MultiBond9.MultiBondCon2, translationalTF1.MultiBondCon1);
connect(J1_3.MultiBondCon3, MultiBond3.MultiBondCon1);
connect(MultiBond2.MultiBondCon2, J1_3.MultiBondCon4);
connect(MultiBond6.MultiBondCon1, J1_2.MultiBondCon4);
connect(MultiBond10.MultiBondCon1, J1_2.MultiBondCon2);
connect(MultiBond10.MultiBondCon2, J0Partial2.MultiBondCon1);
connect(MultiBond11.MultiBondCon2, J0Partial2.MultiBondCon3);
connect(MultiBond12.MultiBondCon1, J0Partial2.MultiBondCon2);
connect(MultiBond14.MultiBondCon1, rod.MultiBondCon2);
connect(MultiBond14.MultiBondCon2, J1_5.MultiBondCon1);
connect(MultiBond15.MultiBondCon1, J1_5.MultiBondCon4);
connect(MultiBond15.MultiBondCon2, mass2.MultiBondCon1);
connect(MultiBond16.MultiBondCon2, J1_5.MultiBondCon3);
connect(gravity2.MultiBondCon1, MultiBond16.MultiBondCon1);
connect(J1_6.MultiBondCon3, MultiBond11.MultiBondCon1);
connect(MultiBond17.MultiBondCon2, J1_6.MultiBondCon4);
connect(MultiBond17.MultiBondCon1, revolute.MultiBondCon1);
connect(MultiBond12.MultiBondCon2, rod.MultiBondCon1);
connect(MultiBond13.MultiBondCon2, JointLength.MultiBondCon1);
connect(MultiBond13.MultiBondCon1, J1_3.MultiBondCon1);
connect(MultiBond18.MultiBondCon1, J1_6.MultiBondCon2);
connect(MultiBond18.MultiBondCon2, revoluteAngle.MultiBondCon1);
connect(prismaticTF1.phi, Constant1[3].y);
connect(Translation1.q1, Constant1.y);
connect(JointLength.q[1], Translation1.ampl);
connect(translationalTF1.phi, Constant1[3].y);
connect(translationalTF1.ampl, JointLength.q[1]);
connect(Translation1.q2, Translation3.q1);
connect(revoluteAngle.q[1], Translation3.phi);
connect(Translation3.q2, Translation2.q1);
connect(rod.phi, Translation3.q2[3]);
connect(Wall.MultiBondCon1, MultiBond9.MultiBondCon1);
connect(Translation2.q2, q1);
end CraneCrab1;
MultiBondLib.Examples.CraneCrab2
model CraneCrab2 "multibond graph of a free crane crab"
extends Modelica.Icons.Example;
import SI = Modelica.SIunits;
SI.Position x1 "x-position of the crab";
SI.Position x2 "x-position of the pendulum";
SI.Position y2 "y-position of the pendulum";
SI.Angle phi2 "angle of the pendulum";
protected
Junctions.J1 J1_2(n=3);
Sources.Se gravity1(n=3, e0={0,-9.81,0});
Passive.I mass1(n=3, I={1,1,1});
Bonds.MultiBond MultiBond6;
Bonds.MultiBond MultiBond7;
Junctions.J1 J1_1(n=3);
Sources.Sf Wall(f0={0}, n=3);
Bonds.MultiBond MultiBond1;
PlanarMechanics.AdditionalMBG.translationalTF translationalTF1( d={1,0});
Sources.Se Prismatic(n=1, e0={0});
Junctions.J1 J1_3(n=1);
Bonds.MultiBond MultiBond2(n=1);
Bonds.MultiBond MultiBond3(n=1);
PlanarMechanics.AdditionalMBG.prismaticTF prismaticTF1(d={1,0});
Junctions.J0Partial J0Partial1(
n=3,
nPartial=2,
order={1,2,3});
Bonds.MultiBond MultiBond4;
Bonds.MultiBond MultiBond5;
Bonds.MultiBond MultiBond8(n=2);
Sensors.Dq JointLength(n=1, q_start={0},
f(stateSelect=StateSelect.always));
Bonds.MultiBond MultiBond9;
Bonds.MultiBond MultiBond10;
Junctions.J0Partial J0Partial2(
n=3,
nPartial=1,
order={3,1,2});
Sources.Se Revolute(n=1, e0={0});
Bonds.MultiBond MultiBond11(n=1);
Bonds.MultiBond MultiBond12;
PlanarMechanics.AdditionalMBG.translationalTF translationalTF2(d={1,-3});
Bonds.MultiBond MultiBond14;
Junctions.J1 J1_5(n=3);
Passive.I mass2(n=3, I={1,1,0});
Bonds.MultiBond MultiBond15;
Sources.Se gravity2(n=3, e0={0,-9.81,0});
Bonds.MultiBond MultiBond16;
PlanarMechanics.AdditionalMBG.Translation Translation1(d={1,0});
PlanarMechanics.AdditionalMBG.Translation Translation2(d={1,-3});
Modelica.Blocks.Sources.Constant Constant1[3](k={0,0,0});
Junctions.J1 J1_6(n=1);
Bonds.MultiBond MultiBond17(n=1);
Sensors.Dq RevoluteAngle(n=1, q_start={0},
f(stateSelect=StateSelect.always));
Junctions.J1 J1_4(n=3);
Bonds.MultiBond MultiBond13;
Junctions.J1 J1_7(n=3);
Bonds.MultiBond MultiBond18;
Junctions.J1 J1_8(n=3);
Bonds.MultiBond MultiBond19;
Junctions.J1 J1_9(n=3);
Bonds.MultiBond MultiBond20;
Junctions.J1 J1_10(n=3);
Bonds.MultiBond MultiBond21;
Bonds.MultiBond MultiBond22(
n=1);
Bonds.MultiBond MultiBond23(
n=1);
inner Defaults MBG_defaults(n=3);
PlanarMechanics.AdditionalMBG.Translation Translation3(d={1,-3});
protected
Interfaces.RealSignal q1[3];
equation
x1 = JointLength.q[1];
{x2,y2,phi2} = q1;
connect(MultiBond7.MultiBondCon1, gravity1.MultiBondCon1);
connect(MultiBond6.MultiBondCon2, mass1.MultiBondCon1);
connect(MultiBond1.MultiBondCon1, Wall.MultiBondCon1);
connect(MultiBond1.MultiBondCon2, J1_1.MultiBondCon1);
connect(MultiBond2.MultiBondCon1, Prismatic.MultiBondCon1);
connect(prismaticTF1.MultiBondConA, MultiBond3.MultiBondCon2);
connect(MultiBond4.MultiBondCon1, translationalTF1.MultiBondCon2);
connect(MultiBond4.MultiBondCon2, J0Partial1.MultiBondCon1);
connect(MultiBond5.MultiBondCon1, J0Partial1.MultiBondCon2);
connect(MultiBond8.MultiBondCon2, J0Partial1.MultiBondCon3);
connect(prismaticTF1.MultiBondConB, MultiBond8.MultiBondCon1);
connect(MultiBond7.MultiBondCon2, J1_2.MultiBondCon3);
connect(MultiBond9.MultiBondCon2, translationalTF1.MultiBondCon1);
connect(J1_3.MultiBondCon3, MultiBond3.MultiBondCon1);
connect(MultiBond2.MultiBondCon2, J1_3.MultiBondCon4);
connect(MultiBond6.MultiBondCon1, J1_2.MultiBondCon4);
connect(MultiBond10.MultiBondCon1, J1_2.MultiBondCon2);
connect(MultiBond11.MultiBondCon2, J0Partial2.MultiBondCon3);
connect(MultiBond12.MultiBondCon1, J0Partial2.MultiBondCon2);
connect(MultiBond14.MultiBondCon1, translationalTF2.MultiBondCon2);
connect(MultiBond15.MultiBondCon1, J1_5.MultiBondCon4);
connect(MultiBond15.MultiBondCon2, mass2.MultiBondCon1);
connect(MultiBond16.MultiBondCon2, J1_5.MultiBondCon3);
connect(gravity2.MultiBondCon1, MultiBond16.MultiBondCon1);
connect(J1_6.MultiBondCon3, MultiBond11.MultiBondCon1);
connect(MultiBond17.MultiBondCon2, J1_6.MultiBondCon4);
connect(MultiBond17.MultiBondCon1, Revolute.MultiBondCon1);
connect(J1_4.MultiBondCon2, MultiBond9.MultiBondCon1);
connect(MultiBond13.MultiBondCon2, J1_4.MultiBondCon1);
connect(MultiBond13.MultiBondCon1, J1_1.MultiBondCon2);
connect(J1_7.MultiBondCon1, MultiBond5.MultiBondCon2);
connect(MultiBond18.MultiBondCon1, J1_7.MultiBondCon2);
connect(MultiBond18.MultiBondCon2, J1_2.MultiBondCon1);
connect(MultiBond19.MultiBondCon1, J1_8.MultiBondCon2);
connect(MultiBond19.MultiBondCon2, J0Partial2.MultiBondCon1);
connect(J1_8.MultiBondCon1, MultiBond10.MultiBondCon2);
connect(MultiBond20.MultiBondCon1, J1_9.MultiBondCon2);
connect(MultiBond20.MultiBondCon2, J1_5.MultiBondCon1);
connect(J1_9.MultiBondCon1, MultiBond14.MultiBondCon2);
connect(MultiBond21.MultiBondCon1, J1_10.MultiBondCon2);
connect(J1_10.MultiBondCon1, MultiBond12.MultiBondCon2);
connect(MultiBond21.MultiBondCon2, translationalTF2.MultiBondCon1);
connect(MultiBond22.MultiBondCon1, J1_3.MultiBondCon1);
connect(MultiBond22.MultiBondCon2, JointLength.MultiBondCon1);
connect(MultiBond23.MultiBondCon1, J1_6.MultiBondCon1);
connect(MultiBond23.MultiBondCon2, RevoluteAngle.MultiBondCon1);
connect(RevoluteAngle.q[1], Translation3.phi);
connect(Translation3.q2, Translation2.q1);
connect(Translation2.q2, q1);
connect(Translation2.q1[3], translationalTF2.phi);
connect(Translation1.q2, Translation3.q1);
connect(Translation1.q1, Constant1.y);
connect(prismaticTF1.phi, Constant1[3].y);
connect(translationalTF1.phi, Constant1[3].y);
connect(JointLength.q[1], Translation1.ampl);
connect(JointLength.q[1], translationalTF1.ampl);
end CraneCrab2;