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.AirToWater AirToWater  

Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWater Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWater


Buildings.Templates.Plants.Controls.HeatPumps.Validation.AirToWater

Information

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

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_nominalcapHea_nominal/abs(TChiWatSu...Design CHW volume flow rate [m3/s]

Modelica definition

model AirToWater final parameter Real capHea_nominal( final unit="W")=sum(ctl.capHeaHp_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(ctl.capCooHp_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")=capHea_nominal/abs( TChiWatSup_nominal - TChiWatRet_nominal)/ctl.cp_default/ctl.rho_default "Design CHW volume flow rate"; Buildings.Templates.Plants.Controls.HeatPumps.AirToWater ctl( have_heaWat=true, have_chiWat=true, have_valHpInlIso=true, have_valHpOutIso=true, have_pumChiWatPriDed_select=true, have_pumHeaWatSec_select=true, have_pumPriHdr=false, have_pumChiWatSec_select=true, have_senVHeaWatPri_select=false, have_senVChiWatPri_select=false, have_senTHeaWatPriRet_select=false, have_senTChiWatPriRet_select=false, have_senTHeaWatSecRet=true, have_senTChiWatSecRet=false, nHp=3, have_senDpHeaWatRemWir=false, nSenDpHeaWatRem=1, have_senDpChiWatRemWir=false, nSenDpChiWatRem=1, final THeaWatSup_nominal=THeaWatSup_nominal, THeaWatSupSet_min=298.15, final VHeaWatSec_flow_nominal=VHeaWat_flow_nominal, capHeaHp_nominal=fill(350, ctl.nHp), dpHeaWatRemSet_max={5E4}, final TChiWatSup_nominal=TChiWatSup_nominal, TChiWatSupSet_max=288.15, final VChiWatSec_flow_nominal=VChiWat_flow_nominal, capCooHp_nominal=fill(350, ctl.nHp), yPumHeaWatPriSet=0.8, yPumChiWatPriSet=0.7, dpChiWatRemSet_max={5E4}, staEqu=[1/3,1/3,1/3; 2/3,2/3,2/3; 1,1,1], idxEquAlt={1,2,3}) "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 THeaWatRet( final k=THeaWatRet_nominal) "HWRT"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatRet( final k=TChiWatRet_nominal) "CHWRT"; 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] "HP status"; Components.Controls.StatusEmulator y1PumHeaWatPri_actual1[ctl.nPumHeaWatPri] if ctl.have_heaWat and ctl.have_pumHeaWatPri "Primary HW pump status"; Components.Controls.StatusEmulator y1PumChiWatPri_actual[ctl.nPumChiWatPri] if ctl.have_chiWat and ctl.have_pumChiWatPri "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"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSup(final k= THeaWatSup_nominal) "HWST"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSup(final k= TChiWatSup_nominal) "CHWST"; 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.y1PumHeaWatPri, y1PumHeaWatPri_actual1.y1); connect(ctl.y1PumChiWatPri, y1PumChiWatPri_actual.y1); connect(ctl.y1PumHeaWatSec, y1PumHeaWatSec_actual.y1); connect(ctl.y1PumChiWatSec, y1PumChiWatSec_actual.y1); connect(y1PumHeaWatPri_actual1.y1_actual, ctl.u1PumHeaWatPri_actual); connect(y1PumHeaWatSec_actual.y1_actual, ctl.u1PumHeaWatSec_actual); connect(y1PumChiWatPri_actual.y1_actual, ctl.u1PumChiWatPri_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(THeaWatRet.y, ctl.THeaWatSecRet); connect(THeaWatRet.y, ctl.THeaWatPriRet); connect(TChiWatRet.y, ctl.TChiWatSecRet); connect(TChiWatRet.y, ctl.TChiWatPriRet); connect(VHeaWat_flow.y, ctl.VHeaWatPri_flow); connect(VHeaWat_flow.y, ctl.VHeaWatSec_flow); connect(VChiWat_flow.y, ctl.VChiWatPri_flow); connect(VChiWat_flow.y, ctl.VChiWatSec_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(TChiWatSup.y, ctl.TChiWatPriSup); connect(THeaWatSup.y, ctl.THeaWatPriSup); connect(TChiWatSup.y, ctl.TChiWatSecSup); connect(THeaWatSup.y, ctl.THeaWatSecSup); end AirToWater;