Pump-motor circuit

exercise image

Show the model or download it
model PumpMotor  
parameter SFPLibDyn.Units.Volume param_pump1_displ = 100e-6 "Pump1 displacement"; 
parameter SFPLibDyn.Units.Volume param_pump2_displ = 20e-6 "Pump2 displacement"; 
parameter SFPLibDyn.Units.Pressure param_RV_pcrack = 1500000 "RV_pump cracking pressure";
parameter SFPLibDyn.Units.Inertia param_inertia = 5 "J moment of mass inertia"; 
SFPLibDyn.Hydraulic.Sources.Pumps.FixedUniDirPump Pump1(mech_eff_var = false, vol_eff_var = false, max_displ = param_pump1_displ)  annotation(
    Placement(transformation(origin = {-64, -88}, extent = {{-15, -15}, {15, 15}})));
SFPLibDyn.Mechanical.Rotational.Sources.Motor Motor_elec annotation(
    Placement(transformation(origin = {-104, -88}, extent = {{-15, -15}, {15, 15}})));
SFPLibDyn.Hydraulic.Volumes.Volume2p Vol_P(pressure(displayUnit = "bar", start = 1500000))  annotation(
    Placement(transformation(origin = {-64, -58}, extent = {{-10, -10}, {10, 10}}, rotation = 180)));
