Buildings.Templates.Plants.Controls.HeatPumps.Validation

Collection of validation models

Information

This package contains validation models.

Package Content

Name Description
Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWaterReversibleHeatRecovery AirToWaterReversibleHeatRecovery Validation model for AWHP plant controller
Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWaterReversiblePolyvalent AirToWaterReversiblePolyvalent Validation model for AWHP plant controller with reversible and polyvalent heat pumps

Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWaterReversibleHeatRecovery Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWaterReversibleHeatRecovery

Validation model for AWHP plant controller

Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWaterReversibleHeatRecovery

Information

This model validates Buildings.Templates.Plants.Controls.HeatPumps.AirToWater in a configuration with three equally sized lead/lag alternate heat pumps and a sidestream heat recovery chiller.

Simulating this model shows how the controller responds to a varying load by

Parameters

TypeNameDefaultDescription
Nominal condition
RealTHeaWatSup_nominal323.15Design HW supply temperature [K]
RealTHeaWatRet_nominal315.15Design HW return temperature [K]
RealVHeaWat_flow_nominalcapHea_nominal/abs(THeaWatSu...Design HW volume flow rate [m3/s]
RealTChiWatSup_nominal280.15Design CHW supply temperature [K]
RealTChiWatRet_nominal285.15Design CHW return temperature [K]
RealVChiWat_flow_nominalcapCoo_nominal/abs(TChiWatSu...Design CHW volume flow rate [m3/s]

Modelica definition

model AirToWaterReversibleHeatRecovery "Validation model for AWHP plant controller" final parameter Real capHea_nominal(final unit="W") = sum( cat(1, ctl.capHeaHp_nominal, ctl.capHeaPhp_nominal)) "Installed heating capacity"; parameter Real THeaWatSup_nominal(unit="K", displayUnit="degC") = 323.15 "Design HW supply temperature"; parameter Real THeaWatRet_nominal(unit="K", displayUnit="degC") = 315.15 "Design HW return temperature"; parameter Real VHeaWat_flow_nominal(unit="m3/s") = capHea_nominal / abs( THeaWatSup_nominal - THeaWatRet_nominal) / ctl.cp_default / ctl.rho_default "Design HW volume flow rate"; final parameter Real capCoo_nominal(final unit="W") = sum( cat(1, ctl.capCooHp_nominal, ctl.capCooPhp_nominal)) "Installed cooling capacity"; parameter Real TChiWatSup_nominal(unit="K", displayUnit="degC") = 280.15 "Design CHW supply temperature"; parameter Real TChiWatRet_nominal(unit="K", displayUnit="degC") = 285.15 "Design CHW return temperature"; parameter Real VChiWat_flow_nominal(unit="m3/s") = capCoo_nominal / abs( TChiWatSup_nominal - TChiWatRet_nominal) / ctl.cp_default / ctl.rho_default "Design CHW volume flow rate"; Buildings.Templates.Plants.Controls.HeatPumps.AirToWater ctl( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.ReversibleHeatRecovery, nHp_select=3, have_valHpInlIso=true, have_valHpOutIso=true, have_pumChiWatPriDedHp_select=true, have_pumPriHdr=false, is_priOnl=false, have_pumHeaWatPriVar_select=false, have_pumChiWatPriVar_select=false, have_senDpHeaWatRemWir=false, nSenDpHeaWatRem=1, have_senDpChiWatRemWir=false, nSenDpChiWatRem=1, final THeaWatSup_nominal=THeaWatSup_nominal, THeaWatSupSet_min=298.15, VHeaWatHp_flow_nominal=1.1 * ctl.capHeaHp_nominal / capHea_nominal * VHeaWat_flow_nominal, VHeaWatHp_flow_min=0.6 * ctl.VHeaWatHp_flow_nominal, final VHeaWatSec_flow_nominal=VHeaWat_flow_nominal, capHeaHp_nominal=fill(350E3, ctl.nHp), dpHeaWatRemSet_max={5E4}, final TChiWatSup_nominal=TChiWatSup_nominal, TChiWatSupSet_max=288.15, VChiWatHp_flow_nominal=1.1 * ctl.capCooHp_nominal / capCoo_nominal * VChiWat_flow_nominal, VChiWatHp_flow_min=0.6 * ctl.VChiWatHp_flow_nominal, final VChiWatSec_flow_nominal=VChiWat_flow_nominal, capCooHp_nominal=(1 - 1 / Buildings.Templates.Data.Defaults.COPHpAwHea) * ctl.capHeaHp_nominal, yPumHeaWatPriDedHpSet=0.8, yPumChiWatPriDedHpSet=0.7, dpChiWatRemSet_max={5E4}, staHp=[1 / 3, 1 / 3, 1 / 3; 2 / 3, 2 / 3, 2 / 3; 1, 1, 1], idxAltHp_select={1, 2, 3}, TChiWatSupHrc_min=277.15, THeaWatSupHrc_max=333.15, COPHeaHrc_nominal=2.8, capCooHrc_min=ctl.capHeaHrc_min * (1 - 1 / ctl.COPHeaHrc_nominal), capHeaHrc_min=0.3 * 0.5 * sum(ctl.capHeaHp_nominal)) "Plant controller"; Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ratV_flow( table=[ 0, 0, 0; 5, 0, 0; 6, 1, 0; 12, 0.2, 0.2; 15, 0, 1; 22, 0.1, 0.1; 24, 0, 0], timeScale=3600) "Source signal for volume flow rate ratio – Index 1 for HW, 2 for CHW"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTHeaWat( final k=(THeaWatRet_nominal - THeaWatSup_nominal) * (if ctl.have_hrc then 0.5 else 1)) "HW Delta-T"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTChiWat( final k=(TChiWatRet_nominal - TChiWatSup_nominal) * (if ctl.have_hrc then 0.5 else 1)) "CHW Delta-T"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter VHeaWat_flow( final k=VHeaWat_flow_nominal) "Scale by design flow"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter VChiWat_flow( final k=VChiWat_flow_nominal) "Scale by design flow"; Components.Controls.StatusEmulator y1Hp_actual[ctl.nHp] if ctl.have_hp "HP status"; Components.Controls.StatusEmulator y1PumHeaWatPriHdr_actual[ctl.nPumHeaWatPri] if ctl.have_pumHeaWatPri and ctl.have_pumPriHdr "Headered primary HW pump status"; Components.Controls.StatusEmulator y1PumChiWatPriHdr_actual[ctl.nPumChiWatPri] if ctl.have_pumChiWatPri and ctl.have_pumPriHdr "Headered primary CHW pump status"; Components.Controls.StatusEmulator y1PumHeaWatSec_actual[ctl.nPumHeaWatSec] if ctl.have_heaWat and ctl.have_pumHeaWatSec "Secondary HW pump status"; Components.Controls.StatusEmulator y1PumChiWatSec_actual[ctl.nPumChiWatSec] if ctl.have_chiWat and ctl.have_pumChiWatSec "Secondary CHW pump status"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin TOut( amplitude=10, freqHz=0.5 / 24 / 3600, phase=-0.43633231299858, offset=10 + 273.15) "OAT"; Buildings.Controls.OBC.CDL.Reals.GreaterThreshold isDemHea(t=1E-2, h=0.5E-2) "Return true if heating demand"; Buildings.Controls.OBC.CDL.Reals.GreaterThreshold isDemCoo(t=1E-2, h=0.5E-2) "Return true if cooling demand"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger reqPlaHeaWat "Generate HW plant request"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger reqPlaChiWat "Generate CHW plant request"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai[2](each k=5) "Use fraction of flow rate as a proxy for plant reset request"; Buildings.Controls.OBC.CDL.Conversions.RealToInteger reqResHeaWat "Generate HW reset request"; Buildings.Controls.OBC.CDL.Conversions.RealToInteger reqResChiWat "Generate CHW reset request"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin[1]( amplitude=0.1 * ctl.dpHeaWatRemSet_max, freqHz={4 / 8000}, each phase=3.1415926535898) if ctl.have_heaWat "Source signal used to generate measurement values"; Buildings.Controls.OBC.CDL.Reals.Add dpHeaWatRem[1] if ctl.have_heaWat "Differential pressure at remote location"; Buildings.Controls.OBC.CDL.Reals.Add dpChiWatRem[1] if ctl.have_chiWat "Differential pressure at remote location"; Pumps.Generic.ResetLocalDifferentialPressure resDpHeaWatLoc[1]( each dpLocSet_max=20E4) if ctl.have_heaWat "Local HW DP reset"; Pumps.Generic.ResetLocalDifferentialPressure resDpChiWatLoc[1]( each dpLocSet_max=15E4) if ctl.have_chiWat "Local CHW DP reset"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin1[1]( amplitude=0.1 * ctl.dpChiWatRemSet_max, freqHz={3 / 8000}, each phase=3.1415926535898) "Source signal used to generate measurement values"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter dpHeaWatLoc(final k=4) if ctl.have_heaWat "Differential pressure local to the plant"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter dpChiWatLoc(final k=3) if ctl.have_chiWat "Differential pressure local to the plant"; Components.Controls.StatusEmulator y1Hrc_actual if ctl.have_hrc "Sidestream HRC status"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTHeaWatUpsHrc( final k=THeaWatRet_nominal - THeaWatSup_nominal) "HW Delta-T as measured upstream of HRC"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTChiWatUpsHrc( final k=TChiWatRet_nominal - TChiWatSup_nominal) "CHW Delta-T as measured upstream of HRC"; Buildings.Controls.OBC.CDL.Reals.Add THeaWatRet if ctl.have_heaWat "HWRT"; Buildings.Controls.OBC.CDL.Reals.Add THeaWatRetUpsHrc if ctl.have_heaWat "HWRT upstream of HRC"; Buildings.Controls.OBC.CDL.Reals.Add TChiWatRet if ctl.have_chiWat "CHWRT"; Buildings.Controls.OBC.CDL.Reals.Add TChiWatRetUpsHrc if ctl.have_chiWat "CHWRT upstream of HRC"; Components.Controls.StatusEmulator y1PumChiWatPriDedHp_actual[ctl.nPumChiWatPriDedHp] if ctl.have_pumChiWatPriDedHp "HP dedicated primary CHW pump status"; Components.Controls.StatusEmulator y1PumChiWatPriPhp_actual[ctl.nPumChiWatPriDedPhp] if ctl.have_pumChiWatPri and not ctl.have_pumPriHdr and ctl.have_php "Polyvalent HP dedicated primary CHW pump status"; Components.Controls.StatusEmulator y1PumHeaWatPriDedHp_actual[ctl.nPumHeaWatPriDedHp] if ctl.have_pumHeaWatPri and not ctl.have_pumPriHdr and ctl.have_hp "HP dedicated primary HW pump status"; Components.Controls.StatusEmulator y1PumHeaWatPriDedPhp_actual[ctl.nPumHeaWatPriDedPhp] if ctl.have_pumHeaWatPri and not ctl.have_pumPriHdr and ctl.have_php "Polyvalent HP dedicated primary HW pump status"; equation connect(ratV_flow.y[1], VHeaWat_flow.u); connect(ratV_flow.y[2], VChiWat_flow.u); connect(ctl.y1Hp, y1Hp_actual.y1); connect(y1Hp_actual.y1_actual, ctl.u1Hp_actual); connect(ctl.y1PumHeaWatPriHdr, y1PumHeaWatPriHdr_actual.y1); connect(y1PumHeaWatPriHdr_actual.y1_actual, ctl.u1PumHeaWatPriHdr_actual); connect(ctl.y1PumHeaWatPriDedHp, y1PumHeaWatPriDedHp_actual.y1); connect(y1PumHeaWatPriDedHp_actual.y1_actual, ctl.u1PumHeaWatPriDedHp_actual); connect(ctl.y1PumHeaWatPriDedPhp, y1PumHeaWatPriDedPhp_actual.y1); connect(y1PumHeaWatPriDedPhp_actual.y1_actual, ctl.u1PumHeaWatPriDedPhp_actual); connect(ctl.y1PumHeaWatSec, y1PumHeaWatSec_actual.y1); connect(ctl.y1PumChiWatSec, y1PumChiWatSec_actual.y1); connect(y1PumHeaWatSec_actual.y1_actual, ctl.u1PumHeaWatSec_actual); connect(y1PumChiWatPriHdr_actual.y1_actual, ctl.u1PumChiWatPriHdr_actual); connect(y1PumChiWatPriDedHp_actual.y1_actual, ctl.u1PumChiWatPriDedHp_actual); connect(y1PumChiWatPriPhp_actual.y1_actual, ctl.u1PumChiWatPriDedPhp_actual); connect(y1PumChiWatSec_actual.y1_actual, ctl.u1PumChiWatSec_actual); connect(TOut.y, ctl.TOut); connect(ratV_flow.y[1], isDemHea.u); connect(ratV_flow.y[2], isDemCoo.u); connect(isDemCoo.y, reqPlaChiWat.u); connect(isDemHea.y, reqPlaHeaWat.u); connect(reqPlaHeaWat.y, ctl.nReqPlaHeaWat); connect(reqPlaChiWat.y, ctl.nReqPlaChiWat); connect(VHeaWat_flow.y, ctl.VHeaWatPri_flow); connect(VHeaWat_flow.y, ctl.VHeaWatLooOrSec_flow); connect(VChiWat_flow.y, ctl.VChiWatPri_flow); connect(VChiWat_flow.y, ctl.VChiWatLooOrSec_flow); connect(ratV_flow.y, gai.u); connect(gai[1].y, reqResHeaWat.u); connect(gai[2].y, reqResChiWat.u); connect(reqResHeaWat.y, ctl.nReqResHeaWat); connect(reqResChiWat.y, ctl.nReqResChiWat); connect(sin.y, dpHeaWatRem.u2); connect(dpChiWatRem.y, ctl.dpChiWatRem); connect(dpHeaWatRem.y, ctl.dpHeaWatRem); connect(ctl.dpHeaWatRemSet, dpHeaWatRem.u1); connect(ctl.dpChiWatRemSet, dpChiWatRem.u1); connect(sin1.y, dpChiWatRem.u2); connect(dpHeaWatRem[1].y, dpHeaWatLoc.u); connect(ctl.dpHeaWatRemSet, resDpHeaWatLoc.dpRemSet); connect(dpChiWatRem[1].y, dpChiWatLoc.u); connect(ctl.dpChiWatRemSet, resDpChiWatLoc.dpRemSet); connect(dpHeaWatRem.y, resDpHeaWatLoc.dpRem); connect(dpChiWatRem.y, resDpChiWatLoc.dpRem); connect(resDpChiWatLoc.dpLocSet, ctl.dpChiWatLocSet); connect(dpChiWatLoc.y, ctl.dpChiWatLoc); connect(dpHeaWatLoc.y, ctl.dpHeaWatLoc); connect(resDpHeaWatLoc.dpLocSet, ctl.dpHeaWatLocSet); connect(ctl.y1Hrc, y1Hrc_actual.y1); connect(y1Hrc_actual.y1_actual, ctl.u1Hrc_actual); connect(ctl.TChiWatSupSet, ctl.TChiWatSecSup); connect(ctl.TChiWatSupSet, ctl.TChiWatPriSup); connect(ctl.THeaWatSupSet, ctl.THeaWatPriSup); connect(ctl.THeaWatSupSet, ctl.THeaWatSecSup); connect(ctl.THeaWatSupSet, THeaWatRet.u1); connect(dTHeaWat.y, THeaWatRet.u2); connect(ctl.TChiWatSupSet, TChiWatRet.u2); connect(dTChiWat.y, TChiWatRet.u1); connect(dTChiWatUpsHrc.y, TChiWatRetUpsHrc.u1); connect(TChiWatRetUpsHrc.u2, ctl.TChiWatSupSet); connect(THeaWatRetUpsHrc.u2, ctl.THeaWatSupSet); connect(dTHeaWatUpsHrc.y, THeaWatRetUpsHrc.u1); connect(THeaWatRet.y, ctl.THeaWatPriRet); connect(THeaWatRet.y, ctl.THeaWatLooOrSecRet); connect(TChiWatRet.y, ctl.TChiWatLooOrSecRet); connect(TChiWatRet.y, ctl.TChiWatPriRet); connect(TChiWatRetUpsHrc.y, ctl.TChiWatRetUpsHrc); connect(THeaWatRetUpsHrc.y, ctl.THeaWatRetUpsHrc); connect(ctl.y1PumChiWatPriDedHp, y1PumChiWatPriDedHp_actual.y1); connect(ctl.y1PumChiWatPriHdr, y1PumChiWatPriHdr_actual.y1); connect(ctl.y1PumChiWatPriDedPhp, y1PumChiWatPriPhp_actual.y1); end AirToWaterReversibleHeatRecovery;

Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWaterReversiblePolyvalent Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWaterReversiblePolyvalent

Validation model for AWHP plant controller with reversible and polyvalent heat pumps

Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWaterReversiblePolyvalent

Information

This model validates Buildings.Templates.Plants.Controls.HeatPumps.AirToWater in a configuration with two reversible heat pumps and one polyvalent heat pump.

Simulating this model shows how the controller responds to a varying load by

Extends from Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWaterReversibleHeatRecovery (Validation model for AWHP plant controller).

Parameters

TypeNameDefaultDescription
Nominal condition
RealTHeaWatSup_nominal323.15Design HW supply temperature [K]
RealTHeaWatRet_nominal315.15Design HW return temperature [K]
RealVHeaWat_flow_nominalcapHea_nominal/abs(THeaWatSu...Design HW volume flow rate [m3/s]
RealTChiWatSup_nominal280.15Design CHW supply temperature [K]
RealTChiWatRet_nominal285.15Design CHW return temperature [K]
RealVChiWat_flow_nominalcapCoo_nominal/abs(TChiWatSu...Design CHW volume flow rate [m3/s]

Modelica definition

model AirToWaterReversiblePolyvalent "Validation model for AWHP plant controller with reversible and polyvalent heat pumps" extends Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWaterReversibleHeatRecovery( ctl( typ=Buildings.Templates.Plants.Controls.Types.PlantHeatPump.ReversiblePolyvalent, is_priOnl=false, have_valPhpInlIso=false, have_valPhpOutIso=false, have_pumChiWatPriDedHp_select=false, have_pumPriHdr=false, nHp_select=2, nPhp_select=1, nPumHeaWatSec_select=2, nPumChiWatSec_select=2, capHeaPhp_nominal=fill(300E3, ctl.nPhp), capHeaShcPhp_nominal=Buildings.Templates.Data.Defaults.COPHpWwHea / Buildings.Templates.Data.Defaults.COPHpAwHea * ctl.capHeaPhp_nominal, TOutChiWatLck=273.15, capCooPhp_nominal=(1 - 1 / Buildings.Templates.Data.Defaults.COPHpAwHea) * ctl.capHeaPhp_nominal, capCooShcPhp_nominal=(1 - 1 / Buildings.Templates.Data.Defaults.COPHpWwHea) * ctl.capHeaShcPhp_nominal, VChiWatPhp_flow_min=0.6 * ctl.VChiWatPhp_flow_nominal, VChiWatPhp_flow_nominal=1.1 * ctl.capCooPhp_nominal / capCoo_nominal * VChiWat_flow_nominal, VHeaWatPhp_flow_min=0.6 * ctl.VHeaWatPhp_flow_nominal, VHeaWatPhp_flow_nominal=1.1 * ctl.capHeaPhp_nominal / capHea_nominal * VHeaWat_flow_nominal, yPumHeaWatPriDedPhpSet=0.8, yPumChiWatPriDedPhpSet=0.7), ratV_flow( table=[ 0, 0, 0; 5, 0, 0; 6, 1, 1; 12, 0.2, 0.2; 15, 0, 1; 22, 0.1, 0.1; 24, 0, 0]) ); Components.Controls.StatusEmulator y1Php_actual[ctl.nPhp] "Polyvalent HP status"; Buildings.Controls.OBC.CDL.Logical.Or y1HeaOrCooPhp[ctl.nPhp] "Polyvalent HP enabled in either mode"; equation connect(ctl.y1HeaPhp, y1HeaOrCooPhp.u1); connect(ctl.y1CooPhp, y1HeaOrCooPhp.u2); connect(y1HeaOrCooPhp.y, y1Php_actual.y1); connect(y1Php_actual.y1_actual, ctl.u1Php_actual); end AirToWaterReversiblePolyvalent;