Pumps & Motors These classes model positive displacement pumps and motors. The shafts of the pumps and motors can be connected directly to the rotational library. The control inputs of the variable displacement units can be connected directly to outputs of the control blocks of the blocks library. All components have lumped volumes at the inlet and outlet ports. They also include the inertia of the rotating parts. FlowSource (FlS) Flow source with internal leakage FlowSourceExtConmman (FlE) Flow source with internal leakage and external command signal ConPump (CoP) Constant displacement Pump with leakage VarPump (VaM) Variable displacement Pump with leakage ConMot (CoM) Constant displacement Motor with leakage VarMot (VaM) Variable displacement Motor with leakage Tank (Ta) Tank with preload pressure and conductance of tank pipe Release Notes: -------------- 1999 - 10 - 9: coded
Diesel engine with speed controller and inertia The model uses a static characteristic curve of maximum torque as a function of speed. This relation is given by a polynomial. There is a simple speed controller implemented. The reference signal for this controller is given by inPort.signal = 0 => w_min inPort.signal = 1 => w_max This simple model doesn't describe the startup of a Diesel engine. To set the initial speed of the diesel engine use the parameter wstart in the parameter window (unfortunately the value of that parameter is not displayed in the x0 window of Dymola 4.0 c). Don't use the modifier Flywheel(w(start=100)) or connect the shaft rigidly to other inertias which have been assigned initial values because this overrides parameter wstart. If a state is deselected by Dymola during the index reduction process the modifier has no effect. Release Notes: -------------- 2000 - 1 - 31: tested
Name | Default | Description |
---|---|---|
wstart | 200 | angular velocity at simulation start [rad/s] |
wmin | 75 | minimum angular velocity [rad/s] |
wmax | 240 | maximum angular velocity [rad/s] |
J | 1 | moment of inertia of flywheel [kg.m2] |
diesel3 | 9.0212e-6 | |
diesel2 | -7.5153e-3 | |
diesel1 | 1.5939 | |
diesel0 | 7.5022e+1 | |
kdiesel | 10 | gain of speed controller, Nm / (rad/sec) |
model Diesel "Diesel engine with speed controller" parameter Modelica.SIunits.AngularVelocity wstart=200 "angular velocity at simulation start"; parameter Modelica.SIunits.AngularVelocity wmin=75 "minimum angular velocity"; parameter Modelica.SIunits.AngularVelocity wmax=240 "maximum angular velocity"; parameter Modelica.SIunits.MomentOfInertia J=1 "moment of inertia of flywheel"; parameter Real diesel3=9.0212e-6; parameter Real diesel2=-7.5153e-3; parameter Real diesel1=1.5939; parameter Real diesel0=7.5022e+1; parameter Real kdiesel=10 "gain of speed controller, Nm / (rad/sec)"; Modelica.Mechanics.Rotational.Interfaces.Flange_b flange_b "(right) driven flange (flange axis directed OUT OF cut plane)"; Modelica.Blocks.Interfaces.InPort inPort(final n=1) "Connector of input signal used as commanded speed"; HyLibLight.Pumps.Basic.DieselNoStates MnS( wmin=wmin, wmax=wmax, diesel3=diesel3, diesel2=diesel2, diesel1=diesel1, diesel0=diesel0, kdiesel=kdiesel) "Diesel engine with speed controller without inertia"; HyLibLight.Pumps.Rotor Flywheel( w(start=wstart), J=J, tauExt=0.0, td=0.0); equation connect(MnS.flange_b, Flywheel.flange_a); connect(Flywheel.flange_b, flange_b); connect(MnS.inPort, inPort); assert(wstart > wmin, "angular velocity at simulation start (wstart) must be GREATER than minimum velocity (wmin)." ); end Diesel;
Pump with losses and variable displacement. Flow at the outlet port of the variable displacement pump: q = Dpump * omega * signal / (2 * pi) - q_leakage q_leakage = GMint * |port_A.p - port_B.p| + (port_A.p - Tank.p) * GMext + (port_port_B.p - Tank.p) * GMext If the inlet pressure is lower than the atmospheric pressure, the delivered flow rate becomes smaller. q: flow rate in m^3/s Dpump: max. displacement per revolution in m^3 omega: angular velocity in rad/s signal: command signal for relative displacement: +1 => max. flow from A -> B (for omega > 0) 0 => q = 0 -1 => max. flow from B -> A (for omega > 0) GPext conductance of the external pump leakage, m^3/(s*Pa) GPint conductance of the internal pump leakage, m^3/(s*Pa) Use the modifier(s) VolumeA(port_A(p(start=1e5))) and/or VolumeB(port_A(p(start=1e5))) to set initial condition(s) for the pressure of the lumped volume(s) [Pa]. Use the modifier Rotor(w(start=100)) to set initial condition for the angular velocity of the shaft [rad/s]. If a state is deselected by Dymola during the index reduction process this modifier has no effect. Release Notes: -------------- 2000 - 2 - 1: tested
Name | Default | Description |
---|---|---|
Dpump | 0.1e-3 | displacement per revolution [m3] |
GPint | 1.e-13 | conductance of internal leakage [m3/(s*Pa)] |
GPext | 1.e-13 | conductance of external leakage [m3/(s*Pa)] |
J | 0.01 | moment of inertia [kg.m2] |
td | 0.0 | friction coefficient [Nm/(rad/sec)] |
volumeA | 1.e-6 | volume at port A [m3] |
volumeB | 1.e-6 | volume at port B [m3] |
model VarPump "Pump with losses and variable displacement." extends HyLibLight.Interfaces.RotSys; parameter Modelica.SIunits.Volume Dpump=0.1e-3 "displacement per revolution"; parameter HyLibLight.Interfaces.HyLibUnits.Conductance GPint=1.e-13 "conductance of internal leakage"; parameter HyLibLight.Interfaces.HyLibUnits.Conductance GPext=1.e-13 "conductance of external leakage"; parameter Modelica.SIunits.MomentOfInertia J=0.01 "moment of inertia"; parameter Real td=0.0 "friction coefficient [Nm/(rad/sec)]"; parameter Modelica.SIunits.Volume volumeA=1.e-6 "volume at port A" ; parameter Modelica.SIunits.Volume volumeB=1.e-6 "volume at port B" ; Modelica.Blocks.Interfaces.InPort inPort(final n=1) "Connector of input signal used as flow rate"; HyLibLight.Pumps.Basic.IdVarPump IvP(Dpump=Dpump); HyLibLight.Pumps.Tank Ta(GT=GPext); HyLibLight.Pumps.Tank Ta1(GT=GPext); HyLibLight.Components.Basic.LamResNoStates LamnS(G=GPint); HyLibLight.Components.VolumeConst VolumeB(volume=volumeB); HyLibLight.Components.VolumeConst VolumeA(volume=volumeA); HyLibLight.Pumps.Rotor Rotor( J=J, tauExt=0.0, td=td); equation connect(port_A, IvP.port_A); connect(port_B, IvP.port_B); connect(Ta.port_A, IvP.port_A); connect(IvP.flange_b, flange_b); connect(VolumeA.port_A, port_A); connect(IvP.port_A, LamnS.port_A); connect(LamnS.port_B, IvP.port_B); connect(Ta1.port_A, IvP.port_B); connect(VolumeB.port_A, IvP.port_B); connect(flange_a, Rotor.flange_a); connect(Rotor.flange_b, IvP.flange_a); connect(IvP.inPort, inPort); end VarPump;
Flow at the outlet port of the constant displacement pump: q = Dpump * omega / (2 * pi) - q_leakage q_leakage = GMint * |port_A.p - port_B.p| + (port_A.p - Tank.p) * GMext + (port_port_B.p - Tank.p) * GMext If the inlet pressure is lower than the atmospheric pressure, the delivered flow rate becomes smaller. q: flow rate in m^3/s Dpump: max. displacement per revolution in m^3 omega: angular velocity in rad/s GPext conductance of the external pump leakage, m^3/(s*Pa) GPint conductance of the internal pump leakage, m^3/(s*Pa) Use the modifier(s) VolumeA(port_A(p(start=1e5))) and/or VolumeB(port_A(p(start=1e5))) to set initial condition(s) for the pressure of the lumped volume(s) [Pa]. Use the modifier Rotor(w(start=100)) to set initial condition for the angular velocity of the shaft [rad/s]. If a state is deselected by Dymola during the index reduction process this modifier has no effect. Release Notes: -------------- 2000 - 2 - 1: tested
Name | Default | Description |
---|---|---|
Dpump | 0.1e-3 | displacement per revolution [m3] |
GPint | 1.e-13 | conductance of internal leakage [m3/(s*Pa)] |
GPext | 1.e-13 | conductance of external leakage [m3/(s*Pa)] |
J | 0.01 | moment of inertia [kg.m2] |
td | 0.0 | friction coefficient [Nm/(rad/sec)] |
volumeA | 1.e-6 | volume at port A [m3] |
volumeB | 1.e-6 | volume at port B [m3] |
model ConPump "Pump with constant displacement and losses." extends HyLibLight.Interfaces.RotSys; parameter Modelica.SIunits.Volume Dpump=0.1e-3 "displacement per revolution"; parameter HyLibLight.Interfaces.HyLibUnits.Conductance GPint=1.e-13 "conductance of internal leakage"; parameter HyLibLight.Interfaces.HyLibUnits.Conductance GPext=1.e-13 "conductance of external leakage"; parameter Modelica.SIunits.MomentOfInertia J=0.01 "moment of inertia"; parameter Real td=0.0 "friction coefficient [Nm/(rad/sec)]"; parameter Modelica.SIunits.Volume volumeA=1.e-6 "volume at port A" ; parameter Modelica.SIunits.Volume volumeB=1.e-6 "volume at port B" ; HyLibLight.Pumps.Basic.IdConPump ICP(Dpump=Dpump); HyLibLight.Pumps.Tank Ta(GT=GPext); HyLibLight.Pumps.Tank Ta1(GT=GPext); HyLibLight.Components.Basic.LamResNoStates LamnS(G=GPint); HyLibLight.Components.VolumeConst VolumeB(volume=volumeB); HyLibLight.Components.VolumeConst VolumeA(volume=volumeA); HyLibLight.Pumps.Rotor Rotor( J=J, tauExt=0.0, td=td); equation connect(port_A, ICP.port_A); connect(port_B, ICP.port_B); connect(Ta.port_A, ICP.port_A); connect(ICP.flange_b, flange_b); connect(VolumeA.port_A, port_A); connect(ICP.port_A, LamnS.port_A); connect(LamnS.port_B, ICP.port_B); connect(Ta1.port_A, ICP.port_B); connect(VolumeB.port_A, ICP.port_B); connect(flange_a, Rotor.flange_a); connect(Rotor.flange_b, ICP.flange_a); end ConPump;
Tank with a preload pressure against atmosphere and resistance of tank pipe. A preload pressure of 0 Pa means that the tank has atmospheric pressure. A preload pressure of 1 MPa means that the tank has an absolute pressure of 1,1 Mpa. The resistance is given by the conductance of the tank pipe GT in m3/(s*Pa) Release Notes: -------------- 2000 - 2 - 4: tested
Name | Default | Description |
---|---|---|
ppreload | 0.0e5 | preload pressure [Pa] |
GT | 2.e-8 | conductance of tank pipe [m3/(s*Pa)] |
model Tank "Tank with preload and resistance." extends HyLibLight.Interfaces.OnePortCompInput90; parameter Modelica.SIunits.Pressure ppreload=0.0e5 "preload pressure"; parameter HyLibLight.Interfaces.HyLibUnits.Conductance GT=2.e-8 "conductance of tank pipe"; HyLibLight.Pumps.Basic.TankNoRes Ta(ppreload=ppreload); HyLibLight.Components.Basic.LamResNoStates LamRes(G=GT); equation connect(LamRes.port_A, port_A); connect(LamRes.port_B, Ta.port_A); end Tank;
Constant displacement motor with internal and external leakage Flow rate at the outlet port of the constant displacement motor: q = Dmotor * omega / (2 * pi) - q_leakage q_leakage = GMint * |port_A.p - port_B.p| + (port_A.p - Tank.p) * GMext + (port_port_B.p - Tank.p) * GMext if the pressure at the inlet port is higher than the atmoshperic pressure, otherwise there is a flow reduction. q: flow rate in m^3/s Dmotor: displacement in m^3 / revolution omega: angular velocity in rad/s GMext: conductance of the external motor leakage, m^3/s/Pa GMint: conductance of the internal motor leakage, m^3/s/Pa The torque tau is given by: tau = Dmotor*(port_A.p - port_B.p)/(2*pi) Use the modifier(s) VolumeA(port_A(p(start=1e5))) and/or VolumeB(port_A(p(start=1e5))) to set initial condition(s) for the pressure of the lumped volume(s) [Pa]. Use the modifier Rotor(w(start=100)) to set initial condition for the angular velocity of the shaft [rad/s]. If a state is deselected by Dymola during the index reduction process this modifier has no effect. Release Notes: -------------- 2000 - 2 - 1: tested
Name | Default | Description |
---|---|---|
Dmotor | 0.1e-3 | displacement per revolution [m3] |
GMext | 5.e-12 | conductance of the external motor leakage [m3/(s*Pa)] |
GMint | 5.e-12 | conductance of the internal motor leakage [m3/(s*Pa)] |
J | 0.01 | moment of inertia [kg.m2] |
td | 0.7 | friction coefficient [Nm/(rad/sec)] |
volumeA | 1.e-6 | volume at port A [m3] |
volumeB | 1.e-6 | volume at port B [m3] |
model ConMot "Constant displacement motor with leakage." extends HyLibLight.Interfaces.RotSys; parameter Modelica.SIunits.Volume Dmotor=0.1e-3 "displacement per revolution"; parameter HyLibLight.Interfaces.HyLibUnits.Conductance GMext=5.e-12 "conductance of the external motor leakage"; parameter HyLibLight.Interfaces.HyLibUnits.Conductance GMint=5.e-12 "conductance of the internal motor leakage"; parameter Modelica.SIunits.MomentOfInertia J=0.01 "moment of inertia"; parameter Real td=0.7 "friction coefficient [Nm/(rad/sec)]"; parameter Modelica.SIunits.Volume volumeA=1.e-6 "volume at port A" ; parameter Modelica.SIunits.Volume volumeB=1.e-6 "volume at port B" ; HyLibLight.Pumps.Basic.IdConMot IcM(Dmotor=Dmotor); HyLibLight.Pumps.Tank Ta(GT=GMext); HyLibLight.Pumps.Tank Ta1(GT=GMext); HyLibLight.Components.Basic.LamResNoStates LamnS(G=GMint); HyLibLight.Components.VolumeConst VolumeB(volume=volumeB); HyLibLight.Components.VolumeConst VolumeA(volume=volumeA); HyLibLight.Pumps.Rotor Rotor( J=J, tauExt=0.0, td=td); equation connect(port_A, IcM.port_A); connect(port_B, IcM.port_B); connect(Ta.port_A, IcM.port_A); connect(IcM.flange_b, flange_b); connect(VolumeA.port_A, port_A); connect(IcM.port_A, LamnS.port_A); connect(LamnS.port_B, IcM.port_B); connect(Ta1.port_A, IcM.port_B); connect(VolumeB.port_A, IcM.port_B); connect(flange_a, Rotor.flange_a); connect(Rotor.flange_b, IcM.flange_a); end ConMot;
Constant flow source with internal leakage. Flow rate of the ideal flow source: q = qbias + qamp * sin(qfreq * 2 * pi * time + qphase) - p_pump * GP The delivered flow at the outlet port of this model may be different because of the flow into the lumped volume at outlet port q: flow rate at the outlet port in m^3/s GP: conductance of pump leakage, m^3/(s*Pa) Use the modifier Vol(port_A(p(start=1e5))) to set initial condition for the pressure of the lumped volume. If this state is deselected by Dymola during the index reduction process this modifier has no effect. Release Notes: -------------- 2000 - 2 - 3: tested
Name | Default | Description |
---|---|---|
qbias | 1e-3 | bias of flow rate [m3/s] |
qamp | 0 | amplitude of sinusoidal flow rate [m3/s] |
qfreq | 0 | frequency of sinusoidal flow rate [Hz] |
qphase | 0 | rad; phase shift |
GP | 5.e-12 | conductance of pump leakage [m3/(s*Pa)] |
volumeA | 1.e-6 | volume at port A [m3] |
model FlowSource "Constant flow source with internal leakage." extends HyLibLight.Interfaces.OnePortCompOutput; parameter Modelica.SIunits.VolumeFlowRate qbias=1e-3 "bias of flow rate"; parameter Modelica.SIunits.VolumeFlowRate qamp=0 "amplitude of sinusoidal flow rate"; parameter Modelica.SIunits.Frequency qfreq=0 "frequency of sinusoidal flow rate"; parameter Real qphase=0 "rad; phase shift"; parameter HyLibLight.Interfaces.HyLibUnits.Conductance GP=5.e-12 "conductance of pump leakage"; parameter Modelica.SIunits.Volume volumeA=1.e-6 "volume at port A" ; HyLibLight.Pumps.Basic.IdFlowSource IFS( qbias=qbias, qamp=qamp, qfreq=qfreq, qphase=qphase); HyLibLight.Pumps.Tank T(GT=GP); HyLibLight.Components.VolumeConst Vol(volume=volumeA); equation connect(IFS.port_B, T.port_A); connect(IFS.port_B, port_B); connect(Vol.port_A, IFS.port_B); end FlowSource;
Flow source with internal leakage and externally commanded flow rate. Flow rate of the ideal flow source with externally commanded flow rate: q = inPort.Signal[1] - p_pump * GP To generate the signal inPort.Signal[1] the blocks of the blocks library can be used. The delivered flow at the outlet port of this model may be different because of the flow into the lumped volume at outlet port q: flow rate at the outlet port in m^3/s GP: conductance of pump leakage, m^3/(s*Pa) Use the modifier Vol(port_A(p(start=1e5))) to set initial condition for the pressure of the lumped volume. If this state is deselected by Dymola during the index reduction process this modifier has no effect. Release Notes: -------------- 2000 - 2 - 3: tested
Name | Default | Description |
---|---|---|
GP | 5.e-12 | conductance of pump leakage [m3/(s*Pa)] |
volumeA | 1.e-6 | volume at port A [m3] |
model FlowSourceExtCommand "Flow source with internal leakage and externally commanded flow rate." extends HyLibLight.Interfaces.OnePortCompOutput; parameter HyLibLight.Interfaces.HyLibUnits.Conductance GP=5.e-12 "conductance of pump leakage"; parameter Modelica.SIunits.Volume volumeA=1.e-6 "volume at port A" ; HyLibLight.Pumps.Basic.IdFlowSourceExtCommand IFE; HyLibLight.Pumps.Tank T(GT=GP); HyLibLight.Components.VolumeConst Vol(volume=volumeA); Modelica.Blocks.Interfaces.InPort inPort(final n=1) "Connector of input signal used as flow rate"; equation connect(IFE.port_B, T.port_A); connect(IFE.port_B, port_B); connect(Vol.port_A, IFE.port_B); connect(IFE.inPort, inPort); end FlowSourceExtCommand;
Variable displacement motor with internal and external leakage Flow rate at the outlet port of the constant displacement motor: q = Dmotor * omega * signal / (2 * pi) - q_leakage q_leakage = GMint * |port_A.p - port_B.p| + (port_A.p - Tank.p) * GMext + (port_port_B.p - Tank.p) * GMext if the pressure at the inlet port is higher than the atmoshperic pressure, otherwise there is a flow reduction. q: flow rate in m^3/s Dmotor: displacement in m^3 / revolution omega: angular velocity in rad/s GMext: conductance of the external motor leakage, m^3/s/Pa GMint: conductance of the internal motor leakage, m^3/s/Pa The torque tau is given by: tau = Dmotor*(pA-pB)/(2*pi) Use the modifier(s) VolumeA(port_A(p(start=1e5))) and/or VolumeB(port_A(p(start=1e5))) to set initial condition(s) for the pressure of the lumped volume(s) [Pa]. Use the modifier Rotor(w(start=100)) to set initial condition for the angular velocity of the shaft [rad/s]. If a state is deselected by Dymola during the index reduction process this modifier has no effect. Release Notes: -------------- 2000 - 2 - 1: tested
Name | Default | Description |
---|---|---|
Dmotor | 0.1e-3 | displacement per revolution [m3] |
GMext | 5.e-12 | conductance of the external motor leakage [m3/(s*Pa)] |
GMint | 5.e-12 | conductance of the internal motor leakage [m3/(s*Pa)] |
J | 0.01 | moment of inertia [kg.m2] |
td | 0.7 | friction coefficient [Nm/(rad/sec)] |
volumeA | 1.e-6 | volume at port A [m3] |
volumeB | 1.e-6 | volume at port B [m3] |
model VarMot "Variable displacement motor with leakage." extends HyLibLight.Interfaces.RotSys; parameter Modelica.SIunits.Volume Dmotor=0.1e-3 "displacement per revolution"; parameter HyLibLight.Interfaces.HyLibUnits.Conductance GMext=5.e-12 "conductance of the external motor leakage"; parameter HyLibLight.Interfaces.HyLibUnits.Conductance GMint=5.e-12 "conductance of the internal motor leakage"; parameter Modelica.SIunits.MomentOfInertia J=0.01 "moment of inertia"; parameter Real td=0.7 "friction coefficient [Nm/(rad/sec)]"; parameter Modelica.SIunits.Volume volumeA=1.e-6 "volume at port A" ; parameter Modelica.SIunits.Volume volumeB=1.e-6 "volume at port B" ; Modelica.Blocks.Interfaces.InPort inPort(final n=1) "Connector of input signal used as flow rate"; HyLibLight.Pumps.Basic.IdVarMot IvM(Dmotor=Dmotor); HyLibLight.Pumps.Tank Ta(GT=GMext); HyLibLight.Pumps.Tank Ta1(GT=GMext); HyLibLight.Components.Basic.LamResNoStates LamnS(G=GMint); HyLibLight.Components.VolumeConst VolumeB(volume=volumeB); HyLibLight.Components.VolumeConst VolumeA(volume=volumeA); HyLibLight.Pumps.Rotor Rotor( J=J, tauExt=0.0, td=td); equation connect(port_A, IvM.port_A); connect(port_B, IvM.port_B); connect(Ta.port_A, IvM.port_A); connect(IvM.flange_b, flange_b); connect(VolumeA.port_A, port_A); connect(IvM.port_A, LamnS.port_A); connect(LamnS.port_B, IvM.port_B); connect(Ta1.port_A, IvM.port_B); connect(VolumeB.port_A, IvM.port_B); connect(flange_a, Rotor.flange_a); connect(Rotor.flange_b, IvM.flange_a); connect(IvM.inPort, inPort); end VarMot;
Rotor with inertia and linear, speed dependent friction. Equation of motion: J*a = flange_a.tau + flange_b.tau + tauExt - w*td; J inertia tau.flange_a torque at connector flange_a tau.flange_b torque at connector flange_b tauExt external torque w omega (angular velocity) td coefficient of friction [Nm / (rad/s)] Use the modifier w(start=100) to set initial condition for the angular velocity of the shaft [rad/s]. If a state is deselected by Dymola during the index reduction process this modifier has no effect. Note: Modelica.Mechanics.Rotational.Inertia uses the same equations but a different icon. Release Notes: -------------- 2000 - 2 - 1: tested
Name | Default | Description |
---|---|---|
J | 1 | moment of inertia [kg.m2] |
tauExt | 0.0 | external torque [N.m] |
td | 0.7 | friction coefficient [Nm/(rad/sec)] |
model Rotor "Rotor with inertia and linear, speed dependent friction." extends Modelica.Mechanics.Rotational.Interfaces.Rigid; parameter Modelica.SIunits.Inertia J=1 "moment of inertia"; parameter Modelica.SIunits.Torque tauExt=0.0 "external torque"; parameter Real td=0.7 "friction coefficient [Nm/(rad/sec)]"; Modelica.SIunits.AngularVelocity w "absolute angular velocity of component"; Modelica.SIunits.AngularAcceleration a "absolute angular acceleration of component"; equation w = der(phi); a = der(w); J*a = flange_a.tau + flange_b.tau + tauExt - w*td; end Rotor;