These examples demonstrate the usage of multi bond graphs.
For all these examples the following simulation setup is proposed.
Name | Description |
---|---|
ElectricCircuit | models of an electric circuit |
PlanarPendulum | multibond graph of a planar pendulum |
CraneCrab1 | multibond graph of a free crane crab |
CraneCrab2 | multibond graph of a free crane crab |
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;
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;
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;
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;