Collection of validation models
Information
This package contains validation models for the classes in
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.
Note that most validation models contain simple input data
which may not be realistic, but for which the correct
output can be obtained through an analytic solution.
The examples plot various outputs, which have been verified against these
solutions. These model outputs are stored as reference data and
used for continuous validation whenever models in the library change.
Package Content
Name |
Description |
Enable_FreProSta
|
Model validates economizer disable for heating zone state and activated freeze protection |
Enable_TOut_hOut
|
Model validates economizer disable in case outdoor air conditions are above cutoff |
Limits_LoopDisable
|
Validation model for the multi zone VAV AHU minimum outdoor air control - damper position limits |
Limits_VOut_flow
|
Validation model for the multi zone VAV AHU minimum outdoor air control - damper position limits |
Modulation_TSup
|
Validation model for multi zone VAV AHU outdoor and return air damper position modulation sequence |
Model validates economizer disable for heating zone state and activated freeze protection
Information
This example validates
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Enable
for the following control signals: zone state, freeze protection stage.
Parameters
Type | Name | Default | Description |
Real | TOutCutoff | 297.15 | Outdoor temperature high limit cutoff [K] |
Real | hOutCutoff | 65100 | Outdoor air enthalpy high limit cutoff [J/kg] |
Modelica definition
model Enable_FreProSta
parameter Real TOutCutoff(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature")=297.15
;
parameter Real hOutCutoff(
final unit="J/kg",
final quantity="SpecificEnergy")=65100
;
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Enable
enaDis ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff(
final k=TOutCutoff - 2)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut(
final k=TOutCutoff) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff(
final k=hOutCutoff - 1000)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut(
final k=hOutCutoff) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMax(
final k=0.9) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin(
final k=0.1) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMax(
final k=1) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMax(
final k=0.8) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMin(
final k=0) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant supFanSta(k=true)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1(period=1800)
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger freProSta1(
integerTrue=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.FreezeProtectionStages.stage0,
integerFalse=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.FreezeProtectionStages.stage1)
;
equation
connect(TOutCut.y, enaDis.TOutCut);
connect(TOutBelowCutoff.y, enaDis.TOut);
connect(hOutBelowCutoff.y, enaDis.hOut);
connect(hOutCut.y, enaDis.hOutCut);
connect(outDamPosMin.y, enaDis.uOutDamPosMin);
connect(outDamPosMax.y, enaDis.uOutDamPosMax);
connect(retDamPosMin.y, enaDis.uRetDamPosMin);
connect(retDamPosMax.y, enaDis.uRetDamPosMax);
connect(retDamPhyPosMax.y, enaDis.uRetDamPhyPosMax);
connect(supFanSta.y, enaDis.uSupFan);
connect(booPul1.y, freProSta1.u);
connect(freProSta1.y, enaDis.uFreProSta);
end Enable_FreProSta;
Model validates economizer disable in case outdoor air conditions are above cutoff
Information
This example validates
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Enable
for the following control signals: TOut
, TOutCut
,
hOut
, hOutCut
.
Modelica definition
model Enable_TOut_hOut
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut(
final k=TOutCutoff) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut1(
final k=hOutCutoff) ;
Buildings.Controls.OBC.CDL.Logical.TriggeredTrapezoid TOut(
final rising=1000,
final falling=800,
final amplitude=4,
final offset=TOutCutoff - 2) ;
Buildings.Controls.OBC.CDL.Logical.TriggeredTrapezoid hOut(
final amplitude=4000,
final offset=hOutCutoff - 2200,
final rising=1000,
final falling=800) ;
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Enable
enaDis ;
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Enable
enaDis1 ;
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Enable
enaDis2(
final use_enthalpy=false)
;
protected
final parameter Real TOutCutoff(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature")=297.15
;
final parameter Real hOutCutoff(
final unit="J/kg",
final quantity="SpecificEnergy")=65100
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut(
final k=hOutCutoff) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut1(
final k=TOutCutoff) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff(
final k=hOutCutoff - 1000)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff(
final k=TOutCutoff - 2)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMax(
final k=0.9) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin(
final k=0.1) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMax(
final k=0.8) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMin(
final k=0) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMax(
final k=1) ;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta(
final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.FreezeProtectionStages.stage0)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant supFanSta(
final k=true) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul(
final shift=10,
final period=2000) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1(
final shift=10,
final period=2000) ;
equation
connect(TOutCut.y, enaDis.TOutCut);
connect(hOutCut.y, enaDis.hOutCut);
connect(freProSta.y, enaDis.uFreProSta);
connect(outDamPosMax.y, enaDis.uOutDamPosMax);
connect(outDamPosMin.y, enaDis.uOutDamPosMin);
connect(retDamPhyPosMax.y, enaDis.uRetDamPhyPosMax);
connect(retDamPosMax.y, enaDis.uRetDamPosMax);
connect(retDamPosMin.y, enaDis.uRetDamPosMin);
connect(TOutCut1.y, enaDis1.TOutCut);
connect(hOutCut1.y, enaDis1.hOutCut);
connect(hOutBelowCutoff.y, enaDis.hOut);
connect(TOutBelowCutoff.y, enaDis1.TOut);
connect(booPul.y, TOut.u);
connect(TOut.y, enaDis.TOut);
connect(booPul1.y, hOut.u);
connect(hOut.y, enaDis1.hOut);
connect(freProSta.y, enaDis1.uFreProSta);
connect(outDamPosMax.y, enaDis1.uOutDamPosMax);
connect(outDamPosMin.y, enaDis1.uOutDamPosMin);
connect(retDamPhyPosMax.y, enaDis1.uRetDamPhyPosMax);
connect(retDamPosMax.y, enaDis1.uRetDamPosMax);
connect(retDamPosMin.y, enaDis1.uRetDamPosMin);
connect(TOut.y, enaDis2.TOut);
connect(TOutCut.y, enaDis2.TOutCut);
connect(freProSta.y, enaDis2.uFreProSta);
connect(outDamPosMax.y, enaDis2.uOutDamPosMax);
connect(outDamPosMin.y, enaDis2.uOutDamPosMin);
connect(retDamPhyPosMax.y, enaDis2.uRetDamPhyPosMax);
connect(retDamPosMax.y, enaDis2.uRetDamPosMax);
connect(retDamPosMin.y, enaDis2.uRetDamPosMin);
connect(supFanSta.y, enaDis.uSupFan);
connect(supFanSta.y, enaDis1.uSupFan);
connect(supFanSta.y, enaDis2.uSupFan);
end Enable_TOut_hOut;
Validation model for the multi zone VAV AHU minimum outdoor air control - damper position limits
Information
This example validates enable/disable conditions for
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Limits
for the following input signals: uSupFan
, uFreProSta
, uOpeMod
.
Modelica definition
model Limits_LoopDisable
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow(
final k=VOutSet_flow)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet1_flow(
final k=VOutSet_flow)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet2_flow(
final k=VOutSet_flow)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant fanSta(
final k=false) ;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant opeMod1(
final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.warmUp)
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta2(
final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.FreezeProtectionStages.stage2)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow(
final duration=1800,
final offset=minVOutSet_flow,
final height=incVOutSet_flow)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut1_flow(
final duration=1800,
final offset=minVOutSet_flow,
final height=incVOutSet_flow)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut2_flow(
final duration=1800,
final offset=minVOutSet_flow,
final height=incVOutSet_flow)
;
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Limits
damLim
;
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Limits
damLim1
;
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Limits
damLim2
;
protected
final parameter Real VOutSet_flow(
final unit="m3/s",
final quantity="VolumeFlowRate")=0.71
;
final parameter Real minVOutSet_flow(
final unit="m3/s",
final quantity="VolumeFlowRate")=0.61
;
final parameter Real incVOutSet_flow(
final unit="m3/s",
final quantity="VolumeFlowRate")=0.2
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta(
final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.FreezeProtectionStages.stage1)
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant opeMod(
final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant fanStatus1(
final k=true) ;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta1(
final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.FreezeProtectionStages.stage1)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant fanStatus2(
final k=true) ;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant opeMod2(
final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied)
;
equation
connect(VOut_flow.y, damLim.VOut_flow_normalized);
connect(VOutMinSet_flow.y, damLim.VOutMinSet_flow_normalized);
connect(fanSta.y, damLim.uSupFan);
connect(freProSta.y, damLim.uFreProSta);
connect(VOut1_flow.y, damLim1.VOut_flow_normalized);
connect(VOutMinSet1_flow.y, damLim1.VOutMinSet_flow_normalized);
connect(fanStatus1.y, damLim1.uSupFan);
connect(freProSta1.y, damLim1.uFreProSta);
connect(VOut2_flow.y, damLim2.VOut_flow_normalized);
connect(VOutMinSet2_flow.y, damLim2.VOutMinSet_flow_normalized);
connect(fanStatus2.y, damLim2.uSupFan);
connect(freProSta2.y, damLim2.uFreProSta);
connect(opeMod.y, damLim.uOpeMod);
connect(opeMod1.y, damLim1.uOpeMod);
connect(opeMod2.y, damLim2.uOpeMod);
end Limits_LoopDisable;
Validation model for the multi zone VAV AHU minimum outdoor air control - damper position limits
Information
This example validates
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Limits
for the following control signals: VOut_flow
, VOutMinSet_flow
. The control loop is always enabled in this
example.
Modelica definition
model Limits_VOut_flow
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow(
k=minVOutSet_flow)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow(
duration=1800,
offset=VOutMin_flow,
height=incVOutSet_flow)
;
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Limits
damLim
;
protected
parameter Real minVOutSet_flow(
final unit="m3/s",
final quantity="VolumeFlowRate")=0.71
;
parameter Real VOutMin_flow(
final unit="m3/s",
final quantity="VolumeFlowRate")=0.61
;
parameter Real incVOutSet_flow(
final unit="m3/s",
final quantity="VolumeFlowRate")=(minVOutSet_flow-VOutMin_flow)*2
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant fanStatus(k=true) ;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta(
k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.FreezeProtectionStages.stage0)
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant operationMode(
k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied)
;
equation
connect(VOut_flow.y, damLim.VOut_flow_normalized);
connect(VOutMinSet_flow.y, damLim.VOutMinSet_flow_normalized);
connect(fanStatus.y, damLim.uSupFan);
connect(freProSta.y, damLim.uFreProSta);
connect(operationMode.y, damLim.uOpeMod);
end Limits_VOut_flow;
Validation model for multi zone VAV AHU outdoor and return air damper position modulation sequence
Information
This example validates
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Modulation
for a varying supply air temperature control loop signal.
The instance mod
is in normal operation, whereas
for the instance modFre
, the damper limits are
as if the mixed air temperature were below its freezing set point.
Modelica definition
model Modulation_TSup
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Modulation
mod ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uTSup(
final duration=900,
final height=2,
final offset=-1)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin(
final k=0.1) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMax(
final k=0.8)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMin(
final k=0.2)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMax(
final k=0.6)
;
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Modulation
modFre
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMaxFre(
final k=0)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMinFre(
final k=1)
;
equation
connect(retDamPosMax.y, mod.uRetDamPosMax);
connect(retDamPosMin.y, mod.uRetDamPosMin);
connect(outDamPosMax.y, mod.uOutDamPosMax);
connect(outDamPosMin.y, mod.uOutDamPosMin);
connect(uTSup.y, mod.uTSup);
connect(retDamPosMax.y, modFre.uRetDamPosMax);
connect(outDamPosMin.y, modFre.uOutDamPosMin);
connect(uTSup.y, modFre.uTSup);
connect(outDamPosMaxFre.y, modFre.uOutDamPosMax);
connect(retDamPosMinFre.y, modFre.uRetDamPosMin);
end Modulation_TSup;