Hydraulic circuit

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.
Cyl2extends to end of stroke with resistant load, openingV4and the piloted check valve V5. The retraction is blocked byV3,V4andV5Cyl1retracts to end of stroke with resistant load openingV1andV2: the higher pressure partially opens the pressure limiterV7. The movement is controlled by the overcenter valves- With both cylinders at end of stroke, all the input flow rate
Q_inpasses through the maximum valveV7