From 6c834e4a8989814526f7971f3457a74a06371106 Mon Sep 17 00:00:00 2001 From: AntoineGautier Date: Thu, 8 Oct 2026 18:03:22 +0200 Subject: [PATCH 1/3] Add golden tests for the sequence document --- client/src/components/modal/DownloadModal.tsx | 33 +- .../src/components/steps/Configs/SlideOut.tsx | 17 +- client/src/interpreter/config-values.ts | 27 + client/src/utils/sequence-payload.ts | 43 + client/tests/sequence/golden-payload.test.ts | 258 ++++++ .../scripts/sequence-doc/dev-requirements.txt | 2 +- server/scripts/sequence-doc/pytest.toml | 2 +- ...ngOnly--ctl.have_CO2Sen=false.expected.txt | 485 +++++++++++ ...ngOnly--ctl.have_CO2Sen=false.payload.json | 140 ++++ ...ingOnly--ctl.have_CO2Sen=true.expected.txt | 549 +++++++++++++ ...ingOnly--ctl.have_CO2Sen=true.payload.json | 140 ++++ ...ngOnly--ctl.have_occSen=false.expected.txt | 485 +++++++++++ ...ngOnly--ctl.have_occSen=false.payload.json | 140 ++++ ...ingOnly--ctl.have_occSen=true.expected.txt | 503 ++++++++++++ ...ingOnly--ctl.have_occSen=true.payload.json | 140 ++++ ...ngOnly--ctl.have_winSen=false.expected.txt | 485 +++++++++++ ...ngOnly--ctl.have_winSen=false.payload.json | 140 ++++ ...ingOnly--ctl.have_winSen=true.expected.txt | 490 ++++++++++++ ...ingOnly--ctl.have_winSen=true.payload.json | 140 ++++ .../VAVBoxCoolingOnly--default.expected.txt | 485 +++++++++++ .../VAVBoxCoolingOnly--default.payload.json | 140 ++++ ...eheat--coiHea=ElectricHeating.expected.txt | 501 ++++++++++++ ...eheat--coiHea=ElectricHeating.payload.json | 170 ++++ ...eat--coiHea=WaterBasedHeating.expected.txt | 511 ++++++++++++ ...eat--coiHea=WaterBasedHeating.payload.json | 173 ++++ ...Reheat--ctl.have_CO2Sen=false.expected.txt | 511 ++++++++++++ ...Reheat--ctl.have_CO2Sen=false.payload.json | 173 ++++ ...xReheat--ctl.have_CO2Sen=true.expected.txt | 575 +++++++++++++ ...xReheat--ctl.have_CO2Sen=true.payload.json | 173 ++++ ...Reheat--ctl.have_occSen=false.expected.txt | 511 ++++++++++++ ...Reheat--ctl.have_occSen=false.payload.json | 173 ++++ ...xReheat--ctl.have_occSen=true.expected.txt | 529 ++++++++++++ ...xReheat--ctl.have_occSen=true.payload.json | 173 ++++ ...Reheat--ctl.have_winSen=false.expected.txt | 511 ++++++++++++ ...Reheat--ctl.have_winSen=false.payload.json | 173 ++++ ...xReheat--ctl.have_winSen=true.expected.txt | 516 ++++++++++++ ...xReheat--ctl.have_winSen=true.payload.json | 173 ++++ .../golden/VAVBoxReheat--default.expected.txt | 511 ++++++++++++ .../golden/VAVBoxReheat--default.payload.json | 173 ++++ .../VAVMultiZone--coiCoo=None.expected.txt | 470 +++++++++++ .../VAVMultiZone--coiCoo=None.payload.json | 503 ++++++++++++ ...one--coiCoo=WaterBasedCooling.expected.txt | 482 +++++++++++ ...one--coiCoo=WaterBasedCooling.payload.json | 503 ++++++++++++ ...ne--coiHeaPre=ElectricHeating.expected.txt | 472 +++++++++++ ...ne--coiHeaPre=ElectricHeating.payload.json | 500 ++++++++++++ .../VAVMultiZone--coiHeaPre=None.expected.txt | 472 +++++++++++ .../VAVMultiZone--coiHeaPre=None.payload.json | 500 ++++++++++++ ...--coiHeaPre=WaterBasedHeating.expected.txt | 482 +++++++++++ ...--coiHeaPre=WaterBasedHeating.payload.json | 503 ++++++++++++ ...tiZone--ctl.have_frePro=false.expected.txt | 467 +++++++++++ ...tiZone--ctl.have_frePro=false.payload.json | 503 ++++++++++++ ...ltiZone--ctl.have_frePro=true.expected.txt | 482 +++++++++++ ...ltiZone--ctl.have_frePro=true.payload.json | 503 ++++++++++++ ...--ctl.have_perZonRehBox=false.expected.txt | 482 +++++++++++ ...--ctl.have_perZonRehBox=false.payload.json | 503 ++++++++++++ ...e--ctl.have_perZonRehBox=true.expected.txt | 482 +++++++++++ ...e--ctl.have_perZonRehBox=true.payload.json | 503 ++++++++++++ ...typCtlEco=DifferentialDryBulb.expected.txt | 481 +++++++++++ ...typCtlEco=DifferentialDryBulb.payload.json | 503 ++++++++++++ ...ntialEnthalpyWithFixedDryBulb.expected.txt | 482 +++++++++++ ...ntialEnthalpyWithFixedDryBulb.payload.json | 503 ++++++++++++ ...e--ctl.typCtlEco=FixedDryBulb.expected.txt | 482 +++++++++++ ...e--ctl.typCtlEco=FixedDryBulb.payload.json | 503 ++++++++++++ ...ryBulbWithDifferentialDryBulb.expected.txt | 482 +++++++++++ ...ryBulbWithDifferentialDryBulb.payload.json | 503 ++++++++++++ ...FixedEnthalpyWithFixedDryBulb.expected.txt | 482 +++++++++++ ...FixedEnthalpyWithFixedDryBulb.payload.json | 503 ++++++++++++ ....typCtlFanRet=AirflowMeasured.expected.txt | 482 +++++++++++ ....typCtlFanRet=AirflowMeasured.payload.json | 503 ++++++++++++ ...typCtlFanRet=BuildingPressure.expected.txt | 489 +++++++++++ ...typCtlFanRet=BuildingPressure.payload.json | 503 ++++++++++++ ...tl.typFreSta=Hardwired_to_BAS.expected.txt | 479 +++++++++++ ...tl.typFreSta=Hardwired_to_BAS.payload.json | 503 ++++++++++++ ...FreSta=Hardwired_to_equipment.expected.txt | 478 +++++++++++ ...FreSta=Hardwired_to_equipment.payload.json | 503 ++++++++++++ ...-ctl.typFreSta=No_freeze_stat.expected.txt | 482 +++++++++++ ...-ctl.typFreSta=No_freeze_stat.payload.json | 503 ++++++++++++ .../golden/VAVMultiZone--default.expected.txt | 482 +++++++++++ .../golden/VAVMultiZone--default.payload.json | 503 ++++++++++++ ...Zone--fanSupDra=ArrayVariable.expected.txt | 482 +++++++++++ ...Zone--fanSupDra=ArrayVariable.payload.json | 491 ++++++++++++ .../VAVMultiZone--fanSupDra=None.expected.txt | 482 +++++++++++ .../VAVMultiZone--fanSupDra=None.payload.json | 518 ++++++++++++ ...one--fanSupDra=SingleVariable.expected.txt | 482 +++++++++++ ...one--fanSupDra=SingleVariable.payload.json | 503 ++++++++++++ ...ecOut=DedicatedDampersAirflow.expected.txt | 496 ++++++++++++ ...ecOut=DedicatedDampersAirflow.payload.json | 503 ++++++++++++ ...cOut=DedicatedDampersPressure.expected.txt | 501 ++++++++++++ ...cOut=DedicatedDampersPressure.payload.json | 503 ++++++++++++ ...secOutRel.secOut=SingleDamper.expected.txt | 482 +++++++++++ ...secOutRel.secOut=SingleDamper.payload.json | 503 ++++++++++++ ...l.secRel.fanRet=ArrayVariable.expected.txt | 482 +++++++++++ ...l.secRel.fanRet=ArrayVariable.payload.json | 485 +++++++++++ ....secRel.fanRet=SingleVariable.expected.txt | 482 +++++++++++ ....secRel.fanRet=SingleVariable.payload.json | 503 ++++++++++++ ...secOutRel.secRel=ReliefDamper.expected.txt | 478 +++++++++++ ...secOutRel.secRel=ReliefDamper.payload.json | 488 +++++++++++ ...e--secOutRel.secRel=ReliefFan.expected.txt | 494 ++++++++++++ ...e--secOutRel.secRel=ReliefFan.payload.json | 503 ++++++++++++ ...e--secOutRel.secRel=ReturnFan.expected.txt | 482 +++++++++++ ...e--secOutRel.secRel=ReturnFan.payload.json | 503 ++++++++++++ .../golden/mixed--ahu-co-rh.expected.txt | 756 ++++++++++++++++++ .../golden/mixed--ahu-co-rh.payload.json | 663 +++++++++++++++ .../golden/mixed--co-rh-contrast.expected.txt | 647 +++++++++++++++ .../golden/mixed--co-rh-contrast.payload.json | 192 +++++ .../golden/mixed--co-rh-default.expected.txt | 566 +++++++++++++ .../golden/mixed--co-rh-default.payload.json | 189 +++++ .../static/golden/mixed--rh-rh.expected.txt | 577 +++++++++++++ .../static/golden/mixed--rh-rh.payload.json | 185 +++++ .../golden/project--title24-si.expected.txt | 463 +++++++++++ .../golden/project--title24-si.payload.json | 503 ++++++++++++ .../scripts/sequence-doc/tests/test_golden.py | 66 ++ 112 files changed, 46330 insertions(+), 43 deletions(-) create mode 100644 client/src/interpreter/config-values.ts create mode 100644 client/src/utils/sequence-payload.ts create mode 100644 client/tests/sequence/golden-payload.test.ts create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_CO2Sen=false.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_CO2Sen=false.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_CO2Sen=true.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_CO2Sen=true.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_occSen=false.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_occSen=false.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_occSen=true.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_occSen=true.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_winSen=false.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_winSen=false.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_winSen=true.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_winSen=true.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--default.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--default.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--coiHea=ElectricHeating.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--coiHea=ElectricHeating.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--coiHea=WaterBasedHeating.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--coiHea=WaterBasedHeating.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--ctl.have_CO2Sen=false.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--ctl.have_CO2Sen=false.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--ctl.have_CO2Sen=true.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--ctl.have_CO2Sen=true.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--ctl.have_occSen=false.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--ctl.have_occSen=false.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--ctl.have_occSen=true.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--ctl.have_occSen=true.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--ctl.have_winSen=false.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--ctl.have_winSen=false.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--ctl.have_winSen=true.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--ctl.have_winSen=true.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--default.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVBoxReheat--default.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=None.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=None.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=WaterBasedCooling.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=WaterBasedCooling.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=ElectricHeating.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=ElectricHeating.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=None.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=None.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=WaterBasedHeating.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=WaterBasedHeating.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=false.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=false.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=true.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=true.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=false.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=false.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=true.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=true.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=DifferentialDryBulb.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=DifferentialDryBulb.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=DifferentialEnthalpyWithFixedDryBulb.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=DifferentialEnthalpyWithFixedDryBulb.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulb.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulb.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulbWithDifferentialDryBulb.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulbWithDifferentialDryBulb.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedEnthalpyWithFixedDryBulb.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedEnthalpyWithFixedDryBulb.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=AirflowMeasured.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=AirflowMeasured.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=BuildingPressure.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=BuildingPressure.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_BAS.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_BAS.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_equipment.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_equipment.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=No_freeze_stat.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=No_freeze_stat.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--default.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--default.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=ArrayVariable.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=ArrayVariable.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=None.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=None.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=SingleVariable.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=SingleVariable.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersAirflow.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersAirflow.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersPressure.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersPressure.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=SingleDamper.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=SingleDamper.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=ArrayVariable.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=ArrayVariable.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=SingleVariable.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=SingleVariable.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefDamper.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefDamper.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefFan.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefFan.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReturnFan.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReturnFan.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/mixed--ahu-co-rh.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/mixed--ahu-co-rh.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/mixed--co-rh-contrast.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/mixed--co-rh-contrast.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/mixed--co-rh-default.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/mixed--co-rh-default.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/mixed--rh-rh.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/mixed--rh-rh.payload.json create mode 100644 server/scripts/sequence-doc/tests/static/golden/project--title24-si.expected.txt create mode 100644 server/scripts/sequence-doc/tests/static/golden/project--title24-si.payload.json create mode 100644 server/scripts/sequence-doc/tests/test_golden.py diff --git a/client/src/components/modal/DownloadModal.tsx b/client/src/components/modal/DownloadModal.tsx index 5c01e68e..6ccbd1b7 100644 --- a/client/src/components/modal/DownloadModal.tsx +++ b/client/src/components/modal/DownloadModal.tsx @@ -3,7 +3,7 @@ import { useState, ChangeEvent } from "react"; import itl from "../../translations"; import { useStores } from "../../data"; import { ConfigInterface } from "../../data/config"; -import { ProjectDetailInterface } from "../../data/project"; +import { buildSequencePayload } from "../../utils/sequence-payload"; import Spinner from '../Spinner'; @@ -47,35 +47,6 @@ function DownloadModal({ isOpen, close }: ModalInterface) { setChecked([]); } - function getSequenceData() { - const seqData: {[key: string]: any} = {}; - - projectConfigs.forEach((config) => { - const configData = { - ...config.evaluatedValues, - ...config.selections, - [config.systemPath]: config.templatePath, - }; - const configKeys = Object.keys(configData); - - configKeys.forEach((key) => { - if (seqData[key] !== undefined) { - const initalValue = seqData[key]; - if (seqData[key].indexOf(configData[key]) === -1) { - seqData[key].push(configData[key]); - } - } else { - const [modelicaPath, instancePath] = key.split("-"); - if (modelicaPath !== configData[key]) { - seqData[key] = [configData[key]]; - } - } - }); - }); - - return seqData; - } - async function downloadFiles() { setLoading(true); // if (checked.includes(CONTROL_SEQUENCE)) { @@ -97,7 +68,7 @@ function DownloadModal({ isOpen, close }: ModalInterface) { const response = await fetch(`${import.meta.env.VITE_API}/sequence`, { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({...getSequenceData(), DEL_INFO_BOX: [false]}), + body: JSON.stringify(buildSequencePayload(projectConfigs, false)), }); // TODO: Handle error responses which do not contain an actual file diff --git a/client/src/components/steps/Configs/SlideOut.tsx b/client/src/components/steps/Configs/SlideOut.tsx index 88599868..33fcb6fd 100644 --- a/client/src/components/steps/Configs/SlideOut.tsx +++ b/client/src/components/steps/Configs/SlideOut.tsx @@ -7,8 +7,8 @@ import Modal from "../../modal/Modal"; import OptionSelect from "./OptionSelect"; import { mapToDisplayOptions as mapConfigContextToDisplayOptions } from "../../../interpreter/display-option"; import { ConfigContext } from "../../../interpreter/interpreter"; +import { getConfigValuesToSave } from "../../../interpreter/config-values"; import { ConfigValues } from "../../../utils/modifier-helpers"; -import { removeEmpty } from "../../../utils/utils"; import "../../../styles/components/config-slide-out.scss"; @@ -107,15 +107,12 @@ const SlideOut = ({ event.preventDefault(); event.stopPropagation(); - const validSelections: ConfigValues = {}; - Object.entries(selectedValues).map(([key, value]) => { - if (context.isValidSelection(key)) { - validSelections[key] = value; - } - }); - const evaluatedValues = context.getEvaluatedValues(); - configStore.setSelections(config.id, validSelections); - configStore.setEvaluatedValues(config.id, removeEmpty(evaluatedValues)); + const { selections, evaluatedValues } = getConfigValuesToSave( + context, + selectedValues, + ); + configStore.setSelections(config.id, selections); + configStore.setEvaluatedValues(config.id, evaluatedValues); close(); } diff --git a/client/src/interpreter/config-values.ts b/client/src/interpreter/config-values.ts new file mode 100644 index 00000000..8c9a3474 --- /dev/null +++ b/client/src/interpreter/config-values.ts @@ -0,0 +1,27 @@ +import { ConfigContext } from "./interpreter"; +import { ConfigValues } from "../utils/modifier-helpers"; +import { removeEmpty } from "../utils/utils"; + +/** + * Computes the values stored in a configuration when it is saved: + * the selections of displayed options, and the values evaluated by the context. + * + * Values are lazily evaluated: the context must have been mapped to display + * options (mapToDisplayOptions) beforehand, as done when the configuration + * panel is rendered. + */ +export function getConfigValuesToSave( + context: ConfigContext, + selectedValues: ConfigValues, +): { selections: ConfigValues; evaluatedValues: ConfigValues } { + const selections: ConfigValues = {}; + Object.entries(selectedValues).map(([key, value]) => { + if (context.isValidSelection(key)) { + selections[key] = value; + } + }); + const evaluatedValues = removeEmpty( + context.getEvaluatedValues(), + ) as ConfigValues; + return { selections, evaluatedValues }; +} diff --git a/client/src/utils/sequence-payload.ts b/client/src/utils/sequence-payload.ts new file mode 100644 index 00000000..2441d48d --- /dev/null +++ b/client/src/utils/sequence-payload.ts @@ -0,0 +1,43 @@ +import { ConfigInterface } from "../data/config"; + +/** + * Merges the values of all configurations into a single object mapping + * each selection path to the array of distinct values it takes + */ +export function getSequenceData(projectConfigs: ConfigInterface[]) { + const seqData: { [key: string]: any } = {}; + + projectConfigs.forEach((config) => { + const configData = { + ...config.evaluatedValues, + ...config.selections, + [config.systemPath]: config.templatePath, + }; + const configKeys = Object.keys(configData); + + configKeys.forEach((key) => { + if (seqData[key] !== undefined) { + if (seqData[key].indexOf(configData[key]) === -1) { + seqData[key].push(configData[key]); + } + } else { + const [modelicaPath] = key.split("-"); + if (modelicaPath !== configData[key]) { + seqData[key] = [configData[key]]; + } + } + }); + }); + + return seqData; +} + +/** + * Builds the payload sent to the sequence document endpoint + */ +export function buildSequencePayload( + projectConfigs: ConfigInterface[], + deleteInfoBox: boolean, +) { + return { ...getSequenceData(projectConfigs), DEL_INFO_BOX: [deleteInfoBox] }; +} diff --git a/client/tests/sequence/golden-payload.test.ts b/client/tests/sequence/golden-payload.test.ts new file mode 100644 index 00000000..7093af43 --- /dev/null +++ b/client/tests/sequence/golden-payload.test.ts @@ -0,0 +1,258 @@ +/** + * Golden payloads for the sequence document. + * + * Builds the payload sent to the sequence document endpoint for a set of + * projects, through the same code path as the UI: options are selected in the + * configuration panel (display mapping), the configuration is saved + * (getConfigValuesToSave) and the payload is built (buildSequencePayload). + * + * Cases are defined by instance paths and values, not by selection keys, so + * that they remain valid when the key format changes. + * + * The payloads are written to server/scripts/sequence-doc/tests/static/golden, + * where test_golden.py checks the text of the generated documents. + * - `UPDATE_GOLDEN=1 npx jest tests/sequence` rewrites the payloads. + * - Otherwise, the payloads are compared to the stored ones. + * A change of the payload format changes the payloads but must not change + * the expected document text. + */ +import * as fs from "fs"; +import * as path from "path"; +import RootStore from "../../src/data"; +import { ConfigInterface } from "../../src/data/config"; +import { TemplateInterface } from "../../src/data/template"; +import { ConfigContext } from "../../src/interpreter/interpreter"; +import { + mapToDisplayOptions, + FlatConfigOption, +} from "../../src/interpreter/display-option"; +import { getConfigValuesToSave } from "../../src/interpreter/config-values"; +import { buildSequencePayload } from "../../src/utils/sequence-payload"; +import { ConfigValues } from "../../src/utils/modifier-helpers"; + +const GOLDEN_DIR = path.resolve( + __dirname, + "../../../server/scripts/sequence-doc/tests/static/golden", +); +const UPDATE = process.env.UPDATE_GOLDEN === "1"; + +const store = new RootStore(); +const allOptions = store.templateStore.getAllOptions(); +const allTemplates = store.templateStore.getAllTemplates(); + +const AHU = "Buildings.Templates.AirHandlersFans.VAVMultiZone"; +const CO = "Buildings.Templates.ZoneEquipment.VAVBoxCoolingOnly"; +const RH = "Buildings.Templates.ZoneEquipment.VAVBoxReheat"; +const COILS = "Buildings.Templates.Components.Coils"; + +type Values = { [instancePath: string]: string | boolean }; +type ConfigCase = { template: string; values?: Values }; +type ProjectCase = { name: string; project: Values; configs: ConfigCase[] }; + +// Project settings, keyed as saved by EditDetailsModal +const ASHRAE_IP: Values = { + "Buildings.Templates.Data.AllSystems.stdEne": + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1", + "Buildings.Templates.Data.AllSystems.stdVen": + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1", + "Buildings.Templates.Data.AllSystems.ashCliZon": + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A", + "Buildings.Templates.Data.AllSystems.sysUni": + "Buildings.Templates.Types.Units.IP", +}; +const TITLE24_SI: Values = { + "Buildings.Templates.Data.AllSystems.stdEne": + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24", + "Buildings.Templates.Data.AllSystems.stdVen": + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24", + "Buildings.Templates.Data.AllSystems.tit24CliZon": + "Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_3", + "Buildings.Templates.Data.AllSystems.sysUni": + "Buildings.Templates.Types.Units.SI", +}; + +const flatten = (items: any[], out: FlatConfigOption[] = []) => { + items.forEach((i) => + "groupName" in i ? flatten(i.items, out) : out.push(i), + ); + return out; +}; + +const createContext = (template: TemplateInterface, selected: ConfigValues) => + new ConfigContext( + template, + { selections: selected } as any, + allOptions, + selected, + ); + +const displayedOptions = ( + template: TemplateInterface, + selected: ConfigValues, +) => flatten(mapToDisplayOptions(createContext(template, selected))); + +/** + * Configures a template as a user would in the configuration panel: each value + * is selected in turn in the displayed option with the given instance path + */ +function configure(configCase: ConfigCase, project: Values): ConfigInterface { + const template = allTemplates[configCase.template]; + let selected: ConfigValues = { ...project }; + Object.entries(configCase.values ?? {}).forEach(([instancePath, value]) => { + const option = displayedOptions(template, selected).find( + (o) => o.scope === instancePath, + ); + if (!option) { + throw new Error( + `${instancePath} is not displayed in ${template.modelicaPath}`, + ); + } + // Selection key as written by SlideOut.updateSelectedConfigOption + selected = { + ...selected, + [`${option.modelicaPath}-${option.scope}`]: value, + }; + }); + const context = createContext(template, selected); + mapToDisplayOptions(context); // configuration panel rendered before saving + const { selections, evaluatedValues } = getConfigValuesToSave( + context, + selected, + ); + return { + id: "", + isLocked: false, + systemPath: template.systemTypes[0], + templatePath: template.modelicaPath, + selections, + evaluatedValues, + }; +} + +const shortName = (value: string | boolean) => + typeof value === "boolean" ? `${value}` : value.split(".").pop(); + +/** + * One single-configuration project per template with default values, and one + * per choice of each option displayed by default + */ +function singleChoiceCases(): ProjectCase[] { + const cases: ProjectCase[] = []; + [AHU, CO, RH].forEach((templatePath) => { + const template = allTemplates[templatePath]; + const prefix = templatePath.split(".").pop(); + cases.push({ + name: `${prefix}--default`, + project: ASHRAE_IP, + configs: [{ template: templatePath }], + }); + displayedOptions(template, { ...ASHRAE_IP }).forEach((o) => { + const choices: (string | boolean)[] = o.booleanChoices + ? [true, false] + : (o.choices ?? []).map((c) => c.modelicaPath); + choices.forEach((value) => { + cases.push({ + name: `${prefix}--${o.scope}=${shortName(value)}`, + project: ASHRAE_IP, + configs: [{ template: templatePath, values: { [o.scope]: value } }], + }); + }); + }); + }); + return cases; +} + +const MIXED_CASES: ProjectCase[] = [ + { + name: "mixed--co-rh-default", + project: ASHRAE_IP, + configs: [{ template: CO }, { template: RH }], + }, + { + // Same parameters configured differently in two templates (#620) + name: "mixed--co-rh-contrast", + project: ASHRAE_IP, + configs: [ + { + template: CO, + values: { "ctl.have_occSen": true, "ctl.have_winSen": true }, + }, + { + template: RH, + values: { "ctl.have_occSen": false, "ctl.have_CO2Sen": true }, + }, + ], + }, + { + // Two configurations of the same template + name: "mixed--rh-rh", + project: ASHRAE_IP, + configs: [ + { template: RH, values: { "ctl.have_CO2Sen": true } }, + { + template: RH, + values: { + coiHea: `${COILS}.ElectricHeating`, + "ctl.have_CO2Sen": false, + }, + }, + ], + }, + { + name: "mixed--ahu-co-rh", + project: TITLE24_SI, + configs: [ + { template: AHU, values: { coiHeaPre: `${COILS}.ElectricHeating` } }, + { template: CO, values: { "ctl.have_occSen": true } }, + { template: RH, values: { coiHea: `${COILS}.ElectricHeating` } }, + ], + }, + { + name: "project--title24-si", + project: TITLE24_SI, + configs: [{ template: AHU }], + }, +]; + +const toFileName = (name: string) => name.replace(/[^A-Za-z0-9_.=-]/g, "_"); + +describe("Sequence document golden payloads", () => { + const cases = [...singleChoiceCases(), ...MIXED_CASES]; + const payloads: { [file: string]: string } = {}; + cases.forEach((c) => { + const configs = c.configs.map((cc) => configure(cc, c.project)); + const payload = buildSequencePayload(configs, false); + // Sorted keys for stable diffs + const sorted = Object.fromEntries( + Object.entries(payload).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)), + ); + payloads[`${toFileName(c.name)}.payload.json`] = + JSON.stringify(sorted, null, 2) + "\n"; + }); + + if (UPDATE) { + it("writes the golden payloads", () => { + fs.mkdirSync(GOLDEN_DIR, { recursive: true }); + fs.readdirSync(GOLDEN_DIR) + .filter((f) => f.endsWith(".payload.json") && !(f in payloads)) + .forEach((f) => fs.unlinkSync(path.join(GOLDEN_DIR, f))); + Object.entries(payloads).forEach(([file, content]) => + fs.writeFileSync(path.join(GOLDEN_DIR, file), content), + ); + }); + return; + } + + it("generates the stored set of cases", () => { + const stored = fs + .readdirSync(GOLDEN_DIR) + .filter((f) => f.endsWith(".payload.json")) + .sort(); + expect(Object.keys(payloads).sort()).toEqual(stored); + }); + + it.each(Object.keys(payloads))("%s matches the stored payload", (file) => { + const stored = fs.readFileSync(path.join(GOLDEN_DIR, file), "utf8"); + expect(JSON.parse(payloads[file])).toEqual(JSON.parse(stored)); + }); +}); diff --git a/server/scripts/sequence-doc/dev-requirements.txt b/server/scripts/sequence-doc/dev-requirements.txt index 6a092008..b3e2a9ab 100644 --- a/server/scripts/sequence-doc/dev-requirements.txt +++ b/server/scripts/sequence-doc/dev-requirements.txt @@ -1,3 +1,3 @@ ######### sequence-doc dev requirements ########### -pytest +pytest>=9 # pytest.toml pytest-mock diff --git a/server/scripts/sequence-doc/pytest.toml b/server/scripts/sequence-doc/pytest.toml index da606462..13dee5ff 100644 --- a/server/scripts/sequence-doc/pytest.toml +++ b/server/scripts/sequence-doc/pytest.toml @@ -1,3 +1,3 @@ -[tool.pytest.ini_options] +[pytest] testpaths = ["tests"] pythonpath = ["src"] diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_CO2Sen=false.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_CO2Sen=false.expected.txt new file mode 100644 index 00000000..2101e12b --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVBoxCoolingOnly--ctl.have_CO2Sen=false.expected.txt @@ -0,0 +1,485 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] General Zone Information +[Heading 4] Zone Temperature Setpoints +[Info. box] Zone temperature initial setpoints can be specified by the designer in a number of ways. The most flexible way is to include them for each zone in variable-air-volume (VAV) box and single-zone VAV (SZVAV) air-handling unit (AHU) equipment schedules. They can also be generically listed by zone type, such as the example in (a) below. +[Heading 5] Default setpoints shall be based on zone type as shown in Table 3.1.1.1. +| Table 3.1.1.1 Default Setpoints | Table 3.1.1.1 Default Setpoints | Table 3.1.1.1 Default Setpoints | Table 3.1.1.1 Default Setpoints | Table 3.1.1.1 Default Setpoints | +| Zone Type | Occupied | Occupied | Unoccupied | Unoccupied | +| Zone Type | Heating | Cooling | Heating | Cooling | +| VAV | 70°F | 75°F | 60°F | 90°F | +| Mechanical/electrical rooms | 65°F | 85°F | 65°F | 85°F | +| Networking/computer | 65°F | 75°F | 65°F | 75°F | +[Heading 4] Outdoor Air Ventilation Setpoints +[Info. box] Ventilation setpoints can be specified by the designer in a number of ways. The most flexible is to include them for each zone in VAV box and single-zone (SZ) equipment schedules. +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1-2016: +[Heading 6] The area component of the breathing zone outdoor airflow Vbz-A +[Info. box] This is the zone floor area times the outdoor airflow rate per unit area, as given in Standard 62.1-2016, Table 6.2.2.1; i.e., Vbz-A = Az*Ra. +[Heading 6] The population component of the breathing zone outdoor airflow Vbz-P +[Info. box] This is the zone design population (without diversity) times the outdoor airflow rate per occupant, as given in Standard 62.1-2016, Table 6.2.2.1; i.e.; Vbz-P = Pz*Rp. +[Heading 6] Zone air distribution effectiveness EzH in heating +[Heading 6] Zone air distribution effectiveness EzC in cooling +[Info. box] Zone air distribution effectiveness depends on the relative locations of supply and return in the space, per ASHRAE Standard 62.1-2016, Table 6.2.2.2. +[Heading 6] Indicate where occupied-standby mode is allowed, based on the zone occupancy category per Standard 62.1-2016, Table 6.2.2.1. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode and is not considered a zone-group operating mode. See Section 3.4.6 for zone-group operating modes. +[Heading 3] VAV Box Design Information +[Info. box] For the terminal unit sequences, the engineer must provide the setpoint information in the following subsections, typically on VAV box schedules on drawings. +[Heading 4] VAV Cooling-Only Terminal Unit +[Heading 5] Zone maximum cooling airflow setpoint (Vcool-max) +[Heading 5] Zone maximum heating airflow setpoint (Vheat-max) +[Info. box] Cooling-only terminal units can provide heat when the AHU supply air temperature is more than 5°F above the room temperature. The zone maximum heating airflow setpoint should be set to no more than the zone maximum cooling airflow setpoint. If there is no zone maximum heating airflow setpoint scheduled, set Vheat-max equal to Vcool-max. +[Heading 5] Zone minimum airflow setpoint (Vmin). This is an optional entry. If no value is scheduled, or a value of “AUTO” is scheduled, Vmin will be calculated automatically and dynamically to meet ventilation requirements. +[Info. box] In most cases, Vmin should be allowed to be automatically calculated. This ensures compliance with Standard 62.1 and Standard 90.1 prescriptive requirements and with California’s Title 24 Energy Standards requirements, and it results in the lowest energy costs. +[Heading 3] Zone Group Assignments +[Info. box] Zones and miscellaneous associated equipment must be assigned to Zone Groups, such as by using a table (see example Informative Table 3.1.3) either on drawings or in Building Automation System (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] Guidance for Zone Group Assignments +[InfoboxList] 1. Each zone served by a single-zone air handler shall be its own Zone Group. +[InfoboxList] 2. Rooms occupied 24/7, such as computer rooms, networking closets, mechanical, and electrical rooms served by the air handler shall be assigned to a single Zone Group. These rooms do not apply to the Zone Group restrictions below. +[InfoboxList] 3. A Zone Group shall not span floors (per Section 6.4.3.3.4 of ASHRAE 90.1 2016). +[InfoboxList] 4. A Zone Group shall not exceed 25,000 ft2 (per Section 6.4.3.3.4 of ASHRAE 90.1-2016). +[InfoboxList] 5. If future occupancy patterns are known, a single Zone Group shall not include spaces belonging to more than one tenant. +[InfoboxList] 6. A zone shall not be a member of more than one Zone Group. +[InfoboxList] 7. Miscellaneous equipment, such as exhaust fans, serving spaces within a Zone Group shall be included in the Zone Group. +[InfoboxList] 8. Miscellaneous equipment may be included in multiple Zone Group if it serves spaces in multiple Zone Groups. +| Informative Table 3.1.3 Example Zone-Group Table | Informative Table 3.1.3 Example Zone-Group Table | Informative Table 3.1.3 Example Zone-Group Table | Informative Table 3.1.3 Example Zone-Group Table | Informative Table 3.1.3 Example Zone-Group Table | +| Zone Group Name | AH Tag | Terminal Unit Tags | Miscellaneous Equipment Tags | Default Schedule | +| First-floor assembly | AH-1 | VAV-1-1 through 11 | EF-1 | WD: 6 am to 8pm WE: 8 am to 10pm HOL: off | +| Second-floor office | AH-1 | VAV-2-1 through 15 | EF-2 | WD: 7 am to 7 pm SAT: 9 am to 2 pm SUN: off HOL: off | +| IDF rooms | AH-1 | VAV-1-12, VAV-2-16 | | ALL: 12 am to 12 am | +| First-floor lobby | AH-2 | | EF-1 | WD: 6 am to 8 pm WE: 8 am to 10 pm HOL: off | +[Heading 2] Information Determined by Control Contractor (Originally Paragraph 3.3 in Guideline 36-2021) +[Heading 3] VAV Box Controllable Minimum +[Heading 4] This section is used to determine the lowest possible VAV box airflow setpoint (other than zero) allowed by the controls (Vm) used in VAV box control sequences. The minimums shall be stored as software points. +[Heading 5] First, determine the velocity pressure sensor reading VPm in in. of water that will give a reliable flow indication using product literature from the manufacturer of the VAV box controller. If this information is not available from the controller manufacturer, assume 1% of the velocity pressure sensor’s differential pressure range. +[Info. box] See also ASHRAE Standard 195 Method of Test for Rating Air Terminal Unit Control for guidance on determining the lowest controllable minimum velocity pressure. +[Heading 5] Next, determine minimum setpoint Vm using either of the following: +[Heading 6] Option 1: Determine the minimum velocity vm for each VAV box size and model. If the VAV box manufacturer provides an amplification factor F for the flow pickup, calculate the minimum velocity vm as: +[Normal] vm = 4005 * (VPm / F) ^ 0.5 +[Normal] Where F is not known, it can be calculated from the measured airflow at 1 in. of water signal from the VP sensor: +[Normal] F = [4005 * A / (CFM @ 1 in. of water)] ^ 2 +[Normal] where A is the nominal inlet duct area ft2. +[Normal] Calculate the minimum airflow setpoint allowed by the controls (Vm) for each VAV box size as: +[HeadingRunIn] Vm = vmA +[Heading 6] Option 2: Use airflow vs. signal pressure data published by the manufacturer of the VAV box velocity pressure probe. Select a pair of values of airflow and velocity pressure signal as the rated operating point for the calculation, Vrated and VPrated. Use these values and the minimum controllable signal pressure to calculate the minimum controllable flow as: +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 3] Plant Requests +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=None.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=None.payload.json new file mode 100644 index 00000000..b7b1cba9 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=None.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + false + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.mChiWat_flow_nominal-mChiWat_flow_nominal": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=WaterBasedCooling.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=WaterBasedCooling.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=WaterBasedCooling.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=WaterBasedCooling.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=WaterBasedCooling.payload.json new file mode 100644 index 00000000..e26610a1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiCoo=WaterBasedCooling.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=ElectricHeating.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=ElectricHeating.expected.txt new file mode 100644 index 00000000..f36aab12 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=ElectricHeating.expected.txt @@ -0,0 +1,472 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=ElectricHeating.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=ElectricHeating.payload.json new file mode 100644 index 00000000..feb855fb --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=ElectricHeating.payload.json @@ -0,0 +1,500 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.Electric" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.ElectricHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + false + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.ElectricHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.ElectricHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.ElectricHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=None.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=None.expected.txt new file mode 100644 index 00000000..536a0cae --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=None.expected.txt @@ -0,0 +1,472 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (economizer and cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=None.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=None.payload.json new file mode 100644 index 00000000..2dcb231c --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=None.payload.json @@ -0,0 +1,500 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + false + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=WaterBasedHeating.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=WaterBasedHeating.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=WaterBasedHeating.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=WaterBasedHeating.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=WaterBasedHeating.payload.json new file mode 100644 index 00000000..e26610a1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--coiHeaPre=WaterBasedHeating.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=false.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=false.expected.txt new file mode 100644 index 00000000..01687186 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=false.expected.txt @@ -0,0 +1,467 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=false.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=false.payload.json new file mode 100644 index 00000000..a1de5503 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=false.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=true.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=true.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=true.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=true.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=true.payload.json new file mode 100644 index 00000000..e26610a1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_frePro=true.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=false.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=false.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=false.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=false.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=false.payload.json new file mode 100644 index 00000000..e26610a1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=false.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=true.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=true.expected.txt new file mode 100644 index 00000000..d123d8eb --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=true.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in any Mode other than Unoccupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=true.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=true.payload.json new file mode 100644 index 00000000..12775432 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.have_perZonRehBox=true.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=DifferentialDryBulb.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=DifferentialDryBulb.expected.txt new file mode 100644 index 00000000..3a199d18 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=DifferentialDryBulb.expected.txt @@ -0,0 +1,481 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R hRA TOA > 75°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=DifferentialEnthalpyWithFixedDryBulb.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=DifferentialEnthalpyWithFixedDryBulb.payload.json new file mode 100644 index 00000000..9a93068f --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=DifferentialEnthalpyWithFixedDryBulb.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulb.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulb.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulb.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulb.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulb.payload.json new file mode 100644 index 00000000..e26610a1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulb.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulbWithDifferentialDryBulb.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulbWithDifferentialDryBulb.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulbWithDifferentialDryBulb.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulbWithDifferentialDryBulb.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulbWithDifferentialDryBulb.payload.json new file mode 100644 index 00000000..5c6f25bb --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedDryBulbWithDifferentialDryBulb.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulbWithDifferentialDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulbWithDifferentialDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulbWithDifferentialDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulbWithDifferentialDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedEnthalpyWithFixedDryBulb.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedEnthalpyWithFixedDryBulb.expected.txt new file mode 100644 index 00000000..64343769 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedEnthalpyWithFixedDryBulb.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 28 Btu/lb or TOA > 75°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedEnthalpyWithFixedDryBulb.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedEnthalpyWithFixedDryBulb.payload.json new file mode 100644 index 00000000..14fa57ed --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlEco=FixedEnthalpyWithFixedDryBulb.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=AirflowMeasured.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=AirflowMeasured.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=AirflowMeasured.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=AirflowMeasured.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=AirflowMeasured.payload.json new file mode 100644 index 00000000..e26610a1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=AirflowMeasured.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=BuildingPressure.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=BuildingPressure.expected.txt new file mode 100644 index 00000000..486cf1d1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=BuildingPressure.expected.txt @@ -0,0 +1,489 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Discharge Static Pressure Setpoints. (For return-fan direct building pressure control, see Section 3.16.10.) +[Heading 5] RFDSPmin. That required to deliver the design return air volume across the return air damper when the supply air fan is at design airflow and on minimum outdoor air. This setpoint shall be no less than 0.01 in. of water) to ensure outdoor air is not drawn backwards through the relief damper. +[Heading 5] RFDSPmax. That required to exhaust enough air to maintain building static pressure at setpoint 0.05 in. of water) when the supply air fan is at design airflow and on 100% outdoor air. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and direct building pressure controls, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with direct building pressure controls. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Direct Building Pressure +[Heading 4] See Section 1.1.4.5 for pressure Zone Group assignments. +[Heading 4] Return fan operates whenever the associated supply fan is proven on and shall be off otherwise. +[Heading 4] Return fans shall be controlled to maintain return-fan discharge static pressure at setpoint (Section 3.16.10.5). +[Heading 4] Building static pressure shall be time averaged with a sliding 5-minute window and 15 second sampling rate (to dampen fluctuations). The averaged value shall be that displayed and used for control. +[Heading 5] Where multiple building pressure sensors are used, the highest of the averaged values for sensors within a pressure zone shall be used for control. +[Info. box] Due to the potential for interaction between the building pressurization and return-fan control loops, extra care must be taken in selecting the control loop gains. To prevent excessive control-loop interaction, the closed-loop response time of the building pressurization loop should not exceed 1/5 the closed-loop response time of the return-fan control loop. This can be accomplished by decreasing the gain of the building pressurization control loop. +[Heading 4] A single P-only control loop for each pressure zone shall modulate to maintain the building pressure at a setpoint of 0.05 in. of water with an output ranging from 0% to 100%. The loop shall be enabled when the supply and return fans for any unit within the pressure zone are proven ON and the minimum outdoor air damper is open. The exhaust dampers shall be closed with loop output set to zero otherwise. All exhaust damper and return fan static pressure setpoints for units in an associated pressure zone shall be sequenced based on building pressure control loop output signal, as shown in Figure 5.16.10.5. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return air paths. All operating relief dampers and return fans that serve a pressure zone shall be controlled as if they were one system, using the same control loop, even if they are associated with different AHUs. +[Info. box] The appropriate boundaries for pressure zones, establishing which return fans run together, will need to be determined by the engineer based on building geometry. +[Heading 5] From 0% to 50%, the building pressure control loop shall modulate the exhaust dampers from 0% to 100% open. +[Heading 5] From 51% to 100%, the building pressure control loop shall reset the return-fan discharge static pressure setpoint from RFDSPmin at 50% loop output to RFDSPmax at 100% of loop output. See Section 1.2.1.4 for RFDSPmin and RFDSPmax. +[Normal] Figure 5.16.10.5 Exhaust damper position and return-fan DP reset +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 4] High building pressure (more than 0.10 in. of water) for 5 minutes: Level 3. +[Heading 4] Low building pressure (less than 0.0 in. of water, i.e., negative) for 5 minutes: Level 4. +[Info. box] Automatic fault detection and diagnostics (AFDD) is a sophisticated system for detecting and diagnosing air-handler faults. +[Info. box] To function correctly, AFDD requires specific sensors and data be available, as detailed in the sequences below. If this information is not available, AFDD tests that do not apply should be deleted. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=BuildingPressure.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=BuildingPressure.payload.json new file mode 100644 index 00000000..cf157534 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typCtlFanRet=BuildingPressure.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanDp" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.BuildingPressure" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.BuildingPressure" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.BuildingPressure" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanDp" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + true + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_BAS.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_BAS.expected.txt new file mode 100644 index 00000000..367e89b4 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_BAS.expected.txt @@ -0,0 +1,479 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] Upon signal from the freeze-stat, or if supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_BAS.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_BAS.payload.json new file mode 100644 index 00000000..9a7ba287 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_BAS.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_BAS" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_equipment.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_equipment.expected.txt new file mode 100644 index 00000000..92b517d1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_equipment.expected.txt @@ -0,0 +1,478 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] Upon signal from the freeze-stat, supply fan shall be shut down through the hardwired interlock. If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_equipment.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_equipment.payload.json new file mode 100644 index 00000000..e7932cc6 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=Hardwired_to_equipment.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=No_freeze_stat.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=No_freeze_stat.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=No_freeze_stat.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=No_freeze_stat.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=No_freeze_stat.payload.json new file mode 100644 index 00000000..e26610a1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--ctl.typFreSta=No_freeze_stat.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--default.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--default.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--default.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--default.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--default.payload.json new file mode 100644 index 00000000..e26610a1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--default.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=ArrayVariable.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=ArrayVariable.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=ArrayVariable.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=ArrayVariable.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=ArrayVariable.payload.json new file mode 100644 index 00000000..dcd39b58 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=ArrayVariable.payload.json @@ -0,0 +1,491 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.ArrayVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.ArrayVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.ArrayVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.ArrayVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=None.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=None.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=None.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=None.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=None.payload.json new file mode 100644 index 00000000..0b8613ae --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=None.payload.json @@ -0,0 +1,518 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupBlo.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupBlo.nFan": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupBlo.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupBlo.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupBlo.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=SingleVariable.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=SingleVariable.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=SingleVariable.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=SingleVariable.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=SingleVariable.payload.json new file mode 100644 index 00000000..e26610a1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--fanSupDra=SingleVariable.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersAirflow.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersAirflow.expected.txt new file mode 100644 index 00000000..42fb80b4 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersAirflow.expected.txt @@ -0,0 +1,496 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.5.4). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Separate Minimum Outdoor Air Damper and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Open the minimum outdoor air damper when the supply fan is proven ON, the AHU is in Occupied Mode and MinOAsp is greater than zero. Minimum outdoor air damper shall be closed otherwise. +[Heading 4] Outdoor Air and Return Air Dampers +[Heading 5] For units with return fans +[Info. box] Minimum outdoor air control is enabled when return damper position exceeds MRA-P because it cannot be assumed that the combination of the minimum and the economizer outdoor air dampers are providing sufficient outdoor air under these conditions. +[Info. box] The 20% threshold can be increased to ensure minimum outdoor airflow will be maintained but at the expense of fan energy. This threshold could be determined empirically during TAB work as well. +[Heading 6] When the supply air fan is proven on and the system is in Occupied Mode and MinOAsp is greater than zero, the system shall calculate MRA-P. The value of MRA-P shall scale from 95% when supply fan speed is at 100% design speed proportionally down to 20% when the fan is at minimum speed. When MRA-P is not being calculated for any reason, it shall be set to 100%. +[Heading 6] Minimum outdoor air control shall be enabled when the unit is in Occupied Mode and either of the following conditions are true for 10 minutes: +[Heading 7] The economizer high limit conditions in Section 3.1.17 are exceeded. +[Heading 7] When the minimum outdoor air damper is open and the return air damper position is greater than MRA-P. +[Heading 6] When minimum outdoor air control is enabled, the normal sequencing of economizer outdoor air and return air dampers per Section 3.16.2 shall be suspended per the following sequence: +[Heading 7] Fully open return air damper; and +[Info. box] Economizer outdoor air damper is closed when minimum outdoor air control is enabled to ensure a good signal across the minimum outdoor air damper. +[Heading 7] Wait 15 seconds, then close the economizer outdoor air damper; and +[Heading 7] Wait 3 minutes, then release return air damper position for control by the SAT control loop in Section 3.16.2. Economizer outdoor air damper remains closed. +[Heading 7] The maximum return air damper position endpoint MaxRA-P shall be modulated from 100% to 0% to maintain airflow across the minimum outdoor air damper at setpoint MinOAsp. +[Heading 6] Minimum outdoor air control shall be disabled when the unit is no longer in Occupied Mode, or both of the following conditions are true for 10 minutes: +[Heading 7] The economizer high limit conditions in Section 3.1.17 are exceeded. +[Heading 7] The minimum outdoor air damper is closed or the return air damper position is 10% below MRA-P. +[Heading 6] When minimum outdoor air control is disabled: +[Heading 7] Economizer outdoor air damper shall be fully opened. +[Heading 7] MaxRA-P shall be set to 100%. +[Heading 7] Economizer and return air damper positions shall be controlled by the SAT control loop per Section 3.16.2. +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersAirflow.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersAirflow.payload.json new file mode 100644 index 00000000..d409df03 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersAirflow.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.DedicatedDampersAirflow" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersPressure.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersPressure.expected.txt new file mode 100644 index 00000000..262b91f9 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersPressure.expected.txt @@ -0,0 +1,501 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Ventilation Plenum Pressures. (For minimum outdoor air control with separate outdoor air damper and differential pressure [DP] control, see Section 3.16.4.) +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesMinDP, the design minimum outdoor air damper DP that provides the design minimum outdoor airflow DesVot +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.4.4). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Separate Minimum Outdoor Air Damper and Differential Pressure Control +[Heading 4] DP Setpoint for ASHRAE Standard 62.1 Ventilation +[Heading 5] See Section 1.2.1.3.a for design OA DP setpoints. +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 5] The minimum outdoor air DP setpoint MinDPsp shall be calculated as +[Heading 4] Open minimum outdoor air damper when the supply air fan is proven on and the system is in Occupied Mode and MinDPsp is greater than zero. Damper shall be closed otherwise. +[Heading 4] Outdoor Air and Return Air Dampers +[Heading 5] For units with return fans +[Info. box] Minimum outdoor air control is enabled when return damper position exceeds MRA-P because it cannot be assumed that the combination of the minimum and the economizer outdoor air dampers are providing sufficient outdoor air under these conditions. +[Info. box] The 20% threshold can be increased to ensure minimum outdoor airflow will be maintained but at the expense of fan energy. This threshold could be determined empirically during TAB work as well. +[Heading 6] When the supply air fan is proven on and the system is in Occupied Mode and MinDPsp is greater than zero, the system shall calculate MRA-P. The value of MRA-P shall scale from 95% when supply fan speed is at 100% design speed proportionally down to 20% when the fan is at minimum speed. When MRA-P is not being calculated for any reason, it shall be set to 100%. +[Heading 6] Minimum outdoor air control shall be enabled when the unit is in Occupied Mode and either of the following conditions are true for 10 minutes: +[Heading 7] The economizer high limit conditions in Section 3.1.17 are exceeded. +[Heading 7] When the minimum outdoor air damper is open and the return air damper position is greater than MRA-P. +[Heading 6] When minimum outdoor air control is enabled, the normal sequencing of economizer outdoor air and return air dampers per Section 3.16.2 shall be suspended per the following sequence: +[Heading 7] Fully open return air damper; and +[Info. box] Economizer outdoor air damper is closed when minimum outdoor air control is enabled to ensure a good signal across the minimum outdoor air damper. +[Heading 7] Wait 15 seconds, then close the economizer outdoor air damper; and +[Heading 7] Wait 3 minutes, then release return air damper position for control by the SAT control loop in Section 3.16.2. Economizer outdoor air damper remains closed. +[Heading 7] The maximum return air damper position endpoint MaxRA-P shall be modulated from 100% to 0% to maintain DP across the minimum outdoor air damper at setpoint MinDPsp. +[Heading 6] Minimum outdoor air control shall be disabled when the unit is no longer in Occupied Mode, or both of the following conditions are true for 10 minutes: +[Heading 7] The economizer high limit conditions in Section 3.1.17 are not exceeded. +[Heading 7] The minimum outdoor air damper is closed or the return air damper position is 10% below MRA-P. +[Heading 6] When minimum outdoor air control is disabled: +[Heading 7] Economizer outdoor air damper shall be fully opened. +[Heading 7] MaxRA-P shall be set to 100%. +[Heading 7] Economizer and return air damper positions shall be controlled by the SAT control loop per Section 3.16.2. +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersPressure.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersPressure.payload.json new file mode 100644 index 00000000..a5764777 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=DedicatedDampersPressure.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersPressure" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.TwoPosition" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersPressure" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersPressure" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.TwoPosition" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.DedicatedDampersPressure" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.TwoPosition" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersPressure" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=SingleDamper.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=SingleDamper.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=SingleDamper.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=SingleDamper.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=SingleDamper.payload.json new file mode 100644 index 00000000..e26610a1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secOut=SingleDamper.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=ArrayVariable.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=ArrayVariable.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=ArrayVariable.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=ArrayVariable.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=ArrayVariable.payload.json new file mode 100644 index 00000000..441d43dc --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=ArrayVariable.payload.json @@ -0,0 +1,485 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.ArrayVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.ArrayVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.ArrayVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.ArrayVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.ArrayVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.ArrayVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=SingleVariable.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=SingleVariable.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=SingleVariable.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=SingleVariable.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=SingleVariable.payload.json new file mode 100644 index 00000000..e26610a1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel.fanRet=SingleVariable.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefDamper.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefDamper.expected.txt new file mode 100644 index 00000000..b6eb2651 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefDamper.expected.txt @@ -0,0 +1,478 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with relief dampers or relief fans +[Heading 6] Economizer damper minimum position MinOA-P and/or return air damper maximum position MaxRA-P are modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 6] Return air damper maximum position MaxRA-P and economizer damper minimum position MinOA-P are modulated to control minimum outdoor air volume (see Section 3.16.6). Economizer damper maximum position MaxOA-P is limited during minimum outdoor air control (e.g., economizer lockout due to high OAT). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with relief fans, outdoor air and return air dampers are sequenced rather than complementary (as per traditional sequences) to reduce fan power at part loads. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with relief damper or relief fan. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with relief dampers or relief fans: +[Info. box] The following logic limits the return and economizer damper positions to ensure that minimum outdoor air is maintained at all times, while the actual damper positions are modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor air setpoint MinOAsp by a reverse-acting control loop whose output is mapped to economizer damper minimum position MinOA-P and return air damper maximum position MaxRA-P as indicated in Figure 5.16.6.3. +[FigureCaption] Figure 5.16.6.3 Minimum outdoor airflow control mapping with single damper. +[Info. box] The following logic directly controls the return and economizer damper positions to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor airflow shall be controlled to the minimum outdoor airflow setpoint, MinOAsp. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended as follows: +[Heading 7] Fully open the return air damper +[Heading 7] Wait 15 seconds, then set MaxOA-P equal to MinOA-P +[Heading 7] Wait 3 minutes, then modulate the return air damper to maintain the measured airflow at MinOAsp (i.e. return air damper position shall equal MaxRA-P). +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, set MaxOA-P = 100% and release the return air damper to control by the SAT control loop (i.e. return air damper position is limited by the MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Control of Actuated Relief Dampers without Fans +[Heading 4] Relief dampers shall be enabled when the associated supply fan is proven on, and disabled otherwise. +[Heading 4] When enabled, use a P-only control loop to modulate relief dampers to maintain 0.05 in. of water building static pressure. Close damper when disabled. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 4] High building pressure (more than 0.10 in. of water) for 5 minutes: Level 3. +[Heading 4] Low building pressure (less than 0.0 in. of water, i.e., negative) for 5 minutes: Level 4. +[Info. box] Automatic fault detection and diagnostics (AFDD) is a sophisticated system for detecting and diagnosing air-handler faults. +[Info. box] To function correctly, AFDD requires specific sensors and data be available, as detailed in the sequences below. If this information is not available, AFDD tests that do not apply should be deleted. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefDamper.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefDamper.payload.json new file mode 100644 index 00000000..bd8c446b --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefDamper.payload.json @@ -0,0 +1,488 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReliefDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReliefDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.dpFan_nominal-secOutRel.secRel.dpFan_nominal": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.m_flow_nominal-secOutRel.secRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReliefDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReliefDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReliefDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + true + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefFan.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefFan.expected.txt new file mode 100644 index 00000000..6bdd986e --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefFan.expected.txt @@ -0,0 +1,494 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Relief fan +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with relief dampers or relief fans +[Heading 6] Economizer damper minimum position MinOA-P and/or return air damper maximum position MaxRA-P are modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 6] Return air damper maximum position MaxRA-P and economizer damper minimum position MinOA-P are modulated to control minimum outdoor air volume (see Section 3.16.6). Economizer damper maximum position MaxOA-P is limited during minimum outdoor air control (e.g., economizer lockout due to high OAT). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with relief fans, outdoor air and return air dampers are sequenced rather than complementary (as per traditional sequences) to reduce fan power at part loads. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with relief damper or relief fan. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with relief dampers or relief fans: +[Info. box] The following logic limits the return and economizer damper positions to ensure that minimum outdoor air is maintained at all times, while the actual damper positions are modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor air setpoint MinOAsp by a reverse-acting control loop whose output is mapped to economizer damper minimum position MinOA-P and return air damper maximum position MaxRA-P as indicated in Figure 5.16.6.3. +[FigureCaption] Figure 5.16.6.3 Minimum outdoor airflow control mapping with single damper. +[Info. box] The following logic directly controls the return and economizer damper positions to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor airflow shall be controlled to the minimum outdoor airflow setpoint, MinOAsp. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended as follows: +[Heading 7] Fully open the return air damper +[Heading 7] Wait 15 seconds, then set MaxOA-P equal to MinOA-P +[Heading 7] Wait 3 minutes, then modulate the return air damper to maintain the measured airflow at MinOAsp (i.e. return air damper position shall equal MaxRA-P). +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, set MaxOA-P = 100% and release the return air damper to control by the SAT control loop (i.e. return air damper position is limited by the MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Relief-Fan Control +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which relief fans run together and which building pressure sensors are used, will need to be determined by the engineer based on building geometry. +[Info. box] Relief fans are enabled and disabled with their associated supply fans, but all relief fans that are running and serve a pressure zone run at the same speed. All operating relief fans that serve a pressure zone shall be controlled as if they were one system, running at the same speed and using the same control loop, even if they are associated with different AHUs. For example, if two AHUs share a pressure zone, their relief fans should be controlled together as one system, while both AHUs are operating. +[Info. box] This prevents relief fans from fighting each other, which can lead to flow reversal or unstable fan speed control and space pressurization problems. +[Info. box] The appropriate boundaries between relief systems, establishing which relief fans run together, will need to be determined by the engineer based on building geometry. +[Heading 4] See Section 1.1.4.5 for pressure Zone Group assignments. +[Heading 4] A relief fan shall be enabled when its associated supply fan is proven on, and shall be disabled otherwise. +[Heading 4] Building static pressure shall be time averaged with a sliding 5-minute window and 15 second sampling rate (to dampen fluctuations). The averaged value shall be that displayed and used for control. +[Heading 5] Where multiple building pressure sensors are used, each shall be time-averaged and the highest of the averaged values for sensors within a pressure zone shall be used for control. +[Heading 4] A single P-only control loop for each pressure zone shall maintains the building pressure at a setpoint of 0.05 in. of water with an output ranging from 0% to 100%. The loop shall be enabled when any supply fan within the pressure zone is proven ON. The loop is disabled with output set to zero otherwise. +[Info. box] The following is intended to use barometric relief as the first stage and then maintain many fans on at low speed to minimize noise and reduce losses through discharge dampers and louvers. Fans are staged off only when running at minimum speed. +[Info. box] For best results, fan speed minimums should be set as low as possible. +[Heading 4] Fan speed signal shall be equal to the PID signal but no less than the minimum speed. +[Info. box] In some installations, the relief fan inlet plenum may also be the return plenum to the AHU mixed air plenum, in which case the pressure in this plenum may be drawn negative relative to the outdoors by the supply air fan drawing return air from this plenum. This can occur when the return path has a fairly high pressure drop. If the engineer is concerned that this may occur, Stage 0 and references to it should be deleted. +[Heading 5] Stage 0 (barometric relief). When relief system is enabled, and the control loop output is above 5%, open the motorized dampers to relief fan serving the relief system group; close the dampers when the loop output drops to 0% for 5 minutes. +[Heading 5] Stage Up. When control loop is above minimum speed plus 15%, start stage-up timer. Each time the timer reaches 7 minutes, start the relief fan. The timer is reset to 0 and frozen if control loop is below minimum speed plus 15%. +[Heading 5] Stage Down. When PID loop is below minimum speed, start stage-down timer. Each time the timer reaches 5 minutes, shut off fan and reset the timer to 0. The timer is reset to 0 and frozen if PID loop rises above minimum speed or fan is off. If fan is off, go to Stage 0 (damper open and fan off). +[Heading 4] For fans in a Level 2 alarm and status is off, discharge damper shall be closed when stage is above Stage 0. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 4] High building pressure (more than 0.10 in. of water) for 5 minutes: Level 3. +[Heading 4] Low building pressure (less than 0.0 in. of water, i.e., negative) for 5 minutes: Level 4. +[Info. box] Automatic fault detection and diagnostics (AFDD) is a sophisticated system for detecting and diagnosing air-handler faults. +[Info. box] To function correctly, AFDD requires specific sensors and data be available, as detailed in the sequences below. If this information is not available, AFDD tests that do not apply should be deleted. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefFan.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefFan.payload.json new file mode 100644 index 00000000..3b2ba4c1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReliefFan.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReliefFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.TwoPosition" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReliefFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReliefFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.TwoPosition" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReliefFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReliefFan.fanRel-secOutRel.secRel.fanRel": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReliefFan" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.TwoPosition" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + true + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.TwoPosition" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRel.have_senFlo": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRel.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRel.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRel.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRel.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRel.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Propeller" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReturnFan.expected.txt b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReturnFan.expected.txt new file mode 100644 index 00000000..442d4883 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReturnFan.expected.txt @@ -0,0 +1,482 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 65°F in mild and dry climates and 60°F or lower in humid climates. It should not typically be greater than 65°F because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 60°F and OAT_Max = 70°F, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 65°F and 55°F, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1: +[Heading 6] DesVou, the uncorrected design outdoor air rate, including diversity where applicable +[Heading 6] DesVot, design total outdoor air rate (Vou adjusted for ventilation efficiency) +[Info. box] DesVou and DesVot can be determined using the 62MZCalc spreadsheet provided with Standard 62.1 User’s Manual. +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 0.05 in. of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 65°F | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 10 minutes per °F of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 68°F to 70°F, and the zone temperature is 68.5°F at the time of the change, inhibit alarm for 15 minutes (1.5°F*10 minutes/°F) after the change. +[Heading 5] For thermal zone temperature cooling requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 5 minutes per °F of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 2°F above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 40°F, the zone group shall enter setback mode until all zones are above 45°F, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 2°F below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.1 in. of water | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –0.05 in. of water | +| SPres | +0.06 in. of water | +| SPres-max | +0.13 in. of water | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [70°F – 60°F] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 65°F – 55°F) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.2°F | +| SPres | –0.3°F | +| SPres-max | –1.0°F | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 55°F, Max_ClgSAT = 65°F, OAT_Max = 70°F, and OAT_Min = 60°F. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 95°F. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Info. box] The CO2 DCV strategy for Standard 62.1 currently increases both the zone primary airflow and the population component of the breathing zone outdoor airflow in response to increasing CO2 concentrations. Through the dynamic implementation of the Standard 62.1 Multiple Spaces Equation (see Vou and Ev calculations in this section), the minimum outdoor airflow setpoint is adjusted accordingly in tandem with the zone DCV response. Though this combined response increases ventilation with rising CO2 concentrations, it is not strictly adherent with Standard 62.1. ASHRAE research projects RP-1547 and RP-1747 developed and tested a technically rigorous DCV approach that may be considered for future versions of the guideline pending further confirmation of its stability in real-world applications. +[Heading 5] See Section 3.2.1.3 for zone outdoor air requirement Voz. +[Heading 5] See Section 1.1.4.2.a for setpoints DesVou and DesVot. +[Info. box] The following logic solves the Standard 62.1 multiple-spaces equation dynamically. This is required prescriptively by ASHRAE/IES Standard 90.1 for single-duct VAV systems. The logic does not strictly apply to VAV systems with multiple recirculation paths, such as dual-fan dual-duct systems and systems with fan-powered terminals, nor is it required by Standard 90.1 for these systems. Logic for dynamic reset for these systems has yet to be developed. +[Heading 5] The uncorrected outdoor air rate setpoint Vou is recalculated continuously based on the adjusted ventilation rates Vbz-A* and Vbz-P* of the zones being served determined in accordance with Section 3.2.1.3. +[Info. box] Some diversity factor is included in Vou, calculated below, because the ventilation requirements have been zeroed out for unoccupied zones and those with open window switches. But there is additional diversity in areas with occupancy sensors because only one person in the room will trigger the sensor. There is also diversity in other areas without occupancy sensors. Therefore operating Vou is limited to design Vou, and the diversity value of D in the calculation of DesVou is not required. +[Heading 6] Calculate the uncorrected outdoor air rate Vou for all zones in all Zone Groups that are in Occupied Mode, but note that Vou shall be no larger than the design uncorrected outdoor air rate DesVou. +[Heading 5] Vps is the sum of the zone primary airflow rates Vpz as measured by VAV boxes for all zones in all Zone Groups that are in Occupied Mode. +[Heading 5] For each zone in Occupied Mode, calculate the zone primary outdoor air fraction Zpz: +[HeadingRunIn] Zpz = Voz/Vpz +[Info. box] See ASHRAE Guideline 13 for best practices in locating programming logic for the zone primary outdoor air fraction calculation based on network architecture. +[Heading 5] Calculate the maximum zone outdoor air fraction Zp: +[HeadingRunIn] Zp = max(Zpz) +[Heading 5] Calculate the current system ventilation efficiency Ev: +[HeadingRunIn] Ev = 1 + (Vou/Vps) – Zp +[Heading 5] Calculate the effective minimum outdoor air setpoint MinOAsp as the uncorrected outdoor air intake divided by the system ventilation efficiency, but no larger than the design total outdoor air rate DesVot: +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for ASHRAE Standard 62.1-2016 Ventilation +[Heading 5] See Section 3.16.3.1 for calculation of current outdoor air setpoint MinOAsp. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 40°F for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 42°F. Disable this function when supply air temperature rises above 45°F for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 38°F for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 42°F), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 45°F with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 38°F and 45°F with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 38°F with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 38°F for 15 minutes or below 34°F for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 80°F, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 80°F at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 0.05” for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 5°F for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 3°F for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 30°F less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 15°F less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReturnFan.payload.json b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReturnFan.payload.json new file mode 100644 index 00000000..e26610a1 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/VAVMultiZone--secOutRel.secRel=ReturnFan.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.ashCliZon-ctl.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.ashCliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.IP" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/mixed--ahu-co-rh.expected.txt b/server/scripts/sequence-doc/tests/static/golden/mixed--ahu-co-rh.expected.txt new file mode 100644 index 00000000..681b5b92 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/mixed--ahu-co-rh.expected.txt @@ -0,0 +1,756 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] General Zone Information +[Heading 4] Zone Temperature Setpoints +[Info. box] Zone temperature initial setpoints can be specified by the designer in a number of ways. The most flexible way is to include them for each zone in variable-air-volume (VAV) box and single-zone VAV (SZVAV) air-handling unit (AHU) equipment schedules. They can also be generically listed by zone type, such as the example in (a) below. +[Heading 5] Default setpoints shall be based on zone type as shown in Table 3.1.1.1. +| Table 3.1.1.1 Default Setpoints | Table 3.1.1.1 Default Setpoints | Table 3.1.1.1 Default Setpoints | Table 3.1.1.1 Default Setpoints | Table 3.1.1.1 Default Setpoints | +| Zone Type | Occupied | Occupied | Unoccupied | Unoccupied | +| Zone Type | Heating | Cooling | Heating | Cooling | +| VAV | 21°C | 24°C | 16°C | 32°C | +| Mechanical/electrical rooms | 18°C | 29°C | 18°C | 29°C | +| Networking/computer | 18°C | 24°C | 18°C | 24°C | +[Heading 4] Outdoor Air Ventilation Setpoints +[Info. box] Ventilation setpoints can be specified by the designer in a number of ways. The most flexible is to include them for each zone in VAV box and single-zone (SZ) equipment schedules. +[Heading 5] For projects complying with California Title 24 ventilation standards: +[Heading 6] Vocc-min. Zone minimum outdoor airflow for occupants, per California Title 24 prescribed airflow-per-occupant requirements. +[Heading 6] Varea-min. Zone minimum outdoor airflow for building area, per California Title 24 prescribed airflow-per-area requirements. +[Heading 6] Indicate where occupied-standby mode is allowed based on the zone occupancy category per Title 24-2019, Table 120.1-A. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and is not considered a Zone Group Operating Mode. See 5.4.6 for Zone Group Operating Modes. +[Heading 3] VAV Box Design Information +[Info. box] For the terminal unit sequences, the engineer must provide the setpoint information in the following subsections, typically on VAV box schedules on drawings. +[Heading 4] VAV Cooling-Only Terminal Unit +[Heading 5] Zone maximum cooling airflow setpoint (Vcool-max) +[Heading 5] Zone maximum heating airflow setpoint (Vheat-max) +[Info. box] Cooling-only terminal units can provide heat when the AHU supply air temperature is more than 3°C above the room temperature. The zone maximum heating airflow setpoint should be set to no more than the zone maximum cooling airflow setpoint. If there is no zone maximum heating airflow setpoint scheduled, set Vheat-max equal to Vcool-max. +[Heading 5] Zone minimum airflow setpoint (Vmin). This is an optional entry. If no value is scheduled, or a value of “AUTO” is scheduled, Vmin will be calculated automatically and dynamically to meet ventilation requirements. +[Info. box] In most cases, Vmin should be allowed to be automatically calculated. This ensures compliance with Standard 62.1 and Standard 90.1 prescriptive requirements and with California’s Title 24 Energy Standards requirements, and it results in the lowest energy costs. +[Heading 4] VAV Reheat Terminal Unit +[Heading 5] Zone maximum cooling airflow setpoint (Vcool-max) +[Heading 5] Zone minimum airflow setpoint (Vmin). This is an optional entry. If no value is scheduled, or a value of “AUTO” is scheduled, Vmin will be calculated automatically and dynamically to meet ventilation requirements. +[Info. box] In most cases, Vmin should be allowed to be automatically calculated. This ensures compliance with Standard 62.1 and Standard 90.1 prescriptive requirements and with California’s Title 24 Energy Standards requirements, and it results in the lowest energy costs. +[Heading 5] Zone maximum heating airflow setpoint (Vheat-max) +[Info. box] The design engineer should set Vheat-max such that the design heating load is met by Vheat-max airflow at a discharge air temperature (DAT) equal to MaxT plus the heating setpoint. MaxT can be no higher than 11°C above space temperature setpoint per ASHRAE/IES Standard 90.1-2016 (e.g., DAT no more than 32°C at 21°C space temperature setpoint) for systems supplying air greater than 1.8 m above floor, e.g., ceiling supply systems. Zone air distribution effectiveness EzH can be improved if MaxT is less than 8°C, provided that the 0.8 m/s supply air jet reaches to within 1.4 m of floor level as indicated in ASHRAE Standard 62.1-2016, Table 6.2.2.2. +[Heading 5] Zone maximum DAT above heating setpoint (MaxT) +[Heading 5] The heating minimum airflow setpoint (Vheat-min) +[Info. box] Vheat-min is the minimum airflow required for reheat coil operation, as is often required of electric resistance coils. It should be as low as possible for best efficiency. For reheat coils with no minimum flow requirement, such as hot-water coils, Vheat-min should be zero. +[Heading 3] Zone Group Assignments +[Info. box] Zones and miscellaneous associated equipment must be assigned to Zone Groups, such as by using a table (see example Informative Table 3.1.3) either on drawings or in Building Automation System (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] Guidance for Zone Group Assignments +[InfoboxList] 1. Each zone served by a single-zone air handler shall be its own Zone Group. +[InfoboxList] 2. Rooms occupied 24/7, such as computer rooms, networking closets, mechanical, and electrical rooms served by the air handler shall be assigned to a single Zone Group. These rooms do not apply to the Zone Group restrictions below. +[InfoboxList] 3. A Zone Group shall not span floors (per Section 6.4.3.3.4 of ASHRAE 90.1 2016). +[InfoboxList] 4. A Zone Group shall not exceed 2,300 m2 (per Section 6.4.3.3.4 of ASHRAE 90.1-2016). +[InfoboxList] 5. If future occupancy patterns are known, a single Zone Group shall not include spaces belonging to more than one tenant. +[InfoboxList] 6. A zone shall not be a member of more than one Zone Group. +[InfoboxList] 7. Miscellaneous equipment, such as exhaust fans, serving spaces within a Zone Group shall be included in the Zone Group. +[InfoboxList] 8. Miscellaneous equipment may be included in multiple Zone Group if it serves spaces in multiple Zone Groups. +| Informative Table 3.1.3 Example Zone-Group Table | Informative Table 3.1.3 Example Zone-Group Table | Informative Table 3.1.3 Example Zone-Group Table | Informative Table 3.1.3 Example Zone-Group Table | Informative Table 3.1.3 Example Zone-Group Table | +| Zone Group Name | AH Tag | Terminal Unit Tags | Miscellaneous Equipment Tags | Default Schedule | +| First-floor assembly | AH-1 | VAV-1-1 through 11 | EF-1 | WD: 6 am to 8pm WE: 8 am to 10pm HOL: off | +| Second-floor office | AH-1 | VAV-2-1 through 15 | EF-2 | WD: 7 am to 7 pm SAT: 9 am to 2 pm SUN: off HOL: off | +| IDF rooms | AH-1 | VAV-1-12, VAV-2-16 | | ALL: 12 am to 12 am | +| First-floor lobby | AH-2 | | EF-1 | WD: 6 am to 8 pm WE: 8 am to 10 pm HOL: off | +[Heading 3] Multiple-Zone VAV Air-Handler Design Information +[Heading 4] Temperature Setpoints +[Info. box] AHU setpoints required by the designer are best conveyed in equipment schedules because the setpoints vary for each AHU. +[Heading 5] Min_ClgSAT, lowest cooling supply air temperature setpoint +[Info. box] The Min_ClgSAT variable should be set no lower than the design coil leaving air temperature to prevent excessive CHW temperature reset requests, which will reduce chiller plant efficiency. +[Heading 5] Max_ClgSAT, highest cooling supply air temperature setpoint +[Info. box] The Max_ClgSAT variable is typically 18°C in mild and dry climates and 16°C or lower in humid climates. It should not typically be greater than 18°C because this may lead to excessive fan energy that can offset the mechanical cooling savings from economizer operation. +[Heading 5] OAT_Min, the lower value of the OAT reset range +[Heading 5] OAT_Max, the higher value of the OAT reset range +[Info. box] Occupied Mode supply air temperature set-point reset logic uses a combination of reset by outdoor air temperature (intended to reduce fan energy during warm weather) and zone feedback (SAT needed to satisfy the zone requiring the coldest air to meet space temperature setpoint). OAT_Min and OAT_Max define the range of outdoor air temperatures used for the OAT reset logic. Typical values are OAT_Min = 16°C and OAT_Max = 21°C, selected to maximize econ1`omizer operation and minimize reheat losses, offset partially by higher fan energy. A lower range, e.g., 18°C and 13°C, respectively, may improve net energy performance for some applications: +[InfoboxList] 1. The chiller plant operates continuously, so extended economizer operation does not reduce plant runtime. +[InfoboxList] 2. The system has very little reheat inherently, such as dual-fan dual-duct systems or fan-powered box systems with very low primary air minimums. +[InfoboxList] 3. The climate is warm or humid, limiting available economizer hours. +[Heading 4] Ventilation Setpoints +[Heading 5] For projects complying with California Title 24 Ventilation Standards: +[Heading 6] AbsMinOA, the design outdoor air rate when all zones with CO2 sensors or occupancy sensors are unpopulated +[Heading 6] DesMinOA, the design minimum outdoor airflow with areas served by the system are occupied at their design population, including diversity where applicable +[Heading 4] DP100, filter high limit differential pressure at design airflow +[Info. box] The filter high limit differential pressure threshold shall be determined as the maximum recommended filter pressure drop at design airflow by the filter manufacturer. +[Heading 4] Pressure Zone Group Assignments +[Info. box] Return/relief fans and building pressure sensors must be assigned to pressure Zone Groups, such as by using a table (see example Informative Table 3.1.4.5) either on drawings or in Building Automation Systems (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] A pressure zone is defined as an enclosed area with interconnected return paths. The appropriate boundaries for pressure zones, establishing which return/relief fan run together, and which building pressure sensors are used will need to be determined by the engineer based on building geometry. +[TableTitle] Informative Table 3.1.4.5 Example Pressure Zone Group Table +| Pressure Zone Group Name | AHU Tag | RF Tag | Building Pressure Sensor Location(s) | +| East Pressure Zone | AHU-1, AHU-2 | RF-1, RF-2 | Rm. 123E | +| West Pressure Zone | AHU-3, AHU-4 | RF-3, RF-4 | Rm. 112W, Rm. 124W | +[Heading 2] Information Provided by (or in Conjunction with) the Testing, Adjusting, and Balancing Contractor (Originally Paragraph 3.2 in Guideline 36-2021) +[Heading 3] Multiple-Zone Air-Handler Information +[Heading 4] Duct Design Maximum Static Pressure Max_DSP +[Heading 4] Minimum Fan Speed +[Heading 5] Minimum speed setpoints for all VFD-driven equipment shall be determined in accordance with the testing, adjusting, and balancing (TAB) specifications for the following, as applicable: +[Info. box] There needs to be corresponding instructions in the TAB specifications. For example: +[Info. box] 1. Start the fan or pump. +[Info. box] 2. Manually set speed to 6 Hz (10%), unless otherwise indicated in control sequences. For equipment with gear boxes, use whatever minimum speed is recommended by the tower manufacturer. +[Info. box] 3. Observe the fan/pump in the field to ensure it is visibly rotating. If it is not, gradually increase speed until it is. +[Info. box] 4. The speed at this point shall be the minimum speed setpoint for this piece of equipment. +[Heading 6] Supply fan +[Heading 6] Return fan +[Heading 4] Return-Fan Airflow Tracking Setpoints. (For return-fan airflow tracking control, see Section 3.16.11.) +[Heading 5] S-R-DIFF. The airflow differential between supply air and return air fans required to maintain building pressure at desired pressure (e.g., 12 Pa of water]) using a handheld sensor if a permanent sensor is not provided. All exhaust fans that normally operate with the air handler should be on. +[Heading 5] Vrf-max. The maximum return fan airflow rate, typically the scheduled design airflow rate. +[Heading 2] Information Determined by Control Contractor (Originally Paragraph 3.3 in Guideline 36-2021) +[Heading 3] VAV Box Controllable Minimum +[Heading 4] This section is used to determine the lowest possible VAV box airflow setpoint (other than zero) allowed by the controls (Vm) used in VAV box control sequences. The minimums shall be stored as software points. +[Heading 5] First, determine the velocity pressure sensor reading VPm in Pa that will give a reliable flow indication using product literature from the manufacturer of the VAV box controller. If this information is not available from the controller manufacturer, assume 1% of the velocity pressure sensor’s differential pressure range. +[Info. box] See also ASHRAE Standard 195 Method of Test for Rating Air Terminal Unit Control for guidance on determining the lowest controllable minimum velocity pressure. +[Heading 5] Next, determine minimum setpoint Vm using either of the following: +[Heading 6] Option 1: Determine the minimum velocity vm for each VAV box size and model. If the VAV box manufacturer provides an amplification factor F for the flow pickup, calculate the minimum velocity vm as: +[Normal] vm = 1.28 * (VPm / F) ^ 0.5 +[Normal] Where F is not known, it can be calculated from the measured airflow at 250 Pa signal from the VP sensor: +[Normal] F = [20345 * A / (L/s @ 250 Pa)] ^ 2 +[Normal] where A is the nominal inlet duct area m2. +[Normal] Calculate the minimum airflow setpoint allowed by the controls (Vm) for each VAV box size as: +[HeadingRunIn] Vm = vmA +[Heading 6] Option 2: Use airflow vs. signal pressure data published by the manufacturer of the VAV box velocity pressure probe. Select a pair of values of airflow and velocity pressure signal as the rated operating point for the calculation, Vrated and VPrated. Use these values and the minimum controllable signal pressure to calculate the minimum controllable flow as: +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 38°C and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 35°C (38°C minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 120 Pa and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 150 Pa (120 Pa plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] VFD Speed Points +[Info. box] To avoid operator confusion, the speed command point (and speed feedback point, if used) for VFDs should be configured so that a speed of 0% corresponds to 0 Hz, and 100% corresponds to maximum speed set in the VFD, not necessarily 60 Hz. The maximum speed may be limited below 60 Hz to protect equipment, or it may be above 60 Hz for direct drive equipment. Drives are often configured such that a 0% speed signal corresponds to the minimum speed programmed into the VFD, but that causes the speed AO value and the actual speed to deviate from one another. +[Heading 4] The speed AO sent to VFDs shall be configured such that 0% speed corresponds to 0 Hz, and 100% speed corresponds to maximum speed configured in the VFD. +[Info. box] It is desirable that the minimum speed reside in the VFD to avoid problems when the VFD is manually controlled at the drive. But minimums can also be adjusted inadvertently in the VFD to a setpoint that is not equal to the minimum used in software. The following prevents separate, potentially conflicting minimum speed setpoints from existing in the BAS software and the drive firmware. +[Heading 4] For each piece of equipment, the minimum speed shall be stored in a single software point; in the case of a hard-wired VFD interface, the minimum speed shall be the lowest speed command sent to the drive by the BAS. See Section 1.2.1.2 for minimum speed setpoints. The active minimum speed parameter shall be read every 60 minutes via the drive’s network interface. When a mismatch between the drive’s active minimum speed and the minimum speed stored in the software point is detected, the minimum speed stored in the software point shall be written to the VFD via the network interface to restore the active minimum speed parameter to its default value, and generate a Level 4 alarm. +[Info. box] The minimum speed parameter is read via the network interface to detect any changes in the minimum speed parameter. Upon detecting a change in the minimum speed setting, the correct minimum speed stored in a BAS software point is written back to the drive via the network interface to override any changes that are made locally to the minimum speed parameter at the VFD. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 120 Pa | +| SPmin | 37 Pa | +| SPmax | 370 Pa | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –10 Pa | +| SPres | 15 Pa | +| SPres-max | 37 Pa | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 10 Pa every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 15 Pa for every request but no more than a maximum of 37 Pa, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 10 Pa every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 120 Pa. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 24°C | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 18 minutes per °C of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 20°C to 21°C, and the zone temperature is 20.2°C at the time of the change, inhibit alarm for 15 minutes (0.8°C*18 minutes per °C) after the change. +[Heading 5] For thermal zone temperature cooling requests: 9 minutes per °C of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 9 minutes per °C of difference but no longer than 30 minutes +[Heading 2] Generic Ventilation Zones (Originally Paragraph 5.2 in Guideline 36-2021) +[Info. box] A ventilation zone is a space or group of spaces served by one ventilation control device. For VAV systems, ventilation zones and thermal zones are one and the same, but Guideline 36 will eventually be expanded to include dedicated outdoor air systems (DOAS) serving one or more thermal zones controlled by radiant systems, chilled beams, fan-coils, etc. +[Heading 3] Zone Minimum Outdoor Air and Minimum Airflow Setpoints +[Heading 4] For every zone that requires mechanical ventilation, the zone minimum outdoor airflows and setpoints shall be calculated depending on the governing standard or code for outdoor air requirements. +[Heading 4] See Section 1.1.2 for zone minimum airflow setpoint Vmin. +[Heading 4] For compliance with California Title 24, outdoor air setpoints shall be calculated as follows: +[Heading 5] See Section 1.1.1.2 for zone ventilation setpoints. +[Heading 5] Determine the zone minimum outdoor air setpoints Zone-Abs-OA-min and Zone-Des-OA-min. +[Info. box] Zone-Abs-OA-min is used in terminal-unit sequences and air-handler sequences. Zone-Des-OA-min is used in air-handler sequences only. +[Heading 6] Zone-Abs-OA-min shall be reset based on the following conditions in order from highest to lowest priority: +[Heading 7] Zero if the zone has an occupancy sensor and is unpopulated and is permitted to be in occupied-standby mode per Section 1.1.1.2.b.3. +[Info. box] The term “populated” is used instead of “occupied” to mean that a zone occupancy sensor senses the presence of people, because the term “occupied” is used elsewhere to mean “scheduled to be occupied.” +[Heading 7] Zone-Des-OA-min otherwise. +[Heading 6] Zone-Des-OA-min is equal to the following, in order from highest to lowest priority: +[Heading 7] Zero if the zone has an occupancy sensor, is unpopulated, and is permitted to be in occupied-standby mode per Section 1.1.1.2.b.3. +[Heading 7] The larger of Varea-min and Vocc-min otherwise. +[Heading 5] Vmin +[Heading 6] Shall be equal to Zone-Abs-OA-min if Vmin in Section 1.1.2 is “AUTO”; +[Heading 6] Else shall be equal to Vmin as entered in Section 1.1.2. +[Heading 5] The occupied minimum airflow Vmin* shall be equal to Vmin except as noted below, in order from highest to lowest priority: +[Heading 6] If the zone has an occupancy sensor and is permitted to be in occupied-standby mode per Section 1.1.1.2.b.3, Vmin* shall be equal to zero when the room is unpopulated. +[Heading 3] Time-Averaged Ventilation +[Info. box] ASHRAE Standard 62.1 and California Title 24 allow for ventilation to be provided based on average conditions over a specific period of time. This time-averaging method allows for zone airflows to effectively be controlled to values below the VAV box controllable minimum value, which may reduce energy use and the risk of overcooling when the zone ventilation requirement is less than the VAV box controllable minimum. +[Heading 4] When the active airflow setpoint Vspt is nonzero and is less than the lowest possible airflow setpoint allowed by the controls (Vm), the airflow setpoint shall be pulse width modulated as follows: +[Heading 5] The time-averaged ventilation (TAV) ratio shall be determined as TAVratio = Vspt/Vm +[Heading 5] The total cycle time (TCT) shall be 15 minutes (adjustable) +[Heading 5] Open period. During the open period, the TAV airflow setpoint Vspt* shall be equal to Vm for a period of time OP, which is the larger of the following: +[Heading 5] 1.5 minutes or +[Heading 5] TCT multiplied by TAVratio +[Heading 5] Closed period. During the closed period, Vspt* shall be set to 0 for a period of time CP, where CP = TCT – OP. The VAV damper control loop shall be disabled with output set equal to 0 during the closed period. At the end of each closed period, the VAV damper shall be commanded to the last position from the previous open period prior to reenabling the control loop. +[Heading 5] During TAV mode, each cycle shall consist of an open and closed period that alternate until Vspt is greater than Vm. +[Info. box] The following logic ensures that multiple zones do not enter TAV mode at the same time, avoiding the synchronized opening and closing of VAV dampers. Where there are a small number of zones and the majority may potentially be in TAV mode synchronously, avoiding this issue may be more reliably achieved by sequencing the VAV terminal units deterministically so that each VAV terminal unit always opens at a specific minute into the total cycle time. The aim of this sequencing is to ensure that the total airflow is as constant as possible over the total cycling time even if all of the VAV terminal units enter TAV mode at the same time (e.g., when a building-wide temperature setback occurs). +[Info. box] For example, the total open cycle for VAV terminal-unit A opens at minute 1 of the total cycle time, VAV terminal-unit B opens at minute x of the total cycle time, etc. +[Info. box] The random number for each terminal unit, RNDM, can be determined using a random number generator each time the unit enters TAV mode or set manually to a fixed value. If configured manually, set RNDM for each terminal unit to a unique value within the range of 0.0 to 1.0 such that the values are evenly distributed across the terminal units within a system. +[Heading 5] When first entering TAV mode, start with an initial open period of duration RNDM*OP, where RNDM is a random number between 0.0 and 1.0. +[Heading 4] When in TAV mode, the active airflow setpoint, Vspt, shall be overridden to Vspt*. +[Heading 2] Generic Thermal Zones (Originally Paragraph 5.3 in Guideline 36-2021) +[Heading 3] This section applies to all single-zone systems and subzones of air-handling systems, such as VAV boxes, fan-powered boxes, etc. +[Heading 3] Setpoints +[Heading 4] See Section 1.1.1.1 for zone temperature setpoints. +[Heading 4] Each zone shall have separate occupied and unoccupied heating and cooling setpoints. +[Heading 4] The active setpoints shall be determined by the operating mode of the Zone Group (see Section 3.4.6). +[Heading 5] The set points shall be the occupied set points during occupied mode, warm-up mode, and cooldown mode. +[Heading 5] The set points shall be the unoccupied set points during unoccupied mode, setback mode, and setup mode. +[Heading 4] The software shall prevent the following: +[Heading 5] The heating setpoint from exceeding the cooling setpoint minus 0.5°C (i.e., the minimum difference between heating and cooling setpoints shall be 0.5°C). +[Heading 5] The unoccupied heating setpoint from exceeding the occupied heating setpoint. +[Heading 5] The unoccupied cooling setpoint from being less than the occupied cooling setpoint. +[Heading 4] Where the zone has a local setpoint adjustment knob/button: +[Heading 5] The setpoint adjustment offsets established by the occupant shall be software points that are persistent (e.g., not reset daily), but the actual offset used in control logic shall be adjusted based on limits and modes as describe below. +[Heading 5] The adjustment shall be capable of being limited in software. +[Info. box] These are absolute limits imposed by programming, which are in addition to the range limits (e.g., ±4°F) of the thermostat adjustment device. +[Heading 6] As a default, the active occupied cooling setpoint shall be limited between 22°C and 27°C +[Heading 6] As a default, the active occupied heating setpoint shall be limited between 18°C and 22°C +[Heading 5] The active heating and cooling setpoints shall be independently adjustable, respecting the limits and anti-overlap logic described in Sections 3.3.2.3.a and 3.3.2.5.b. If zone thermostat provides only a single set-point adjustment, then the adjustment shall move both the active heating and cooling setpoints upward or downward by the same amount, within the limits described in Section 3.3.2.5.b. +[Heading 5] The adjustment shall only affect occupied setpoints in Occupied Mode, Warmup Mode, and Cooldown Mode and shall have no impact on setpoints in all other modes. +[Heading 5] At the onset of demand limiting, the local set-point adjustment value shall be frozen. Further adjustment of the setpoint by local controls shall be suspended for the duration of the demand-limit event. +[Info. box] Demand limits can be triggered for different reasons, including initiating utility demand shed events, exceeding a predefined threshold, or to prevent excessive rates in a ratchet schedule. Additional logic (not provided here) is needed to define the demand-limit levels. +[Info. box] For example: +[InfoboxList] 1. Sliding Window. The demand control function shall use a sliding window method selectable in increments of 1 minute, up to 60 minutes, with a 15-minute default. +[InfoboxList] 2. Demand-Limit Levels. Demand time periods shall be set up as per utility rate schedule. For each on-peak or partial-peak period, three demand limits can be defined. When the measured demand exceeds the limit, the demand-limit level switch for that level shall be set; when demand is less than 10% below the limit for a minimum of 15 minutes, and the time is no longer within the on-peak or partial-peak window, the switch shall be reset. These levels are used at the zone level (see Sections 3.3.2.6 and 3.3.2.7) to shed demand. +[InfoboxList] 3. Utility Demand Limiting. The Utility Company shall send the building automation system a demand limiting request via a network connection to limit building demand during peak periods as required per California Title 24. The demand limit level request sent by the Utility Company shall be used at the zone level (see Sections 3.3.2.6 and 3.3.2.7) to shed demand. +[Info. box] An override for critical zones such as data centers or equipment rooms should be provided through the graphical user interface (GUI). This override feature should require some level of supervision so that all zones do not declare themselves critical. +[Info. box] Demand limits can also be simultaneously applied to lighting for systems with daylighting/dimming capability and that are integrated with the HVAC BAS. +[Heading 4] Cooling Demand Limit Set-Point Adjustment. The active cooling setpoints for all zones shall be increased when a demand limit is imposed on the associated Zone Group. The operator shall have the ability to exempt individual zones from this adjustment through the normal BAS user interface. Changes due to demand limits are not cumulative. +[Heading 5] At demand-limit Level 1, increase setpoint by 0.5°C. +[Heading 5] At demand-limit Level 2, increase setpoint by 1°C. +[Heading 5] At demand-limit Level 3, increase setpoint by 2°C. +[Heading 4] Heating Demand-Limit Set-Point Adjustment. The active heating setpoints for all zones shall be decreased when a demand limit is imposed on the associated Zone Group. The operator shall have the ability to exempt individual zones from this adjustment through the normal BAS user interface. Changes due to demand limits are not cumulative. +[Heading 5] At demand-limit Level 1, decrease setpoint by 0.5°C. +[Heading 5] At demand-limit Level 2, decrease setpoint by 1°C. +[Heading 5] At demand-limit Level 3, decrease setpoint by 2°C. +[Info. box] Heating demand limits may be desirable in buildings with electric heat or heat pumps or in regions with limited gas distribution infrastructure. +[Heading 4] Occupancy Sensors. For zones that have an occupancy switch: +[Heading 5] When the switch indicates that the space has been unpopulated for 5 minutes continuously during the Occupied Mode, the active heating setpoint shall be decreased by 0.5°C and the cooling setpoint shall be increased by 0.5°C. +[Info. box] The mild 0.5°C setback/setup is per ASHRAE/IES Standard 90.1. It is deliberately mild for the following reasons: +[InfoboxList] 1. Complaints are likely if the space temperature is too uncomfortable when occupants return. +[InfoboxList] 2. Spaces recovering from setback/setup can become temporary rogues zones, pushing supply air temperature and static pressure setpoints to less efficient values; +[InfoboxList] 3. The primary purpose of the reset is to push the zone into deadband to minimize airflow and eliminate simultaneous heating and cooling. This can occur with only a minor setback. +[InfoboxList] 4. Heating and cooling loads are only slightly affected by setback/setup (and not affected at all for interior zones), so there is not much value in larger setback/setup offsets. +[Heading 5] When the switch indicates that the space has been populated for 1 minute continuously, the active heating and cooling setpoints shall be restored to their previous values. +[Info. box] Occupancy sensors are often provided as part of the lighting control system due to ASHRAE/IES Standard 90.1 and California Title 24 requirements. The point can be tied into the HVAC BAS in several ways to avoid the cost of an additional occupancy sensor: +[InfoboxList] 1. If the occupancy sensor is an addressable point and the lighting controls have BACnet or other interface capability, the point can be mapped to the BAS via this interface. +[InfoboxList] 2. Some occupancy sensors include auxiliary dry contacts that can be wired to a digital input at the zone controller. +[Heading 4] Hierarchy of Set-Point Adjustments. The following adjustment restrictions shall prevail in order from highest to lowest priority: +[Heading 5] Setpoint overlap restriction (Section 3.3.2.3.a) +[Heading 5] Absolute limits on local setpoint adjustment (Section 3.3.2.5.b) +[Heading 5] Demand limit +[Heading 5] Occupancy sensors. Change of setpoint by occupancy sensor is added to change of setpoint by any demand limits in effect. +[Heading 5] Local set-point adjustment. Any changes to setpoint by local adjustment are frozen at the onset of the demand limiting event and remain fixed for the duration of the event. Additional local adjustments are ignored for the duration of the demand limiting event. +[Heading 5] Scheduled setpoints based on Zone Group mode +[Heading 3] Local Override. When thermostat override buttons are depressed, the call for Occupied Mode operation shall be sent to the Zone Group control for 60 minutes. +[Info. box] Local overrides will cause all zones in the Zone Group to operate in Occupied Mode to ensure that the system has adequate load to operate stably. +[Heading 3] Control Loops +[Heading 4] Two separate control loops, the Cooling Loop and the Heating Loop, shall operate to maintain space temperature at setpoint. +[Heading 5] The Heating Loop shall be enabled whenever the space temperature is below the current zone heating set-point temperature and disabled when space temperature is above the current zone heating setpoint temperature and the loop output is zero for 30 seconds. The loop may remain active at all times if provisions are made to minimize integral windup. +[Heading 5] The Cooling Loop shall be enabled whenever the space temperature is above the current zone cooling set-point temperature and disabled when space temperature is below the current zone cooling set-point temperature and the loop output is zero for 30 seconds. The loop may remain active at all times if provisions are made to minimize integral windup. +[Heading 4] The Cooling Loop shall maintain the space temperature at the active cooling setpoint. The output of the loop shall be a software point ranging from 0% (no cooling) to 100% (full cooling). +[Heading 4] The Heating Loop shall maintain the space temperature at the active heating setpoint. The output of the loop shall be a software point ranging from 0% (no heating) to 100% (full heating). +[Heading 4] Loops shall use proportional + integral logic or other technology with similar performance. Proportional-only control is not acceptable, although the integral gain shall be small relative to the proportional gain. P and I gains shall be adjustable by the operator. +[Heading 4] See other sections for how the outputs from these loops are used. +[Heading 3] Zone State +[Heading 4] Heating. When the output of the space Heating Loop is nonzero and the output of the Cooling Loop is equal to zero. +[Heading 4] Cooling. When the output of the space Cooling Loop is nonzero and the output of the Heating Loop is equal to zero. +[Heading 4] Deadband. When not in either heating or cooling. +[Heading 3] Zone Alarms +[Heading 4] Zone Temperature Alarms +[Heading 5] High-temperature alarm +[Heading 6] If the zone is 2°C above cooling setpoint for 10 minutes, generate a Level 4 alarm. +[Heading 6] If the zone is 3°C above cooling setpoint for 10 minutes, generate a Level 3 alarm. +[Heading 5] Low-temperature alarm +[Heading 6] If the zone is 2°C below heating setpoint for 10 minutes, generate a Level 4 alarm. +[Heading 6] If the zone is 3°C below heating setpoint for 10 minutes, generate a Level 3 alarm. +[Info. box] Default time delay for zone temperature alarm (10 minutes) is intentionally long to minimize nuisance alarms. For critical zones, such as IT closets, consider reducing time delay or setting delay to zero. +[Heading 5] Suppress zone temperature alarms as follows: +[Heading 6] After zone setpoint is changed per Section 3.1.21. +[Heading 6] While Zone Group is in Warmup Mode or Cooldown Mode. +[Info. box] Zone alarms are not suppressed in setup, setback, or Unoccupied Modes so that heating or cooling equipment or control failures are detected that could result in excessive pull-down or pick-up loads and even freezing of pipes if left undetected. See Section 3.4.6 for description of zone-group operating modes. +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 4] See Section 1.1.3 for Zone Group assignments. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 1°C above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 4°C, the zone group shall enter setback mode until all zones are above 7°C, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 1°C below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] VAV Terminal Unit—Cooling Only (Originally Paragraph 5.5 in Guideline 36-2021) +[Heading 3] See “Generic Thermal Zones” (Section 3.3) for setpoints, loops, control modes, alarms, etc. +[Heading 3] See “Generic Ventilation Zones” (Section 3.2) for calculation of zone minimum outdoor airflow. +[Info. box] CO2 DCV for cooling-only zones can lead to overcooling due to the faster rise in CO2 levels from people in the room versus the increase in cooling loads from people. Including heat in all zones with CO2 DCV is therefore recommended. +[Heading 3] See Section 1.1.2.1 for zone minimum airflow setpoint Vmin, zone maximum cooling airflow setpoint Vcool-max, and zone maximum heating airflow setpoint Vheat-max. +[Info. box] If the minimum ventilation rate is more than 25% or so of the cooling maximum, or DCV is used, a reheat box is recommended to avoid overcooling. DCV logic is not provided for cooling-only boxes, because doing so results in periods of overcooling, as the CO2 levels due to occupants rises much faster than the cooling load due to occupants because of thermal mass. +[Info. box] Cooling-only terminal units can provide heating only when the AHU supply air temperature is more than 3°C above the room temperature. +[Heading 3] Active endpoints used in the control logic depicted in Figure 5.5.5 shall vary depending on the mode of the Zone Group the zone is a part of (see Table 5.5.4). +| Table 5.5.4 Endpoints as a Function of Zone Group Mode | Table 5.5.4 Endpoints as a Function of Zone Group Mode | Table 5.5.4 Endpoints as a Function of Zone Group Mode | Table 5.5.4 Endpoints as a Function of Zone Group Mode | Table 5.5.4 Endpoints as a Function of Zone Group Mode | Table 5.5.4 Endpoints as a Function of Zone Group Mode | Table 5.5.4 Endpoints as a Function of Zone Group Mode | +| Endpoint | Occupied | Cooldown | Setup | Warmup | Setback | Unoccupied | +| Cooling maximum | Vcool-max | Vcool-max | Vcool-max | 0 | 0 | 0 | +| Minimum | Vmin* | 0 | 0 | 0 | 0 | 0 | +| Heating maximum | Vheat-max | 0 | 0 | Vcool-max | Vcool-max | 0 | +[Heading 3] Control logic is depicted schematically in Figure 5.5.5 and described in the following subsections. +[FigureCaption] Figure 5.5.5 Control logic for cooling-only VAV zone. +[Heading 4] When the Zone State is cooling, the cooling-loop output shall be mapped to the active airflow setpoint from the minimum endpoint to the cooling maximum endpoint. +[Heading 5] If supply air temperature from the air handler is greater than room temperature, the active airflow setpoint shall be no higher than the minimum endpoint. +[Heading 4] When the Zone State is deadband, the active airflow setpoint shall be the minimum endpoint. +[Heading 4] When the Zone State is heating, the Heating Loop output shall be mapped to the active airflow setpoint from the minimum endpoint to the heating maximum endpoint. +[Heading 5] If supply air temperature from the air handler is less than 3°C above the room temperature, the active airflow setpoint shall be no higher than the minimum endpoint. +[Heading 4] The VAV damper shall be modulated by a control loop to maintain the measured airflow at the active setpoint. +[Heading 3] Alarms +[Heading 4] Low Airflow +[Heading 5] If the measured airflow is less than 70% of setpoint for 10 minutes while setpoint is greater than zero, generate a Level 4 alarm. +[Heading 5] If the measured airflow is less than 50% of setpoint for 10 minutes while setpoint is greater than zero, generate a Level 3 alarm. +[Heading 5] If a zone has an importance multiplier of 0 (see Section 3.1.14.2.a.1) for its static pressure reset T&R control loop, low airflow alarms shall be suppressed for that zone. +[Heading 4] Airflow Sensor Calibration. If the fan serving the zone is off and airflow sensor reading is above the larger of 10% of the cooling maximum airflow setpoint or 24 L/s for 30 minutes, generate a Level 3 alarm. +[Heading 4] Leaking Damper. If the damper position is 0%, and airflow sensor reading is above the larger of 10% of the cooling maximum airflow setpoint or 24 L/s for 10 minutes while the fan serving the zone is proven on, generate a Level 4 alarm. +[Info. box] The constant value thresholds for the airflow sensor calibration and leaking damper alarms are a function of the transducer and A/D converter used to measure airflow. The value used should be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a system-level point to +[Heading 4] force zone airflow setpoint to zero, +[Heading 4] force zone airflow setpoint to Vcool-max, +[Heading 4] force zone airflow setpoint to Vmin, +[Heading 4] force damper full closed/open, and +[Heading 4] reset request-hours accumulator point to zero (provide one point for each reset type listed in the next section). +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the commissioning authority (CxA) can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] System Requests +[Heading 4] Cooling SAT Reset Requests +[Heading 5] If the zone temperature exceeds the zone’s cooling setpoint by 3°C for 2 minutes and after suppression period due to setpoint change per Section 3.1.21, send 3 requests. +[Heading 5] Else if the zone temperature exceeds the zone’s cooling setpoint by 2°C for 2 minutes and after suppression period due to setpoint change per Section 3.1.21, send 2 requests. +[Heading 5] Else if the Cooling Loop is greater than 95%, send 1 request until the Cooling Loop is less than 85%. +[Heading 5] Else if the Cooling Loop is less than 95%, send 0 requests. +[Heading 4] Static Pressure Reset Requests +[Heading 5] If the measured airflow is less than 50% of setpoint while setpoint is greater than zero and the damper position is greater than 95% for 1 minute, send 3 requests. +[Heading 5] Else if the measured airflow is less than 70% of setpoint while setpoint is greater than zero and the damper position is greater than 95% for 1 minute, send 2 requests. +[Heading 5] Else if the damper position is greater than 95%, send 1 request until the damper position is less than 85%. +[Heading 5] Else if the damper position is less than 95%, send 0 requests. +[Info. box] If the minimum ventilation rate is more than 25% or so of the cooling maximum, or demand-controlled ventilation is used, a reheat box is recommended to avoid overcooling. +[Heading 2] VAV Terminal Unit with Reheat (Originally Paragraph 5.6 in Guideline 36-2021) +[Heading 3] See “Generic Thermal Zones” (Section 3.3) for setpoints, loops, control modes, alarms, etc. +[Heading 3] See “Generic Ventilation Zones” (Section 3.2) for calculation of zone minimum outdoor airflow. +[Heading 3] See Section 1.1.2.2 for zone minimum airflow setpoints Vmin, zone maximum cooling airflow setpoint Vcool-max, zone maximum heating airflow setpoint Vheat-max, zone minimum heating airflow setpoint Vheat-min, and the maximum DAT rise above heating setpoint MaxT. +[Heading 3] Active endpoints used in the control logic depicted in Figure 5.6.5 shall vary depending on the mode of the Zone Group the zone is a part of (see Table 5.6.4). +| Table 5.6.4 Endpoints as a Function of Zone Group Mode | Table 5.6.4 Endpoints as a Function of Zone Group Mode | Table 5.6.4 Endpoints as a Function of Zone Group Mode | Table 5.6.4 Endpoints as a Function of Zone Group Mode | Table 5.6.4 Endpoints as a Function of Zone Group Mode | Table 5.6.4 Endpoints as a Function of Zone Group Mode | Table 5.6.4 Endpoints as a Function of Zone Group Mode | +| Endpoint | Occupied | Cooldown | Setup | Warmup | Setback | Unoccupied | +| Cooling maximum | Vcool-max | Vcool-max | Vcool-max | 0 | 0 | 0 | +| Cooling minimum | Vmin* | 0 | 0 | 0 | 0 | 0 | +| Minimum | Vmin* | 0 | 0 | 0 | 0 | 0 | +| Heating minimum | Max (Vheat-min, Vmin*) | Vheat-min | 0 | Vheat-max | Vheat-max | 0 | +| Heating maximum | Max (Vheat-max, Vmin*) | Vheat-max | 0 | Vcool-max | Vcool-max | 0 | +[Info. box] These sequences use different maximum airflow setpoints for heating and cooling. This dual-max logic allows the minimum airflow setpoint to be lower than in a conventional sequence where the minimum airflow equals the heating airflow. +[Info. box] Heating endpoints are nonzero in cooldown to allow for individual zones within a Zone Group that may need heating while the Zone Group is in cooldown. +[Info. box] The warmup and setback minimum endpoints are set to zero to ensure spaces that do not want heat during these modes receive no air; because the supply air temperature can be warm in these modes if the AHU has a heating coil, any minimum could cause overheating. The heating minimum endpoint is set to Vheat-max and the heating maximum endpoint is set to Vcool-max to provide faster response. This also ensures nonzero flow for the first half of the Heating Loop, avoiding instabilities. +[Heading 3] Control logic is depicted schematically in Figure 5.6.5 and described in the following subsections. +[FigureCaption] Figure 5.6.5 Control logic for VAV reheat zone. +[Heading 4] When the Zone State is cooling, the cooling-loop output shall be mapped to the active airflow setpoint from the cooling minimum endpoint to the cooling maximum endpoint. Heating coil is disabled unless the DAT is below the minimum setpoint (see Section 3.6.5.4). +[Heading 5] If supply air temperature from the air handler is greater than room temperature, the active airflow setpoint shall be no higher than the minimum endpoint. +[Heading 4] When the Zone State is deadband, the active airflow setpoint shall be the minimum endpoint. Heating coil is disabled unless the DAT is below the minimum setpoint (see Section 3.6.5.4). +[Heading 4] When the Zone State is heating, the Heating Loop shall maintain space temperature at the heating setpoint as follows: +[Info. box] The purpose of the following heating sequence is to minimize the reheat energy consumption by first increasing the SAT while maintaining minimum flow, and only increasing the total airflow if needed to satisfy the zone. +[Heading 5] From 0% to 50%, the heating-loop output shall reset the discharge temperature setpoint from the current AHU SAT setpoint to a maximum of MaxT above space temperature setpoint. The active airflow setpoint shall be the heating minimum endpoint. +[Info. box] Standard 90.1-2016 limits overhead supply air to 11°C above space temperature (e.g., 32°C at 21°C space temperature setpoint) to minimize stratification. +[Heading 5] From 51% to 100%, if the DAT is greater than room temperature plus 3°C, the heating-loop output shall reset the active airflow setpoint from the heating minimum endpoint to the heating maximum endpoint. +[Heading 5] The heating coil shall be modulated to maintain the discharge temperature at setpoint. (Directly controlling heating off the zone temperature control loop is not acceptable). +[Heading 6] When the airflow setpoint is pulse-width modulated per Section 3.2.2, the heating coil and PID loop shall be disabled, with output set to 0 during closed periods. +[Heading 4] In Occupied Mode, the heating coil shall be modulated to maintain a DAT no lower than 10°C. +[Info. box] This prevents excessively cold DATs if the AHU is providing high outdoor airflows and does not have a heating coil. +[Heading 4] The VAV damper shall be modulated by a control loop to maintain the measured airflow at the active setpoint. +[Heading 3] Alarms +[Heading 4] Low Airflow +[Heading 5] If the measured airflow is less than 70% of setpoint for 10 minutes while setpoint is greater than zero, generate a Level 4 alarm. +[Heading 5] If the measured airflow is less than 50% of setpoint for 10 minutes while setpoint is greater than zero, generate a Level 3 alarm. +[Heading 5] If a zone has an Importance-Multiplier of 0 (see Section 3.1.14.2.a.1) for its static pressure reset T&R control loop, low airflow alarms shall be suppressed for that zone. +[Heading 4] Low-Discharge Air Temperature +[Heading 5] If the DAT is 8.3°C less than setpoint for 10 minutes, generate a Level 4 alarm. +[Heading 5] If the DAT is 17°C less than setpoint for 10 minutes, generate a Level 3 alarm. +[Heading 4] Airflow Sensor Calibration. If the fan serving the zone is off and airflow sensor reading is above the larger of 10% of the cooling maximum airflow setpoint or 24 L/s for 30 minutes, generate a Level 3 alarm. +[Heading 4] Leaking Damper. If the damper position is 0%, and airflow sensor reading is above the larger of 10% of the cooling maximum airflow setpoint or 24 L/s for 10 minutes while the fan serving the zone is proven on, generate a Level 4 alarm. +[Info. box] The constant value thresholds for the airflow sensor calibration and leaking damper alarms are a function of the transducer and A/D converter used to measure airflow. The value used should be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a system level point to +[Heading 4] force zone airflow setpoint to zero, +[Heading 4] force zone airflow setpoint to Vcool-max, +[Heading 4] force zone airflow setpoint to Vmin, +[Heading 4] force zone airflow setpoint to Vheat-max, +[Heading 4] force damper full closed/open, +[Heading 4] force heating to off/closed, and +[Heading 4] reset request-hours accumulator point to zero (provide one point for each reset type listed in the next section). +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] System Requests +[Heading 4] Cooling SAT Reset Requests +[Heading 5] If the zone temperature exceeds the zone’s cooling setpoint by 3°C for 2 minutes and after suppression period due to setpoint change per Section 3.1.21, send 3 requests. +[Heading 5] Else if the zone temperature exceeds the zone’s cooling setpoint by 2°C for 2 minutes and after suppression period due to setpoint change per Section 3.1.21, send 2 requests. +[Heading 5] Else if the Cooling Loop is greater than 95%, send 1 request until the Cooling Loop is less than 85%. +[Heading 5] Else if the Cooling Loop is less than 95%, send 0 requests. +[Heading 4] Static Pressure Reset Requests +[Heading 5] If the measured airflow is less than 50% of setpoint while setpoint is greater than zero and the damper position is greater than 95% for 1 minute, send 3 requests. +[Heading 5] Else if the measured airflow is less than 70% of setpoint while setpoint is greater than zero and the damper position is greater than 95% for 1 minute, send 2 requests. +[Heading 5] Else if the damper position is greater than 95%, send 1 request until the damper position is less than 85%. +[Heading 5] Else if the damper position is less than 95%, send 0 requests. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 120 Pa | +| SPmin | 25 Pa | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –12 Pa | +| SPres | +15 Pa | +| SPres-max | +32 Pa | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [21°C – 16°C] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 18°C – 13°C) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.1°C | +| SPres | –0.2°C | +| SPres-max | –0.6°C | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 12°C, Max_ClgSAT = 18°C, OAT_Max = 21°C, and OAT_Min = 16°C. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 35°C. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for California Title 24 Ventilation +[Heading 5] See Section 3.2.1.4 for zone outdoor air rates Zone-Abs-OA-min and Zone-Des-OA-min. +[Heading 5] See Section 1.1.4.2.b for setpoints AbsMinOA and DesMinOA. +[Heading 5] Effective outdoor air absolute minimum and design minimum setpoints are recalculated continuously based on the mode of the zones being served. +[Heading 6] AbsMinOA* is the sum of Zone-Abs-OA-min for all zones in all Zone Groups that are in Occupied Mode but shall be no larger than the absolute minimum outdoor airflow AbsMinOA. +[Heading 6] DesMinOA* is the sum of Zone-Des-OA-min for all zones in all Zone Groups that are in Occupied Mode but shall be no larger than the design minimum outdoor airflow DesMinOA. +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for California Title 24 Ventilation +[Heading 5] See Section 3.16.3.2 for calculation of current setpoint DesMinOA*. +[Heading 5] The minimum outdoor air setpoint MinOAsp shall be equal to DesMinOA*. +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 4.4°C for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 6°C. Disable this function when supply air temperature rises above 7°C for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 3.3°C for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 6°C), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 7°C with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 3.3°C and 7°C with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 3.3°C with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 3.3°C for 15 minutes or below 1°C for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 27°C, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 27°C at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 12.5 Pa for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 3°C for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 2°C for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/mixed--ahu-co-rh.payload.json b/server/scripts/sequence-doc/tests/static/golden/mixed--ahu-co-rh.payload.json new file mode 100644 index 00000000..cb345308 --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/mixed--ahu-co-rh.payload.json @@ -0,0 +1,663 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.tit24CliZon-ctl.tit24CliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_3" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.Electric" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.ElectricHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + false + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.ElectricHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-damVAV.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-coiHea.dat.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-datCoiHea.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.dpAir_nominal-datCoiHea.dpAir_nominal": [ + 0 + ], + "Buildings.Templates.Components.Data.Coil.mAir_flow_nominal-dat.coiHea.mAir_flow_nominal": [ + "ctl.VAirHeaSet_flow_max*1.2" + ], + "Buildings.Templates.Components.Data.Coil.mAir_flow_nominal-datCoiHea.mAir_flow_nominal": [ + "ctl.VAirHeaSet_flow_max*1.2" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.ElectricHeating" + ], + "Buildings.Templates.Components.Data.Coil.typ-datCoiHea.typ": [ + "Buildings.Templates.Components.Types.Coil.ElectricHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHea.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.dpAir_nominal-coiHea.dpAir_nominal": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHea.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHea.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.mAir_flow_nominal-coiHea.mAir_flow_nominal": [ + "ctl.VAirHeaSet_flow_max*1.2" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHea.typ": [ + "Buildings.Templates.Components.Types.Coil.ElectricHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.ElectricHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHea.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.SI" + ], + "Buildings.Templates.Data.AllSystems.tit24CliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_3" + ], + "Buildings.Templates.ZoneEquipment": [ + "Buildings.Templates.ZoneEquipment.VAVBoxCoolingOnly", + "Buildings.Templates.ZoneEquipment.VAVBoxReheat" + ], + "Buildings.Templates.ZoneEquipment.Components.Data.VAVBoxController.VAirHeaSet_flow_min-dat.ctl.VAirHeaSet_flow_min": [ + 0 + ], + "Buildings.Templates.ZoneEquipment.Components.Data.VAVBoxController.dTAirDisHea_max-dat.ctl.dTAirDisHea_max": [ + 11 + ], + "Buildings.Templates.ZoneEquipment.Components.Data.VAVBoxController.effAirDisCoo-dat.ctl.effAirDisCoo": [ + 1 + ], + "Buildings.Templates.ZoneEquipment.Components.Data.VAVBoxController.effAirDisHea-dat.ctl.effAirDisHea": [ + 0.8 + ], + "Buildings.Templates.ZoneEquipment.Components.Interfaces.ControllerG36VAVBox.VAirHeaSet_flow_min-ctl.VAirHeaSet_flow_min": [ + 0 + ], + "Buildings.Templates.ZoneEquipment.Components.Interfaces.ControllerG36VAVBox.dTAirDisHea_max-ctl.dTAirDisHea_max": [ + 11 + ], + "Buildings.Templates.ZoneEquipment.Components.Interfaces.ControllerG36VAVBox.effAirDisCoo-ctl.effAirDisCoo": [ + 1 + ], + "Buildings.Templates.ZoneEquipment.Components.Interfaces.ControllerG36VAVBox.effAirDisHea-ctl.effAirDisHea": [ + 0.8 + ], + "Buildings.Templates.ZoneEquipment.Components.Interfaces.ControllerG36VAVBox.have_hotWatCoi-ctl.have_hotWatCoi": [ + false + ], + "Buildings.Templates.ZoneEquipment.Components.Interfaces.ControllerG36VAVBox.have_occSen-ctl.have_occSen": [ + true, + false + ], + "Buildings.Templates.ZoneEquipment.Components.Interfaces.ControllerG36VAVBox.have_winSen-ctl.have_winSen": [ + false + ], + "Buildings.Templates.ZoneEquipment.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.ZoneEquipment.Components.Data.VAVBoxController" + ], + "Buildings.Templates.ZoneEquipment.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly", + "Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat" + ], + "Buildings.Templates.ZoneEquipment.Components.Interfaces.PartialControllerVAVBox.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.ZoneEquipment.Components.Interfaces.PartialControllerVAVBox.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24" + ], + "Buildings.Templates.ZoneEquipment.Configuration.PartialAirTerminal.typCtl-cfg.typCtl": [ + "Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly", + "Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat" + ], + "Buildings.Templates.ZoneEquipment.Configuration.VAVBox.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24" + ], + "Buildings.Templates.ZoneEquipment.Configuration.VAVBox.typCoiHea-cfg.typCoiHea": [ + "Buildings.Templates.Components.Types.Coil.ElectricHeating" + ], + "Buildings.Templates.ZoneEquipment.Configuration.VAVBox.typDamVAV-cfg.typDamVAV": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.ZoneEquipment.Configuration.VAVBox.typValCoiHea-cfg.typValCoiHea": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.ZoneEquipment.Data.PartialAirTerminal.ctl-dat.ctl": [ + "Buildings.Templates.ZoneEquipment.Components.Data.VAVBoxController" + ], + "Buildings.Templates.ZoneEquipment.Data.PartialAirTerminal.id-dat.id": [ + "" + ], + "Buildings.Templates.ZoneEquipment.Data.PartialAirTerminal.mAir_flow_nominal-dat.mAir_flow_nominal": [ + "max(ctl.VAirHeaSet_flow_max,ctl.VAirCooSet_flow_max)*1.2" + ], + "Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + 0 + ], + "Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal.QHeaWat_flow_nominal-QHeaWat_flow_nominal": [ + 0 + ], + "Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal.cfg-cfg": [ + "Buildings.Templates.ZoneEquipment.Configuration.VAVBox" + ], + "Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal.dat-dat": [ + "Buildings.Templates.ZoneEquipment.Data.VAVBox" + ], + "Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal.have_souChiWat-have_souChiWat": [ + false + ], + "Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal.have_souHeaWat-have_souHeaWat": [ + false + ], + "Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal.id-id": [ + "" + ], + "Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal.mAirPri_flow_nominal-mAirPri_flow_nominal": [ + "max(ctl.VAirHeaSet_flow_max,ctl.VAirCooSet_flow_max)*1.2" + ], + "Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal.mAir_flow_nominal-mAir_flow_nominal": [ + "max(ctl.VAirHeaSet_flow_max,ctl.VAirCooSet_flow_max)*1.2" + ], + "Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal.mChiWat_flow_nominal-mChiWat_flow_nominal": [ + 0 + ], + "Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal.mHeaWat_flow_nominal-mHeaWat_flow_nominal": [ + 0 + ], + "Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal.typ-typ": [ + "Buildings.Templates.ZoneEquipment.Types.Configuration.VAVBoxCoolingOnly", + "Buildings.Templates.ZoneEquipment.Types.Configuration.VAVBoxReheat" + ], + "Buildings.Templates.ZoneEquipment.Interfaces.VAVBox.coiHea-coiHea": [ + "Buildings.Templates.Components.Coils.None", + "Buildings.Templates.Components.Coils.ElectricHeating" + ], + "Buildings.Templates.ZoneEquipment.Interfaces.VAVBox.ctl-ctl": [ + "Buildings.Templates.ZoneEquipment.Components.Controls.G36VAVBoxCoolingOnly", + "Buildings.Templates.ZoneEquipment.Components.Controls.G36VAVBoxReheat" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/static/golden/mixed--co-rh-contrast.expected.txt b/server/scripts/sequence-doc/tests/static/golden/mixed--co-rh-contrast.expected.txt new file mode 100644 index 00000000..fecbc87e --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/mixed--co-rh-contrast.expected.txt @@ -0,0 +1,647 @@ +[Normal] Lawrence Berkeley National Laboratory +[Normal] ctrl-flow +[Normal] High Performance Controls Design Tool +[Normal] Sequences of Operation for HVAC Systems +[Normal] Based on ASHRAE Guideline 36 – 2021 +[Normal] (ctrl-flow source file version 1.0) +[Normal] This document was automatically generated by the ctrl-flow tool (ctrl-flow.lbl.gov) based on user-selected options from ASHRAE Guideline 36-2021. Users are responsible for reviewing and editing the sequences of operation for specific project applications. The entire risk as to the quality and performance of use of this content is with the user. In no event will the US Department of Energy, Lawrence Berkeley National Laboratory, or ASHRAE be liable for any damages including and without limitation, any lost profits or other incidental or consequential damages arising out of the use of this content. +[Heading 1] SETPOINTS, DESIGN and FIELD DETERMINED +[Heading 2] Information Provided by Designer (Originally Paragraph 3.1 in Guideline 36-2021) +[Heading 3] General Zone Information +[Heading 4] Zone Temperature Setpoints +[Info. box] Zone temperature initial setpoints can be specified by the designer in a number of ways. The most flexible way is to include them for each zone in variable-air-volume (VAV) box and single-zone VAV (SZVAV) air-handling unit (AHU) equipment schedules. They can also be generically listed by zone type, such as the example in (a) below. +[Heading 5] Default setpoints shall be based on zone type as shown in Table 3.1.1.1. +| Table 3.1.1.1 Default Setpoints | Table 3.1.1.1 Default Setpoints | Table 3.1.1.1 Default Setpoints | Table 3.1.1.1 Default Setpoints | Table 3.1.1.1 Default Setpoints | +| Zone Type | Occupied | Occupied | Unoccupied | Unoccupied | +| Zone Type | Heating | Cooling | Heating | Cooling | +| VAV | 70°F | 75°F | 60°F | 90°F | +| Mechanical/electrical rooms | 65°F | 85°F | 65°F | 85°F | +| Networking/computer | 65°F | 75°F | 65°F | 75°F | +[Heading 4] Outdoor Air Ventilation Setpoints +[Info. box] Ventilation setpoints can be specified by the designer in a number of ways. The most flexible is to include them for each zone in VAV box and single-zone (SZ) equipment schedules. +[Heading 5] For projects complying with the Ventilation Rate Procedure of ASHRAE Standard 62.1-2016: +[Heading 6] The area component of the breathing zone outdoor airflow Vbz-A +[Info. box] This is the zone floor area times the outdoor airflow rate per unit area, as given in Standard 62.1-2016, Table 6.2.2.1; i.e., Vbz-A = Az*Ra. +[Heading 6] The population component of the breathing zone outdoor airflow Vbz-P +[Info. box] This is the zone design population (without diversity) times the outdoor airflow rate per occupant, as given in Standard 62.1-2016, Table 6.2.2.1; i.e.; Vbz-P = Pz*Rp. +[Heading 6] Zone air distribution effectiveness EzH in heating +[Heading 6] Zone air distribution effectiveness EzC in cooling +[Info. box] Zone air distribution effectiveness depends on the relative locations of supply and return in the space, per ASHRAE Standard 62.1-2016, Table 6.2.2.2. +[Heading 6] Indicate where occupied-standby mode is allowed, based on the zone occupancy category per Standard 62.1-2016, Table 6.2.2.1. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode and is not considered a zone-group operating mode. See Section 3.4.6 for zone-group operating modes. +[Heading 4] CO2 Setpoints +[Info. box] Space CO2 setpoints are used for demand-controlled ventilation (DCV) and monitoring/alarming as required by LEED and other green building standards. +[Info. box] It is the designer’s responsibility to determine CO2 setpoints. The maximum setpoint varies by ventilation standard. Some guidance is provided below for Standard 62.1. The designer may also decide to set lower, more conservative setpoints for improved indoor air quality but at the expense of higher energy use. +[Info. box] Standard 62.1 CO2 Setpoint Guidance +[Info. box] Recommended maximum CO2 is 90% of the steady state concentration per Lawrence: +[Info. box] CO2setpoint = 0.9 * [COA + (8400 * Ez * m)/((Rp+Ra*Az)/Pz))] +[Info. box] where COA is the outdoor air CO2 concentration in ppm, Ez is the zone ventilation effectiveness, m is the metabolic rate of occupants, Rp is the people-based component of the ventilation rate, Ra is the area-based component of the ventilation rate, Az is the zone floor area, and Pz is the number of occupants. +[Info. box] The CO2 setpoints in Informative Table 3.1.1.3 assume an ambient concentration of 400 ppm in lieu of using an ambient CO2 sensor. These sequences are based on not having an ambient sensor. This will be conservative in areas with high ambient CO2 concentrations; few areas have lower concentrations. +[Info. box] Setpoints vary by occupancy type, so the easiest way to include this info is by including a column in VAV box and SZ unit schedules and entering the setpoint individually for each zone. +[Info. box] Demand controlled ventilation (DCV) is an active area of research under ASHRAE RP-1747, “Implementation of RP-1547 CO2-Based Demand Controlled Ventilation for Multiple Zone HVAC Systems in Direct Digital Control Systems.” +| Informative Table 3.1.1.3 Default CO2 Setpoints per ASHRAE Standard 62.1 | +| Occupancy Category | CO2 Setpoint (ppm) | Occupancy Category | CO2 Setpoint (ppm) | +| Correctional Facilities | Correctional Facilities | Office Buildings | Office Buildings | +| Cell | 965 | Office Space | 894 | +| Dayroom | 1,656 | Reception Areas | 1,656 | +| Guard Stations | 1,200 | Telephone/Data Entry | 1,872 | +| Booking/Waiting | 1,200 | Main Entry/Lobbies | 1,391 | +| Educational Facilities | Educational Facilities | Miscellaneous Spaces | Miscellaneous Spaces | +| Day Care (Through Age 4) | 1,027 | Bank Vaults/Safe Deposit | 805 | +| Day Care Sickroom | 716 | Computer (Not Printing) | 738 | +| Classrooms (Age 5 – 8) | 864 | Pharmacy (Preparation Area) | 820 | +| Classrooms (Age 9+) | 942 | Photo Studios | 983 | +| Lecture Classroom | 1,305 | Transportation Waiting | 1,305 | +| Lecture Hall (Fixed Seats) | 1,305 | Public Assembly Spaces | Public Assembly Spaces | +| Art Classroom | 837 | Auditorium Seating Area | 1,872 | +| Science Laboratories | 894 | Place of Religious Worship | 1,872 | +| University/College Lab | 894 | Courtrooms | 1,872 | +| Wood/Metal Shop | 1,156 | Legislative Chambers | 1,872 | +| Computer Lab | 965 | Libraries | 805 | +| Media Center | 965 | Lobbies | 2,628 | +| Music/Theater/Dance | 1,620 | Museums (Children’s) | 1,391 | +| Multiuse Assembly | 1,778 | Museum/Galleries | 1,620 | +| Food and Beverage Service | Food and Beverage Service | Retail | Retail | +| Restaurant Dining Rooms | 1,418 | Sales (Except Below) | 1,069 | +| Cafeteria/Fast-Food Dining | 1,536 | Mall Common Areas | 1,620 | +| Bars, Cocktail Lounges | 1,536 | Barbershop | 1,267 | +| General | General | Beauty and Nail Salons | 723 | +| Break Rooms | 1,267 | Pet Shops (Animal Areas) | 709 | +| Coffee Stations | 1,185 | Supermarket | 1,116 | +| Conference/Meeting | 1,620 | Coin-operated Laundries | 1,322 | +| Hotels, Motels, Resorts, Dormitories | Hotels, Motels, Resorts, Dormitories | Sports and Entertainment | Sports and Entertainment | +| Bedroom/Living Area | 910 | Spectator Areas | 1,778 | +| Barracks Sleeping Areas | 1,116 | Disco/Dance Floors | 1,440 | +| Laundry Rooms, Central | 1,249 | Health Clubs/Aerobics Room | 1,735 | +| Laundry Within Dwelling | 983 | Health Clubs/Weight Room | 1,232 | +| Lobbies/Prefunction | 1,494 | Bowling Alley (Seating) | 1,232 | +| Multipurpose Assembly | 2,250 | Gambling Casinos | 1,368 | +| | | Game Arcades | 894 | +| | | Stages, Studios | 1,391 | +[Heading 3] VAV Box Design Information +[Info. box] For the terminal unit sequences, the engineer must provide the setpoint information in the following subsections, typically on VAV box schedules on drawings. +[Heading 4] VAV Cooling-Only Terminal Unit +[Heading 5] Zone maximum cooling airflow setpoint (Vcool-max) +[Heading 5] Zone maximum heating airflow setpoint (Vheat-max) +[Info. box] Cooling-only terminal units can provide heat when the AHU supply air temperature is more than 5°F above the room temperature. The zone maximum heating airflow setpoint should be set to no more than the zone maximum cooling airflow setpoint. If there is no zone maximum heating airflow setpoint scheduled, set Vheat-max equal to Vcool-max. +[Heading 5] Zone minimum airflow setpoint (Vmin). This is an optional entry. If no value is scheduled, or a value of “AUTO” is scheduled, Vmin will be calculated automatically and dynamically to meet ventilation requirements. +[Info. box] In most cases, Vmin should be allowed to be automatically calculated. This ensures compliance with Standard 62.1 and Standard 90.1 prescriptive requirements and with California’s Title 24 Energy Standards requirements, and it results in the lowest energy costs. +[Heading 4] VAV Reheat Terminal Unit +[Heading 5] Zone maximum cooling airflow setpoint (Vcool-max) +[Heading 5] Zone minimum airflow setpoint (Vmin). This is an optional entry. If no value is scheduled, or a value of “AUTO” is scheduled, Vmin will be calculated automatically and dynamically to meet ventilation requirements. +[Info. box] In most cases, Vmin should be allowed to be automatically calculated. This ensures compliance with Standard 62.1 and Standard 90.1 prescriptive requirements and with California’s Title 24 Energy Standards requirements, and it results in the lowest energy costs. +[Heading 5] Zone maximum heating airflow setpoint (Vheat-max) +[Info. box] The design engineer should set Vheat-max such that the design heating load is met by Vheat-max airflow at a discharge air temperature (DAT) equal to MaxT plus the heating setpoint. MaxT can be no higher than 20°F above space temperature setpoint per ASHRAE/IES Standard 90.1-2016 (e.g., DAT no more than 90°F at 70°F space temperature setpoint) for systems supplying air greater than 6 ft above floor, e.g., ceiling supply systems. Zone air distribution effectiveness EzH can be improved if MaxT is less than 15°F, provided that the 150 fpm supply air jet reaches to within 4.5 ft of floor level as indicated in ASHRAE Standard 62.1-2016, Table 6.2.2.2. +[Heading 5] Zone maximum DAT above heating setpoint (MaxT) +[Heading 5] The heating minimum airflow setpoint (Vheat-min) +[Info. box] Vheat-min is the minimum airflow required for reheat coil operation, as is often required of electric resistance coils. It should be as low as possible for best efficiency. For reheat coils with no minimum flow requirement, such as hot-water coils, Vheat-min should be zero. +[Heading 3] Zone Group Assignments +[Info. box] Zones and miscellaneous associated equipment must be assigned to Zone Groups, such as by using a table (see example Informative Table 3.1.3) either on drawings or in Building Automation System (BAS) specifications. Other formats may be used if they convey the same information. +[Info. box] Guidance for Zone Group Assignments +[InfoboxList] 1. Each zone served by a single-zone air handler shall be its own Zone Group. +[InfoboxList] 2. Rooms occupied 24/7, such as computer rooms, networking closets, mechanical, and electrical rooms served by the air handler shall be assigned to a single Zone Group. These rooms do not apply to the Zone Group restrictions below. +[InfoboxList] 3. A Zone Group shall not span floors (per Section 6.4.3.3.4 of ASHRAE 90.1 2016). +[InfoboxList] 4. A Zone Group shall not exceed 25,000 ft2 (per Section 6.4.3.3.4 of ASHRAE 90.1-2016). +[InfoboxList] 5. If future occupancy patterns are known, a single Zone Group shall not include spaces belonging to more than one tenant. +[InfoboxList] 6. A zone shall not be a member of more than one Zone Group. +[InfoboxList] 7. Miscellaneous equipment, such as exhaust fans, serving spaces within a Zone Group shall be included in the Zone Group. +[InfoboxList] 8. Miscellaneous equipment may be included in multiple Zone Group if it serves spaces in multiple Zone Groups. +| Informative Table 3.1.3 Example Zone-Group Table | Informative Table 3.1.3 Example Zone-Group Table | Informative Table 3.1.3 Example Zone-Group Table | Informative Table 3.1.3 Example Zone-Group Table | Informative Table 3.1.3 Example Zone-Group Table | +| Zone Group Name | AH Tag | Terminal Unit Tags | Miscellaneous Equipment Tags | Default Schedule | +| First-floor assembly | AH-1 | VAV-1-1 through 11 | EF-1 | WD: 6 am to 8pm WE: 8 am to 10pm HOL: off | +| Second-floor office | AH-1 | VAV-2-1 through 15 | EF-2 | WD: 7 am to 7 pm SAT: 9 am to 2 pm SUN: off HOL: off | +| IDF rooms | AH-1 | VAV-1-12, VAV-2-16 | | ALL: 12 am to 12 am | +| First-floor lobby | AH-2 | | EF-1 | WD: 6 am to 8 pm WE: 8 am to 10 pm HOL: off | +[Heading 2] Information Determined by Control Contractor (Originally Paragraph 3.3 in Guideline 36-2021) +[Heading 3] VAV Box Controllable Minimum +[Heading 4] This section is used to determine the lowest possible VAV box airflow setpoint (other than zero) allowed by the controls (Vm) used in VAV box control sequences. The minimums shall be stored as software points. +[Heading 5] First, determine the velocity pressure sensor reading VPm in in. of water that will give a reliable flow indication using product literature from the manufacturer of the VAV box controller. If this information is not available from the controller manufacturer, assume 1% of the velocity pressure sensor’s differential pressure range. +[Info. box] See also ASHRAE Standard 195 Method of Test for Rating Air Terminal Unit Control for guidance on determining the lowest controllable minimum velocity pressure. +[Heading 5] Next, determine minimum setpoint Vm using either of the following: +[Heading 6] Option 1: Determine the minimum velocity vm for each VAV box size and model. If the VAV box manufacturer provides an amplification factor F for the flow pickup, calculate the minimum velocity vm as: +[Normal] vm = 4005 * (VPm / F) ^ 0.5 +[Normal] Where F is not known, it can be calculated from the measured airflow at 1 in. of water signal from the VP sensor: +[Normal] F = [4005 * A / (CFM @ 1 in. of water)] ^ 2 +[Normal] where A is the nominal inlet duct area ft2. +[Normal] Calculate the minimum airflow setpoint allowed by the controls (Vm) for each VAV box size as: +[HeadingRunIn] Vm = vmA +[Heading 6] Option 2: Use airflow vs. signal pressure data published by the manufacturer of the VAV box velocity pressure probe. Select a pair of values of airflow and velocity pressure signal as the rated operating point for the calculation, Vrated and VPrated. Use these values and the minimum controllable signal pressure to calculate the minimum controllable flow as: +[Heading 1] SEQUENCES OF OPERATIONS +[Heading 2] General (Originally Paragraph 5.1 in Guideline 36-2021) +[Heading 3] These sequences are intended to be performance based. Implementations that provide the same functional result using different underlying detailed logic will be acceptable. +[Info. box] The intention of these sequences is to specify the functional result of the programming logic. While all sequences are described using specific programming logic as a way to clearly document the resulting functionality, implementations using alternative logic that result in the same functional performance are acceptable. Verification of conformance to these sequences will eventually be through functional performance tests (FPTs) that demonstrate that the sequences were properly implemented, rather than verification of the detailed logic. FPTs for RP-1455 sequences are currently under development through RP-1746; they will be adapted to Guideline 36 sequences and issued as an appendix in a future addendum. +[Heading 3] Unless otherwise indicated, control loops shall be enabled and disabled based on the status of the system being controlled to prevent windup. +[Heading 3] When a control loop is enabled or reenabled, it and all its constituents (such as the proportional and integral terms) shall be set initially to a neutral value. +[Heading 3] A control loop in neutral shall correspond to a condition that applies the minimum control effect, i.e., valves/dampers closed, VFDs at minimum speed, etc. +[Heading 3] When there are multiple outdoor air temperature sensors, the system shall use the valid sensor that most accurately represents the outdoor air conditions at the equipment being controlled. +[Heading 4] Outdoor air temperature sensors at air-handler outdoor air intakes shall be considered valid only when the supply fan is proven on and the unit is in Occupied Mode or in any other mode with the economizer enabled. +[Heading 4] The outdoor air temperature used for optimum start, plant lockout, and other global sequences shall be the average of all valid sensor readings. If there are four or more valid outdoor air temperature sensors, discard the highest and lowest temperature readings. +[Heading 3] The term “proven” (i.e., “proven on”/“proven off”) shall mean that the equipment’s DI status point (where provided, e.g., current switch, DP switch, or VFD status) matches the state set by the equipment’s DO command point. +[Heading 3] The term “software point” shall mean an analog variable, and “software switch” shall mean a digital (binary) variable, that are not associated with real I/O points. They shall be read/write capable (e.g., BACnet analog variable and binary variable). +[Heading 3] The term “control loop” or “loop” is used generically for all control loops. These will typically be PID loops, but proportional plus integral plus derivative gains are not required on all loops. Unless specifically indicated otherwise, the guidelines in the following subsections shall be followed. +[Heading 4] Use proportional only (P-only) loops for limiting loops (such as zone CO2 control loops, etc.). +[Info. box] Limiting loops are used to prevent controlled variables from rising above or dropping below setpoint (depending on the application) by defining a fixed threshold at which the loop output reaches 100%. Limiting loops should use proportional-only control to prevent integral windup from causing the controlled sensor to overshoot setpoint due to the sensor generally being far from setpoint. +[Heading 4] Do not use the derivative term on any loops unless field tuning is not possible without it. +[Info. box] Use of the derivative term makes loop tuning difficult in practice. It can make loops unstable because it increases as the rate of change of the error increases, amplifying the error signal. It is used in industrial process controls and systems that have to react quickly but is rarely if ever needed in HVAC system. +[Heading 3] To avoid abrupt changes in equipment operation, the output of every control loop shall be capable of being limited by a user adjustable maximum rate of change, with a default of 25% per minute. +[Heading 3] All setpoints, timers, deadbands, PID gains, etc. listed in sequences shall be adjustable by the user with appropriate access level whether indicated as adjustable in sequences or not. Software points shall be used for these variables. Fixed scalar numbers shall not be embedded in programs except for physical constants and conversion factors. +[Heading 3] Values for all points, including real (hardware) points used in control sequences shall be capable of being overridden by the user with appropriate access level (e.g., for testing and commissioning). If hardware design prevents this for hardware points, they shall be equated to a software point, and the software point shall be used in all sequences. Exceptions shall be made for machine or life safety. +[Info. box] All hardware points, not just inputs, should be capable of being overridden for purposes of testing and commissioning. For example, the commissioning agent should be able to command damper positions, valve positions, fan speeds, etc. directly through BAS overrides. +[Info. box] The requirement to equate hardware points to software points is necessary for systems that do not allow overriding real input points. +[Info. box] It is recommended that the user interface allow the user to set an expiration period that automatically releases the override after the period has expired. The system should also keep track of who initiates each override and when. +[Heading 3] Alarms +[Info. box] Defining the operator’s interface falls outside the scope of Guideline 36, but effective use of alarms by building personnel requires an effective user interface. We recommend including at least the following requirements in the specification for the BAS graphical user interface: +[InfoboxList] 1. All alarms shall include a time/date stamp using the standalone control module time and date. +[InfoboxList] 2. Each alarm can be configured in terms of level, latching (Requires Acknowledgment of a Return to Normal/Does Not Require Acknowledgment of a Return to Normal), entry delay, exit deadband, and postsuppression period. +[InfoboxList] 3. An operator shall be able to sort alarms based on level, time/date, and current status. +[InfoboxList] a. Alarms should be reported with the following information: +[InfoboxList] b. Date and time of the alarm +[InfoboxList] c. Level of the alarm +[InfoboxList] d. Description of the alarm +[InfoboxList] e. Equipment tags for the units in alarm +[InfoboxList] f. Possible causes of the alarm if provided by the fault detection routines +[InfoboxList] g. The source, per Section 3.1.20, that serves the equipment in alarm. +[Heading 4] There shall be 4 levels of alarm +[Heading 5] Level 1: Life-safety message +[Heading 5] Level 2: Critical equipment message +[Heading 5] Level 3: Urgent message +[Heading 5] Level 4: Normal message +[Heading 4] Maintenance Mode. Operators shall have the ability to put any device (e.g., AHU) in/out of maintenance mode. +[Heading 5] All alarms associated with a device in maintenance mode will be suppressed. Exception: Life safety alarms shall not be suppressed. +[Heading 5] If a device is in maintenance mode, issue a daily Level 3 alarm at a scheduled time indicating that the device is still in maintenance mode. +[Heading 4] Exit Hysteresis +[Heading 5] Each alarm shall have an adjustable time-based hysteresis (default: 5 seconds) to exit the alarm. Once set, the alarm does not return to normal until the alarm conditions have ceased for the duration of the hysteresis. +[Heading 5] Each analog alarm shall have an adjustable percent-of-limit-based hysteresis (default: 0% of the alarm threshold, i.e., no hysteresis; alarm exits at the same value as the alarm threshold) the alarmed variable required to exit the alarm. Alarm conditions have ceased when the alarmed variable is below the triggering threshold by the amount of the hysteresis. +[Info. box] Examples of Exit Hysteresis +[Info. box] If a high-temperature alarm is triggered at 100°F and has an exit hysteresis of 5% for 1 minute, the alarm will remain active until the alarmed temperature drops below 95°F (100°F minus 5%) continuously for 1 minute. +[Info. box] If a low-pressure alarm is triggered at 0.5 in. of water and has exit hysteresis of 20% for 10 seconds, the alarm will remain active until the alarmed pressure rises above 0.6 in. of water (0.5 in. of water plus 20%) continuously for 10 seconds. +[Heading 4] Latching. A latching alarm requires acknowledgment from the operators before it can return to normal, even if the exit deadband has been met. A nonlatching alarm does not require acknowledgment. Default latching status is as follows: +[Heading 5] Level 1 alarms: latching +[Heading 5] Level 2 alarms: latching +[Heading 5] Level 3 alarms: nonlatching +[Heading 5] Level 4 alarms: nonlatching +[Heading 4] Post-exit Suppression Period. To limit alarms, any alarm may have an adjustable suppression period such that once the alarm is exited, its post-exit suppression timer is triggered and the alarm may not trigger again until the post-exit suppression timer has expired. Default suppression periods are as follows: +[Heading 5] Level 1 alarms: 0 minutes +[Heading 5] Level 2 alarms: 5 minutes +[Heading 5] Level 3 alarms: 24 hours +[Heading 5] Level 4 alarms: 7 days +[Info. box] Note that post-exit suppression only applies to a particular instance of an alarm, e.g., a high SAT alarm on AHU-1 will suppress more high SAT alarms on AHU-1 but not on AHU-2. +[Heading 3] Trim & Respond Set-Point Reset Logic +[Info. box] Trim & Respond (T&R) logic resets a setpoint for pressure, temperature, or other variables at an air handler or plant. It reduces the setpoint at a fixed rate until a downstream zone is no longer satisfied and generates a request. When a sufficient number of requests are present, the setpoint is increased in response. The importance of each zone’s requests can be adjusted to ensure that critical zones are always satisfied. When a sufficient number of requests no longer exist, the setpoint resumes decreasing at its fixed rate. A running total of the requests generated by each zone is kept to identify zones that are driving the reset logic. +[Info. box] T&R logic is optimal for controlling a single variable that is subject to the requirements of multiple downstream zones (such as the static pressure setpoint for a VAV air handler). In this application, it is easier to tune than a conventional control loop and provides for fast response without high-frequency chatter or loss of control of the downstream devices. It typically does generate low-frequency cyclic hunting, but this behavior is slow enough to be nondisruptive. +[Info. box] See Section 3.1.14.4 for an example of T&R implementation. +[Heading 4] T&R set-point reset logic and zone/system reset requests, where referenced in sequences, shall be implemented as described below. +[Heading 4] A “request” is a call to reset a static pressure or temperature setpoint generated by downstream zones or air-handling systems. These requests are sent upstream to the plant or system that serves the zone or air handler that generated the request. +[Heading 5] For each downstream zone or system, and for each type of set-point reset request listed for the zone/system, provide the following software points: +[Heading 6] Importance-Multiplier (default = 1) +[Info. box] Importance-Multiplier is used to scale the number of requests the zone/system is generating. A value of zero causes the requests from that zone or system to be ignored. A value greater than one can be used to effectively increase the number of requests from the zone/system based on the critical nature of the spaces served. +[Heading 6] Request-Hours Accumulator. Provided SystemOK (see Section 3.1.20) is true for the zone/system, every x minutes (default 5 minutes), add x divided by 60 times the current number of requests to this request-hours accumulator point. +[Heading 6] System Run-Hours Total. This is the number of hours the zone/system has been operating in any mode other than Unoccupied Mode. +[Info. box] Request-Hours accumulates the integral of requests (prior to adjustment of Importance-Multiplier) to help identify zones/systems that are driving the reset logic. Rogue zone identification is particularly critical in this context, because a single rogue zone can keep the T&R loop at maximum and prevent it from saving any energy. +[Heading 6] Cumulative%-Request-Hours. This is the zone/system Request-Hours divided by the zone/system run-hours (the hours in any mode other than Unoccupied Mode) since the last reset, expressed as a percentage. +[Heading 6] The Request-Hours Accumulator and System Run-Hours Total are reset to zero as follows: +[Heading 7] Reset automatically for an individual zone/system when the System Run-Hours Total exceeds 400 hours. +[Heading 7] Reset manually by a global operator command. This command will simultaneously reset the Request-Hours point for all zones served by the system. +[Heading 6] A Level 4 alarm is generated if the zone Importance-Multiplier is greater than zero, the zone/system Cumulative% Request Hours exceeds 70%, and the total number of zone/system run hours exceeds 40. +[Heading 5] See zone and air-handling system control sequences for logic to generate requests. +[Heading 5] Multiply the number of requests determined from zone/system logic times the Importance-Multiplier and send to the system/plant that serves the zone/system. See system/plant logic to see how requests are used in T&R logic. +[Heading 4] For each upstream system or plant setpoint being controlled by a T&R loop, define the following variables. Initial values are defined in system/plant sequences below. Values for trim, respond, time step, etc. shall be tuned to provide stable control. See Table 5.1.14.3. +[TableTitle] Table 5.1.14.3 Trim & Respond Variables +| Variable | Definition | +| Device | Associated device (e.g., fan, pump) | +| SP0 | Initial setpoint | +| SPmin | Minimum setpoint | +| SPmax | Maximum setpoint | +| Td | Delay timer | +| T | Time step | +| I | Number of ignored requests | +| R | Number of requests from zones/systems | +| SPtrim | Trim amount | +| SPres | Respond amount (must be opposite in sign to SPtrim) | +| SPres-max | Maximum response per time interval (must be same sign as SPres) | +| Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | Informative Note: The number of ignored requests (I) should be set to zero for critical zones or air handlers. | +[Heading 4] Trim & Respond logic shall reset the setpoint within the range SPmin to SPmax. When the associated device is off, the setpoint shall be SP0. The reset logic shall be active while the associated device is proven on, starting Td after initial device start command. When active, every time step T, if R≤I, trim the setpoint by SPtrim. If there are more than I requests, respond by changing the setpoint by SPres*(R – I), (i.e., the number of requests minus the number of ignored requests) but no more than SPres-max. In other words, every time step T. +[Normal] If R≤I, change Setpoint by SPtrim +[Normal] If R > I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 0.5 in. of water | +| SPmin | 0.15 in. of water | +| SPmax | 1.50 in. of water | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –0.04 in. of water | +| SPres | 0.06 in. of water | +| SPres-max | 0.15 in. of water | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 0.04 in. of water every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 0.06 in. of water for every request but no more than a maximum of 0.15 in. of water, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 0.04 in. of water every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 0.5 in. of water. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R I, change setpoint by (R – I)*SPres but no larger than SPres-max +[Info. box] The following is an example of a sequence that uses T&R to control the static pressure setpoint of a VAV AHU serving multiple downstream zones. This sequence defines the T&R variables as shown in Informative Table 5.1.14.4. +| Informative Table 5.1.14.4 Example Sequence T&R Variables | Informative Table 5.1.14.4 Example Sequence T&R Variables | +| Variable | Definition | +| Device | Supply fan | +| SP0 | 120 Pa | +| SPmin | 37 Pa | +| SPmax | 370 Pa | +| Td | 5 | +| T | 2 | +| I | 2 | +| SPtrim | –10 Pa | +| SPres | 15 Pa | +| SPres-max | 37 Pa | +[Info. box] Description of General Operation +[Info. box] Starting 5 minutes after the fan status indicates the supply fan is on, the sequence will slowly reduce the AHUs static pressure setpoint by 10 Pa every 2 minutes if R≤I. As static pressure drops, downstream VAV box dampers will open further for a given load. When the combination of reduced static pressure and changes in load drives more than two VAV boxes more than 95% open, the system will respond by increasing static pressure setpoint by 15 Pa for every request but no more than a maximum of 37 Pa, regardless of the number of requests. The setpoint will continue to increase every 2 minutes until all but 2 VAV boxes (for Ignored Request value of 2) are satisfied (damper position < 85%). Subsequently, the setpoint will continue to decrease by 10 Pa every 2 minutes. +[Info. box] Example +[Info. box] (Note: for the example below, the net result for each time step is separately calculated using the variables in Pascal units and in units of inches of water column, in order to facilitate following the example in either units. Thus, the unit conversion of the net result is not exact at each time step.) +[Info. box] System starts at 11:55. Initial setpoint is 120 Pa. At 12:00 (Td after start time), the reset begins. +[Info. box] At 12:02 (i.e., 1*T after reset begins), there is one request (i.e., R = 1). Since R 24°C | +[Heading 3] Damper/Valve Position +[Heading 4] Knowledge of damper and valve position are required for proper generation of T&R reset requests. +[Heading 4] The following are acceptable methods for determining position: +[Heading 5] Analog actuator. Position may be assumed to be equal to analog signal to actuator. +[Heading 5] Floating actuator. Provide either +[Heading 6] Position feedback AI +[Heading 6] Position estimated by timing pulse-open and pulse-closed commands with autozeroing whenever zone is in Unoccupied Mode and damper is driven full closed. This option is not acceptable for 24/7 applications. +[Heading 3] Hierarchical Alarm Suppression +[Info. box] Hierarchical alarm suppression is described in the January 2006 HVAC&R Research paper, “A Hierarchical Rule-Based Fault Detection and Diagnostic Method for HVAC Systems,” by Jeffrey Schein and Steven Bushby. +[Info. box] It is a technique for suppressing extraneous or nuisance alarms based on the principle that if a fault occurs both at a source (e.g., AHU) and a load (e.g., VAV box), then the fault at the load is likely caused by the fault at the source and is, at any rate, a lower priority than the source fault; as such, the alarm for the load fault is suppressed in favor of the alarm for the source fault, so that the operator’s attention is focused on the problem at the source. This principle can be extended up the hierarchy, e.g., a fault at the chiller system would suppress faults at the AHUs that it serves, which would in turn suppress faults at the VAV boxes served by the suppressed AHUs. +[Info. box] Alarm suppression is based on the “OK” or fault state of upstream systems, rather than individual pieces of equipment. For example, in a plant with multiple redundant boilers, a single boiler failure would not necessarily impede the ability of the boiler plant to serve the load, so suppression of downstream alarms would not be appropriate in this case. It will necessarily be up to the designer to determine the appropriate threshold for setting a system fault based on the number of component faults (e.g., two out of three boilers must be off or in alarm before a system-level fault is set, triggering suppression of downstream alarms). +[Info. box] Note that this logic is intended to suppress alarm visual and audible displays, notifications (e.g., email or SMS), listing in primary alarm logs, and other actions that can distract the operator or make it more difficult to diagnose and respond to alarms. The alarm may still be generated and recorded to a database. +[Heading 4] For each piece of equipment or space controlled by the BAS, define its relationship (if any) to other equipment in terms of “source,” “load,” or “system.” +[Info. box] For equipment that participates in a T&R loop, the equipment generating the requests will always be the load component, and the equipment receiving and responding to the requests will be a source component. +[Heading 5] A component is a “source” if it provides resources to a downstream component, such as a chiller providing chilled water (CHW) to an AHU. +[Heading 5] A component is a “load” if it receives resources from an upstream component, such as an AHU that receives CHW from a chiller. +[Heading 5] The same component may be both a load (receiving resources from an upstream source) and a source (providing resources to a downstream load). +[Heading 5] A set of components is a “system” if they share a load in common (i.e., collectively act as a source to downstream equipment, such as a set of chillers in a lead/lag relationship serving air handlers). +[Heading 6] If a single component acts as a source for downstream loads (e.g., an AHU as a source for its VAV boxes), then that single-source component shall be defined as a “system” of one element. +[Heading 6] For equipment with associated pumps (chillers, boilers, cooling towers): +[Heading 7] If the pumps are in a one-to-one relationship with equipment they serve, the pumps shall be treated as part of the system to which they are associated (i.e., they are not considered loads), as a pump failure will necessarily disable its associated equipment. +[Heading 7] If the pumps are headered to the equipment they serve, then the pumps may be treated as a system, which is a load relative to the upstream equipment (e.g., chillers) and a source relative to downstream equipment (e.g., air handlers). +[Info. box] Example: +[Info. box] Consider a building with four cooling tower cells, each with its own pump, two chillers with two CHW pumps in a headered arrangement, three air handlers, and 10 VAV boxes on each AHU, with each VAV box serving multiple rooms. +[Info. box] The cooling towers together constitute a system, which is a source to the chillers. +[Info. box] The chillers together constitute a system, which is a load to the cooling tower system and a source to the CHW pump system. +[Info. box] The CHW pumps together constitute a system, which is a load to the chillers and a source to the air handlers. +[Info. box] Each air handler constitutes its own separate system because they do not share a load in common. Each AHU is a load to the CHW pump system and a source to its own VAV boxes. +[Info. box] Each VAV box constitutes its own system because they do not share a load in common. Each VAV box is a load to its AHU only (no relationship to the other AHUs) and a source to the rooms that it serves. +[Info. box] Each interior space is a load to its associated VAV box. +[Heading 4] For each system as defined in Section 3.1.20.1.d, there shall be a SystemOK flag, which is either true or false. +[Heading 4] SystemOK shall be true when all of the following are true: +[Heading 5] The system is proven on. +[Heading 5] The system is achieving its temperature and/or pressure setpoint(s) for at least 5 minutes +[Heading 5] The system is ready and able to serve its load +[Heading 4] SystemOK shall be false while the system is starting up (i.e., before reaching setpoint) or when enough of the system’s components are unavailable (in alarm, disabled, or turned off) to disrupt the ability of the system to serve its load. This threshold shall be defined by the design engineer for each system. +[Heading 5] By default, Level 1 through Level 3 component alarms (indicating equipment failure) shall inhibit SystemOK. Level 4 component alarms (maintenance and energy efficiency alarms) shall not affect SystemOK. +[Heading 5] The operator shall have the ability to individually determine which component alarms may or may not inhibit SystemOK. +[Info. box] Examples +[Info. box] If a boiler system consists of a pair of boilers sized for 100% of the design load in a lead-standby relationship, then SystemOK is true if at least one boiler is operational and achieving setpoint. +[Info. box] If a chiller system consists of three chillers each sized for 50% of the design load, then SystemOK is true if at least two chillers are available to run. If only one chiller is available to run, then SystemOK will be false (even though the one remaining chiller may be sufficient to serve off-peak loads). +[Heading 4] The BAS shall selectively suppress (i.e., fail to announce; alarms may still be logged to a database) alarms for load components if SystemOK is false for the source system that serves that load. +[Heading 5] If SystemOK is false for a cooling water system (i.e., chiller, cooling tower, or associated pump), then only high-temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for a heating water system (i.e., boiler or associated pump), then only low temperature alarms from the loads shall be suppressed. +[Heading 5] If SystemOK is false for an air-side system (air handler, fan coil, VAV box, etc.), then all alarms from the loads shall be suppressed. +[Heading 4] This hierarchical suppression shall cascade through multiple levels of load-source relationship such that alarms at downstream loads shall also be suppressed. +[Info. box] Example +[Info. box] A building has a cooling-tower system (towers and CW pumps), a chiller system (chillers and CHW pumps), and a boiler system (boilers and HW pumps). These systems serve several air handlers (each considered its own system), and each air handler serves a series of VAV boxes (each also considered its own system). +[Info. box] If SystemOK is false for the cooling-tower system, then high- temperature alarms are suppressed for the chillers, the air handlers, and the VAV boxes and zones but not for the boilers. Low-temperature alarms are not suppressed. (Note that, in actuality, the hard-wired interlock between cooling tower and chiller would inhibit chiller operation if the cooling towers are off or locked out. The example is retained for illustrative purposes.) +[Info. box] If SystemOK is false for the chiller system, then high-temperature alarms are suppressed for the air handlers and VAV boxes but not for the cooling towers or boilers. Low-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for the boiler system, then low temperature alarms are suppressed for the air handlers and the VAV boxes but not for the cooling towers or chillers. High-temperature alarms are not suppressed. +[Info. box] If SystemOK is false for one of the air handlers, then all alarms (low temperature, high temperature, and airflow) are suppressed for all VAV boxes served by that air handler only. Alarms are not suppressed for the cooling towers, chillers, boilers, or the other AHU or its VAV boxes. +[Info. box] If one VAV box is in alarm, then all alarms (e.g., zone temperature, CO2) are suppressed for the zone served by that VAV box only. No other alarms are suppressed. +[Heading 4] The following types of alarms will never be suppressed by this logic: +[Heading 5] Life/safety and Level 1 alarms +[Heading 5] Failure-to-start alarms (i.e., equipment is commanded on, but status point shows equipment to be off) +[Heading 5] Failure-to-stop/hand alarms (i.e., equipment is commanded off, but status point shows equipment to be on) +[Heading 3] Time-Based Suppression +[Heading 4] Calculate a time-delay period after any change in setpoint based on the difference between the controlled variable (e.g., zone temperature) at the time of the change and the new setpoint. The default time delay period shall be as follows: +[Info. box] Time-based suppression is used to suppress reset requests and alarms after a change in setpoint. This includes automatic changes in setpoint, e.g., due to a change in window switch or occupancy sensor status, as well as changes made by occupants. +[Heading 5] For thermal zone temperature alarms: 18 minutes per °C of difference but no longer than 120 minutes +[Info. box] For example, if setpoint changes from 20°C to 21°C, and the zone temperature is 20.2°C at the time of the change, inhibit alarm for 15 minutes (0.8°C*18 minutes per °C) after the change. +[Heading 5] For thermal zone temperature cooling requests: 9 minutes per °C of difference but no longer than 30 minutes +[Heading 5] For thermal zone temperature heating requests: 9 minutes per °C of difference but no longer than 30 minutes +[Heading 2] Zone Groups (Originally Paragraph 5.4 in Guideline 36-2021) +[Info. box] Zone scheduling groups, or Zone Groups, are sets of zones served by a single air handler that operate together for ease of scheduling and/or in order to ensure sufficient load to maintain stable operation in the upstream equipment. A Zone Group is equivalent to an isolation area as defined in ASHRAE/IES Standard 90.1 2016, Section 6.4.3.3.4. +[Heading 3] Each system shall be broken into separate Zone Groups composed of a collection of one or more zones served by a single air handler. +[Heading 3] Each Zone Group shall be capable of having separate occupancy schedules and operating modes from other Zone Groups. +[Info. box] Note that, from the user’s point of view, schedules can be set for individual zones, or they can be set for an entire Zone Group, depending on how the user interface is implemented. From the point of view of the BAS, individual zone schedules are superimposed to create a zone-group schedule, which then drives system behavior. +[Info. box] The schedule may govern operation of other integrated systems such as lights, daylighting, or other, in addition to the HVAC system. +[Heading 3] All zones in each Zone Group shall be in the same zone-group operating mode as defined in Section 3.4.6. If one zone in a Zone Group is placed in any zone-group operating mode other than Unoccupied Mode (due to override, sequence logic, or scheduled occupancy), all zones in that Zone Group shall enter that mode. +[Info. box] Occupied-standby mode applies to individual zones, is considered a zonal subset of Occupied Mode, and shall not be considered a zone-group operating mode. +[Heading 3] A Zone Group may be in only one mode at a given time. +[Heading 3] For each Zone Group, provide a set of testing/commissioning software switches that override all zones served by the Zone Group. Provide a separate software switch for each of the zone-level override switches listed under “Testing and Commissioning Overrides” in terminal unit sequences. When the value of a Zone Group’s override switch is changed, the corresponding override switch for every zone in the Zone Group shall change to the same value. Subsequently, the zone-level override switch may be changed to a different value. The value of the zone-level switch has no effect on the value of the zone-group switch, and the value of the zone-group switch only affects the zone-level switches when the zone-group switch is changed. +[Info. box] The testing and commissioning overrides will be specified for each type of terminal unit and system in subsequent sequences. These overrides allow a commissioning agent to, for example, force a zone into cooling or drive a valve all the way open or closed. +[Info. box] Zone-group override switches allow a commissioning agent to apply a zone-level override to all zones in a Zone Group simultaneously. This greatly accelerates the testing and commissioning process. +[Heading 3] Zone-Group Operating Modes. Each Zone Group shall have the modes shown in the following subsections. +[Info. box] The modes presented in this section are to enable different setpoints and ventilation requirements to be applied to Zone Groups based on their operating schedule, occupancy status, and deviation from current setpoint. +[Info. box] See ASHRAE Guideline 13 for best practices in locating zone-group operating mode programming logic based on network architecture. +[Heading 4] Occupied Mode. A Zone Group is in the Occupied Mode when any of the following is true: +[Heading 5] The time of day is between the Zone Group’s scheduled occupied start and stop times. +[Heading 5] The schedules have been overridden by the occupant override system. +[Info. box] Occupant override system is a Web-based system to allow individuals to modify the schedule of their zone. This is a best-in-class feature that will not be available on all projects. +[Heading 5] Any zone local override timer (initiated by local override button) is nonzero. +[Heading 4] Warm-Up Mode. For each zone, the BAS shall calculate the required warm-up time based on the zone’s occupied heating set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Warm-up mode shall start based on the zone with the longest calculated warm-up time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Heading 4] Cooldown Mode. For each zone, the BAS shall calculate the required cooldown time based on the zone’s occupied cooling set point, the current zone temperature, the outdoor air temperature, and a mass/capacity factor for each zone. Zones where the window switch indicates that a window is open shall be ignored. The mass factor shall be manually adjusted or self-tuned by the BAS. If automatic, the tuning process shall be turned on or off by a software switch to allow tuning to be stopped after the system has been trained. Cooldown mode shall start based on the zone with the longest calculated cooldown time requirement, but no earlier than 3 hours before the start of the scheduled occupied period, and shall end at the scheduled occupied start hour. +[Info. box] Warm-up and cooldown modes are used to bring the zone groups up to temperature based on their scheduled occupancy period. The algorithms used in these modes (often referred to as “optimal start”) predict the shortest time to achieve occupied set point to reduce the central system energy use based on past performance. +[Info. box] It is recommended to use a global outdoor air temperature not associated with any AHU to determine warm-up start time. This is because unit-mounted OA sensors, which are usually placed in the outdoor air intake stream, are often inaccurate (reading high) when the unit is off due to air leakage from the space through the OA damper. +[Heading 4] Setback Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group fall below their unoccupied heating set points, or if the average zone temperature of the zone group falls below the average unoccupied heating set point, the zone group shall enter setback mode until all spaces in the zone group are 1°C above their unoccupied set points. +[Heading 4] Freeze Protection Setback Mode. During unoccupied mode, if any single zone falls below 4°C, the zone group shall enter setback mode until all zones are above 7°C, and a Level 3 alarm shall be set. +[Heading 4] Setup Mode. During unoccupied mode, if any 5 zones (or all zones if fewer than 5) in the zone group rise above their unoccupied cooling set points, or if the average zone temperature of the zone group rises above the average unoccupied cooling set point, the zone group shall enter setup mode until all spaces in the zone group are 1°C below their unoccupied set points. +[Info. box] Zones where the window switch indicates that a window is open shall be ignored. Setback and setup modes are used to keep zone temperatures (and mass) from straying excessively far from occupied set points so that the cooldown and warm-up modes can achieve set point when initiated. The minimum number of zones (set at 5 here) are to ensure that the central systems (fans, pumps, heating sources, or cooling sources) can operate stably. Obviously, the size of the zones and the characteristics of the central systems are a factor in choosing the correct number of zones in each group. +[Heading 2] Air-Handling Unit System Modes (Originally Paragraph 5.15 in Guideline 36-2021) +[Heading 3] AHU system modes are the same as the mode of the Zone Group served by the system. When Zone Group served by an air-handling system are in different modes, the following hierarchy applies (highest one sets AHU mode): +[Heading 5] Occupied Mode +[Heading 5] Cooldown Mode +[Heading 5] Setup Mode +[Heading 5] Warmup Mode +[Heading 5] Setback Mode +[Heading 5] Unoccupied Mode +[Heading 2] Multiple-Zone VAV Air-Handling Unit (Originally Paragraph 5.16 in Guideline 36-2021) +[Heading 3] Supply Fan Control +[Heading 4] Supply Fan Start/Stop +[Heading 5] Supply fan shall run when system is in the Cooldown Mode, Setup Mode, or Occupied Mode. +[Heading 5] Totalize current airflow rate from VAV boxes to a software point Vps. +[Info. box] VAV box airflow rates are summed to obtain overall supply air rate without the need for an airflow measuring station (AFMS) at the air-handler discharge. This is used for ventilation rate calculations and may also be used for display and diagnostics. +[Heading 4] Static Pressure Set-Point Reset +[Heading 5] Static pressure setpoint. Setpoint shall be reset using T&R logic (see Section 3.1.14) using the parameters shown in Table 5.16.1.2. +| Table 5.16.1.2 Trim & Respond Variables | Table 5.16.1.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | 120 Pa | +| SPmin | 25 Pa | +| SPmax | Max_DSP (see Section 1.2.1.1) | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone static pressure reset requests | +| SPtrim | –12 Pa | +| SPres | +15 Pa | +| SPres-max | +32 Pa | +[Info. box] The T&R reset parameters in Table 5.16.1.2 are suggested as a starting point; they will most likely require adjustment during the commissioning/tuning phase. +[Heading 4] Static Pressure Control +[Heading 5] Supply fan speed is controlled to maintain DSP at setpoint when the fan is proven on. Where the Zone Groups served by the system are small, provide multiple sets of gains that are used in the control loop as a function of a load indicator (such as supply-fan airflow rate, the area of the Zone Groups that are occupied, etc.). +[Info. box] High-pressure trips may occur if all VAV boxes are closed (as in Unoccupied Mode) or if fire/smoke dampers are closed (in some fire/smoke damper (FSD) designs, the dampers are interlocked to the fan status rather than being controlled by smoke detectors). Multiple sets of gains are used to provide control loop stability as system characteristics change. +[Heading 3] Supply Air Temperature Control +[Heading 4] Control loop is enabled when the supply air fan is proven on, and disabled and output set to deadband (no heating, minimum economizer) otherwise. +[Heading 4] Supply Air Temperature Setpoint +[Info. box] The default range of outdoor air temperatures [21°C – 16°C] used to reset the Occupied Mode SAT setpoint was chosen to maximize economizer hours. It may be preferable to use a lower range of OATs (e.g., 18°C – 13°C) to minimize fan energy if there is a 24/7 chiller plant that is running anyway; reheat is minimized, as in a VAV dual-fan dual-duct system, or the climate severely limits the number of available economizer hours. +[Info. box] If using this logic, the engineer should oversize interior zones and rooms with high cooling loads (design them to be satisfied by the warmest SAT) so these zones do not drive the T&R block to the minimum SAT setpoint. +[Heading 5] See Section 1.1.4.1 for Min_ClgSAT, Max_ClgSAT, OAT_Min, and OAT_Max setpoints. +[Heading 5] During Occupied Mode and Setup Mode, setpoint shall be reset from Min_ClgSAT when the outdoor air temperature is OAT_Max and above, proportionally up to T-max when the outdoor air temperature is OAT_Min and below. +[Heading 6] T-max shall be reset using T&R logic (see Section 3.1.14) between Min_ClgSAT and Max_ClgSAT. The parameters shown in Table 5.16.2.2 are suggested as a starting place, but they will require adjustment during the commissioning/tuning phase. +[Info. box] The T&R reset parameters in Table 5.16.2.2 are suggested as a starting place; they will most likely require adjustment during the commissioning/tuning phase. +| Table 5.16.2.2 Trim & Respond Variables | Table 5.16.2.2 Trim & Respond Variables | +| Variable | Value | +| Device | Supply fan | +| SP0 | SPmax | +| SPmin | Min_ClgSAT | +| SPmax | Max_ClgSAT | +| Td | 10 minutes | +| T | 2 minutes | +| I | 2 | +| R | Zone cooling SAT requests | +| SPtrim | +0.1°C | +| SPres | –0.2°C | +| SPres-max | –0.6°C | +[Info. box] The net result of this SAT reset strategy is depicted in the Figure 5.16.2.2 for Min_ClgSAT = 12°C, Max_ClgSAT = 18°C, OAT_Max = 21°C, and OAT_Min = 16°C. +[FigureCaption] Informative Figure 5.16.2.2 Example supply air temperature reset diagram. +[Heading 5] During Cooldown Mode, setpoint shall be Min_ClgSAT. +[Heading 5] During Warmup Mode and Setback Mode, setpoint shall be 35°C. +[Info. box] Raising the SAT setpoint in warmup will effectively lock out the economizer and cooling coil, which is desirable for warmup even if there is no heating coil at the AHU to meet the higher SAT. +[Info. box] This does not apply in the case of a DFDD AHU or if all the zones are equipped with fan-powered boxes such that the AHU is off in warmup and setback. +[Heading 4] Supply air temperature shall be controlled to setpoint using a control loop whose output is mapped to sequence the heating coil (if applicable), outdoor air damper, return air damper, and cooling coil as shown in Figure 5.16.2.3. +[Heading 5] For units with return fans +[Heading 6] Return air damper maximum position MaxRA-P is modulated to control minimum outdoor air volume (see Section 3.16.6.3). +[Heading 5] The points of transition along the x-axis shown and described in Figure 5.16.2.3 are representative. Separate gains shall be provided for each section of the control map (heating coil, economizer, cooling coil) that is determined by the contractor to provide stable control. Alternatively, the contractor shall adjust the precise value of the x-axis thresholds shown in Figure 5.16.2.3 to provide stable control. Damper control depends on the type of building pressure control system. +[Info. box] For AHUs with return fans and airflow tracking control, the SAT control loop makes the economizer outdoor air damper open fully whenever the AHU is on, while the return air damper modulates to maintain supply air temperature as shown below. Relief/exhaust damper position tracks inversely with the return damper position. +[Info. box] Outdoor air dampers on air handlers with return fans have no impact on the outdoor airflow rate into the mixing plenum. Instead, the return-fan and return-damper controls dictate outdoor air flow. See ASHRAE Guideline 16. +[Info. box] Note that the economizer damper will close (if there is a separate minimum outdoor air damper) or modulate to minimum position (if there is a single outdoor air damper) whenever minimum outdoor air control is active. See logic for Minimum Outdoor Air Control below. +[FigureCaption] Figure 5.16.2.3 SAT loop mapping with return-fan control with airflow tracking. +[Heading 3] Minimum Outdoor Airflow Setpoints +[Heading 4] Outdoor Airflow Setpoint for California Title 24 Ventilation +[Heading 3] Minimum Outdoor Air Control with a Single Common Damper for Minimum Outdoor Air and Economizer Functions and Airflow Measurement +[Heading 4] Outdoor Airflow Setpoint for California Title 24 Ventilation +[Heading 4] Minimum Outdoor Air Control Loop +[Heading 5] Minimum outdoor air control loop is enabled when the supply fan is proven on and the AHU is in Occupied Mode, and disabled and output set to zero otherwise. +[Heading 5] For units with return fans: +[Info. box] The following logic limits the return damper position to ensure that minimum outdoor air is maintained at all times, while the actual return damper position is modulated by the SAT control loop. +[Heading 6] The outdoor airflow rate shall be maintained at the minimum outdoor damper outdoor airflow setpoint MinOAsp by a direct-acting control loop whose output is mapped to the return air damper maximum position endpoint MaxRA-P. +[Info. box] The following logic directly controls the return damper position to ensure that exactly the minimum outdoor air – and no more – is provided when economizer lockout conditions are exceeded. When economizer lockout no longer applies, return damper control reverts to the SAT control loop. +[Heading 6] While the unit is in Occupied Mode, if the economizer high limit conditions in Section 3.1.17 are exceeded for 10 minutes, outdoor air shall be controlled to the minimum outdoor airflow. When this occurs, the normal sequencing of the return air damper by the SAT control loop is suspended, and the return air damper position shall be modulated directly to maintain measured airflow at MinOAsp (i.e. return damper position shall equal MaxRA-P). The economizer damper shall remain open. +[Heading 6] If the economizer high limit conditions in Section 3.1.17 are not exceeded for 10 minutes, or the unit is no longer in Occupied Mode, release return damper to control by the SAT control loop (i.e. return damper position is limited by MaxRA-P endpoint, but is not directly controlled to equal MaxRA-P). +[Heading 3] Return-Fan Control − Airflow Tracking +[Heading 4] Return fan operates whenever associated supply fan is proven on. +[Heading 4] The active differential airflow setpoint S-R-DIFF* shall be S-R-DIFF for the entire system (see Section 1.2.1.5) adjusted by the sum of the area component of the breathing zone outdoor air flow rate of zones in Zone Groups that are in Occupied Mode relative to that in all zones served by the system. +[Info. box] The equations below will result in S-R-DIFF set to zero if no zones are in Occupied Mode, e.g., during Warmup, Cooldown, Setback, and Setup Modes. +[Heading 4] Return-fan speed shall be controlled to maintain return airflow equal to supply airflow less differential S-R-DIFF*. Where multiple air handling units share a common return fan (i.e. dual fan dual duct), return fan speed shall be controlled to maintain return airflow equal to total supply airflow of all associated units less differential S-R-DIFF*. +[Info. box] The following logic will keep supply airflow from exceeding the capability of the return fan, which is often designed to be smaller than the supply fan, which can result in excess outdoor air intake. This becomes an issue when S-R-DIFF* is zero during Warmup, Cooldown, Setback, and Setup Modes because the supply air fan can be at full speed due to VAV boxes operating at Vcool-max during these modes. +[Heading 4] Supply fan airflow shall be limited by a reverse-acting P-only loop whose setpoint is (Vrf-max + S-R-DIFF*) and whose output is maximum supply fan speed ranging from 0% to 100%. +[Heading 4] Relief/exhaust dampers shall be enabled when the associated supply and return fans are proven on and closed otherwise. Exhaust dampers shall modulate as the inverse of the return air damper per Section 3.16.2.3. +[Info. box] Airflow tracking requires a measurement of supply airflow and return airflow. Appendix A-9 shows AFMS at both fans. These are actually not mandatory, although they may improve accuracy if properly installed. The supply airflow can be calculated by summing VAV box airflow rates. Return airflow can be approximated by return-fan speed if there are no dampers in the return air path (the geometry of the return air system must be static for speed to track airflow.) +[Info. box] S-R-DIFF is determined empirically during the TAB phase. If there are intermittent or variable-flow exhaust fans, this setpoint should be dynamically adjusted based on exhaust fan status or airflow/speed. +[Heading 3] Freeze Protection +[Info. box] There are three stages of freeze protection. The first stage modulates the heating valve to maintain a safe SAT. The second stage eliminates outdoor air ventilation in case heating is not available for whatever reason. The third stage shuts down the unit and activates coil valves and pumps to circulate water in case the second stage does not work (e.g., stuck economizer damper). +[Heading 4] If the supply air temperature drops below 4.4°C for 5 minutes, send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, override the outdoor air damper to the minimum position, and modulate the heating coil to maintain a supply air temperature of at least 6°C. Disable this function when supply air temperature rises above 7°C for 5 minutes. +[Info. box] The first stage of freeze protection locks out the economizer. Most likely this has already occurred by this time, but this logic provides insurance. +[Heading 4] If the supply air temperature drops below 3.3°C for 5 minutes, fully close both the economizer damper and the minimum outdoor air damper for 1 hour and set a Level 3 alarm noting that minimum ventilation was interrupted. After 1 hour, the unit shall resume minimum outdoor air ventilation and enter the previous stage of freeze protection (see Section 3.16.12.1). +[Info. box] A timer is used (rather than an OAT threshold) to exit the second stage of freeze protection because a bad OAT sensor could lock out ventilation indefinitely; whereas a timer should just work and thus avoid problems with the unit becoming stuck in this mode with no ventilation. +[Info. box] Upon timer expiration, the unit will reenter the previous stage of freeze protection (MinOA ventilation, with heating to maintain SAT of 6°C), after which one of three possibilities will occur: +[Heading 5] If it is warm enough that the SAT rises above 7°C with minimum ventilation, the unit will remain in Stage 1 freeze protection for 5 minutes then resume normal operation. +[Info. box] If it is cold enough that SAT remains between 3.3°C and 7°C with heating and minimum ventilation, the unit will remain in Stage 1 freeze protection indefinitely until outdoor conditions warm up. +[Info. box] If it is so cold that SAT is less than 3.3°C with minimum ventilation, despite heating, then the unit will revert to Stage 2 freeze protection where it will remain for 1 hour. This process will then repeat. +[Heading 4] If supply air temperature drops below 3.3°C for 15 minutes or below 1°C for 5 minutes, shut down supply and return/relief fan(s), close outdoor air damper, open the cooling-coil valve to 100%, and energize the CHW pump system. Also send two (or more, as required to ensure that heating plant is active) heating hot-water plant requests, modulate the heating coil to maintain the higher of the supply air temperature or the mixed air temperature at 27°C, and set a Level 2 alarm indicating the unit is shut down by freeze protection. +[Heading 5] If a freeze-protection shutdown is triggered by a low air temperature sensor reading, it shall remain in effect until it is reset by a software switch from the operator’s workstation. +[Info. box] Stage 3 can be triggered by either of two conditions. The second condition is meant to respond to an extreme and sudden cold snap. +[Info. box] Protecting the cooling coil in this situation will require water movement through the coil, which means that the CHW pumps need to be energized. +[Info. box] Heating coil is controlled to an air temperature setpoint. The sensors will not read accurately with the fan off, but they will be influenced by proximity to the heating coil. A temperature of 27°C at either of these sensors indicates that the interior of the unit is sufficiently warm. This avoids the situation where a fixed valve position leads to very high (and potentially damaging) temperatures inside the unit. +[Heading 3] Alarms +[Heading 4] Maintenance interval alarm when fan has operated for more than 1500 hours: Level 4. Reset interval count when alarm is acknowledged. +[Heading 4] Fan alarm is indicated by the status being different from the command for a period of 15 seconds. +[Heading 5] Commanded on, status off: Level 2 +[Heading 5] Commanded off, status on: Level 4 +[Heading 4] Filter pressure drop exceeds the larger of the alarm limit or 12.5 Pa for 10 minutes when airflow (expressed as a percentage of design airflow or design speed if total airflow is not known) exceeds 20%: Level 4. The alarm limit shall vary with total airflow (if available; use fan speed if total airflow is not known) as follows: +[Normal] where DP100 is the high-limit pressure drop at design airflow (determine limit from filter manufacturer) and DPx is the high limit at the current airflow rate x (expressed as a fraction). For instance, the setpoint at 50% of design airflow would be (0.5)1.4, or 38% of the design high-limit pressure drop. See Section 1.1.4.4 for DP100. +[Info. box] The constant value threshold for the filter pressure drop alarm is a function of the transducer and A/D converter used to measure filter differential pressure. The value used shall be determined as the minimum accuracy of the transducer and A/D converter combination. +[Heading 3] Testing/Commissioning Overrides. Provide software switches that interlock to a CHW and hot-water plant level to +[Heading 4] force HW valve full open, +[Heading 4] force HW valve full closed, +[Heading 4] force CHW valve full open, and +[Heading 4] force CHW valve full closed. +[Info. box] Per Section 3.1.11, all hardware points can be overridden through the BAS. Each of the following points is interlocked so that they can be overridden together at a zone-group level, per Section 3.4.5. +[Info. box] For example, the CxA can check for leaking dampers by forcing all VAV boxes in a Zone Group closed and then recording airflow at the AHU. +[Heading 3] Plant Requests +[Heading 4] Chilled-Water Reset Requests +[Heading 5] If the supply air temperature exceeds the supply air temperature setpoint by 3°C for 2 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature exceeds the supply air temperature setpoint by 2°C for 2 minutes, send 2 requests. +[Heading 5] Else if the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 85%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Chiller Plant Requests. Send the chiller plant that serves the system a chiller plant request as follows: +[Heading 5] If the CHW valve position is greater than 95%, send 1 request until the CHW valve position is less than 10%. +[Heading 5] Else if the CHW valve position is less than 95%, send 0 requests. +[Heading 4] Hot-Water Reset Requests +[Heading 5] If the supply air temperature is 17°C less than setpoint for 5 minutes, send 3 requests. +[Heading 5] Else if the supply air temperature is 8°C less than setpoint for 5 minutes, send 2 requests. +[Heading 5] Else if HW valve position is greater than 95%, send 1 request until the HW valve position is less than 85%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. +[Heading 4] Heating Hot Water Plant Requests. Send the heating hot-water plant that serves the AHU a heating hot-water plant request as follows: +[Heading 5] If the HW valve position is greater than 95%, send 1 request until the HW valve position is less than 10%. +[Heading 5] Else if the HW valve position is less than 95%, send 0 requests. diff --git a/server/scripts/sequence-doc/tests/static/golden/project--title24-si.payload.json b/server/scripts/sequence-doc/tests/static/golden/project--title24-si.payload.json new file mode 100644 index 00000000..892bd1dd --- /dev/null +++ b/server/scripts/sequence-doc/tests/static/golden/project--title24-si.payload.json @@ -0,0 +1,503 @@ +{ + "Buildings.Templates.AirHandlersFans": [ + "Buildings.Templates.AirHandlersFans.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_max-ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TAirSupSet_min-ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_max-ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.TOutRes_min-ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.have_perZonRehBox-ctl.have_perZonRehBox": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.idZon-ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGro-ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.namGroZon-ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_max-ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.pAirRetSet_rel_min-ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.tit24CliZon-ctl.tit24CliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_3" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiCoo-ctl.typCoiCoo": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.CoolingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.typCoiHea-ctl.typCoiHea": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.HeatingCoil.WaterBased" + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRel_min-ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanRet_min-ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone.yFanSup_min-ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_max-dat.ctl.TAirSupSet_max": [ + 291.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TAirSupSet_min-dat.ctl.TAirSupSet_min": [ + 285.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_max-dat.ctl.TOutRes_max": [ + 294.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.TOutRes_min-dat.ctl.TOutRes_min": [ + 289.15 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.idZon-dat.ctl.idZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGro-dat.ctl.namGro": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.namGroZon-dat.ctl.namGroZon": [ + "{\"\"}" + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_max-dat.ctl.pAirRetSet_rel_max": [ + 40 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.pAirRetSet_rel_min-dat.ctl.pAirRetSet_rel_min": [ + 10 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRel_min-dat.ctl.yFanRel_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanRet_min-dat.ctl.yFanRet_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.yFanSup_min-dat.ctl.yFanSup_min": [ + 0.1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.dat-ctl.dat": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRel-ctl.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanRet-ctl.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.nFanSup-ctl.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typ-ctl.typ": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRel-ctl.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanRet-ctl.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController.typFanSup-ctl.typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.buiPreCon-ctl.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_CO2Sen-ctl.have_CO2Sen": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.have_frePro-ctl.have_frePro": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdEne-ctl.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.stdVen-ctl.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlEco-ctl.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typCtlFanRet-ctl.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typFreSta-ctl.typFreSta": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.typSecOut-ctl.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone.use_TMix-ctl.use_TMix": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery.typ-secOutRel.recHea.typ": [ + "Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_eco-secOutRel.have_eco": [ + true + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.have_recHea-secOutRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirRet_flow_nominal-secOutRel.mAirRet_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.mAirSup_flow_nominal-secOutRel.mAirSup_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRel-secOutRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.nFanRet-secOutRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typ-secOutRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlEco-secOutRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typCtlFanRet-secOutRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOut-secOutRel.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamOutMin-secOutRel.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRel-secOutRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typDamRet-secOutRel.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRel-secOutRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typFanRet-secOutRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecOut-secOutRel.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection.typSecRel-secOutRel.typSecRel": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.have_recHea-secOutRel.secOut.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.m_flow_nominal-secOutRel.secOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typ-secOutRel.secOut.typ": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typCtlEco-secOutRel.secOut.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOut-secOutRel.secOut.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection.typDamOutMin-secOutRel.secOut.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.have_recHea-secOutRel.secRel.have_recHea": [ + false + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRel-secOutRel.secRel.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.nFanRet-secOutRel.secRel.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typ-secOutRel.secRel.typ": [ + "Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlEco-secOutRel.secRel.typCtlEco": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typCtlFanRet-secOutRel.secRel.typCtlFanRet": [ + "Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typDamRel-secOutRel.secRel.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRel-secOutRel.secRel.typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection.typFanRet-secOutRel.secRel.typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.recHea-secOutRel.recHea": [ + "Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secOut-secOutRel.secOut": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper.secRel-secOutRel.secRel": [ + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan" + ], + "Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan.fanRet-secOutRel.secRel.fanRet": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRel-cfg.nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanRet-cfg.nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.nFanSup-cfg.nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typCtl-cfg.typCtl": [ + "Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.buiPreCon-cfg.buiPreCon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.PressureControl.ReturnFanMeasuredAir" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.stdVen-cfg.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiCoo-cfg.typCoiCoo": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre-cfg.typCoiHeaPre": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaReh-cfg.typCoiHeaReh": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOut-cfg.typDamOut": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamOutMin-cfg.typDamOutMin": [ + "Buildings.Templates.Components.Types.Damper.None" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRel-cfg.typDamRel": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typDamRet-cfg.typDamRet": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typSecOut-cfg.typSecOut": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiCoo-cfg.typValCoiCoo": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaPre-cfg.typValCoiHeaPre": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typValCoiHeaReh-cfg.typValCoiHeaReh": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl-dat.ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController" + ], + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id-dat.id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.QChiWat_flow_nominal-QChiWat_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.cfg-cfg": [ + "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.dat-dat": [ + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_porRel-have_porRel": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souChiWat-have_souChiWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.have_souHeaWat-have_souHeaWat": [ + true + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.id-id": [ + "" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRel-nFanRel": [ + 0 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanRet-nFanRet": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.nFanSup-nFanSup": [ + 1 + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typ-typ": [ + "Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRel-typFanRel": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanRet-typFanRet": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler.typFanSup-typFanSup": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo": [ + "Buildings.Templates.Components.Coils.WaterBasedCooling" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaPre-coiHeaPre": [ + "Buildings.Templates.Components.Coils.WaterBasedHeating" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.coiHeaReh-coiHeaReh": [ + "Buildings.Templates.Components.Coils.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.ctl-ctl": [ + "Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupBlo-fanSupBlo": [ + "Buildings.Templates.Components.Fans.None" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.fanSupDra-fanSupDra": [ + "Buildings.Templates.Components.Fans.SingleVariable" + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.have_senPreBui-have_senPreBui": [ + false + ], + "Buildings.Templates.AirHandlersFans.VAVMultiZone.secOutRel-secOutRel": [ + "Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.damRet.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Actuators.Damper.typ-secOutRel.secRel.damRel.typ": [ + "Buildings.Templates.Components.Types.Damper.Modulating" + ], + "Buildings.Templates.Components.Coils.WaterBasedCooling.hex-coiCoo.hex": [ + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Coils.WaterBasedHeating.hex-coiHeaPre.hex": [ + "Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.Q_flow_nominal-dat.coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Data.Coil.typ-dat.coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damOut.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRel.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Data.Damper.m_flow_nominal-dat.damRet.m_flow_nominal": [ + "Buildings.Templates.Components.Data.Damper" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiCoo.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.Q_flow_nominal-coiHeaPre.Q_flow_nominal": [ + "-1*abs(cap_nominal)" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiCoo.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaPre.have_sou": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_sou-coiHeaReh.have_sou": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiCoo.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.have_weaBus-coiHeaPre.have_weaBus": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiCoo.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedCooling" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaPre.typ": [ + "Buildings.Templates.Components.Types.Coil.WaterBasedHeating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typ-coiHeaReh.typ": [ + "Buildings.Templates.Components.Types.Coil.None" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiCoo.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaPre.typVal": [ + "Buildings.Templates.Components.Types.Valve.TwoWayModulating" + ], + "Buildings.Templates.Components.Interfaces.PartialCoil.typVal-coiHeaReh.typVal": [ + "Buildings.Templates.Components.Types.Valve.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-fanSupDra.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.have_senFlo-secOutRel.secRel.fanRet.have_senFlo": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-fanSupDra.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.nFan-secOutRel.secRel.fanRet.nFan": [ + 1 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-fanSupDra.text_flip": [ + false + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_flip-secOutRel.secRel.fanRet.text_flip": [ + true + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-fanSupDra.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.text_rotation-secOutRel.secRel.fanRet.text_rotation": [ + 0 + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupBlo.typ": [ + "Buildings.Templates.Components.Types.Fan.None" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-fanSupDra.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typ-secOutRel.secRel.fanRet.typ": [ + "Buildings.Templates.Components.Types.Fan.SingleVariable" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-fanSupDra.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Components.Interfaces.PartialFan.typSin-secOutRel.secRel.fanRet.typSin": [ + "Buildings.Templates.Components.Types.FanSingle.Housed" + ], + "Buildings.Templates.Data.AllSystems.stdEne": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24" + ], + "Buildings.Templates.Data.AllSystems.stdVen": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24" + ], + "Buildings.Templates.Data.AllSystems.sysUni": [ + "Buildings.Templates.Types.Units.SI" + ], + "Buildings.Templates.Data.AllSystems.tit24CliZon": [ + "Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_3" + ], + "DEL_INFO_BOX": [ + false + ] +} diff --git a/server/scripts/sequence-doc/tests/test_golden.py b/server/scripts/sequence-doc/tests/test_golden.py new file mode 100644 index 00000000..019d522f --- /dev/null +++ b/server/scripts/sequence-doc/tests/test_golden.py @@ -0,0 +1,66 @@ +''' +Golden tests for the sequence document. + +For each payload in tests/static/golden (generated by the client test +client/tests/sequence/golden-payload.test.ts), generates the document and +compares its text to the expected text stored next to the payload. + +- `UPDATE_GOLDEN=1 python3 -m pytest tests/test_golden.py` rewrites the expected text. +- Otherwise, the text is compared to the stored one. +A change of the payload format must not change the expected text. +''' +import os +from pathlib import Path +import json +import pytest +from docx.table import Table +from docx.text.paragraph import Paragraph +from generate_doc import generate_doc, DEFAULT_DOC_VERSION + +GOLDEN_DIR = Path(__file__).parent / 'static' / 'golden' +PAYLOAD_SUFFIX = '.payload.json' +EXPECTED_SUFFIX = '.expected.txt' +UPDATE = os.environ.get('UPDATE_GOLDEN') == '1' + +CASES = sorted(p.name[:-len(PAYLOAD_SUFFIX)] for p in GOLDEN_DIR.glob(f'*{PAYLOAD_SUFFIX}')) + + +def document_text(doc) -> str: + ''' Text of the document body in reading order: one line per non-empty + paragraph (prefixed with its style) and one line per table row + ''' + lines = [] + for element in doc.element.body.iterchildren(): + tag = element.tag.split('}')[-1] + if tag == 'p': + paragraph = Paragraph(element, doc) + text = ' '.join(paragraph.text.split()) + if text: + lines.append(f'[{paragraph.style.name}] {text}') + elif tag == 'tbl': + for row in Table(element, doc).rows: + cells = [' '.join(cell.text.split()) for cell in row.cells] + lines.append('| ' + ' | '.join(cells) + ' |') + return '\n'.join(lines) + '\n' + + +def test_cases_have_expected_text(): + expected = sorted(p.name[:-len(EXPECTED_SUFFIX)] for p in GOLDEN_DIR.glob(f'*{EXPECTED_SUFFIX}')) + if UPDATE: + for case in set(expected) - set(CASES): + (GOLDEN_DIR / f'{case}{EXPECTED_SUFFIX}').unlink() + return + assert CASES + assert expected == CASES + + +@pytest.mark.parametrize('case', CASES) +def test_golden_document(case): + with open(GOLDEN_DIR / f'{case}{PAYLOAD_SUFFIX}') as f: + payload = json.load(f) + text = document_text(generate_doc(payload, DEFAULT_DOC_VERSION)) + expected_path = GOLDEN_DIR / f'{case}{EXPECTED_SUFFIX}' + if UPDATE: + expected_path.write_text(text) + return + assert text == expected_path.read_text() From 05eec6c3a76f001613d73d066d0c051996ec0414 Mon Sep 17 00:00:00 2001 From: AntoineGautier Date: Thu, 8 Oct 2026 18:23:08 +0200 Subject: [PATCH 2/3] Reduce sequence document log output in server tests - generate_doc.py: set the log level when run (default WARNING, LOG_LEVEL to override) instead of DEBUG at import - mogrifier.py: log selections missing from the payload at INFO - generateDoc: log the script output once instead of per chunk - CI: start the server with ts-node, since the tests write files that restart nodemon - Sequence unit test: create its output directory --- .github/workflows/server-tests.yml | 2 +- server/scripts/sequence-doc/src/generate_doc.py | 4 ++-- server/scripts/sequence-doc/src/mogrifier.py | 14 ++++++-------- server/src/sequence/index.ts | 9 ++++++--- server/tests/unit/sequence/index.test.ts | 1 + 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/.github/workflows/server-tests.yml b/.github/workflows/server-tests.yml index 3fd14836..61cb48d3 100644 --- a/.github/workflows/server-tests.yml +++ b/.github/workflows/server-tests.yml @@ -45,6 +45,6 @@ jobs: run: python3 -m pytest -c pytest.toml - name: Run tests run: | - npm run start & + npx ts-node src/index.ts & # no nodemon: tests write files to the watched directory sleep 5 # wait for server to start npm run test:ci diff --git a/server/scripts/sequence-doc/src/generate_doc.py b/server/scripts/sequence-doc/src/generate_doc.py index 10f2cb74..b45df786 100644 --- a/server/scripts/sequence-doc/src/generate_doc.py +++ b/server/scripts/sequence-doc/src/generate_doc.py @@ -20,8 +20,6 @@ ANNOTATION_STYLE = 'Toggle' -logging.getLogger().setLevel(logging.DEBUG) - def parse_args(args) -> str: parser = argparse.ArgumentParser( prog = 'GenerateSequenceDoc', @@ -76,6 +74,8 @@ def generate_doc(selections, version) -> Document: def main(): ''' ''' + # LOG_LEVEL=INFO or DEBUG for diagnostics + logging.basicConfig(level=os.environ.get('LOG_LEVEL', 'WARNING')) args = parse_args(sys.argv[1:]) selections = extract_input(sys.stdin) document = generate_doc(selections, args.version) diff --git a/server/scripts/sequence-doc/src/mogrifier.py b/server/scripts/sequence-doc/src/mogrifier.py index 167f1dea..2e5fb6a3 100644 --- a/server/scripts/sequence-doc/src/mogrifier.py +++ b/server/scripts/sequence-doc/src/mogrifier.py @@ -11,8 +11,6 @@ import utils from typing import Dict, List -logging.getLogger().setLevel(logging.DEBUG) - P_TAG = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p' BOOKMARK_TAGS = ['{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bookmarkEnd', "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bookmarkStart"] SECTION_TAG = ["{http://schemas.openxmlformats.org/wordprocessingml/2006/main}sectPr"] @@ -295,7 +293,7 @@ def evaluate_annotation(op, name_map, selections: Selections): # 2: check if relevant selection is available if long_name not in selections: - logging.error('Path "%s" not found in store, deleting', long_name) + logging.info('Path "%s" not found in store, deleting', long_name) return True # 3: apply the operation type elif not utils.reduce_to_boolean(selections[long_name]): @@ -316,7 +314,7 @@ def evaluate_annotation(op, name_map, selections: Selections): long_name = name_map[short_name] if long_name not in selections: - logging.error('Path "%s" not found in store, deleting', long_name) + logging.info('Path "%s" not found in store, deleting', long_name) return True elif utils.reduce_to_boolean(selections[long_name]): return True @@ -342,7 +340,7 @@ def evaluate_annotation(op, name_map, selections: Selections): long_compare = name_map[short_compare] if long_name not in selections: - logging.error('Path "%s" not found in store, deleting', long_name) + logging.info('Path "%s" not found in store, deleting', long_name) return True elif long_compare not in selections[long_name]: return True @@ -368,7 +366,7 @@ def evaluate_annotation(op, name_map, selections: Selections): long_compare = name_map[short_compare] if long_name not in selections: - logging.error('Path "%s" not found in store, keeping', long_name) + logging.info('Path "%s" not found in store, keeping', long_name) return False elif long_compare in selections[long_name]: return True @@ -390,7 +388,7 @@ def evaluate_annotation(op, name_map, selections: Selections): long_compare = map(lambda name: name_map[name], short_compare) if long_name not in selections: - logging.error('Path "%s" not found in store, deleting', long_name) + logging.info('Path "%s" not found in store, deleting', long_name) return True elif not utils.common_member(selections[long_name], long_compare): return True @@ -519,7 +517,7 @@ def convert_units(control_structure, name_map, selections: Selections): ip_long_name = name_map[ip_short_name] if long_name not in selections: - logging.error('Path "%s" not found in store', long_name) + logging.info('Path "%s" not found in store', long_name) return for op in control_structure: diff --git a/server/src/sequence/index.ts b/server/src/sequence/index.ts index 1ff1c833..e81279bf 100644 --- a/server/src/sequence/index.ts +++ b/server/src/sequence/index.ts @@ -35,13 +35,16 @@ export async function generateDoc(selections: SequenceData, path: string) { scriptProcess.stdin.end(); // stdout and stderr need to have callbacks to close the process - // TODO: figure out best place to log response - scriptProcess.stdout.on('data', (data) => console.log(`${data}`)); - scriptProcess.stderr.on('data', (data) => console.log(`${data}`)); + // The script logs warnings and errors to stderr: logged once on close + let log = ""; + scriptProcess.stdout.on('data', (data) => (log += data)); + scriptProcess.stderr.on('data', (data) => (log += data)); scriptProcess.on("close", (code) => { if (code === 0) { + if (log) console.warn(log); resolve(scriptProcess); } else { + console.error(log); reject(code); } }); diff --git a/server/tests/unit/sequence/index.test.ts b/server/tests/unit/sequence/index.test.ts index 84b51356..8d6dd556 100644 --- a/server/tests/unit/sequence/index.test.ts +++ b/server/tests/unit/sequence/index.test.ts @@ -12,6 +12,7 @@ describe("Control Sequence Document", () => { it( "convertToDOCX executes without error", async () => { + fs.mkdirSync(tempDirPath, { recursive: true }); await generateDoc(EXAMPLE_SELECTIONS, `${tempDirPath}/sequence-doc.docx`); return; }, From d0e58519d347ea78063e74f283df9627de942395 Mon Sep 17 00:00:00 2001 From: AntoineGautier Date: Thu, 8 Oct 2026 18:25:33 +0200 Subject: [PATCH 3/3] Add specification for new keying logic --- docs/selection-keys.md | 272 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 docs/selection-keys.md diff --git a/docs/selection-keys.md b/docs/selection-keys.md new file mode 100644 index 00000000..00cb6f51 --- /dev/null +++ b/docs/selection-keys.md @@ -0,0 +1,272 @@ +# Selection Keys + +Specification for the keys used to store configuration values (`selections`, `evaluatedValues`) and to exchange them with the sequence document pipeline. Supersedes the declaring-class keys described in [#620](https://github.com/lbl-srg/ctrl-flow-dev/issues/620). + +## Motivation + +On `main`, a key is `-`, where `declaringClass` is the class where the parameter is declared. Two templates that redeclare the same instance path to different classes sharing a base class produce the same key, so their values are merged when configurations of different templates are combined (#620). + +The key must instead identify an element unambiguously across all templates, so that: + +- consumers (sequence document, future Modelica export, future record ⇄ Excel converter) can address a value without implementing template-scoping logic; +- a key translates directly into a Modelica class modification. + +## Grammar + +All design choices comply with the [Modelica Language Specification 3.7](https://specification.modelica.org/maint/3.7/MLS.html) (MLS). `IDENT` and `name` are as defined in MLS [§2.3](https://specification.modelica.org/maint/3.7/lexical-structure.html#identifiers-names-and-keywords) and [appendix A](https://specification.modelica.org/maint/3.7/modelica-concrete-syntax.html): + +``` +key = rootClass "-" elementPath +rootClass = className (fully qualified name of the template class, without leading "."; config.templatePath) +elementPath = elementName (path of the element relative to rootClass) + +className = C-IDENT { "." C-IDENT } +elementName = { E-IDENT "." } ( E-IDENT | C-IDENT ) (the last identifier is a class only for a short class element, see rule 4) +C-IDENT = NON-DIGIT { DIGIT | NON-DIGIT } (class identifier: IDENT without Q-IDENT) +E-IDENT = NON-DIGIT { DIGIT | NON-DIGIT } | Q-IDENT (component identifier: IDENT) +Q-IDENT = "'" { Q-CHAR | S-ESCAPE } "'" +``` + +Examples: + +| Declaration | Key | +|---|---| +| `parameter Boolean have_reqNeeCoo` in component `ctl` of template `Buildings.Templates.ZoneEquipment.VAVBoxReheat` | `Buildings.Templates.ZoneEquipment.VAVBoxReheat-ctl.have_reqNeeCoo` | +| `parameter Boolean 'with-dash'` in template `P.A` | `P.A-'with-dash'` | +| `parameter Boolean 'a.b'` in component `'c-d'` of template `P.A` | `P.A-'c-d'.'a.b'` | +| `parameter Boolean 'with-dash'` in template `P.'A'` | not supported (quoted class identifier) | + +- **Why not `rootClass.elementPath`.** In Modelica, `A.c` only references an element of `A` if `A` is a package. Templates are models: their components have no formal path until instantiated. The dotted form is therefore not a valid Modelica reference, and it cannot be split without looking up which prefix is a class. +- **Quoted component identifiers.** The single quotes are part of the identifier: `'x'` and `x` are distinct identifiers (MLS §2.3.1), hence distinct keys. Quotes are never added or removed. +- **No quoted class identifiers.** MLS allows `Q-IDENT` for classes, but a quoted class cannot be stored with the directory hierarchy mapping (MLS §13.4.1): `'Test'.mo` and `Test.mo` are the same file name. Tools fall back to storing such a class in the enclosing `package.mo`. This dead angle of the specification is not supported. A quoted identifier anywhere in a class name (template, class of a component, short class, redeclared class, enumeration type) is rejected with an explicit error by the server parser, and keys containing one are invalid. Values are never silently misinterpreted. +- **Mapping to Modelica.** `rootClass` is the class to extend; `elementPath` is the component reference in the class modification: + + | Key | Value | Modelica | + |---|---|---| + | `T-a.b.p` | `true` | `extends T(a(b(p=true)))` | + | `T-a.b` | `P.C` (replaceable component) | `extends T(a(redeclare P.C b))` | + | `T-a.S` | `P.C` (replaceable short class `S`) | `extends T(a(redeclare model S = P.C))` | + +## Parsing and normalization + +`rootClass` contains no `Q-IDENT`, hence no `-`: the first `-` of a key always separates `rootClass` from `elementPath`. + +A component `Q-IDENT` may contain `.`, `-` and escaped quotes (`'13\'H'`). Names that may contain component identifiers (`elementPath`, option `modelicaPath`s of components, instance paths) are therefore never split with a plain string split. A single scanner tokenizes them: + +1. Outside a `Q-IDENT`, `'` opens a `Q-IDENT` and `.` separates identifiers. +2. Inside a `Q-IDENT`, `\` escapes the next character (so `\'` does not close the identifier) and `'` closes it. +3. A key is invalid if it has no `-`, if `rootClass` does not match `className`, if a `Q-IDENT` is not closed, or if `elementPath` does not match `elementName`. + +MLS §2.3.1 states that the redundant escapes `\?` and `\"` are the same as `?` and `"`. Different spellings of the same identifier would yield different keys, so keys are built from the **normalized** spelling, where `\?` and `\"` are replaced with `?` and `"`. All other escapes (`\'`, `\\`, `\a`, `\b`, `\f`, `\n`, `\r`, `\t`, `\v`) are kept as written. + +The same scanner provides the name helpers (split into identifiers, last identifier, enclosing name). They replace every plain `split(".")` and `split("-")` applied to Modelica names in the client (interpreter, display mapping, modifier and expression helpers), the server parser, and the sequence document pipeline (Python port of the scanner). + +## Values + +``` +value = Boolean | number | string | className | enumLiteral +enumLiteral = className "." E-IDENT (enumeration type, then literal: quoted literals are supported) +``` + +| Element | Value | Example | +|---|---|---| +| Replaceable component or short class | `className` of the redeclared class | `Buildings.Templates.Components.Coils.WaterBasedHeating` | +| Enumeration parameter | `enumLiteral` | `P.Types.Valve.TwoWayModulating`, `P.Types.Valve.'two-way'` | +| Other parameters | Boolean, number, or string | `true`, `0.7` | + +- **Enumeration literals** may be quoted (`type Valve = enumeration('two-way', threeWay)`), but the enumeration type must not be (see the quoted class identifier rule). The literal is the last identifier of the value, extracted with the scanner. `P.Types.Valve.'two-way'` and `P.Types.Valve.two_way` are distinct values. +- **Normalization.** Quoted literals are normalized like quoted component identifiers, so that values compare equal (client `==`, mogrifier `EQUALS`/`ANY`/`NOT_EQUALS`) whatever the escape spelling in the source. +- **Recognizing a value as a name.** `isValidModelicaName` and `isFullyQualifiedName` accept a trailing quoted identifier, so a quoted literal is resolved as an enumeration value and not parsed as a string literal. + +## Resolution rules for `elementPath` + +`elementPath` is the **resolved** path, i.e., the path returned by `resolvePaths`: + +1. **Inner/outer.** Path modifiers (`template.pathModifiers`) are applied: an element reached through an `outer` component is keyed at the `inner` declaration. +2. **Record bindings.** A parameter reached through a bound record (`mod(rec=localRec)` or `Rec rec = localRec`) is keyed at the binding target (`localRec.p`, not `mod.rec.p`), which is the only place the value can be modified. +3. **Replaceable components.** The choice is keyed at the component: `T-coiHea`. +4. **Replaceable short classes.** The choice is keyed at the short class element, in the scope of the class that declares it: `T-.`, or `T-` when declared in the template itself (no leading dot). One key sets the type of every instance declared with that short class in that scope. +5. **No array subscripts.** `elementPath` is a `name`, as the target of an `element-modification` (MLS appendix A), not a `component-reference`. Array components are modified as a whole (array value, or `each`). + +## Invariants + +- **Unique.** Within a configuration there is at most one key per element. Changing the type of a replaceable element overwrites the same key. +- **Computable without option lookup.** A key is built from `(templatePath, resolved elementPath)` only, and parsed with the scanner above, without any class or option lookup. A single module provides `selectionKey(rootClass, elementPath)` and `parseSelectionKey(key)`, along with the name helpers; no other code concatenates or splits keys or names. +- **Same key space for reads and writes.** The UI (`OptionSelect`/`SlideOut`), the interpreter (`getValue`, `effectiveClass`, `isValidSelection`) and `getEvaluatedValues` all use `selectionKey`. + +## Interpreter structure + +`_instancePathToOption` and `getReplaceableType` are replaced by small functions with a single responsibility each. They are the only implementations of their concern in the client. + +| Function | Responsibility | +|---|---| +| `names.ts` | Quote-aware name helpers (see Parsing and normalization). | +| `selectionKey.ts` | `selectionKey(rootClass, elementPath)`, `parseSelectionKey(key)`. | +| `applyPathModifiers(path, pathModifiers)` | Inner/outer rewriting. | +| `memberOption(classPath, name, ctx)` | Declared or inherited element `name` of class `classPath`, or `null`. The template is handled like any other class. | +| `effectiveClass(path, declaredOption, ctx)` | Class of the element at `path` (see below). | +| `bindingRedirect(path, option, ctx)` | Rewritten path if the element at `path` is reached through a record binding (rule 2), or `null`. | +| `resolveInstance(path, ctx)` | Walks `path` one identifier at a time: `memberOption`, then `bindingRedirect`, then `effectiveClass`. Returns `{ optionPath, classPath, resolvedPath, outerOptionPath }`, or `null` if any identifier cannot be resolved. | + +### `effectiveClass` + +The class of the element at `path`, declared by `declaredOption`, is the first of: + +1. the user selection `selections[selectionKey(templatePath, path)]` (the outermost redeclaration: `extends T(…(redeclare C …))`); +2. the redeclaration in `ctx.mods[path]` (from the template and its classes); +3. the declared type of `declaredOption`. + +If the result is a short class, the short class element is resolved the same way (rule 4), and the alias chain is followed to a long class definition. The special case for `datAll` (`Buildings.Templates.Data.AllSystems`) is handled here and nowhere else. + +Every computation of an element's class uses `effectiveClass`: `resolveInstance`, `buildMods`, `getOptionInstance`, and the display mapping (`_formatDisplayItem`). + +### `resolveInstance` + +- `resolvedPath` is the `elementPath` used in keys (rules 1 and 2). +- An identifier that cannot be resolved yields `null`. On `main`, `_instancePathToOption` instead returns the path of the enclosing class (`interpreter.ts:342-344`), which is a silently wrong answer. +- Results are cached per `ConfigContext`, by path prefix. This is valid because a context is rebuilt whenever a selection changes. + +## Keys exempt from the grammar + +| Key | Example | Reason | +|---|---|---| +| Project-level settings | `Buildings.Templates.Data.AllSystems.stdEne` | Project singleton bound to the `outer datAll` of every template; unambiguous. Kept unchanged (normalizing to `Buildings.Templates.Data.AllSystems-stdEne` is deferred). | + +The system type of a configuration and the pipeline flags (`DEL_INFO_BOX` on `main`) are not keys: they are fields of the payload (see Payload). + +## Stores + +- `config.selections`: values entered by the user. This is the only source for Modelica export. +- `config.evaluatedValues`: values derived by the interpreter, same key space. Never exported. +- `project.selections`, `project.evaluatedValues`: project-level settings (exempt keys). +- **Persistence.** No migration: the local storage key includes the client version, which is bumped on every build. +- **Projects.** Every configuration belongs to exactly one existing project: + - `ConfigInterface.projectId` (required) is set by `configStore.add()` to the active project id. + - Queries and bulk removals of the config store (`getConfigsForProject`, `getConfigsForSystemTemplate`, `getActiveConfigs`, `hasSystemTemplateConfigs`, `removeAllForSystemTemplate`) are scoped to a project, the active one by default. Operations by configuration `id` (a UUID) are not scoped. + - Removing a project removes its configurations (`removeAllForProject`). Saving the project details, which discards the configurations of the project, uses it too. + - The active project is persisted as soon as it is created. Otherwise its id, generated at page load, would change on reload, leaving its configurations without a project. + - Once both stores are hydrated, a configuration whose `projectId` matches no project is reassigned to the project if there is exactly one, and reported otherwise. It is never silently dropped. + +## Payload + +The payload is the exchange format between the client and every consumer (sequence document today; Modelica export and record ⇄ Excel converter in the future). It is designed for several projects, each with several configurations, possibly of the same template. + +```json +{ + "schemaVersion": 1, + "meta": { + "ctrlFlow": "0.1.35", + "libraries": { "Buildings": "" } + }, + "options": { "deleteInfoBox": false }, + "projects": [ + { + "id": "6f0c…", + "name": "Office building", + "values": { + "Buildings.Templates.Data.AllSystems.stdEne": { + "value": "Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1", + "origin": "user" + } + }, + "configurations": [ + { + "id": "a41e…", + "name": "Perimeter boxes", + "quantity": 12, + "systemType": "Buildings.Templates.ZoneEquipment", + "template": "Buildings.Templates.ZoneEquipment.VAVBoxReheat", + "values": { + "Buildings.Templates.ZoneEquipment.VAVBoxReheat-ctl.have_occSen": { "value": true, "origin": "user" }, + "Buildings.Templates.ZoneEquipment.VAVBoxReheat-ctl.have_CO2Sen": { "value": false, "origin": "evaluated" } + } + } + ] + } + ] +} +``` + +### Rules + +- **Addresses.** A value is addressed by `(project.id, configuration.id, key)`, or `(project.id, key)` for project-level settings. This address is unambiguous across projects, configurations and templates. Keys are unique within a `values` object, so each key holds a single value. +- **Identifiers.** `id`s are the UUIDs of the client stores, stable across sessions. `name`s are labels: they are not required to be unique and are never used as identifiers. +- **Value attributes.** Each key maps to an object, never to a bare value, so that attributes can be added without breaking consumers: + - `value` (required): see Values. There are no `null` values: an element without a value is absent. + - `origin` (required): `"user"` for a value entered by the user (`selections`), `"evaluated"` for a value derived by the interpreter (`evaluatedValues`). When both exist, the user value wins. Modelica export writes `"user"` values only. + - Further attributes (unit, bounds, description, etc.) may be added; consumers ignore attributes they do not know. +- **Payload-wide attributes** go in `meta` (versions of ctrl-flow and of the libraries the templates were generated from), never on each value. +- **Consumer options** go in `options`. They are not Modelica values. `deleteInfoBox` replaces `DEL_INFO_BOX`. +- **Versioning.** `schemaVersion` is an integer, incremented on any breaking change. Adding optional attributes or fields is not breaking. Consumers reject a payload whose `schemaVersion` they do not support. +- **Order.** `projects` and `configurations` follow the order of the client stores. + +## Sequence document + +### Scope + +A sequence document covers one project. The sequence endpoint rejects a payload that does not contain exactly one project, until generating documents for several projects is specified. + +### Aggregation + +Toggles evaluate over the values of a project, gathered across its configurations: + +- **System type** (e.g. `VAV` → `Buildings.Templates.ZoneEquipment`): the set of `template`s of the configurations with that `systemType`. +- **Key pattern** (see Mappings): the union of the `value`s of the matching keys in all configurations. Both origins are used, as on `main`. +- **Project-level setting**: the `value` in `project.values`. + +This reproduces the merge done by the client on `main`. Merging now happens in the mogrifier, where toggle expressions covering several templates configured differently will be added later. + +### Mappings + +The `Modelica Parameter` column of the mappings file holds either an exempt key, or a **key pattern**: + +``` +pattern = selector "-" elementPath +selector = name (a template class, or a package containing templates) +``` + +A pattern matches every key whose `elementPath` is equal and whose `rootClass` is the selector or lies within the selector package. Both comparisons are made on identifier sequences produced by the scanner, never on string prefixes: `P.A` lies within `P`, but `P.AB` does not lie within `P.A`. The mogrifier evaluates a toggle against the union of the values of all matching keys. A condition on a subset of templates is expressed by the selector, or by a new mapping entry. + +The `Current G36 Decisions` mappings are rewritten with the narrowest selector that covers the templates whose values are merged today, so that the generated document is unchanged, e.g.: + +| Short ID | `main` | New | +|---|---|---| +| `OCC` | `Buildings.Templates.ZoneEquipment.Components.Interfaces.ControllerG36VAVBox.have_occSen-ctl.have_occSen` | `Buildings.Templates.ZoneEquipment-ctl.have_occSen` | +| `COOL` | `Buildings.Templates.AirHandlersFans.VAVMultiZone.coiCoo-coiCoo` | `Buildings.Templates.AirHandlersFans.VAVMultiZone-coiCoo` | + +### Golden tests + +The documents generated before and after the refactoring are compared by golden tests: + +- `client/tests/sequence/golden-payload.test.ts` builds the payloads of 52 projects through the same code path as the UI (display mapping, `getConfigValuesToSave`, `buildSequencePayload`). There is one single-configuration project per template with default values, one per choice of each option displayed by default, and projects combining several templates, several configurations of the same template, and other project settings. Cases are defined by instance paths and values, not by keys. +- `server/scripts/sequence-doc/tests/test_golden.py` generates the document of each payload and compares its text to the expected text. + +Both are stored in `server/scripts/sequence-doc/tests/static/golden` and are regenerated with `UPDATE_GOLDEN=1`. The payload format changes the payloads, which are then regenerated. The expected text must not change. + +## Prerequisites + +Verified on 2026-10-08 with a probe package (quoted components and parameters containing `.`, `-` and `\'`, quoted enumeration literals, a record binding to a quoted record, modifications and expressions referencing quoted identifiers, and a quoted class used as a component type): + +- **modelica-json** preserves quoted identifiers verbatim, quotes and escapes included, in declarations, enumeration literals, modifications, expressions and class names. +- **The server parser** preserves them in option paths (`…Template.'c-d'`), modifier keys (`…Template.'c-d'.'a.b'`), enumeration literals and values (`…Types.Valve.'13\'H'`), `enable` expressions (`'with-dash'`), `if` expressions and record bindings (`'rec-1'`). +- **To be implemented:** + - The parser accepts a quoted class without error (`…Classes.'Q'`). It must reject it. + - Six plain `split(".")` sites in the parser apply to element paths, so they would mis-split a component identifier containing `.`. They must use the scanner. The probe showed no symptom: `parser.ts:99` (inherited element lookup), `parser.ts:270`, `parser.ts:506` (`baseType`), `modification.ts:162`, `template.ts:173` (tree list), `schedule.ts:178`. The other seven sites only apply to class names, which are never quoted. + +Issues found by the probe, unrelated to quoted identifiers: + +- The parser crashes on a class without a description string (`Cannot read properties of undefined (reading 'description_string')`). MLS makes description strings optional; MBL always has them. +- The loader only supports the directory hierarchy mapping (MLS §13.4.1), as documented in `findPackageEntryPoints`: a template defined in a single-file package is not detected. This is consistent with not supporting quoted class identifiers, which can only be stored in a `package.mo`. +- modelica-json reports schema errors for a class without a description string and for a package without elements, while still writing the JSON. + +## Out of scope + +- Modelica export and the record ⇄ Excel converter (this specification only guarantees that their addresses exist). +- The multi-project UI (creating, switching and removing projects), and generating sequence documents for several projects. The stores and the payload already support them. +- Name lookup in expressions and modifiers (`resolvePaths`, `createPossiblePaths`). It approximates Modelica lookup (MLS §5.3) by trimming the instance path instead of searching the enclosing class scopes. +- Toggle expressions for sections covering several templates configured differently. +- Display of parameters of short class instances (see Known limitations). + +## Known limitations + +- **Replaceable short classes.** On `main`, short-class choices are written under one key (`…ShortClass-ShortClass`), read under another (`…ShortClass-.FirstComponent`), and the parameters of the selected class are displayed and keyed under the class name (`ShortClass.container`) rather than under the instance. Selecting another class does not change how the instance resolves. No template in `templates.json` uses a replaceable short class in the configuration panel. This refactoring fixes the key (rule 4); the display and resolution of short class instances are tracked separately.