Hydraulic circuit

exercise image

Show the model or download it
model HydCircuit
parameter SFPLibDyn.Units.Dimensionless param_input_q = 40 "input flow rate (l/min)";
parameter SFPLibDyn.Units.Pressure param_OCV_pcrack = 200e5 "overcenter valves V1_SV/V2_SV cracking pressure";
parameter SFPLibDyn.Units.Dimensionless param_load_cylinder1 = -2000 "load force on cylinder1 (N)";
parameter SFPLibDyn.Units.Dimensionless param_load_cylinder2 = 2500 "load force on cylinder2 (N)";  
SFPLibDyn.Hydraulic.Sources.FlowrateSource Q_in annotation(
    Placement(visible = true, transformation(origin = {-146, -110}, extent = {{-12, -10}, {12, 10}})));
SFPLibDyn.Signals.Source.LinearStages q_sig(stage1_end = param_input_q, stage1_start = param_input_q) annotation(
    Placement(visible = true, transformation(origin = {-176, -110}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
SFPLibDyn.Hydraulic.Valves.ReliefValve V7(grad = 1.666666666666667e-08, p_crack = 1.8e+07) annotation(
    Placement(visible = true, transformation(origin = {-106, -144}, extent = {{-12, -12}, {12, 12}}, rotation = 180)));
SFPLibDyn.Hydraulic.Sources.Tank tank1(pressure = 99999.99999999999) annotation(
    Placement(visible = true, transformation(origin = {-106, -178}, extent = {{-6, -3}, {6, 6}}, rotation = 0)));
SFPLibDyn.Hydraulic.Nodes.Node4p n1 annotation(
    Placement(visible = true, transformation(origin = {-106, -14}, extent = {{-6, -6}, {6, 6}}, rotation = 90)));
SFPLibDyn.Hydraulic.Nodes.Node4p n5 annotation(
    Placement(visible = true, transformation(origin = {-106, 90}, extent = {{-6, -6}, {6, 6}}, rotation = 180)));
SFPLibDyn.Hydraulic.Valves.Generic2PortValve3Pil V1_SV(area4 = 11, p_ch = param_OCV_pcrack, p_crack = 2e+07, spring_delta = 500000, q_ch = 0.0008333333333333334, saturation = true) annotation(
    Placement(visible = true, transformation(origin = {-106, 64}, extent = {{-15, -12}, {15, 12}}, rotation = -180)));
SFPLibDyn.Hydraulic.Actuators.Cylinders.Cylinder Cyl1(d_piston = 0.08, d_rod = 0.06, stroke = 0.3) annotation(
    Placement(transformation(origin = {-68, 157}, extent = {{17.5, -12}, {-19.5, 10}})));
SFPLibDyn.Mechanical.Translational.Mass cyl1_m(coeff_viscous = 10, endstops_model = SFPLibDyn.Units.Choices.mass_type.Ideal, high_lim = 0.3, low_lim = 0, mass = 0.5, x_mass(start = 0.3, fixed = true)) annotation(
    Placement(visible = true, transformation(origin = {-112, 157}, extent = {{-10, 10}, {10, -10}}, rotation = 180)));
SFPLibDyn.Mechanical.Translational.Sources.ForceSource cyl1_f(direction = -1) annotation(
    Placement(transformation(origin = {-146, 157}, extent = {{-10, -10}, {10, 10}})));
SFPLibDyn.Signals.Source.LinearStages cyl1_sig(stage1_end = param_load_cylinder1, stage1_start = -2000) annotation(
    Placement(transformation(origin = {-177, 157}, extent = {{-10, -10}, {10, 10}})));
SFPLibDyn.Hydraulic.Nodes.Node4p n3 annotation(
    Placement(visible = true, transformation(origin = {-106, 35}, extent = {{-6, -6}, {6, 6}}, rotation = 0)));
SFPLibDyn.Hydraulic.Valves.Generic2PortValve3Pil V2_SV(area4 = 4.2, p_ch = param_OCV_pcrack, p_crack = 2e+07, spring_delta = 500000, q_ch = 0.0008333333333333334, saturation = true) annotation(
    Placement(visible = true, transformation(origin = {-40, 62}, extent = {{-15, 12}, {15, -12}}, rotation = 0)));
SFPLibDyn.Hydraulic.Nodes.Node4p n6 annotation(
    Placement(visible = true, transformation(origin = {-40, 88}, extent = {{-6, -6}, {6, 6}}, rotation = 180)));
SFPLibDyn.Hydraulic.Nodes.Node4p n4 annotation(
    Placement(visible = true, transformation(origin = {-40, 36}, extent = {{-6, -6}, {6, 6}}, rotation = 0)));
SFPLibDyn.Hydraulic.Actuators.Cylinders.Cylinder Cyl2(d_piston = 0.08, d_rod = 0.06, stroke = 0.3) annotation(
    Placement(transformation(origin = {88, 89}, extent = {{-17.5, -12}, {19.5, 10}})));
SFPLibDyn.Mechanical.Translational.Mass cyl2_m(coeff_viscous = 10, endstops_model = SFPLibDyn.Units.Choices.mass_type.Ideal, high_lim = 0.3, low_lim = 0, mass = 0.5, x_mass(fixed = true)) annotation(
    Placement(visible = true, transformation(origin = {130, 89}, extent = {{-10, -10}, {10, 10}})));
SFPLibDyn.Mechanical.Translational.Sources.ForceSource cyl2_f(direction = -1) annotation(
    Placement(transformation(origin = {160, 89}, extent = {{-10, -10}, {10, 10}}, rotation = 180)));
SFPLibDyn.Signals.Source.LinearStages cyl2_sig(stage1_end = 2500, stage1_start = 2500) annotation(
    Placement(transformation(origin = {190, 89}, extent = {{-10, -10}, {10, 10}}, rotation = 180)));
SFPLibDyn.Hydraulic.Sources.Tank tank2(pressure = 99999.99999999999) annotation(
    Placement(visible = true, transformation(origin = {-40, -177}, extent = {{-6, -3}, {6, 6}}, rotation = 0)));
SFPLibDyn.Hydraulic.Volumes.Volume2p Vol_Cyl1R(pressure(fixed = true), vol_0 = 0.0001000000000000001) annotation(
    Placement(visible = true, transformation(origin = {-80, 122}, extent = {{-8, -8}, {8, 8}}, rotation = 180)));
SFPLibDyn.Hydraulic.Volumes.Volume2p Vol_Cyl1P(vol_0 = 0.01000000000000001) annotation(
    Placement(visible = true, transformation(origin = {-56, 122}, extent = {{-8, -8}, {8, 8}}, rotation = 180)));
SFPLibDyn.Hydraulic.Volumes.Volume2p Vol_Cyl2P(vol_0 = 0.0001000000000000001) annotation(
    Placement(transformation(origin = {76, 61}, extent = {{-8, -8}, {8, 8}}, rotation = 180)));
SFPLibDyn.Hydraulic.Volumes.Volume2p Vol_Cyl2R(vol_0 = 0.001000000000000001) annotation(
    Placement(transformation(origin = {100, 61}, extent = {{-8, -8}, {8, 8}}, rotation = 180)));
SFPLibDyn.Hydraulic.Valves.PilotedCheckValve V5(linear_parameter = SFPLibDyn.Units.Choices.InputType.p_drop_sat, p_ch = 250000, p_crack = 50000, p_drop_sat = 200000, p_ratio = 7, q_ch = 0.001666666666666667) annotation(
    Placement(transformation(origin = {34, -108}, extent = {{18, -18}, {-18, 18}}, rotation = -90)));
SFPLibDyn.Hydraulic.Orifices.Orifice OR6(diam = 0.01) annotation(
    Placement(visible = true, transformation(origin = {-106, -54}, extent = {{-6, -12}, {6, 12}}, rotation = 180)));
SFPLibDyn.Hydraulic.Orifices.Orifice OR8(or_model = SFPLibDyn.Units.Choices.orifice_type.PQChar, p_ch = 300000, q_ch = 0.0008333333333333334) annotation(
    Placement(visible = true, transformation(origin = {-40, -140}, extent = {{-6, -12}, {6, 12}}, rotation = 180)));
SFPLibDyn.Hydraulic.Volumes.Volume3p Vol1(vol_0 = 0.0001000000000000001) annotation(
    Placement(visible = true, transformation(origin = {-106, -110}, extent = {{10, -10}, {-10, 10}}, rotation = -90)));
SFPLibDyn.Hydraulic.Volumes.Volume3p Vol2(vol_0 = 0.0001000000000000001) annotation(
    Placement(visible = true, transformation(origin = {-40, -110}, extent = {{10, -10}, {-10, 10}}, rotation = 90)));
SFPLibDyn.Hydraulic.Nodes.Node3p n2 annotation(
    Placement(visible = true, transformation(origin = {-40, 3}, extent = {{-6, -6}, {6, 6}}, rotation = 0)));
SFPLibDyn.Hydraulic.Volumes.Volume4p Vol3(vol_0 = 0.0001000000000000001) annotation(
    Placement(transformation(origin = {-14, -60}, extent = {{-10, -10}, {10, 10}})));
SFPLibDyn.Hydraulic.Valves.CheckValve V1_CV(grad = 5e-10, p_crack = 499999.9999999999) annotation(
    Placement(visible = true, transformation(origin = {-161, 63}, extent = {{-6, 12}, {6, -12}}, rotation = -180)));
SFPLibDyn.Hydraulic.Valves.CheckValve V2_CV(grad = 5e-10, p_crack = 499999.9999999999) annotation(
    Placement(visible = true, transformation(origin = {4, 58}, extent = {{-6, 12}, {6, -12}}, rotation = -180)));
SFPLibDyn.Hydraulic.Valves.CheckValve V4(grad = 5e-09, p_crack = 49999.99999999999) annotation(
    Placement(transformation(origin = {15, -15}, extent = {{6, -12}, {-6, 12}}, rotation = -90)));
inner SFPLibDyn.Properties.Hydraulic.FluidProp fluidProp annotation(
    Placement(visible = true, transformation(origin = {178, 166}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
SFPLibDyn.Hydraulic.Valves.SequenceValve V3(p_crack = 5e6, linear_parameter = SFPLibDyn.Units.Choices.InputType.p_drop_sat, p_drop_sat = 3e5, p_ch = 5.3e6, q_ch = 0.0011666666666666668)  annotation(
    Placement(transformation(origin = {24, -58}, extent = {{-14, -12}, {14, 12}}, rotation = 90)));
SFPLibDyn.Hydraulic.Nodes.Node3p n8 annotation(
    Placement(transformation(origin = {52, -60}, extent = {{-6, -6}, {6, 6}}, rotation = 90)));
equation
connect(cyl1_f.t1, cyl1_m.t2) annotation(
    Line(points = {{-136, 157}, {-122, 157}}));
connect(cyl1_m.t1, Cyl1.t1) annotation(
    Line(points = {{-102, 157}, {-87.5, 157}}));
connect(cyl2_m.t2, cyl2_f.t1) annotation(
    Line(points = {{140, 89}, {150, 89}}));
connect(Cyl2.t1, cyl2_m.t1) annotation(
    Line(points = {{107.5, 89}, {120, 89}}));
connect(Cyl2.h2, Vol_Cyl2R.h1) annotation(
    Line(points = {{100, 77}, {100, 69}}));
connect(Cyl2.h1, Vol_Cyl2P.h1) annotation(
    Line(points = {{76, 77}, {76, 69}}));
connect(q_sig.y1, Q_in.u1) annotation(
    Line(points = {{-166, -110}, {-156, -110}}, color = {170, 0, 0}));
connect(V7.h2, tank1.h1) annotation(
    Line(points = {{-106, -156}, {-106, -172}}));
connect(Vol_Cyl1P.h2, n6.h1) annotation(
    Line(points = {{-56, 114}, {-56, 108}, {-40, 108}, {-40, 94}}));
connect(Cyl1.h1, Vol_Cyl1P.h1) annotation(
    Line(points = {{-56, 145}, {-56, 130}}));
connect(Vol_Cyl1R.h1, Cyl1.h2) annotation(
    Line(points = {{-80, 130}, {-80, 145}}));
connect(n1.h2, OR6.h1) annotation(
    Line(points = {{-106, -20}, {-106, -44}}));
connect(OR8.h2, tank2.h1) annotation(
    Line(points = {{-40, -150}, {-40, -171}}));
connect(Vol_Cyl1R.h2, n5.h1) annotation(
    Line(points = {{-80, 114}, {-80, 106}, {-106, 106}, {-106, 96}}));
connect(n1.h4, n3.h1) annotation(
    Line(points = {{-106, -8}, {-106, 29}}));
connect(Q_in.h1, Vol1.h1) annotation(
    Line(points = {{-136, -110}, {-116, -110}}));
connect(V7.h1, Vol1.h2) annotation(
    Line(points = {{-106, -132}, {-106, -120}}));
connect(Vol1.h3, OR6.h2) annotation(
    Line(points = {{-106, -100}, {-106, -64}}));
connect(Vol2.h1, V5.h1) annotation(
    Line(points = {{-30, -110}, {16, -110}}));
connect(Vol2.h3, OR8.h1) annotation(
    Line(points = {{-40, -120}, {-40, -130}}));
connect(n2.h1, Vol2.h2) annotation(
    Line(points = {{-40, -3}, {-40, -100}}));
connect(V5.h3, Vol3.h1) annotation(
    Line(points = {{16, -99.8182}, {-14, -99.8182}, {-14, -69.8182}}));
connect(n1.h1, Vol3.h3) annotation(
    Line(points = {{-100, -14}, {-68, -14}, {-68, -60}, {-24, -60}}));
connect(cyl1_sig.y1, cyl1_f.u1) annotation(
    Line(points = {{-167, 157}, {-156, 157}}));
connect(cyl2_sig.y1, cyl2_f.u1) annotation(
    Line(points = {{180, 89}, {170, 89}}));
connect(n4.h1, n2.h2) annotation(
    Line(points = {{-40, 30}, {-40, 9}}));
connect(n6.h3, V2_SV.h1) annotation(
    Line(points = {{-40, 82}, {-40, 74}}));
connect(n4.h3, V2_SV.h2) annotation(
    Line(points = {{-40, 42}, {-40, 50}}));
connect(n5.h3, V1_SV.h1) annotation(
    Line(points = {{-106, 84}, {-106, 76}}));
connect(V1_SV.h2, n3.h3) annotation(
    Line(points = {{-106, 52}, {-106, 41}}));
connect(n5.h4, V1_CV.h2) annotation(
    Line(points = {{-112, 90}, {-161, 90}, {-161, 75}}));
connect(n1.h3, V1_CV.h1) annotation(
    Line(points = {{-112, -14}, {-161, -14}, {-161, 51}}));
connect(n2.h3, V2_CV.h1) annotation(
    Line(points = {{-34, 3}, {4, 3}, {4, 46}}));
connect(V2_CV.h2, n6.h2) annotation(
    Line(points = {{4, 70}, {4, 88}, {-34, 88}}));
connect(V4.h1, Vol3.h2) annotation(
    Line(points = {{3, -15}, {-14, -15}, {-14, -50}}));
connect(n3.h2, V1_SV.h4) annotation(
    Line(points = {{-112, 35}, {-136, 35}, {-136, 76}, {-127, 76}}, pattern = LinePattern.Dash));
connect(n5.h2, V1_SV.h3) annotation(
    Line(points = {{-100, 90}, {-85, 90}, {-85, 76}}, pattern = LinePattern.Dash));
connect(n3.h4, V2_SV.h5) annotation(
    Line(points = {{-100, 35}, {-75, 35}, {-75, 50}, {-61, 50}}, pattern = LinePattern.Dash));
connect(n4.h2, V1_SV.h5) annotation(
    Line(points = {{-46, 36}, {-61, 36}, {-61, 43}, {-85, 43}, {-85, 52}}, pattern = LinePattern.Dash));
connect(n4.h4, V2_SV.h4) annotation(
    Line(points = {{-34, 36}, {-13, 36}, {-13, 74}, {-19, 74}}, pattern = LinePattern.Dash));
connect(n6.h4, V2_SV.h3) annotation(
    Line(points = {{-46, 88}, {-61, 88}, {-61, 74}}, pattern = LinePattern.Dash));
connect(V5.h2, Vol_Cyl2R.h2) annotation(
    Line(points = {{52, -110}, {100, -110}, {100, 53}}));
connect(Vol3.h4, V3.h2) annotation(
    Line(points = {{-4, -60}, {12, -60}}));
connect(V3.h1, n8.h2) annotation(
    Line(points = {{36, -60}, {46, -60}}));
connect(V4.h2, n8.h3) annotation(
    Line(points = {{27, -15}, {52, -15}, {52, -54}}));
connect(n8.h1, Vol_Cyl2P.h2) annotation(
    Line(points = {{58, -60}, {76, -60}, {76, 53}}));
annotation(
    Diagram(coordinateSystem(extent = {{-190, 180}, {210, -190}}, grid = {1, 1})),
    Icon(coordinateSystem(extent = {{-230, -200}, {230, 200}}), graphics = {Rectangle(origin = {167, 144}, fillColor = {144, 144, 144}, fillPattern = FillPattern.Solid, lineThickness = 0.5, extent = {{-25, 24}, {35, -36}}), Rectangle(origin = {-155, 26}, fillColor = {144, 144, 144}, fillPattern = FillPattern.Solid, lineThickness = 0.5, extent = {{-25, 24}, {35, -36}}), Rectangle(origin = {-193, -138}, fillColor = {144, 144, 144}, fillPattern = FillPattern.Solid, lineThickness = 0.5, extent = {{-25, 24}, {123, -38}}), Polygon(origin = {-90, 141}, rotation = 90, fillColor = {131, 131, 131}, fillPattern = FillPattern.Solid, lineThickness = 0.5, points = {{-42, -39}, {0, 29}, {38, -39}, {-42, -39}}), Ellipse(origin = {172, -55}, fillColor = {131, 131, 131}, fillPattern = FillPattern.Solid, lineThickness = 0.5, extent = {{-38, 37}, {38, -39}}), Line(origin = {-146.894, -80.4126}, points = {{0, -33}, {0, 33}, {0, 33}, {0, 71}}), Line(origin = {-132.593, 77.5874}, points = {{-15, -27}, {-15, 63}, {15, 63}}), Line(origin = {83.1805, 140.587}, points = {{-135, 0}, {59, 0}}), Line(origin = {170.181, 45.5874}, points = {{0, 63}, {0, -63}}), Line(origin = {88.18, -120.41}, points = {{-158, -27}, {84, -27}, {84, 27}})}));
end HydCircuit;

In this example a hydraulic system is presented that applies a sequencing logic to the actuators.

  • Cyl2 extends to end of stroke with resistant load, opening V4 and the piloted check valve V5. The retraction is blocked by V3, V4 and V5
  • Cyl1 retracts to end of stroke with resistant load opening V1 and V2: the higher pressure partially opens the pressure limiter V7. The movement is controlled by the overcenter valves
  • With both cylinders at end of stroke, all the input flow rate Q_in passes through the maximum valve V7