Package with controllers for DX-cooled data centers
Information
This package contains controllers for DX-cooled data centers.
Extends from Modelica.Icons.Package (Icon for standard packages).
Package Content
Name |
Description |
AirsideEconomizer
|
Controller for airside economizer |
Compressor
|
Controller for compressor speed |
CoolingMode
|
Controller for the DX cooling system with an airside economizer |
Validation
|
Collection of validation models |
Controller for airside economizer
Information
This model implements an airside economizer controller to modulate the outdoor air damper
in order to maintain desired mixed air temperature.
When the airside economizer is open, which means the system is in free cooling or partial mechanical
cooling, the position of the OA damper is controlled by a PI controller to maintain a desired mixed air temperature;
otherwise, the position of the OA damper is set as closed.
Parameters
Type | Name | Default | Description |
Real | minOAFra | | Minimum outdoor air fraction [1] |
Control |
Real | gai | 1 | Gain of controller |
Time | Ti | 50 | Integrator time [s] |
Connectors
Type | Name | Description |
input RealInput | TMixAirSet | Mixed air setpoint temperature [K] |
input RealInput | TMixAirMea | Measured mixed air temperature [K] |
input IntegerInput | cooMod | Cooling mode of the cooling system |
output RealOutput | y | Connector of Real output signal |
Modelica definition
model AirsideEconomizer
parameter Real gai(min=Modelica.Constants.small) = 1 ;
parameter Modelica.SIunits.Time Ti=50 ;
parameter Real minOAFra(
min=0,
max=1,
final unit="1") ;
Modelica.Blocks.Interfaces.RealInput TMixAirSet(
final unit="K",
final quantity="ThermodynamicTemperature",
displayUnit="degC") ;
Modelica.Blocks.Interfaces.RealInput TMixAirMea(
final unit="K",
final quantity="ThermodynamicTemperature",
displayUnit="degC") ;
Modelica.Blocks.Interfaces.IntegerInput cooMod ;
Modelica.Blocks.Interfaces.RealOutput y ;
Buildings.Controls.Continuous.LimPID con(
reverseAction=true,
k=gai,
yMin=minOAFra,
final controllerType=Modelica.Blocks.Types.SimpleController.PI,
Ti=Ti) ;
protected
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(
final k=0) ;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(
final k=
Integer(
Types.CoolingModes.FullMechanical)) ;
Buildings.Controls.OBC.CDL.Integers.Equal ecoOff ;
Buildings.Controls.OBC.CDL.Logical.Switch switch1 ;
equation
connect(TMixAirSet, con.u_s);
connect(TMixAirMea, con.u_m);
connect(switch1.y, y);
connect(ecoOff.y, switch1.u2);
connect(const.y, switch1.u1);
connect(con.y, switch1.u3);
connect(ecoOff.u2, conInt.y);
connect(ecoOff.u1, cooMod);
end AirsideEconomizer;
Controller for compressor speed
Information
This model implements a PI controller to maintain the supply air temperature at its setpoint by adjusting the compressor's speed.
When the free cooling is activated, the DX unit is deactivated by setting the speed signal as 0. In Partial Mechanical cooling and
Full Mechanical cooling, the PI controller works to adjust the compressor's speed.
Parameters
Type | Name | Default | Description |
Real | k | 0.5 | Gain of controller |
Time | Ti | 240 | Time constant of integrator block [s] |
Real | yMax | 1 | Upper limit of output |
Real | yMin | 0 | Lower limit of output |
Boolean | reverseAction | true | Set to true for throttling the water flow rate through a cooling coil controller |
Connectors
Type | Name | Description |
input IntegerInput | cooMod | Cooling mode of the cooling system |
output RealOutput | y | Compressor speed [1] |
input RealInput | TMixAirSet | Mixed air setpoint temperature [K] |
input RealInput | TMixAirMea | Measured mixed air temperature [K] |
Modelica definition
model Compressor
parameter Real k=0.5 ;
parameter Modelica.SIunits.Time Ti=240 ;
parameter Real yMax=1 ;
parameter Real yMin=0 ;
parameter Boolean reverseAction=true ;
Buildings.Controls.Continuous.LimPID dxSpe(
Td=1,
final controllerType=Modelica.Blocks.Types.SimpleController.PI,
final k=k,
final Ti=Ti,
final yMax=yMax,
final yMin=yMin,
reverseAction=reverseAction,
reset=Buildings.Types.Reset.Parameter,
y_reset=yMin) ;
Modelica.Blocks.Interfaces.IntegerInput cooMod ;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput y(
min=0,
max=1,
final unit="1") ;
Modelica.Blocks.Interfaces.RealInput TMixAirSet(
final unit="K",
final quantity="ThermodynamicTemperature",
displayUnit="degC") ;
Modelica.Blocks.Interfaces.RealInput TMixAirMea(
final unit="K",
final quantity="ThermodynamicTemperature",
displayUnit="degC") ;
Buildings.Controls.OBC.CDL.Logical.Not not1 ;
protected
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(
final k=
Integer(
Buildings.Applications.DataCenters.Types.CoolingModes.FreeCooling)) ;
Buildings.Controls.OBC.CDL.Integers.Equal freCoo ;
Buildings.Controls.OBC.CDL.Logical.Switch switch1 ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(
final k=0) ;
equation
connect(cooMod, freCoo.u1);
connect(conInt.y, freCoo.u2);
connect(freCoo.y, switch1.u2);
connect(const.y, switch1.u1);
connect(dxSpe.y, switch1.u3);
connect(switch1.y, y);
connect(TMixAirSet, dxSpe.u_s);
connect(TMixAirMea, dxSpe.u_m);
connect(not1.y, dxSpe.trigger);
connect(freCoo.y, not1.u);
end Compressor;
Controller for the DX cooling system with an airside economizer
Information
This model implements a cooling mode controller for an air-cooled direct expansion (DX) cooling system
with an airside economizer. This controller is based on a simplified differential dry-bulb temperature
control strategy, as described in ASHRAE G36.
There are three cooling modes for this system: free cooling (FC) mode,
partially mechanical cooling (PMC) mode and fully mechanical cooling (FMC) mode. The detailed switching
logic is shown in the following:
The airside economizer is enabled when:
The airside economizer is disabled when:
The DX coil is enabled when:
The DX coil is disabled when:
where
Tswi is the switching temperature,
subscript set means set point,
out means outdoor air, ret means return air,
and sup means supply air. A deadband δT can be added to the above logics to
avoid frequent switching.
Parameters
Connectors
Type | Name | Description |
input RealInput | TOutDryBul | Dry-bulb temperature of outdoor air [K] |
input RealInput | TRet | Return air temperature [K] |
input RealInput | TSupSet | Supply air temperature setpoint [K] |
output IntegerOutput | y | Cooling mode signal, integer value of Buildings.Applications.DataCenters.Examples.BaseClasses.Types.CoolingMode |
Modelica definition
model CoolingMode
parameter Modelica.SIunits.Time tWai ;
parameter Modelica.SIunits.TemperatureDifference dT(min=0.1) = 1.1 ;
Modelica.Blocks.Interfaces.RealInput TOutDryBul(
final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit="degC") ;
Modelica.Blocks.Interfaces.RealInput TRet(
final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit="degC") ;
Modelica.Blocks.Interfaces.RealInput TSupSet(
final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit="degC") ;
Modelica.Blocks.Interfaces.IntegerOutput y ;
Modelica.StateGraph.Transition con1(
enableTimer=true,
waitTime=tWai,
condition=TOutDryBul > TSupSet + dT) ;
Modelica.StateGraph.StepWithSignal parMecCoo(nIn=2, nOut=2) ;
Modelica.StateGraph.InitialStepWithSignal freCoo(nIn=1) ;
Modelica.StateGraph.StepWithSignal fulMecCoo ;
Modelica.StateGraph.Transition con2(
enableTimer=true,
waitTime=tWai,
condition=TOutDryBul > TRet + dT) ;
Modelica.StateGraph.Transition con3(
enableTimer=true,
waitTime=tWai,
condition=TOutDryBul < TRet - dT) ;
Modelica.StateGraph.Transition con4(
enableTimer=true,
waitTime=tWai,
condition=TOutDryBul < TSupSet - dT) ;
inner Modelica.StateGraph.StateGraphRoot stateGraphRoot;
Modelica.Blocks.MathInteger.MultiSwitch swi(
nu=3,
y_default=0,
expr={
Integer(Types.CoolingModes.FreeCooling),
Integer(Types.CoolingModes.PartialMechanical),
Integer(Types.CoolingModes.FullMechanical)}) ;
equation
connect(freCoo.outPort[1], con1.inPort);
connect(con1.outPort, parMecCoo.inPort[1]);
connect(con2.inPort, parMecCoo.outPort[1]);
connect(con2.outPort, fulMecCoo.inPort[1]);
connect(fulMecCoo.outPort[1], con3.inPort);
connect(con4.outPort, freCoo.inPort[1]);
connect(con3.outPort, parMecCoo.inPort[2]);
connect(con4.inPort, parMecCoo.outPort[2]);
connect(swi.u[1], freCoo.active);
connect(parMecCoo.active, swi.u[2]);
connect(fulMecCoo.active, swi.u[3]);
connect(y, swi.y);
end CoolingMode;