Question-and-Answer Resource for the Building Energy Modeling Community
Get started with the Help page
Ask Your Question

Revision history [back]

Control of Ice Storage model with Heat Exchanger

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.

image description

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

image description

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.

image description

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.

Control of Ice Storage model with Heat Exchanger

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.

image description

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

image description

I referred to one thesis “Strategic control and cost optimization of thermal energy storage in buildings using EnergyPlus” and tried to control 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.

image description

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.

Control of Ice Storage model with Heat Exchanger

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.

image descriptionimage description

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

image description

I referred to one thesis “Strategic control and cost optimization of thermal energy storage in buildings using EnergyPlus” and tried to control 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.

image description

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.

Control of Ice Storage model with Heat Exchanger

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.

image description

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

image descriptionimage description

I referred to one thesis “Strategic control and cost optimization of thermal energy storage in buildings using EnergyPlus” and tried to control 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.

image description

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.

Control of Ice Storage model with Heat Exchanger

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.

image description

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

image description

I referred to one thesis “Strategic control and cost optimization of thermal energy storage in buildings using EnergyPlus” and tried to control 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.

image description

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.

Control of Ice Storage model with Heat Exchanger

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.

image description

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

image description

I referred to one thesis “Strategic control and cost optimization of thermal energy storage in buildings using EnergyPlus” and tried to control 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.EMS. Now I'm using only On/Off Supervisory. This control type doesn't have the function to force equipment to run. It can only run equipment normally based on other controls. I don't know how to force the Ice Storage to charge/discharge.

!-   ===========  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.

image description

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.

Control of Ice Storage model with Heat Exchanger

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.

image description

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

image description

I referred to one thesis “Strategic control and cost optimization of thermal energy storage in buildings using EnergyPlus” and tried to control 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. Now I'm using only On/Off Supervisory. This control type doesn't have the function to force equipment to run. It can only run equipment normally based on other controls. I don't know how to force the Ice Storage to charge/discharge.

!-   ===========  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.

image description

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.

P.S., In response to the comment from @szsz, I added a common pipe and a pump to ice storage loop (If I add only common pipe and don't add a pump on the demand side of ice storage loop, a fatal error occurs). However, the ice sorage still doesn't charge nor discharge. image description

image description

image description

Control of Ice Storage model with Heat Exchanger

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.

image description

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

image description

I referred to one thesis “Strategic control and cost optimization of thermal energy storage in buildings using EnergyPlus” and tried to control 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. Now I'm using only On/Off Supervisory. This control type doesn't have the function to force equipment to run. It can only run equipment normally based on other controls. I don't know how to force the Ice Storage to charge/discharge.

!-   ===========  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.

image description

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.

P.S., In response to the comment from @szsz, I added a common pipe and a pump to ice storage loop (If I add only common pipe and don't add a pump on the demand side of ice storage loop, a fatal error occurs). However, the ice sorage still doesn't charge nor discharge. image description

image description

image description