-
Notifications
You must be signed in to change notification settings - Fork 394
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow ZoneHVAC:TerminalUnit:VariableRefrigerantFlow to be connected to AirloopHVAC and AirLoopHVAC:OutdoorAirSystem:EquipmentList #7605
Changes from 21 commits
c128c36
4cf7750
8bae173
6d55df3
e44c891
731c506
804fb76
020c7b3
449f700
535b9d3
a8a5aea
90e56ab
c3b5c59
e4af7b4
c298e03
59c05de
060d90d
7cdbd7c
16aa3c8
a3c6130
0774997
b892caf
eb49b33
e97384b
0a0774b
00bd93f
5a9e7f3
6fa29d4
474348e
d436dbf
833a6f4
12c79ca
97fc331
507c999
8cff2f8
e3f2676
157d0ab
fd89a34
a3d8aa8
5f37ad0
d6972ae
35f373a
b75fc96
930afa7
b4a7a1f
b88966e
4d49402
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,229 @@ | ||
Connecting Split DX AHU Components to VRF Refrigeration Loops | ||
================ | ||
|
||
**Richard Raustad, Florida Solar Energy Center** | ||
|
||
- 11/7/19 - Draft NFP | ||
- 12/4/19 - several off-line design strategy discussions | ||
- 12/4/19 - Design Document added at end of NFP | ||
- 12/5/19 - New OO method of storing air system factory pointers has tentatively been implemented and the ZoneHVAC:TerminalUnit:VariableRefrigerantFlow objects has been added as a valid main air loop component. | ||
|
||
## Justification for New Feature ## | ||
|
||
One of the recent developments in the variable refrigerant flow systems (VRF) field is the ability to connect terminal devices other than indoor split fan coils to a VRF refrigerant loop. These new terminal devices include DOAS AHUs and rooftop mounted split DX AHUs for space conditioning and ventilation. | ||
|
||
Nearly all VRF applications need ventilation. Previously, ventilation had to be provided by separate packaged rooftop type DOAS equipment since VRF indoor units cannot handle raw outdoor air directly and VRF condensing units could not serve DOAS equipment. In addition, one of the energy efficiency limitations of VRF systems is the lack of an outdoor air economizer cycle. Both challenges have now been solved. | ||
|
||
Multiple major manufacturers such as Daikin, Mitsubishi, LG, and Toshiba-Carrier offer the ability to connect split DX DOAS AHUs to VRF condensing units. In addition, Toshiba-Carrier condensing units can be connected to multiple rooftop-mounted split DX AHUs that provide space conditioning and ventilation and can offer outdoor air economizer cycles. These developments extend the application of VRF systems and the energy efficiency of these systems. | ||
|
||
Currently, VRF systems in EnergyPlus only allow ZoneHVAC terminals to be connected to a VRF refrigerant loop. | ||
|
||
## E-mail and Conference Call Conclusions ## | ||
|
||
|
||
## Overview ## | ||
|
||
This task will expand the capabilities of the VRF model to allow terminal devices such as split DX DOAS AHUs and split DX AHUs for space conditioning and ventilation to be connected to VRF refrigerant loops. The following figure is excerpt from the Eng. Ref. (Figure 16.51, pg 1163, V9.2) and modified to include VRF air loop and outdoor air equipment (red circle). | ||
|
||
Figure 1: ![Figure 1](https://github.com/NREL/EnergyPlus/blob/NFP---Connect-split-DX-to-VRF-refrigerant-loop/design/FY2019/VRFTU%20Allowed%20in%20Airloop-OASys.png) Variable Refrigerant Flow Heat Pump (draw through fan placement) | ||
|
||
## Approach ## | ||
|
||
The common connection of VRF TU's and the VRF condenser is the ZoneTerminalUnitList object. All ZoneHVAC:TerminalUnit:VariableRefrigerantFlow objects connected to a single VRF condenser (AirConditioner:VariableRefrigerantFlow or AirConditioner:VariableRefrigerantFlow:FluidTemperatureControl:\*) are listed in the ZoneTerminalUnitList object and this objects name is entered as an input in the VRF condenser object. | ||
|
||
The most straight-forward approach appears to be allowing the ZoneHVAC:TerminalUnit:VariableRefrigerantFlow object to be connected as zone (existing), air loop and outdoor air system equipment. Using this methodology, limited changes to the AirConditioner:VariableRefrigerantFlow and AirConditioner:VariableRefrigerantFlow:FluidTemperatureControl:\* objects are anticipated. | ||
|
||
## Controls: | ||
ZoneHVAC Equipment: no changes (currently load based control) | ||
AirloopHVAC Equipment: requires thermostat control zone input, load based control | ||
OutdoorAir Equipment: controlled to outlet node set point temperature (and humidity ratio?) | ||
|
||
## Testing/Validation/Data Sources ## | ||
|
||
New test files will be created using VRF TUs in the air loop and outdoor air system. | ||
|
||
## Input Output Reference Documentation ## | ||
|
||
IO Ref text will be updated to include these new capabilities. | ||
|
||
## Input Description ## | ||
|
||
Changes to the IDD appear to be minimal as no new objects will be added to E+. The only changes to model inputs are the allowed location of the TU object and thermostat location for controlling air loop equipment. | ||
|
||
``` | ||
ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, | ||
\memo Zone terminal unit with variable refrigerant flow (VRF) DX cooling and heating coils | ||
\memo (air-to-air heat pump). The VRF terminal units are served by an | ||
\memo AirConditioner:VariableRefrigerantFlow or | ||
\memo AirConditioner:VariableRefrigerantFlow:FluidTemperatureControl:* system. | ||
\min-fields 19 | ||
A1 , \field Zone Terminal Unit Name | ||
\required-field | ||
\type alpha | ||
\reference ZoneTerminalUnitNames | ||
\reference DOAToZonalUnit | ||
\reference ZoneEquipmentNames | ||
|
||
-- new references as follows (not yet tested) -- | ||
\reference-class-name validBranchEquipmentTypes | ||
\reference validBranchEquipmentNames | ||
\reference-class-name validOASysEquipmentTypes | ||
\reference validOASysEquipmentNames | ||
|
||
-- new field -- | ||
A19; \field Controlling Zone or Thermostat Location | ||
\note Used only for AirloopHVAC equipment on a main branch | ||
\type object-list | ||
\object-list ZoneNames | ||
\note Zone name where thermostat is located. Required for control of air loop equipment. | ||
``` | ||
|
||
## Outputs Description ## | ||
|
||
No new outputs are anticipated. | ||
|
||
## Engineering Reference ## | ||
|
||
New schematic diagram (similar to above) and corresponding text description. | ||
|
||
## Example File and Transition Changes ## | ||
|
||
New example file will be included. | ||
No transition required. | ||
|
||
## References ## | ||
|
||
Manufacturer Documentation | ||
------------ ------------------------------------------------------------------- | ||
Daikin https://www.daikinac.com/content/commercial/ventillation-units/dvs-dedicated-outside-air-system | ||
Mitsubishi https://www.mitsubishipro.com/products/city-multi-vrf/ventilation/premisys-dedicated-outdoor-air-systems | ||
Mitsubishi http://meus1.mylinkdrive.com/item/PremiSys.html | ||
LG https://lghvac.com/commercial/product-type/?productTypeId=a2x44000003XR0s&iscommercial=true | ||
Carrier https://www.carrier.com/commercial/en/us/products/variable-refrigerant-flow/toshiba-carrier-vrf-products/toshiba-carrier-indoor-units/40qq/ | ||
|
||
|
||
## Design Documentation ## | ||
|
||
Adding another air loop component, in this case ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, perpetuates historical programming of individual component calls without regard to future code changes for air loop equipment and code maintenance. The Simulate call arguments for various air loop models use a CompIndex for array based access. The UnitarySystem was the first air loop model to use a pointer based Sim call, however, this pointer was not accessible to all air loop equipment (e.g. VRF, ChangeoverBypass). | ||
|
||
The declaration of the pointer, used by upper level managers (i.e., Air loop equipment, OA systems, zone equipment), was specific to the UnitarySystem and this declaration is no longer adequate. | ||
|
||
DataAirLoop.hh | ||
|
||
struct OutsideAirSysProps | ||
std::vector<UnitarySystems::UnitarySys *> compPointer; | ||
|
||
DataAirSystems.hh | ||
|
||
struct AirLoopCompData // data for an individual component | ||
UnitarySys *compPointer; // pointer to UnitarySystem | ||
|
||
DataZoneEquipment.hh | ||
|
||
struct EquipList | ||
std::vector<UnitarySystems::UnitarySys *> compPointer; | ||
|
||
At the time that UnitarySystem was refactored to use the factory/pointer method, the set up for the air loop branch object changed from: | ||
|
||
} else if (componentType == "AIRLOOPHVAC:UNITARYSYSTEM") { | ||
PrimaryAirSystem(AirSysNum).Branch(BranchNum).Comp(CompNum).CompType_Num = UnitarySystem; | ||
|
||
to: | ||
|
||
} else if (componentType == "AIRLOOPHVAC:UNITARYSYSTEM") { | ||
PrimaryAirSystem(AirSysNum).Branch(BranchNum).Comp(CompNum).CompType_Num = UnitarySystemModel; | ||
UnitarySystems::UnitarySys thisSys; | ||
PrimaryAirSystem(AirSysNum).Branch(BranchNum).Comp(CompNum).compPointer = thisSys.factory( | ||
DataHVACGlobals::UnitarySys_AnyCoilType, PrimaryAirSystem(AirSysNum).Branch(BranchNum).Comp(CompNum).Name, false, 0); | ||
|
||
And the Sim call was changed from this: | ||
|
||
} else if (SELECT_CASE_var == UnitarySystem) { // 'AirLoopHVAC:UnitarySystem' | ||
SimUnitarySystem(CompName, FirstHVACIteration, AirLoopNum, CompIndex, HeatingActive, CoolingActive); | ||
|
||
to: | ||
|
||
} else if (SELECT_CASE_var == UnitarySystemModel) { // 'AirLoopHVAC:UnitarySystem' | ||
CompPointer->simulate(CompName, FirstHVACIteration, AirLoopNum, CompIndex, HeatingActive, CoolingActive, OAUnitNum, OAUCoilOutTemp, ZoneEquipFlag); | ||
|
||
where: CompPointer = PrimaryAirSystem(AirSysNum).Branch(BranchNum).Comp(CompNum).compPointer as provided by the UnitarySystem factory. | ||
|
||
As is done with plant equipment, a new class will be created such that a pointer can be declared in air systems managers for use by all types of air system equipment. This class is defined in a new header file, DataHVACSystems.hh. Virtual functions are included where this pointer is used to access model specific information from outside the scope of UnitarySystem (e.g., the Sim routine and get functions for air nodes used by air loop DOAS systems). Note that unit tests will need to be updated where this pointer is used to set or access object data and model functions. | ||
|
||
``` | ||
#ifndef DataHVACSystems_hh_INCLUDED | ||
#define DataHVACSystems_hh_INCLUDED | ||
|
||
// C++ Headers | ||
#include <string> | ||
|
||
// EnergyPlus Headers | ||
#include <EnergyPlus/EnergyPlus.hh> | ||
|
||
namespace EnergyPlus { | ||
|
||
// base class for all HVAC systems | ||
class HVACSystemData | ||
{ | ||
|
||
public: | ||
|
||
// Default Constructor | ||
HVACSystemData() | ||
{ | ||
} | ||
|
||
virtual void simulate(std::string const &Name, | ||
bool const firstHVACIteration, | ||
int const &AirLoopNum, | ||
int &CompIndex, | ||
bool &HeatActive, | ||
bool &CoolActive, | ||
int const OAUnitNum, // If the system is an equipment of OutdoorAirUnit | ||
Real64 const OAUCoilOutTemp, // the coil inlet temperature of OutdoorAirUnit | ||
bool const ZoneEquipment, // TRUE if called as zone equipment | ||
Real64 &sysOutputProvided, // sensible output at supply air node | ||
Real64 &latOutputProvided // latent output at supply air node | ||
) = 0; | ||
|
||
virtual void sizeSystem(bool const FirstHVACIteration, int const AirLoopNum) = 0; | ||
virtual int getAirInNode(std::string const &UnitarySysName, int const ZoneOAUnitNum) = 0; | ||
virtual int getAirOutNode(std::string const &UnitarySysName, int const ZoneOAUnitNum) = 0; | ||
|
||
}; | ||
|
||
|
||
} // namespace EnergyPlus | ||
|
||
#endif // DataHVACSystems_hh_INCLUDED | ||
``` | ||
|
||
This class is inherited by the HVAC model where a factory call returns a pointer stored in a local array for later use. | ||
|
||
UnitarySystems.hh | ||
|
||
struct UnitarySys : HVACSystemData | ||
|
||
and it's the HVACSystemData class that is used to declare the pointer array in various managers (instead of using the UnitarySys class). | ||
|
||
|
||
DataAirLoop.hh | ||
|
||
struct OutsideAirSysProps | ||
std::vector<HVACSystemData *> compPointer; | ||
|
||
DataAirSystems.hh | ||
|
||
struct AirLoopCompData // data for an individual component | ||
HVACSystemData *compPointer; // pointer to HVAC system | ||
|
||
DataZoneEquipment.hh | ||
|
||
struct EquipList | ||
std::vector<HVACSystemData *> compPointer; | ||
|
||
Instead of CompIndex being used on the call to the Sim function, the compPointer accesses that data and Sim function directly (as long as all model Sim functions are unified with the same arguments). Eventually, CompIndex will no longer be needed. | ||
|
||
Now that the VRF terminal unit is allowed in the air loop, it should simply be a matter of inheriting the new class and storing the pointer in the same array previously used only for UnitarySystems. Similar changes to other HVAC equipment can now be made during ongoing refactoring efforts. The good news is that since the UnitarySystem can be used anywhere in the air simulation (i.e., air loops, OA systems, zone equipment, and zone OA units) this new OO method (with the help of reviewers updates) can be used with any HVAC equipment type. | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -40191,6 +40191,10 @@ ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, | |
\reference ZoneTerminalUnitNames | ||
\reference DOAToZonalUnit | ||
\reference ZoneEquipmentNames | ||
\reference-class-name validBranchEquipmentTypes | ||
\reference validBranchEquipmentNames | ||
\reference-class-name validOASysEquipmentTypes | ||
\reference validOASysEquipmentNames | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. TU now allowed on main branch and in OA system There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Update the object \memo to mention the new applications. |
||
A2 , \field Terminal Unit Availability Schedule | ||
\type object-list | ||
\object-list ScheduleNames | ||
|
@@ -40246,15 +40250,17 @@ ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, | |
\note This field is set to zero flow when the VRF terminal unit is connected to | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The OA flow rate fields could all be changed to say "This field is set to zero when there is no outdoor air mixer."? |
||
\note central dedicated outdoor air through air terminal single duct mixer object. | ||
A5 , \field Supply Air Fan Operating Mode Schedule Name | ||
\required-field | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This and next 2 fields are (will be) removed so that air loop and OA system TUs do not require a fan object. |
||
\type object-list | ||
\object-list ScheduleNames | ||
\note Required for zone equipment. Leave blank if terminal unit is used in AirLoopHVAC:OutdoorAirSystem:EquipmentList. | ||
\note Also leave blank if terminal unit is used on main AirloopHVAC branch and terminal unit has no fan. | ||
A6 , \field Supply Air Fan Placement | ||
\type choice | ||
\key BlowThrough | ||
\key DrawThrough | ||
\default BlowThrough | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Deleting the default could break existing idfs that have this field blank, expecting it to fill with BlowThrough. You could just say it's ignored if the terminal unit has no fan? |
||
\note Select fan placement as either blow through or draw through. | ||
\note Required for zone equipment. Leave blank if terminal unit is used in AirLoopHVAC:OutdoorAirSystem:EquipmentList. | ||
\note Also leave blank if terminal unit is used on main AirloopHVAC branch and terminal unit has no fan. | ||
A7 , \field Supply Air Fan Object Type | ||
\type choice | ||
\key Fan:SystemModel | ||
|
@@ -40267,9 +40273,9 @@ ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, | |
\note AirConditioner:VariableRefrigerantFlow:FluidTemperatureControl or | ||
\note AirConditioner:VariableRefrigerantFlow:FluidTemperatureControl:HR | ||
\note is used to model VRF outdoor unit | ||
\default Fan:ConstantVolume | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This one is a little more tricky. If there's a fan name, but this field is blank, then the get input should look for a Fan:ConstantVolume to avoid breaking an old idf. Maybe you've already allowed for that. |
||
\note Required for zone equipment. Leave blank if terminal unit is used in AirLoopHVAC:OutdoorAirSystem:EquipmentList. | ||
\note Also leave blank if terminal unit is used on main AirloopHVAC branch and terminal unit has no fan. | ||
A8 , \field Supply Air Fan Object Name | ||
\required-field | ||
\type object-list | ||
\object-list FansCVandOnOffandVAV | ||
A9 , \field Outside Air Mixer Object Type | ||
|
@@ -40370,12 +40376,19 @@ ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, | |
\autosizable | ||
\default autosize | ||
\note Supply air temperature from the supplemental heater will not exceed this value. | ||
N12; \field Maximum Outdoor Dry-Bulb Temperature for Supplemental Heater Operation | ||
N12, \field Maximum Outdoor Dry-Bulb Temperature for Supplemental Heater Operation | ||
\type real | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. And finally air loop equipment need to know the controlling zone otherwise the TU will be set point controlled. |
||
\maximum 21.0 | ||
\default 21.0 | ||
\units C | ||
\note Supplemental heater will not operate when outdoor temperature exceeds this value. | ||
A19; \field Controlling Zone or Thermostat Location | ||
\type object-list | ||
\object-list ZoneNames | ||
\note Used only for AirloopHVAC equipment on a main branch and defines zone name where thermostat is located. | ||
\note Not required for zone equipment. Leave blank if terminal unit is used in AirLoopHVAC:OutdoorAirSystem:EquipmentList. | ||
\note Required when terminal unit is used on main AirloopHVAC branch and colils are not set point controlled. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. coils spelling, fixed. |
||
\note When terminal unit is used in air loop and is load controlled, this zone's thermostat will control operation. | ||
|
||
|
||
\group Zone HVAC Radiative/Convective Units | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -65,6 +65,7 @@ | |
#include <EnergyPlus/HVACDXSystem.hh> | ||
#include <EnergyPlus/HVACFan.hh> | ||
#include <EnergyPlus/HVACHXAssistedCoolingCoil.hh> | ||
#include <EnergyPlus/HVACVariableRefrigerantFlow.hh> | ||
#include <EnergyPlus/HeatRecovery.hh> | ||
#include <EnergyPlus/HeatingCoils.hh> | ||
#include <EnergyPlus/Humidifiers.hh> | ||
|
@@ -658,13 +659,17 @@ namespace AirLoopHVACDOAS { | |
|
||
} else if (SELECT_CASE_var == "AIRLOOPHVAC:UNITARYSYSTEM") { | ||
OutsideAirSys(thisDOAS.m_OASystemNum).InletNodeNum(CompNum) = | ||
OutsideAirSys(thisDOAS.m_OASystemNum).compPointer[CompNum]->AirInNode; | ||
OutsideAirSys(thisDOAS.m_OASystemNum) | ||
.compPointer[CompNum] | ||
->getAirInNode(OutsideAirSys(thisDOAS.m_OASystemNum).ComponentName(CompNum), 0); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Switched from a UnitarySys pointer with direct access to UnitarySys member data to DataHVACSystem::HVACSystem data pointer with member function to access air inlet node. |
||
if (OutsideAirSys(thisDOAS.m_OASystemNum).InletNodeNum(CompNum) == 0) { | ||
InletNodeErrFlag = true; | ||
errorsFound = true; | ||
} | ||
OutsideAirSys(thisDOAS.m_OASystemNum).OutletNodeNum(CompNum) = | ||
OutsideAirSys(thisDOAS.m_OASystemNum).compPointer[CompNum]->AirOutNode; | ||
OutsideAirSys(thisDOAS.m_OASystemNum) | ||
.compPointer[CompNum] | ||
->getAirOutNode(OutsideAirSys(thisDOAS.m_OASystemNum).ComponentName(CompNum), 0); | ||
if (OutsideAirSys(thisDOAS.m_OASystemNum).OutletNodeNum(CompNum) == 0) { | ||
OutletNodeErrFlag = true; | ||
errorsFound = true; | ||
|
@@ -784,6 +789,16 @@ namespace AirLoopHVACDOAS { | |
OutsideAirSys(thisDOAS.m_OASystemNum).InletNodeNum(CompNum) = | ||
EvaporativeCoolers::GetOutletNodeNum(OutsideAirSys(thisDOAS.m_OASystemNum).ComponentName(CompNum), errorsFound); | ||
if (errorsFound) OutletNodeErrFlag = true; | ||
} else if (SELECT_CASE_var == "ZONEHVAC:TERMINALUNIT:VARIABLEREFRIGERANTFLOW") { | ||
OutsideAirSys(thisDOAS.m_OASystemNum).InletNodeNum(CompNum) = HVACVariableRefrigerantFlow::GetVRFTUInAirNodeFromName( | ||
OutsideAirSys(thisDOAS.m_OASystemNum).ComponentName(CompNum), errorsFound); | ||
if (errorsFound) { | ||
InletNodeErrFlag = true; | ||
errorsFound = false; | ||
} | ||
OutsideAirSys(thisDOAS.m_OASystemNum).OutletNodeNum(CompNum) = HVACVariableRefrigerantFlow::GetVRFTUOutAirNodeFromName( | ||
OutsideAirSys(thisDOAS.m_OASystemNum).ComponentName(CompNum), errorsFound); | ||
if (errorsFound) OutletNodeErrFlag = true; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Also added new mining function to get air inlet/outlet nodes. I guess this could have used the same pointer type call as above (if that pointer were available at this time in calling order). |
||
} else { | ||
ShowSevereError(CurrentModuleObject + " = \"" + CompName + "\" invalid Outside Air Component=\"" + | ||
OutsideAirSys(thisDOAS.m_OASystemNum).ComponentType(CompNum) + "\"."); | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -204,4 +204,4 @@ namespace AirLoopHVACDOAS { | |
extern bool GetInputOnceFlag; | ||
} // namespace AirLoopHVACDOAS | ||
} // namespace EnergyPlus | ||
#endif // ENERGYPLUS_UNITARYSYSTEM_HH | ||
#endif // ENERGYPLUS_AIRLOOPHVACDOAS_HH | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fixed cut-n-paste error |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It bothers me that we'll now have a "ZoneHVAC" object that's valid in airloops. We've already set the reverse precedent by allowing "AirloopHVAC:UnitarySystem" to be in airloops and in ZoneHVAC. Will any other components come along that are applicable in both places? Do we want two flavors "ZoneHVAC:TerminalUnit:VariableRefrigerantFlow" and "AirloopHVAC:TerminalUnit:VariableRefrigerantFlow". Or better yet, why not allow "Coil:Cooling:DX:VariableRefrigerantFlow" and Heating as valid coil type in AirloopHVAC:UnitarySystem? Then you don't need any new control logic etc. (Sorry this is a bit late in the game.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm all for changing the names of these objects to reflect system type instead of location. Instead of AirloopHVAC:UnitarySystem it should be just UnitarySystem or HVAC:UnitarySystem. Same for the ZoneHVAC VRF terminal unit. That's a different discussion.
Multiple flavors of any object is no longer acceptable. Although that is managed nicely in Furnaces.cc so it is possible if that's the route to take. It would be nice if JSON could handle that directly.
Furnaces::GetFurnaceInput
Regarding the VRF coils, the condensing unit connects to (via the TerminalUnitList) and talks to the terminal units (not the coils) to sum cooling/heating rates, limit coil capacity, to know when all TUs have been simulated, and maybe other parameters. If I remove the coils from the terminal unit I'll loose that connection (which means rethinking the whole VRF model communication).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I get all that. So, the terminal unit has inputs for an OA mixer - how will that play out when used in an airloop?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suggested OAMixer flows are 0 and autosizing will create 0 flow. Same as ChangeoverBypass. This may mean a new object, one without an internal OA mixer, is not all that out of the question. And I suppose I could drop a VRF coil object on the main branch and create the TU in the background and add that TU to the correct TU list and everything would work the same as it does now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wouldn't get into making shadows object in the background. I thought maybe you'd let the OA mixer be active in the TU and then the user wouldn't need an OA system beyond what's in the VRF terminal unit. Would that work? Or let the OA mixer be optional and only require it when it's used as zone equipment. This may run into the same input processing/init checking problems that UnitarySystem has with its dual role.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree on shadow objects. For child components on the main branch, a parent has to control it (or that control is within the child model at a higher level). So let's assume the parent will be the TU for now. As for an internal OA mixer (w/o economizer) vs OA system mixer, I agree that it could be one or the other. But both would be a problem in sizing (unless of course that was somehow included in sizing). The subject of optional OA mixer came up with ChangeoverBypass and I don't recall right now how I left that (I think I tried doing a node copy from OA mixer inlet to outlet to avoid calling the mixer). And yes I am running into the same problem of zone equipment being called first for a dual role object (i.e., GetInput doesn't have all the info yet). It would be much easier for models that use the OO method of a "new" instance to avoid some of this "waiting for info" issue but that I think is a major rewrite. I'm trying to move in that direction but I should take these types of steps slowly and methodically.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For the zone vs airloop input processing, I think if GetInput were to just populate an array of input data and save all the validation and cross-checking for an Init step, that should solve the issue of timing.