Distributore

immagine_esercizio

Mostra il modello o scaricalo
model SpoolValve
parameter SFPLibDyn.Units.Dimensionless param_input_q = 10 "input flow rate (l/min)";
parameter SFPLibDyn.Units.Position param_valve_displ = 0.00163 "max valve displacement";
parameter SFPLibDyn.Units.Force param_spring_F = 8 "spring preload";
parameter SFPLibDyn.Units.Stiffness param_spring_k = 11000 "spring rate";
SFPLibDyn.Mechanical.Translational.Sources.ForceSource F_valve annotation(
    Placement(visible = true, transformation(origin = {-74, 82}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
SFPLibDyn.Mechanical.Translational.Mass Mass_valve(coeff_viscous(displayUnit = "N/(m/s)") = 30, endstops_model = SFPLibDyn.Units.Choices.mass_type.Ideal, high_lim = param_valve_displ, low_lim = 0, mass = 0.2) annotation(
    Placement(visible = true, transformation(origin = {-48, 82}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
SFPLibDyn.Components.SpoolCircularOrifices Spool_BT(d_holes = 0.0028, d_rod = 0.0065, d_spool = 0.008, direction = +1, holes_number = 6, l_underlap = 0.00065) annotation(
    Placement(visible = true, transformation(origin = {-22, 82}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
SFPLibDyn.Components.SpoolCircularOrifices Spool_PB(d_holes = 0.0028, d_rod = 0.0065, d_spool = 0.008, direction = -1, holes_number = 6, l_underlap = -0.0006) annotation(
    Placement(visible = true, transformation(origin = {4, 82}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
SFPLibDyn.Components.SpoolCircularOrifices Spool_PA(d_holes = 0.0028, d_rod = 0.0065, d_spool = 0.008, holes_number = 8, l_underlap = -0.00075) annotation(
    Placement(visible = true, transformation(origin = {42, 82}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
SFPLibDyn.Components.SpoolCircularOrifices Spool_AT(d_holes = 0.0028, d_rod = 0.0065, d_spool = 0.008, direction = -1, holes_number = 8, l_underlap = 0.0006) annotation(
    Placement(visible = true, transformation(origin = {68, 82}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
SFPLibDyn.Mechanical.Translational.Sources.ZeroSpeed zero_S annotation(
    Placement(transformation(origin = {119, 82}, extent = {{7, -7}, {-7, 7}}, rotation = -0)));
SFPLibDyn.Hydraulic.Sources.Tank tank1 annotation(
    Placement(transformation(origin = {130, -128}, extent = {{-6, -3}, {6, 6}})));
SFPLibDyn.Hydraulic.Sources.Tank tank2 annotation(
    Placement(visible = true, transformation(origin = {-43, -75}, extent = {{-6, -3}, {6, 6}}, rotation = 0)));
SFPLibDyn.Hydraulic.Volumes.Volume2p Vol_P(pressure(start = 100000), vol_0 = 1e-05) annotation(
    Placement(visible = true, transformation(origin = {22, -7}, extent = {{-10, -10}, {10, 10}}, rotation = 180)));
SFPLibDyn.Hydraulic.Valves.ReliefValve RV( grad = 8.333333333333334e-08,p_crack = 2.5e+07) annotation(
    Placement(transformation(origin = {130, -106}, extent = {{-12, -12}, {12, 12}}, rotation = 180)));
SFPLibDyn.Hydraulic.Sources.FlowrateSource Q_in(scale = 1 / 60000) annotation(
    Placement(transformation(origin = {81, -92}, extent = {{-12, -10}, {12, 10}})));
SFPLibDyn.Signals.Source.Constant q_sig(k = param_input_q) annotation(
    Placement(transformation(origin = {56, -92}, extent = {{-8, -8}, {8, 8}})));
SFPLibDyn.Hydraulic.Volumes.Volume2p Vol_A(vol_0 = 1e-05) annotation(
    Placement(transformation(origin = {74, 51}, extent = {{-7.5, -7.5}, {7.5, 7.5}}, rotation = 180)));
SFPLibDyn.Hydraulic.Orifices.Orifice OR_AT(or_model = SFPLibDyn.Units.Choices.orifice_type.DiamArea, area = 2e-05, d_hydr = 0.0025) annotation(
    Placement(transformation(origin = {74, 22}, extent = {{-5.5, -11}, {5.5, 11}}, rotation = 180)));
SFPLibDyn.Hydraulic.Volumes.Volume2p Vol_in(vol_0 = 0.0001) annotation(
    Placement(visible = true, transformation(origin = {22, -61}, extent = {{-10, -10}, {10, 10}}, rotation = 180)));
SFPLibDyn.Hydraulic.Orifices.Orifice OR_P(or_model = SFPLibDyn.Units.Choices.orifice_type.DiamArea, area = 3.69e-05, d_hydr = 0.0028) annotation(
    Placement(visible = true, transformation(origin = {22, -34}, extent = {{-6, -12}, {6, 12}}, rotation = 180)));
SFPLibDyn.Mechanical.Translational.Spring Spring(preload = param_spring_F, spring_rate = param_spring_k) annotation(
    Placement(transformation(origin = {94, 82}, extent = {{-10, -10}, {10, 10}})));
SFPLibDyn.Signals.Source.LinearStages f_sig_valve(stage1_duration = 1, stage1_end = 0, stage2_duration = 0.1, stage2_end = 35, stage3_end = 35) annotation(
    Placement(visible = true, transformation(origin = {-104, 82}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
SFPLibDyn.Mechanical.Translational.Sources.ZeroForce zero_f annotation(
    Placement(transformation(origin = {-44, -110}, extent = {{-6, -6}, {6, 6}})));
SFPLibDyn.Mechanical.Translational.Mass Mass_cyl(coeff_viscous(displayUnit = "N/(m/s)") = 30, endstops_model = SFPLibDyn.Units.Choices.mass_type.Ideal, high_lim = 0.06000000000000001, low_lim = 0, mass(displayUnit = "kg") = 10) annotation(
    Placement(visible = true, transformation(origin = {-20, -110}, extent = {{-11, 11}, {11, -11}}, rotation = -180)));
SFPLibDyn.Hydraulic.Orifices.Orifice OR_PB(or_model = SFPLibDyn.Units.Choices.orifice_type.DiamArea, area = 1.71e-05, d_hydr = 0.0015) annotation(
    Placement(transformation(origin = {10, 28}, extent = {{-5.5, -11}, {5.5, 11}}, rotation = 180)));
SFPLibDyn.Hydraulic.Orifices.Orifice OR_PA(or_model = SFPLibDyn.Units.Choices.orifice_type.DiamArea, area = 1.71e-05, d_hydr = 0.0015) annotation(
    Placement(visible = true, transformation(origin = {36, 27}, extent = {{-5.5, -11}, {5.5, 11}}, rotation = 180)));
SFPLibDyn.Hydraulic.Volumes.Volume2p Vol_cyl2(vol_0 = 0.001) annotation(
    Placement(visible = true, transformation(origin = {-19, -61}, extent = {{-10, -10}, {10, 10}}, rotation = 180)));
SFPLibDyn.Hydraulic.Volumes.Volume2p Vol_cyl1(vol_0 = 0.001) annotation(
    Placement(visible = true, transformation(origin = {56, -61}, extent = {{-10, -10}, {10, 10}}, rotation = 180)));
SFPLibDyn.Hydraulic.Nodes.Node3p n5 annotation(
    Placement(visible = true, transformation(origin = {-43, 6}, extent = {{-6, -6}, {6, 6}}, rotation = 0)));
SFPLibDyn.Hydraulic.Volumes.Volume2p vol_PA(vol_0 = 1e-05) annotation(
    Placement(visible = true, transformation(origin = {36, 53}, extent = {{-7.5, -7.5}, {7.5, 7.5}}, rotation = 180)));
SFPLibDyn.Hydraulic.Volumes.Volume2p vol_PB(vol_0 = 1e-05) annotation(
    Placement(transformation(origin = {10, 53}, extent = {{-7.5, -7.5}, {7.5, 7.5}}, rotation = 180)));
SFPLibDyn.Hydraulic.Nodes.Node3pAlt n2 annotation(
    Placement(visible = true, transformation(origin = {22, 14}, extent = {{-6, -6}, {6, 6}}, rotation = 0)));
SFPLibDyn.Hydraulic.Nodes.Node3pAlt n1 annotation(
    Placement(visible = true, transformation(origin = {104, -92}, extent = {{-6, -6}, {6, 6}}, rotation = 180)));
SFPLibDyn.Hydraulic.Nodes.Node3p n3 annotation(
    Placement(visible = true, transformation(origin = {-19, 58}, extent = {{-6, -6}, {6, 6}}, rotation = 0)));
SFPLibDyn.Hydraulic.Nodes.Node3pAlt n4 annotation(
    Placement(visible = true, transformation(origin = {56, 58}, extent = {{-6, -6}, {6, 6}}, rotation = 0)));
SFPLibDyn.Hydraulic.Actuators.Cylinders.DoubleCylinder Cyl(d_piston = 0.1, d_rod1 = 0.04500000000000001, d_rod2 = 0.04500000000000001, stroke = 0.06)  annotation(
    Placement(transformation(origin = {18, -110}, extent = {{-17.5, -12}, {19.5, 10}}, rotation = 180)));
inner SFPLibDyn.Properties.Hydraulic.FluidProp fluidProp annotation(
    Placement(visible = true, transformation(origin = {-128, -111}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));  equation
connect(n5.h1, tank2.h1) annotation(
    Line(points = {{-43, 0}, {-43, -69}}));
connect(Vol_P.h2, OR_P.h1) annotation(
    Line(points = {{22, -17}, {22, -22}}));
connect(OR_P.h2, Vol_in.h1) annotation(
    Line(points = {{22, -46}, {22, -51}}));
connect(Q_in.h1, n1.h3) annotation(
    Line(points = {{93, -92}, {98, -92}}));
connect(OR_PA.h1, vol_PA.h2) annotation(
    Line(points = {{36.5, 38}, {36.5, 46}}));
connect(vol_PB.h2, OR_PB.h1) annotation(
    Line(points = {{10, 45.5}, {10, 39}}));
connect(zero_f.t1, Mass_cyl.t2) annotation(
    Line(points = {{-38, -110}, {-31, -110}}));
connect(f_sig_valve.y1, F_valve.u1) annotation(
    Line(points = {{-94, 82}, {-84, 82}, {-84, 82}, {-84, 82}}, color = {170, 0, 0}));
connect(Spring.t2, zero_S.t1) annotation(
    Line(points = {{104, 82}, {112, 82}}));
connect(Spool_AT.t2, Spring.t1) annotation(
    Line(points = {{78, 82}, {84, 82}}));
connect(Spool_PB.t2, Spool_PA.t2) annotation(
    Line(points = {{14, 82}, {32, 82}, {32, 82}, {32, 82}}));
connect(Spool_BT.t1, Spool_PB.t1) annotation(
    Line(points = {{-12, 82}, {-6, 82}, {-6, 82}, {-6, 82}}));
connect(Mass_valve.t2, Spool_BT.t2) annotation(
    Line(points = {{-38, 82}, {-32, 82}, {-32, 82}, {-32, 82}}));
connect(q_sig.y1, Q_in.u1) annotation(
    Line(points = {{64, -92}, {69, -92}}, color = {170, 0, 0}));
connect(Spool_PA.t1, Spool_AT.t1) annotation(
    Line(points = {{52, 82}, {58, 82}, {58, 82}, {58, 82}}));
connect(F_valve.t1, Mass_valve.t1) annotation(
    Line(points = {{-64, 82}, {-58, 82}, {-58, 82}, {-58, 82}}));
connect(n3.h1, Vol_cyl2.h1) annotation(
    Line(points = {{-19, 52}, {-19, -51}}));
connect(Mass_cyl.t1, Cyl.t1) annotation(
    Line(points = {{-9, -110}, {-1.5, -110}}));
connect(Vol_cyl2.h2, Cyl.h2) annotation(
    Line(points = {{-19, -71}, {-19, -73}, {6, -73}, {6, -98}}));
connect(Vol_cyl1.h2, Cyl.h1) annotation(
    Line(points = {{56, -71}, {56, -73}, {30, -73}, {30, -98}}));
connect(RV.h2, tank1.h1) annotation(
    Line(points = {{130, -118}, {130, -122}}));
connect(vol_PA.h1, Spool_PA.h2) annotation(
    Line(points = {{36.5, 61}, {36, 61}, {36, 72}}));
connect(Vol_A.h2, OR_AT.h1) annotation(
    Line(points = {{74, 43.5}, {74, 33}}));
connect(n4.h1, Vol_cyl1.h1) annotation(
    Line(points = {{56, 52}, {56, -51}}));
connect(Spool_BT.h1, n3.h2) annotation(
    Line(points = {{-20, 72}, {-19, 72}, {-19, 64}}));
connect(Vol_in.h2, n1.h1) annotation(
    Line(points = {{22, -71}, {22, -79}, {104, -79}, {104, -86}}));
connect(Spool_BT.h2, n5.h2) annotation(
    Line(points = {{-28, 72}, {-28, 57}, {-43, 57}, {-43, 12}}));
connect(n2.h1, Vol_P.h1) annotation(
    Line(points = {{22, 8}, {22, 3}}));
connect(n2.h2, OR_PB.h2) annotation(
    Line(points = {{16, 14}, {10, 14}, {10, 17}}));
connect(Spool_PB.h2, vol_PB.h1) annotation(
    Line(points = {{10, 72}, {10, 60.5}}));
connect(n2.h3, OR_PA.h2) annotation(
    Line(points = {{28, 14}, {36, 14}, {36, 16}}));
connect(Vol_A.h1, Spool_AT.h2) annotation(
    Line(points = {{74, 58.5}, {74, 72}}));
connect(n4.h3, Spool_AT.h1) annotation(
    Line(points = {{62, 58}, {65, 58}, {65, 72}}));
connect(n4.h2, Spool_PA.h1) annotation(
    Line(points = {{50, 58}, {45, 58}, {45, 72}}));
connect(n3.h3, Spool_PB.h1) annotation(
    Line(points = {{-13, 58}, {1, 58}, {1, 72}}));
connect(n1.h2, RV.h1) annotation(
    Line(points = {{110, -92}, {130, -92}, {130, -94}}));
connect(n5.h3, OR_AT.h2) annotation(
    Line(points = {{-37, 6}, {74, 6}, {74, 11}}));
annotation(
    Diagram(coordinateSystem(extent = {{-150, -150}, {150, 100}}, grid = {1, 1})),
    Icon(coordinateSystem(extent = {{-160, -80}, {140, 80}}, initialScale = 0.1), graphics = {Rectangle(origin = {88, 10}, extent = {{-66, 30}, {14, -50}}), Line(origin = {4.28584, 49.9646}, points = {{0, 30}, {0, -10}}), Polygon(origin = {42, 29.72}, fillPattern = FillPattern.Solid, points = {{0, 10.2764}, {-10, -9.72361}, {10, -9.72361}, {0, 10.2764}}), Line(origin = {-40.3769, -32.1055}, points = {{-9.5, 8}, {10.5, 8}, {0.5, 8}, {0.5, -8}}), Polygon(origin = {-81, -31}, rotation = 210, fillPattern = FillPattern.Solid, points = {{0, 10.2764}, {-10, -9.72361}, {10, -9.72361}, {0, 10.2764}}), Text(origin = {8, 66}, extent = {{0, -5}, {25, -25}}, textString = "B"), Line(origin = {-39.9283, -49.6579}, points = {{0, 10}, {0, -26}}), Line(origin = {-147.739, 20}, points = {{-9, -10}, {-6, 10}, {-3, -10}, {0, 10}, {3, -10}, {6, 10}, {9, -10}}), Text(origin = {8, -36}, extent = {{0, -5}, {25, -25}}, textString = "T"), Ellipse(origin = {4, 0}, fillPattern = FillPattern.Solid, extent = {{-3, 3}, {3, -3}}), Line(origin = {-8.2, -42.9431}, points = {{-130, 0}, {110, 0}}), Line(origin = {-99.6154, -0.261538}, points = {{-20, -40}, {22, 36}}), Text(origin = {-68, 66}, extent = {{0, -5}, {25, -25}}, textString = "A"), Rectangle(origin = {132, -24}, extent = {{-30, 10}, {6, -10}}), Text(origin = {-68, -36}, extent = {{0, -5}, {25, -25}}, textString = "P"), Line(origin = {49.1439, -0.491538}, points = {{-7.19027, -39.7684}, {-7.19027, 40.2316}}), Line(origin = {4.22421, -49.9275}, points = {{0, 10}, {0, -28}}), Polygon(origin = {-81, 31}, rotation = -30, fillPattern = FillPattern.Solid, points = {{0, 10.2764}, {-10, -9.72361}, {10, -9.72361}, {0, 10.2764}}), Line(origin = {111.307, 20.2615}, points = {{-9, -10}, {-6, 10}, {-3, -10}, {0, 10}, {3, -10}, {6, 10}, {9, -10}}), Line(origin = {-8.13846, 42.9136}, points = {{-130, 0}, {110, 0}}), Polygon(origin = {82, -30.28}, rotation = 180, fillPattern = FillPattern.Solid, points = {{0, 10.2764}, {-10, -9.72361}, {10, -9.72361}, {0, 10.2764}}), Line(origin = {-99.6154, 0.738462}, points = {{-20, 39}, {20, -33}}), Line(origin = {-15.9311, 19.4542}, points = {{-24, 20}, {-24, -20}, {20, -20}}), Rectangle(origin = {-18, 10}, extent = {{-40, 30}, {40, -50}}), Line(origin = {-40.1055, 50.2342}, points = {{0, 26}, {0, -10}}), Line(origin = {4.26228, 0.476923}, points = {{0, 39}, {0, -41}}), Rectangle(origin = {-78, 0}, extent = {{-60, 40}, {20, -40}}), Line(origin = {89.4054, -0.491538}, points = {{-7.19027, -39.7684}, {-7.19027, 40.2316}})}),
    __OpenModelica_commandLineOptions = "",
    experiment(StartTime = 0, StopTime = 4, Tolerance = 1e-05, Interval = 0.0133333));
end SpoolValve;

Questo è il primo esempio della libreria Components. Viene presentato il modello di una valvola direzionale 4/3 a cassetto: una forza esterna F_valve muove la spola aprendo gli otturatori Spool_PA e Spool_BT, contrapponendosi alla molla.

Il cilindro a doppio effetto Cyl si muove con la portata costante in ingresso alla porta P della valvola: la limitatrice di pressione RV si apre quando P è chiusa o il cilindro raggiunge il fine corsa.