Circuito pompa-motore

Mostra il modello o scaricalo
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 questo esempio è proposto un circuito chiuso con due pompe mono-direzionali, un motore bi-direzionale, una valvola direzionale, valvole di non-ritorno e limitatrici di pressione. Il distributore inizialmente aprirà i collegamenti per far girare il motore in senso positivo, per poi invertire il moto in senso negativo.