Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits

Control sequences for terminal units

Information

This package contains control sequences for terminal units.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Controller Controller Controller for room VAV box
Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat Reheat Sequences for VAV reheat terminal unit
Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.SetPoints SetPoints Generic sequences of generating setpoints for terminal units control
Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Controller Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Controller

Controller for room VAV box

Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Controller

Information

Controller for terminal box of VAV system with reheat according to ASHRAE Guideline 36, Part 5.E. It outputs damper position yDam, hot water valve position yVal, AHU cooling supply temperature setpoint reset request yZonTemResReq, and static pressure setpoint reset request yZonPreResReq.

The sequence consists of four subsequences.

a. Heating and cooling control loop

The subsequence is implementd according to Part 5.B.5. The measured zone temperature TZon, zone setpoints temperatures TZonHeaSet and TZonCooSet are inputs to the block conHeaLoo and conCooLoo to generate the control loop signal.

b. Active airflow setpoint calculation

This sequence sets the active maximum and minimum airflow according to Part 5.E.3-5. Depending on operation modes uOpeMod, it sets the airflow rate limits for cooling and heating supply. See Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat.SetPoints.ActiveAirFlow.

c. Damper and valve control

This sequence sets the damper and valve position for VAV reheat terminal unit. The implementation is according to Part 5.E.6. According to heating and cooling control loop signal, it calculates the discharge air temperature setpoint TDisHeaSet. Along with the defined maximum and minimum airflow, measured zone temperature, the sequence outputs yDam, yVal, TDisHeaSet and discharge airflow rate setpoint VDisSet_flow. See Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat.DamperValves.

d. System reset requests generation

According to Part 5.E.9, this sequence outputs the system reset requests, i.e. cooling supply air temperature reset requests yZonTemResReq, static pressure reset requests yZonPreResReq, hot water reset requests yHeaValResReq, and the boiler plant reset requests yHeaPlaReq. See Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat.SystemRequests.

Parameters

TypeNameDefaultDescription
RealsamplePeriod Sample period of component, set to the same value as the trim and respond that process yPreSetReq [s]
RealV_flow_nominal Volume flow rate of this thermal zone [m3/s]
RealAFlo Area of the zone [m2]
Cooling loop signal
SimpleControllercontrollerTypeCooBuildings.Controls.OBC.CDL.T...Type of controller
RealkCoo0.1Gain for cooling control loop signal [1/K]
RealTiCoo900Time constant of integrator block for cooling control loop signal [s]
RealTdCoo0.1Time constant of derivative block for cooling control loop signal [s]
Heating loop signal
SimpleControllercontrollerTypeHeaBuildings.Controls.OBC.CDL.T...Type of controller
RealkHea0.1Gain for heating control loop signal [1/K]
RealTiHea900Time constant of integrator block for heating control loop signal [s]
RealTdHea0.1Time constant of derivative block for heating control loop signal [s]
Valve
SimpleControllercontrollerTypeValBuildings.Controls.OBC.CDL.T...Type of controller
RealkVal0.5Gain of controller for valve control
RealTiVal300Time constant of integrator block for valve control [s]
RealTdVal0.1Time constant of derivative block for valve control [s]
Damper
SimpleControllercontrollerTypeDamBuildings.Controls.OBC.CDL.T...Type of controller
RealkDam0.5Gain of controller for damper control [1]
RealTiDam300Time constant of integrator block for damper control [s]
RealTdDam0.1Time constant of derivative block for damper control [s]
Airflow setpoint
Zone sensors
Booleanhave_occSenfalseSet to true if the zone has occupancy sensor
Booleanhave_winSenfalseSet to true if the zone has window status sensor
Booleanhave_CO2SenfalseSet to true if the zone has CO2 sensor
Nominal conditions
RealVDisCooSetMax_flowV_flow_nominalZone maximum cooling airflow setpoint [m3/s]
RealVDisSetMin_flow0.15*V_flow_nominalZone minimum airflow setpoint [m3/s]
RealVDisHeaSetMax_flow0.3*V_flow_nominalZone maximum heating airflow setpoint [m3/s]
RealVDisConMin_flow0.1*V_flow_nominalVAV box controllable minimum [m3/s]
RealVOutPerAre_flow3e-4Outdoor air rate per unit area [m3/(s.m2)]
RealVOutPerPer_flow2.5e-3Outdoor air rate per person [m3/s]
RealCO2Set894CO2 setpoint in ppm
Damper and valve
Parameters
RealdTDisZonSetMax11Zone maximum discharge air temperature above heating setpoint [K]
RealTDisMin283.15Lowest discharge air temperature [K]
System requests
Parameters
Booleanhave_heaWatCoitrueFlag, true if there is a hot water coil
Booleanhave_heaPlafalseFlag, true if there is a boiler plant
RealerrTZonCoo_12.8Limit value of difference between zone temperature and cooling setpoint for generating 3 cooling SAT reset requests [K]
RealerrTZonCoo_21.7Limit value of difference between zone temperature and cooling setpoint for generating 2 cooling SAT reset requests [K]
RealerrTDis_117Limit value of difference between discharge air temperature and its setpoint for generating 3 hot water reset requests [K]
RealerrTDis_28.3Limit value of difference between discharge air temperature and its setpoint for generating 2 hot water reset requests [K]
Duration times
RealdurTimTem120Duration time of zone temperature exceeds setpoint [s]
RealdurTimFlo60Duration time of airflow rate less than setpoint [s]
RealdurTimDisAir300Duration time of discharge air temperature is less than setpoint [s]

