Description: "Package with controller models"

- Home > Modelica

## Buildings.Examples.DualFanDualDuct.Controls

Package with controller models

### Information

Extends from Modelica.Icons.VariantsPackage (Icon for package containing variants).

### Package Content

Name | Description
--- | ---
CoolingCoilTemperatureSetpoint | Set point scheduler for cooling coil
FanVFD | Controller for fan revolution
HeatingCoilTemperatureSetpoint | Set point scheduler for heating coil
RoomMixingBox | Controller for room mixing box
Examples | Example models to test the components

## Buildings.Examples.DualFanDualDuct.Controls.CoolingCoilTemperatureSetpoint

Set point scheduler for cooling coil

### Information

Extends from Modelica.Blocks.Icons.Block (Basic graphical layout of input/output block).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | TOn |  | Setpoint during on [K]
Temperature | TOff |  | Setpoint during off [K]

### Connectors

Type | Name | Description
--- | --- | ---
ControlBus | controlBus |
output RealOutput | TSet | Temperature set point

### Modelica definition

block CoolingCoilTemperatureSetpoint "Set point scheduler for cooling coil" extends Modelica.Blocks.Icons.Block; import Buildings.Examples.VAVReheat.Controls.OperationModes; parameter Modelica.SIunits.Temperature TOn "Setpoint during on"; parameter Modelica.SIunits.Temperature TOff "Setpoint during off"; Modelica.Blocks.Sources.RealExpression TSetPoi( y=if (mode.y == Integer(OperationModes.occupied) or mode.y == Integer(OperationModes.unoccupiedPreCool) or mode.y == Integer(OperationModes.safety)) then TOn else TOff) "Air temperature setpoint"; VAVReheat.Controls.ControlBus controlBus; Modelica.Blocks.Routing.IntegerPassThrough mode; Modelica.Blocks.Interfaces.RealOutput TSet "Temperature set point"; equation connect(controlBus.controlMode, mode.u); connect(TSetPoi.y, TSet); end CoolingCoilTemperatureSetpoint;

## Buildings.Examples.DualFanDualDuct.Controls.FanVFD

Controller for fan revolution

### Information

Extends from Modelica.Blocks.Interfaces.SISO (Single Input Single Output continuous control block).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
Real | xSet_nominal |  | Nominal setpoint (used for normalization)
Real | r_N_min | 0.01 | Minimum normalized fan speed

### Connectors

Type | Name | Description
--- | --- | ---
input RealInput | u | Connector of Real input signal
output RealOutput | y | Connector of Real output signal
ControlBus | controlBus |
input RealInput | u_m | Connector of measurement input signal

### Modelica definition

block FanVFD "Controller for fan revolution" extends Modelica.Blocks.Interfaces.SISO; import Buildings.Examples.VAVReheat.Controls.OperationModes; Buildings.Controls.Continuous.LimPID con( yMax=1, yMin=0, controllerType=Modelica.Blocks.Types.SimpleController.PI, Td=60, Ti=10) "Controller"; Modelica.Blocks.Math.Gain gaiMea(k=1/xSet_nominal) "Gain to normalize measurement signal"; parameter Real xSet_nominal "Nominal setpoint (used for normalization)"; VAVReheat.Controls.ControlBus controlBus; Modelica.Blocks.Routing.Extractor extractor(nin=6); Modelica.Blocks.Sources.Constant off(k=r_N_min) "Off signal"; Modelica.Blocks.Sources.Constant on(k=1) "On signal"; Modelica.Blocks.Math.Gain gaiSet(k=1/xSet_nominal) "Gain to normalize setpoint signal"; Modelica.Blocks.Interfaces.RealInput u_m "Connector of measurement input signal"; parameter Real r_N_min=0.01 "Minimum normalized fan speed"; Modelica.Blocks.Continuous.FirstOrder firstOrder( initType=Modelica.Blocks.Types.Init.InitialState, y_start=r_N_min, T=60); equation connect(gaiMea.y, con.u_m); connect(con.y, extractor.u[OperationModes.occupied]); connect(con.y, extractor.u[OperationModes.unoccupiedWarmUp]); connect(con.y, extractor.u[OperationModes.unoccupiedPreCool]); connect(off.y, extractor.u[OperationModes.unoccupiedOff]); connect(off.y, extractor.u[OperationModes.safety]); connect(on.y, extractor.u[OperationModes.unoccupiedNightSetBack]); connect(controlBus.controlMode, extractor.index); connect(gaiSet.y, con.u_s); connect(u_m, gaiMea.u); connect(gaiSet.u, u); connect(extractor.y, firstOrder.u); connect(y, extractor.y); end FanVFD;

## Buildings.Examples.DualFanDualDuct.Controls.HeatingCoilTemperatureSetpoint

Set point scheduler for heating coil

### Information

Extends from CoolingCoilTemperatureSetpoint (Set point scheduler for cooling coil).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
Temperature | TOn |  | Setpoint during on [K]
Temperature | TOff |  | Setpoint during off [K]

