-
Notifications
You must be signed in to change notification settings - Fork 208
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Enable Heat Recovery Chiller Fields #4724
Comments
@mdahlhausen This is already partially implemented. include OpenStudio::Model
m = Model.new
cndLoop = PlantLoop.new(m)
chwLoop = PlantLoop.new(m)
hrLoop = PlantLoop.new(m)
ch = ChillerElectricEIR.new(m)
chwLoop.addSupplyBranchForComponent(ch)
cndLoop.addDemandBranchForComponent(ch)
hrLoop.addDemandBranchForComponent(ch)
=> [openstudio.model.ChillerElectricEIR] <0> Calling addToTertiaryNode to connect it to the tertiary (=Heat Recovery Loop) loop for Object of type 'OS:Chiller:Electric:EIR' and named 'Chiller Electric EIR 1'
=> true
puts ch OS:Chiller:Electric:EIR,
{b040fa1f-f206-454e-ac2e-6468c3bba8ad}, !- Handle
Chiller Electric EIR 1, !- Name
Autosize, !- Reference Capacity {W}
5.5, !- Reference COP {W/W}
, !- Reference Leaving Chilled Water Temperature {C}
, !- Reference Entering Condenser Fluid Temperature {C}
Autosize, !- Reference Chilled Water Flow Rate {m3/s}
, !- Reference Condenser Fluid Flow Rate {m3/s}
{69d8bb32-352d-4999-847f-752d935bab2f}, !- Cooling Capacity Function of Temperature Curve Name
{523248f1-9a17-4af3-911a-be3cc9e0a4b8}, !- Electric Input to Cooling Output Ratio Function of Temperature Curve Name
{39b45e88-985a-4476-97c9-6ac2d9de79b8}, !- Electric Input to Cooling Output Ratio Function of Part Load Ratio Curve Name
, !- Minimum Part Load Ratio
, !- Maximum Part Load Ratio
, !- Optimum Part Load Ratio
, !- Minimum Unloading Ratio
{cff9f947-287b-416b-a171-c0af07a90f97}, !- Chilled Water Inlet Node Name
{2375e7b9-f079-4fcc-91b4-9856313313cd}, !- Chilled Water Outlet Node Name
{64143aad-a2c0-45fe-930f-9dd0f50d41e3}, !- Condenser Inlet Node Name
{ba07517c-528c-4958-b585-2d957ecb1e6b}, !- Condenser Outlet Node Name
WaterCooled, !- Condenser Type
, !- Condenser Fan Power Ratio {W/W}
, !- Fraction of Compressor Electric Consumption Rejected by Condenser
, !- Leaving Chilled Water Lower Temperature Limit {C}
, !- Chiller Flow Mode
Autosize, !- Design Heat Recovery Water Flow Rate {m3/s}
+ {1858909b-3abb-40b9-8983-d3de191752f0}, !- Heat Recovery Inlet Node Name
+ {4188fe54-d459-486f-b6b5-c126678de0f5}, !- Heat Recovery Outlet Node Name
1, !- Sizing Factor
0, !- Basin Heater Capacity {W/K}
10, !- Basin Heater Setpoint Temperature {C}
, !- Basin Heater Operating Schedule Name
1, !- Condenser Heat Recovery Relative Capacity Fraction
, !- Heat Recovery Inlet High Temperature Limit Schedule Name
, !- Heat Recovery Leaving Temperature Setpoint Node Name
General; !- End-Use Subcategory |
If you want to be explicit about which loop you intend to connect to, you can also always call chiller.addToTertiaryNode (but you need to make your own branch yourself). I am seeing the issue with the --- a/resources/model/OpenStudio.idd
+++ b/resources/model/OpenStudio.idd
@@ -13597,11 +13597,11 @@ OS:Chiller:Electric:EIR,
A16, \field Heat Recovery Leaving Temperature Setpoint Node Name
\note This optional field provides control over the heat recovery
\note Using this triggers a model more suited to series bundle and chillers with higher temperature heat recovery
\note If this field is not used, the bundles are modeled as being in parallel
\type object-list
- \object-list ConnectionNames
+ \object-list Node
A17; \field End-Use Subcategory
|
Damn, I suppose you'll also want to put a SPM on that node, like a SetpointManager::Scheduled. Except we disallow placing a SPM on the demand side of a plant loop when the node is on a branch... Before the Splitter, after the Mixer is fine though... I'm torn between removing this check (and remove a valid check for the vast majority of users), or force advanced users doing HR to use the mixer outlet node instead. Edit: Or use the setString/setPointer approach... hrOutletNode = ch.tertiaryOutletModelObject.get.to_Node.get
spm = SetpointManagerScheduled.new(m, ScheduleConstant.new(m))
spm.addToNode(hrOutletNode)
[openstudio.model.SetpointManager] <-1> Object of type 'OS:SetpointManager:Scheduled' and named 'Setpoint Manager Scheduled 1' cannot be added on a demand branch
=> false idx = spm.iddObject.numFields.times.select{|i| spm.iddObject.getField(i).get.name.include?('Setpoint Node') }.first
raise if idx.nil?
spm.setPointer(idx, hrOutletNode.handle())
=> true
puts spm
OS:SetpointManager:Scheduled,
{61d7be49-a724-43b5-995d-8f26e77eacc9}, !- Handle
Setpoint Manager Scheduled 1, !- Name
Temperature, !- Control Variable
{d959a999-a4b2-4380-8cdc-56f715f88c51}, !- Schedule Name
{2e8204e0-8a54-4307-a993-2df5c56d50ab}; !- Setpoint Node or NodeList Name |
Fix #4724 - ChillerElectricEIR correctly set Heat Recovery Leaving Temperature Setpoint Node
Enhancement Request
This is a feature request to enable heat recovery chiller modeling in OpenStudio.
Detailed Description
More specifically, this is a feature request to:
(1) enable and fix field setters for heat recovery chiller inputs
(2) provide a working openstudio example model with a heat recovery chiller
Background:
I'm attempting to emulate a heat recovery chiller scheme in OpenStudio that is doable in EnergyPlus.
See the FTLB_HRC.idf attached.
heat_recovery_chiller.zip
I have a ruby script that adjusts a base model equipment temperatures, adds a heat recovery loop, and adds a heat recovery chiller. However, I cannot manage to set the
ChillerElectricEIR
fields to enable heat recovery operation. ThesetHeatRecoveryLeavingTemperatureSetpointNode
method runs without an error, but fails to set the node in the model. Also, there is no method to set the 'Heat Recovery Inlet Node Name
' and 'Heat Recovery Outlet Node Name
' fields.Related to #4311
Possible Implementation
Setting node names directly is probably not what we want. Typically we add equipment with the
addSupplyBranchForComponent()
oraddDemandBranchForComponent()
methods on aPlantLoop
object. One options is to make anaddHeatRecoveryBranchForComponent
method that sets the nodes for the chiller, or a method tied to the chiller objectaddSupplyHeatRecoveryBranch(<OS:PlantLoop>)
(preferred).The text was updated successfully, but these errors were encountered: