Package with motor models for valves and dampers
Information
This package contains components models for motors that may be
used with the actuator models in
Buildings.Fluid.Actuators.Dampers
or
Buildings.Fluid.Actuators.Valves.
Extends from Modelica.Icons.VariantsPackage (Icon for package containing variants).
Package Content
Name |
Description |
IdealMotor
|
Ideal motor model with hysteresis |
Examples
|
Collection of models that illustrate model use and test models |
Ideal motor model with hysteresis
Information
Ideal actuator motor model with hysteresis and finite actuation speed.
If the current actuator position y
is below (or above) the
input signal u
by an amount bigger than the hysteresis
delta
, then the position y
is increased (decreased)
until it reaches u
.
The output y
is bounded between 0
and 1
.
Note: This model can introduce state events which increase the computation time.
For a more efficient implementation that approximates a motor, set in
the valve or damper model the parameter filteredOpening=true
instead of using this motor model.
See also
Buildings.Fluid.Actuators.UsersGuide.
Extends from Modelica.Blocks.Interfaces.SISO (Single Input Single Output continuous control block).
Parameters
Type | Name | Default | Description |
Real | delta | 0.05 | Hysteresis |
Time | tOpe | 120 | Opening time [s] |
Time | tClo | tOpe | Closing time [s] |
Real | y_start | 0.5 | Start position |
Connectors
Type | Name | Description |
input RealInput | u | Connector of Real input signal |
output RealOutput | y | Connector of Real output signal |
Modelica definition
model IdealMotor
extends Modelica.Blocks.Interfaces.SISO;
parameter Real delta(min=0, max=0.5) = 0.05 ;
parameter Modelica.SIunits.Time tOpe(min=0) = 120 ;
parameter Modelica.SIunits.Time tClo(min=0) = tOpe ;
parameter Real y_start(min=0, max=1) = 0.5 ;
Modelica.Blocks.Logical.Hysteresis uppHys(
final uLow=0, uHigh=delta,
final pre_y_start=false);
Modelica.Blocks.Logical.Hysteresis lowHys(uLow=-delta,
final uHigh=0,
final pre_y_start=true) ;
Modelica.Blocks.Logical.Switch uppSwi;
Modelica.Blocks.Continuous.LimIntegrator int(
final y_start=y_start,
final k=1,
outMax=1,
outMin=0,
initType=Modelica.Blocks.Types.Init.InitialState,
limitsAtInit=true,
y(stateSelect=StateSelect.always)) ;
protected
final Modelica.Blocks.Sources.Constant zer(
final k=0) ;
Modelica.Blocks.Sources.Constant vOpe(
final k=1/tOpe) ;
Modelica.Blocks.Sources.Constant vClo(
final k=-1/tClo) ;
Modelica.Blocks.Logical.Switch lowSwi;
Modelica.Blocks.Math.Add add;
Modelica.Blocks.Math.Feedback feeBac ;
equation
connect(zer.y, uppSwi.u3);
connect(uppHys.y, uppSwi.u2);
connect(vOpe.y, uppSwi.u1);
connect(lowHys.y, lowSwi.u2);
connect(vClo.y, lowSwi.u3);
connect(zer.y, lowSwi.u1);
connect(add.y, int.u);
connect(uppSwi.y, add.u1);
connect(u, feeBac.u1);
connect(feeBac.y, uppHys.u);
connect(feeBac.y, lowHys.u);
connect(lowSwi.y, add.u2);
connect(int.y, y);
connect(int.y, feeBac.u2);
end IdealMotor;
http://simulationresearch.lbl.gov/modelica