I've been struggling with my ice storage model for a long time, and I've referred to previous posts, but I can't get it to work as expected, so I'd like to ask you how to solve the problems.
Below is a schematic diagram of plant loop and condenser loop of my model. The IDF file is here. Its version is v8.9.0. BrineChiller + IceTank is the main plant system, and BackupChiller is only for assisting when the IceTank is completely discharged and there is still cooling load.
There are two major fatal problems with my current model.
- Problem 1:
ThermalStorage:Ice:Detailed
doesn't charge nor discharge at all. - Problem 2: Operation Status of
HeatExchanger:FluidToFluid
is always 0 (off).
About Problem 1, as some previous posts suggest,it seems that we have to use EMS to make the ice thermal storage model work properly. None of ExampleFiles for ice storage model work properly. The charts below are part of the results of the ExampleFiles (they are not the results of my model).
I referred to one thesis “Strategic control and cost optimization of thermal energy storage in
buildings using EnergyPlus” and tried to charge/discharge of Ice Storage in my model based on Ice Thermal Storage End Fraction
, but so far it's not working. I'm new to EMS and I think there's something wrong with it. Below is my input to EMS in my model.
!- =========== ALL OBJECTS IN CLASS: ENERGYMANAGEMENTSYSTEM:SENSOR ===========
EnergyManagementSystem:Sensor,
SensorForIceThermalStorageEndFraction, !- Name
IceTank, !- Output:Variable or Output:Meter Index Key Name
Ice Thermal Storage End Fraction ; !- Output:Variable or Output:Meter Name
!- =========== ALL OBJECTS IN CLASS: ENERGYMANAGEMENTSYSTEM:ACTUATOR ===========
EnergyManagementSystem:Actuator,
IceTankOverride, !- Name
IceTank, !- Actuated Component Unique Name
Plant Component ThermalStorage:Ice:Detailed, !- Actuated Component Type
On/Off Supervisory; !- Actuated Component Control Type
EnergyManagementSystem:Actuator,
PHEOverride, !- Name
PHE, !- Actuated Component Unique Name
Plant Component HeatExchanger:FluidToFluid, !- Actuated Component Type
On/Off Supervisory; !- Actuated Component Control Type
EnergyManagementSystem:Actuator,
BackupChillerOverride, !- Name
BackupChiller, !- Actuated Component Unique Name
Plant Component Chiller:Electric:EIR, !- Actuated Component Type
On/Off Supervisory; !- Actuated Component Control Type
EnergyManagementSystem:Actuator,
ChPriSupPumpOverride, !- Name
ChPriSupPump, !- Actuated Component Unique Name
Plant Component Pump:VariableSpeed, !- Actuated Component Type
On/Off Supervisory; !- Actuated Component Control Type
EnergyManagementSystem:Actuator,
ChPriLoopOverride, !- Name
ChPriLoop, !- Actuated Component Unique Name
Plant Loop Overall, !- Actuated Component Type
On/Off Supervisory; !- Actuated Component Control Type
!- =========== ALL OBJECTS IN CLASS: ENERGYMANAGEMENTSYSTEM:PROGRAMCALLINGMANAGER ===========
EnergyManagementSystem:ProgramCallingManager,
IceTankOnOffManagement, !- Name
AfterPredictorBeforeHVACManagers, !- EnergyPlus Model Calling Point
EMS_IceTankControlProgram; !- Program Name 1
!- =========== ALL OBJECTS IN CLASS: ENERGYMANAGEMENTSYSTEM:PROGRAM ===========
EnergyManagementSystem:Program,
EMS_IceTankControlProgram, !- Name
IF (Hour >= 23) || (Hour <= 6) && (SensorForIceThermalStorageEndFraction < 0.95), !- Program Line 1
SET ChPriLoopOverride = 1.0, !- Program Line 2
ELSEIF (Hour >= 23) || (Hour <= 6) && (SensorForIceThermalStorageEndFraction >= 0.95), !- A4
SET ChPriLoopOverride = 0, !- A5
ELSEIF (Hour >= 7) && (Hour <= 22) && (SensorForIceThermalStorageEndFraction > 0), !- A6
SET ChPriSupPumpOverride = 1.0, !- A7
SET IceTankOverride = 1.0, !- A8
SET PHEFlowOverride = 1.0, !- A9
SET BackupChillerOverride = 0, !- A10
ELSEIF (Hour >= 7) && (Hour <= 22) && (SensorForIceThermalStorageEndFraction == 0), !- A11
SET PHEOverride = 0, !- A12
ENDIF; !- A13
For your reference, below is summary tables that show what I want to do and what is actually happening in my current model.
About Problem 2, it may be the result of Problem 1, but there may be other causes. I'm selecting CoolingSetpointOnOffWithComponentOverride
as Control Type of HeatExchanger:FluidToFluid
. As long as I read EnergyPlus I/O Reference, it seems to be the most suitable for my model, but my input to other fields might be wrong. Below is my input to HeatExchanger:FluidToFluid
.
!- =========== ALL OBJECTS IN CLASS: HEATEXCHANGER:FLUIDTOFLUID ===========
HeatExchanger:FluidToFluid,
PHE, !- Name
, !- Availability Schedule Name
PHEChPriDemIn, !- Loop Demand Side Inlet Node Name
PHEChPriDemOut, !- Loop Demand Side Outlet Node Name
autosize, !- Loop Demand Side Design Flow Rate {m3/s}
PHEChSecSupIn, !- Loop Supply Side Inlet Node Name
PHEChSecSupOut, !- Loop Supply Side Outlet Node Name
AUTOSIZE, !- Loop Supply Side Design Flow Rate {m3/s}
CrossFlowBothUnMixed, !- Heat Exchange Model Type
autosize, !- Heat Exchanger U-Factor Times Area Value {W/K}
CoolingSetpointOnOffWithComponentOverride, !- Control Type
PHEChSecSupOut, !- Heat Exchanger Setpoint Node Name
, !- Minimum Temperature Difference to Activate Heat Exchanger {deltaC}
, !- Heat Transfer Metering End Use Type
BUChillerChIn, !- Component Override Loop Supply Side Inlet Node Name
BUChillerCdIn, !- Component Override Loop Demand Side Inlet Node Name
Loop; !- Component Override Cooling Control Temperature Mode
Any advice would be appreciated.