SFPLibDyn.Mechanical.Rotational.Sources.ZeroTorque zero_t annotation(
    Placement(transformation(origin = {-8, 139}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
SFPLibDyn.Hydraulic.Sources.Pumps.FixedUniDirPump Pump2(max_displ = 2.000000000000001e-05,mech_eff_var = false, vol_eff_var = false) annotation(
    Placement(transformation(origin = {26, -119}, extent = {{-15, -15}, {15, 15}})));
SFPLibDyn.Hydraulic.Sources.Tank tank annotation(
    Placement(transformation(origin = {26, -145}, extent = {{-6, -3}, {6, 6}})));
SFPLibDyn.Hydraulic.Valves.CheckValve CV(p_crack = 49999.99999999999)  annotation(
    Placement(transformation(origin = {-2, -58}, extent = {{-6, -12}, {6, 12}}, rotation = 90)));
SFPLibDyn.Hydraulic.Valves.ReliefValve RV_pump(p_crack = param_RV_pcrack)  annotation(
    Placement(transformation(origin = {89, -97}, extent = {{-12, -12}, {12, 12}}, rotation = 180)));
SFPLibDyn.Hydraulic.Sources.Tank tank1 annotation(
    Placement(transformation(origin = {89, -144}, extent = {{-6, -3}, {6, 6}})));
SFPLibDyn.Hydraulic.Volumes.Volume3p Vol_m1(pressure(displayUnit = "bar", start = 1500000), vol_0 = 1.000000000000001e-05)  annotation(
    Placement(transformation(origin = {-52, 45}, extent = {{10, -10}, {-10, 10}}, rotation = 90)));
SFPLibDyn.Hydraulic.Volumes.Volume3p Vol_m2(pressure(displayUnit = "bar", start = 1500000), vol_0 = 1.000000000000001e-05)  annotation(
    Placement(transformation(origin = {56, 45}, extent = {{10, 10}, {-10, -10}}, rotation = 90)));
SFPLibDyn.Signals.Source.LinearStages sig_dirValve(stage1_duration = 5, stage2_duration = 0.1, stage2_end = 1, stage3_end = 1)  annotation(
    Placement(transformation(origin = {-108, -29}, extent = {{-10, -10}, {10, 10}})));
SFPLibDyn.Hydraulic.Volumes.Volume3p Vol_T(pressure(displayUnit = "bar", start = 1500000), vol_0 = 1.000000000000001e-05) annotation(
    Placement(transformation(origin = {-32, -58}, extent = {{-10, -10}, {10, 10}}, rotation = 90)));
SFPLibDyn.Hydraulic.Valves.ReliefValve RV2(p_crack = 35000000) annotation(
    Placement(transformation(origin = {4, 45}, extent = {{12, -12}, {-12, 12}}, rotation = -90)));
SFPLibDyn.Hydraulic.Nodes.Node3p n2 annotation(
    Placement(transformation(origin = {56, 11}, extent = {{-6, -6}, {6, 6}}, rotation = 180)));
SFPLibDyn.Hydraulic.Nodes.Node3p n1 annotation(
    Placement(transformation(origin = {-52, 11}, extent = {{-6, 6}, {6, -6}})));
SFPLibDyn.Hydraulic.Valves.ReliefValve RV1(p_crack = 35000000) annotation(
    Placement(transformation(origin = {4, 11}, extent = {{12, -12}, {-12, 12}}, rotation = 90)));
SFPLibDyn.Signals.Source.LinearStages sig_mot(stage1_duration = 1, stage1_end = 1500, stage1_start = 1500, stage2_end = 1500) annotation(
    Placement(transformation(origin = {-133, -88}, extent = {{-10, -10}, {10, 10}})));
SFPLibDyn.Hydraulic.Actuators.Motors.FixedBiDirMotWExtDrain Motor(mech_eff_const = 0.95, vol_eff_const = 0.8)  annotation(
    Placement(transformation(origin = {-8, 77}, extent = {{-15, 15}, {15, -15}}, rotation = -90)));
SFPLibDyn.Hydraulic.Sources.Tank tank2 annotation(
    Placement(transformation(origin = {17, 57}, extent = {{-6, -3}, {6, 6}})));
SFPLibDyn.Hydraulic.Valves.DirControlValves.DirValves4x3.DirValv4x3C02 DirValve(AB_k_area = {0, 1, 0}, AB_q_ch = 0.0008333333333333334, AT_k_area = {0, 1, 1}, AT_q_ch = 0.0008333333333333334, BT_k_area = {1, 1, 0}, BT_q_ch = 0.0008333333333333334, PA_k_area = {1, 1, 0}, PA_q_ch = 0.0008333333333333334, PB_k_area = {0, 1, 1}, PB_q_ch = 0.0008333333333333334, PT_k_area = {0, 1, 0}, PT_q_ch = 0.0008333333333333334, signal = {0, 0.5, 1})  annotation(
    Placement(transformation(origin = {-49, -26}, extent = {{-24, -12}, {24, 12}})));
inner SFPLibDyn.Properties.Hydraulic.FluidProp fluidProp annotation(
    Placement(transformation(origin = {-133, 137}, extent = {{-10, -10}, {10, 10}})));
SFPLibDyn.Hydraulic.Volumes.Volume3p Vol_cv(pressure(displayUnit = "bar", start = 1500000), vol_0 = 1.000000000000001e-05) annotation(
    Placement(transformation(origin = {26, -58}, extent = {{-10, -10}, {10, 10}})));
SFPLibDyn.Mechanical.Rotational.Inertia Inertia(J = param_inertia, coeff_viscous = 0.9549296585513721)  annotation(
    Placement(transformation(origin = {-8, 112}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
equation
connect(Pump2.h1, tank.h1) annotation(
    Line(points = {{26, -134}, {26, -139}}));
connect(sig_mot.y1, Motor_elec.u1) annotation(
    Line(points = {{-123, -88}, {-119, -88}}));
connect(sig_dirValve.y1, DirValve.u1) annotation(
    Line(points = {{-98, -29}, {-76, -29}}));
connect(n1.h1, Vol_m1.h3) annotation(
    Line(points = {{-52, 17}, {-52, 35}}));
connect(Vol_m2.h3, n2.h1) annotation(
    Line(points = {{56, 35}, {56, 17}}));
connect(Vol_P.h1, DirValve.hP) annotation(
    Line(points = {{-64, -48}, {-64, -44}, {-52, -44}, {-52, -38}}));
connect(Vol_T.h2, Pump1.h1) annotation(
    Line(points = {{-32, -68}, {-32, -109}, {-64, -109}, {-64, -103}}));
connect(CV.h2, Vol_T.h1) annotation(
    Line(points = {{-14, -58}, {-22, -58}}));
connect(Vol_T.h3, DirValve.hT) annotation(
    Line(points = {{-32, -48}, {-32, -44}, {-46, -44}, {-46, -38}}));
connect(Motor.h1, Vol_m1.h2) annotation(
    Line(points = {{-23, 77}, {-53, 77}, {-53, 55}}));
connect(Motor.h2, Vol_m2.h2) annotation(
    Line(points = {{7, 77}, {55, 77}, {55, 55}}));
connect(Vol_cv.h2, CV.h1) annotation(
    Line(points = {{16, -58}, {10, -58}}));
connect(Pump2.h2, Vol_cv.h1) annotation(
    Line(points = {{26, -104}, {26, -68}}));
connect(Vol_P.h2, Pump1.h2) annotation(
    Line(points = {{-64, -68}, {-64, -73}}));
connect(Motor.h3, tank2.h1) annotation(
    Line(points = {{7, 65}, {17, 65}, {17, 63}}, pattern = LinePattern.Dash));
connect(RV2.h1, Vol_m1.h1) annotation(
    Line(points = {{-8, 45}, {-42, 45}}));
connect(RV2.h2, Vol_m2.h1) annotation(
    Line(points = {{16, 45}, {46, 45}}));
connect(n2.h3, RV1.h1) annotation(
    Line(points = {{50, 11}, {16, 11}}));
connect(RV1.h2, n1.h3) annotation(
    Line(points = {{-8, 11}, {-46, 11}}));
connect(zero_t.r1, Inertia.r1) annotation(
    Line(points = {{-8, 129}, {-8, 122}}));
connect(Inertia.r2, Motor.r1) annotation(
    Line(points = {{-8, 102}, {-8, 95}}));
connect(n2.h2, DirValve.hB) annotation(
    Line(points = {{56, 5}, {56, -7}, {-46, -7}, {-46, -14}}));
connect(n1.h2, DirValve.hA) annotation(
    Line(points = {{-52, 5}, {-52, -14}}));
connect(Pump1.r1, Motor_elec.r1) annotation(
    Line(points = {{-82, -88}, {-86, -88}}));
connect(Pump2.r1, Motor_elec.r1) annotation(
    Line(points = {{8, -119}, {-84, -119}, {-84, -88}, {-86, -88}}));
connect(RV_pump.h2, tank1.h1) annotation(
    Line(points = {{89, -109}, {89, -138}}));
connect(Vol_cv.h3, RV_pump.h1) annotation(
    Line(points = {{36, -58}, {89, -58}, {89, -85}}));
annotation(
    Diagram(coordinateSystem(initialScale = 10, extent = {{-150, -160}, {110, 160}})),
    experiment(StartTime = 0, StopTime = 10, Tolerance = 1e-10, Interval = 0.002),
Icon(coordinateSystem(extent = {{-150, -160}, {110, 160}}, initialScale = 10), graphics = {Ellipse(origin = {-38, 41}, fillColor = {255, 255, 255}, fillPattern = FillPattern.Sphere, extent = {{-42, 39}, {118, -121}}), Polygon(origin = {-6.87, 34.87}, fillPattern = FillPattern.Solid, points = {{-13.1288, -18.872}, {6.87119, 13.128}, {26.8712, -18.872}, {-13.1288, -18.872}}), Polygon(origin = {7.13, 58.87}, rotation = 180, fillPattern = FillPattern.Solid, points = {{-13.1288, -18.872}, {6.87119, 13.128}, {26.8712, -18.872}, {-13.1288, -18.872}})}));
end PumpMotor;

In this example a closed circuit with two unidirectional pumps, a bidirectional motor, a directional valve, check valves and pressure relief valves is proposed. The distributor will initially open the connections to make the motor rotate in the positive direction, then reverse the motion in the negative direction.