### Connectors

Type | Name | Description
--- | --- | ---
ControlBus | controlBus |
output RealOutput | TSet | Temperature set point

### Modelica definition

block HeatingCoilTemperatureSetpoint "Set point scheduler for heating coil" import Buildings.Examples.VAVReheat.Controls.OperationModes; extends CoolingCoilTemperatureSetpoint(TSetPoi( y=if (mode.y == Integer(OperationModes.unoccupiedOff)) then TOff else TOn)); end HeatingCoilTemperatureSetpoint;

## Buildings.Examples.DualFanDualDuct.Controls.RoomMixingBox

Controller for room mixing box

### Information

This controller outputs the control signal for the air damper for the hot deck and the cold deck. The control signal for the hot deck is the larger of the two signals needed to track the room heating temperature setpoint, and the minimum air flow rate.

Extends from Modelica.Blocks.Icons.Block (Basic graphical layout of input/output block).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
MassFlowRate | m_flow_min |  | Minimum mass flow rate [kg/s]

### Connectors

Type | Name | Description
--- | --- | ---
input RealInput | TRoo | Measured room temperature [K]
output RealOutput | yHot | Signal for hot air damper
output RealOutput | yCol | Signal for cold deck air damper
input RealInput | mAir_flow | Measured air mass flow rate into the room
input RealInput | TRooSetHea | Room temperature setpoint for heating [K]
input RealInput | TRooSetCoo | Room temperature setpoint for cooling [K]

### Modelica definition

block RoomMixingBox "Controller for room mixing box" extends Modelica.Blocks.Icons.Block; parameter Modelica.SIunits.MassFlowRate m_flow_min "Minimum mass flow rate"; Buildings.Controls.Continuous.LimPID conHea( yMax=1, xi_start=0.1, initType=Modelica.Blocks.Types.InitPID.InitialState, Td=60, yMin=0, controllerType=Modelica.Blocks.Types.SimpleController.PI, k=0.1, Ti=120) "Controller for heating"; Buildings.Controls.Continuous.LimPID conCoo( yMax=1, reverseAction=true, Td=60, controllerType=Modelica.Blocks.Types.SimpleController.PI, k=0.1, Ti=120) "Controller for cooling (acts on damper)"; Modelica.Blocks.Interfaces.RealInput TRoo(final quantity="ThermodynamicTemperature", final unit = "K", displayUnit = "degC", min=0) "Measured room temperature"; Modelica.Blocks.Interfaces.RealOutput yHot "Signal for hot air damper"; Modelica.Blocks.Interfaces.RealOutput yCol "Signal for cold deck air damper"; Modelica.Blocks.Interfaces.RealInput mAir_flow "Measured air mass flow rate into the room"; Buildings.Controls.Continuous.LimPID conFloRat( yMax=1, xi_start=0.1, Td=60, yMin=0, controllerType=Modelica.Blocks.Types.SimpleController.PI, k=0.1, Ti=120) "Controller for mass flow rate"; Modelica.Blocks.Sources.Constant mAirSet(k=m_flow_min) "Set point for minimum air flow rate"; Buildings.Utilities.Math.SmoothMax smoothMaxHea(deltaX=0.01) "Adds control signal for minimum flow rate of zone"; Modelica.Blocks.Interfaces.RealInput TRooSetHea(unit="K") "Room temperature setpoint for heating"; Modelica.Blocks.Interfaces.RealInput TRooSetCoo(unit="K") "Room temperature setpoint for cooling"; Modelica.Blocks.Sources.RealExpression gaiCoo(y= Buildings.Utilities.Math.Functions.smoothLimit( (TRoo - TRooSetHea)/(TRooSetCoo - TRooSetHea), 0, 1, 0.01)) "Gain for adding minimum flow rate to cooling signal"; Modelica.Blocks.Sources.RealExpression gaiHea(y=1 - gaiCoo.y) "Gain for adding minimum flow rate to cooling signal"; Modelica.Blocks.Math.Product product; Modelica.Blocks.Math.Product product1; Buildings.Utilities.Math.SmoothMax smoothMaxCoo(deltaX=0.01) "Adds control signal for minimum flow rate of zone"; equation connect(mAir_flow, conFloRat.u_m); connect(conHea.y, smoothMaxHea.u1); connect(conHea.u_s, TRooSetHea); connect(conCoo.u_s, TRooSetCoo); connect(TRoo, conCoo.u_m); connect(TRoo, conHea.u_m); connect(conFloRat.y, product.u1); connect(product.y, smoothMaxHea.u2); connect(product.u2, gaiHea.y); connect(gaiCoo.y, product1.u1); connect(conFloRat.y, product1.u2); connect(smoothMaxHea.y, yHot); connect(product1.y, smoothMaxCoo.u1); connect(conCoo.y, smoothMaxCoo.u2); connect(smoothMaxCoo.y, yCol); connect(mAirSet.y, conFloRat.u_s); end RoomMixingBox;