Connectors

TypeNameDescription
input RealInputTZonHeaSetSetpoint temperature for room for heating [K]
input RealInputTZonCooSetSetpoint temperature for room for cooling [K]
input RealInputTZonMeasured room temperature [K]
input RealInputTDisMeasured supply air temperature after heating coil [K]
input RealInputVDis_flowMeasured discharge airflow rate [m3/s]
input RealInputTSupAHUAHU supply air temperature [K]
input RealInputppmCO2Measured CO2 concentration
input RealInputnOccNumber of occupants
input BooleanInputuWinWindow status, true if open, false if closed
input IntegerInputuOpeModZone operation mode
input RealInputyDam_actualActual VAV damper position
output RealOutputyValSignal for heating coil valve [1]
output RealOutputyDamSignal for VAV damper [1]
output IntegerOutputyZonTemResReqZone cooling supply air temperature reset request
output IntegerOutputyZonPreResReqZone static pressure reset requests
output IntegerOutputyHeaValResReqHot water temperature reset requests
output IntegerOutputyHeaPlaReqHeating plant request

Modelica definition

block Controller "Controller for room VAV box" parameter Real samplePeriod( final unit="s", final quantity="Time") "Sample period of component, set to the same value as the trim and respond that process yPreSetReq"; parameter Real V_flow_nominal( final unit="m3/s", final quantity="VolumeFlowRate") "Volume flow rate of this thermal zone"; parameter Real AFlo( final unit="m2", final quantity="Area") "Area of the zone"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeCoo= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kCoo(final unit="1/K") = 0.1 "Gain for cooling control loop signal"; parameter Real TiCoo( final unit="s", final quantity="Time")=900 "Time constant of integrator block for cooling control loop signal"; parameter Real TdCoo( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for cooling control loop signal"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeHea= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kHea(final unit="1/K")=0.1 "Gain for heating control loop signal"; parameter Real TiHea( final unit="s", final quantity="Time")=900 "Time constant of integrator block for heating control loop signal"; parameter Real TdHea( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for heating control loop signal"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeVal= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kVal=0.5 "Gain of controller for valve control"; parameter Real TiVal( final unit="s", final quantity="Time")=300 "Time constant of integrator block for valve control"; parameter Real TdVal( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for valve control"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeDam= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kDam(final unit="1")=0.5 "Gain of controller for damper control"; parameter Real TiDam( final unit="s", final quantity="Time")=300 "Time constant of integrator block for damper control"; parameter Real TdDam( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for damper control"; parameter Boolean have_occSen=false "Set to true if the zone has occupancy sensor"; parameter Boolean have_winSen=false "Set to true if the zone has window status sensor"; parameter Boolean have_CO2Sen=false "Set to true if the zone has CO2 sensor"; parameter Real VDisCooSetMax_flow( final unit="m3/s", final quantity="VolumeFlowRate")=V_flow_nominal "Zone maximum cooling airflow setpoint"; parameter Real VDisSetMin_flow( final unit="m3/s", final quantity="VolumeFlowRate")=0.15*V_flow_nominal "Zone minimum airflow setpoint"; parameter Real VDisHeaSetMax_flow( final unit="m3/s", final quantity="VolumeFlowRate")=0.3*V_flow_nominal "Zone maximum heating airflow setpoint"; parameter Real VDisConMin_flow( final unit="m3/s", final quantity="VolumeFlowRate")=0.1*V_flow_nominal "VAV box controllable minimum"; parameter Real VOutPerAre_flow(final unit = "m3/(s.m2)")=3e-4 "Outdoor air rate per unit area"; parameter Real VOutPerPer_flow( final unit="m3/s", final quantity="VolumeFlowRate")=2.5e-3 "Outdoor air rate per person"; parameter Real CO2Set=894 "CO2 setpoint in ppm"; parameter Real dTDisZonSetMax( final unit="K", displayUnit="K", final quantity="TemperatureDifference")=11 "Zone maximum discharge air temperature above heating setpoint"; parameter Real TDisMin( final quantity="ThermodynamicTemperature", final unit = "K", displayUnit = "degC")=283.15 "Lowest discharge air temperature"; parameter Boolean have_heaWatCoi=true "Flag, true if there is a hot water coil"; parameter Boolean have_heaPla=false "Flag, true if there is a boiler plant"; parameter Real errTZonCoo_1( final unit="K", displayUnit="K", final quantity="TemperatureDifference")=2.8 "Limit value of difference between zone temperature and cooling setpoint for generating 3 cooling SAT reset requests"; parameter Real errTZonCoo_2( final unit="K", displayUnit="K", final quantity="TemperatureDifference")=1.7 "Limit value of difference between zone temperature and cooling setpoint for generating 2 cooling SAT reset requests"; parameter Real errTDis_1( final unit="K", displayUnit="K", final quantity="TemperatureDifference")=17 "Limit value of difference between discharge air temperature and its setpoint for generating 3 hot water reset requests"; parameter Real errTDis_2( final unit="K", displayUnit="K", final quantity="TemperatureDifference")=8.3 "Limit value of difference between discharge air temperature and its setpoint for generating 2 hot water reset requests"; parameter Real durTimTem( final unit="s", final quantity="Time")=120 "Duration time of zone temperature exceeds setpoint"; parameter Real durTimFlo( final unit="s", final quantity="Time")=60 "Duration time of airflow rate less than setpoint"; parameter Real durTimDisAir( final unit="s", final quantity="Time")=300 "Duration time of discharge air temperature is less than setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZonHeaSet( final quantity="ThermodynamicTemperature", final unit = "K", displayUnit = "degC") "Setpoint temperature for room for heating"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZonCooSet( final quantity="ThermodynamicTemperature", final unit = "K", displayUnit = "degC") "Setpoint temperature for room for cooling"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon( final quantity="ThermodynamicTemperature", final unit = "K", displayUnit = "degC") "Measured room temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TDis( final quantity="ThermodynamicTemperature", final unit = "K", displayUnit = "degC") "Measured supply air temperature after heating coil"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VDis_flow( final unit="m3/s", final quantity="VolumeFlowRate") "Measured discharge airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSupAHU( final quantity="ThermodynamicTemperature", final unit = "K", displayUnit = "degC") "AHU supply air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput ppmCO2 if have_CO2Sen "Measured CO2 concentration"; Buildings.Controls.OBC.CDL.Interfaces.RealInput nOcc if have_occSen "Number of occupants"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWin if have_winSen "Window status, true if open, false if closed"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "Zone operation mode"; Buildings.Controls.OBC.CDL.Interfaces.RealInput yDam_actual "Actual VAV damper position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yVal( final min=0, final max=1, final unit="1") "Signal for heating coil valve"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDam( final min=0, final max=1, final unit="1") "Signal for VAV damper"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yZonTemResReq "Zone cooling supply air temperature reset request"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yZonPreResReq "Zone static pressure reset requests"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHeaValResReq if have_heaWatCoi "Hot water temperature reset requests"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHeaPlaReq if (have_heaWatCoi and have_heaPla) "Heating plant request"; Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat.SetPoints.ActiveAirFlow actAirSet( final AFlo=AFlo, final have_occSen=have_occSen, final have_winSen=have_winSen, final have_CO2Sen=have_CO2Sen, final VDisCooSetMax_flow=VDisCooSetMax_flow, final VDisSetMin_flow=VDisSetMin_flow, final VDisHeaSetMax_flow=VDisHeaSetMax_flow, final VDisConMin_flow=VDisConMin_flow, final VOutPerAre_flow=VOutPerAre_flow, final VOutPerPer_flow=VOutPerPer_flow, final CO2Set=CO2Set) "Active airflow rate setpoint"; Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat.DamperValves damVal( final controllerTypeVal=controllerTypeVal, final kVal=kVal, final TiVal=TiVal, final TdVal=TdVal, final controllerTypeDam=controllerTypeDam, final kDam=kDam, final TiDam=TiDam, final TdDam=TdDam, final dTDisZonSetMax=dTDisZonSetMax, final TDisMin=TDisMin, V_flow_nominal=max(VDisCooSetMax_flow, VDisHeaSetMax_flow)) "Damper and valve controller"; Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat.SystemRequests sysReq( final samplePeriod=samplePeriod, final have_heaWatCoi=have_heaWatCoi, final have_heaPla=have_heaPla, final errTZonCoo_1=errTZonCoo_1, final errTZonCoo_2=errTZonCoo_2, final errTDis_1=errTDis_1, final errTDis_2=errTDis_2, final durTimTem=durTimTem, final durTimFlo=durTimFlo, final durTimDisAir=durTimDisAir) "Number of system requests"; Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conHeaLoo( final controllerType=controllerTypeHea, final k=kHea, final Ti=TiHea, final Td=TdHea, final yMax=1, final yMin=0) "Heating loop signal"; Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conCooLoo( final controllerType=controllerTypeCoo, final k=kCoo, final Ti=TiCoo, final Td=TdCoo, final yMax=1, final yMin=0, reverseActing=false) "Cooling loop signal"; protected Buildings.Controls.OBC.CDL.Integers.Equal isUnOcc "Output true if unoccupied"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conIntUn( final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.unoccupied) "Constant signal for unoccupied mode"; Buildings.Controls.OBC.CDL.Logical.Not isNotUn "Output true if not unoccupied"; equation connect(sysReq.TZonCooSet, TZonCooSet); connect(sysReq.TZon, TZon); connect(sysReq.VDisSet_flow, damVal.VDisSet_flow); connect(sysReq.VDis_flow, VDis_flow); connect(sysReq.TDisHeaSet, damVal.TDisHeaSet); connect(damVal.yDam, yDam); connect(damVal.yHeaVal, yVal); connect(damVal.VDis_flow, VDis_flow); connect(damVal.TDis, TDis); connect(sysReq.TDis, TDis); connect(damVal.yHeaVal, sysReq.uHeaVal); connect(TZon, damVal.TZon); connect(damVal.TSup, TSupAHU); connect(actAirSet.VActCooMax_flow, damVal.VActCooMax_flow); connect(actAirSet.VActCooMin_flow, damVal.VActCooMin_flow); connect(actAirSet.VActMin_flow, damVal.VActMin_flow); connect(actAirSet.VActHeaMin_flow, damVal.VActHeaMin_flow); connect(actAirSet.VActHeaMax_flow, damVal.VActHeaMax_flow); connect(damVal.THeaSet, TZonHeaSet); connect(actAirSet.VActCooMax_flow, damVal.VActCooMax_flow); connect(actAirSet.VActCooMin_flow, damVal.VActCooMin_flow); connect(actAirSet.VActMin_flow, damVal.VActMin_flow); connect(actAirSet.VActHeaMin_flow, damVal.VActHeaMin_flow); connect(actAirSet.VActHeaMax_flow, damVal.VActHeaMax_flow); connect(actAirSet.uOpeMod, uOpeMod); connect(sysReq.yZonTemResReq, yZonTemResReq); connect(sysReq.yZonPreResReq, yZonPreResReq); connect(actAirSet.ppmCO2, ppmCO2); connect(actAirSet.nOcc, nOcc); connect(actAirSet.uWin, uWin); connect(TZonHeaSet, conHeaLoo.u_s); connect(TZonCooSet, conCooLoo.u_s); connect(TZon, conHeaLoo.u_m); connect(TZon, conCooLoo.u_m); connect(conCooLoo.y, damVal.uCoo); connect(conHeaLoo.y, damVal.uHea); connect(conCooLoo.y, sysReq.uCoo); connect(damVal.uOpeMod, uOpeMod); connect(conIntUn.y, isUnOcc.u1); connect(uOpeMod, isUnOcc.u2); connect(isUnOcc.y, isNotUn.u); connect(isNotUn.y, conCooLoo.trigger); connect(isNotUn.y, conHeaLoo.trigger); connect(sysReq.yDam_actual,yDam_actual); connect(sysReq.yHeaValResReq, yHeaValResReq); connect(sysReq.yHeaPlaReq, yHeaPlaReq); end Controller;