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

# Condenser water flow rate with EMS: EnergyPlus

My question is related to this issue (https://unmethours.com/question/35540... ticket: https://github.com/NREL/EnergyPlus/is...) where the condenser pump is not working as expected.

Is there a way to control the condenser water flow rate with an EMS program? I guess it could be done using the "Chiller Condenser Heat Transfer Rate [W]" output as sensor and a "SetpointManager:Scheduled" as actuator. Unfortunately it is not possible since the condenser loop requires a temperature setpoint.

Is there another way?

edit retag close merge delete

Sort by » oldest newest most voted

There is an actuator for pumps called Pump Mass Flow Rate [kg/s] (cf EMS Application Guide) that you should use for this.

Chiller Condenser Heat Transfer Rate [W] as a sensor would probably work if you have only one chiller on the demand side of your condenser loop. Otherwise you can probably use the Plant Supply Side Cooling Demand Rate [W] as a sensor.

You'll probably also need to get the Entering Water Temperature (EWT) too, for eg looking at Plant Supply Side Inlet Temperature. If your SetpointManager:Scheduled isn't using a fixed value that you can hardcode in your EMS program, you also need to define a Sensor on the Schedule Value for the corresponding schedule, that will give you the Leaving Water Temperature (LWT).

I think Plant Supply Side Cooling Demand Rate is a positive number, in which case I guess you could try this:

$$\dot{Q}_{demand} = \dot{m} \cdot C_p \cdot (T_{EWT} - T_{LWT})$$

Dimensional analysis:

$$[W = J \cdot s^{-1}] = [kg.s^{-1}] \cdot [J.kg^{-1}.K^{-1}] \cdot [K]$$

So, solving for your mass flow rate:

$$\Leftrightarrow \dot{m} = \frac{\dot{Q}_{demand}}{C_p \cdot (T_{EWT} - T_{LWT})}$$

You can use @CpCW(Temperature) in ERL if you'd like, but it's pointless since it'll always return 4180.0 anyways (source code: Psychrometrics.hh)

Disclaimer: I have not tested any of the above, not sure whether it'll work, integrate well with what the cooling tower is doing, nor what calling point would be appropriate.

more

uh yes, those equations are exactly what I was thinking about: the pump actuator is what I was missing. I guess I will try with a fixed leaving water temperature at 30°C and using the entering water temperature as sensor. I'm going to try it as soon as possible and I'll post some results here.

( 2019-08-30 05:36:29 -0500 )edit

I think it works....! Thanks a lot, I'll add the results in another answer below.

( 2019-09-05 02:04:33 -0500 )edit

Following the previous answer by Julien Marrec I tried the following:

1. I used the example file "CoolingTower_TwoSpeed"
2. Run period 01/05 to 20/05 and Weather file "USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw"
3. I created a model with EMS called "CoolingTower_TwoSpeed_EMS"
4. I added a sensor using the variable "Plant Supply Side Cooling Demand Rate" with the name "PSSCDR"
5. I added an actuator on the pump variable "Pump Mass Flow Rate" with the name "PMFR"
6. I added a simple program with the line "set PMFR=PSSCDR/4180/5+1.1*0.025"

Note that it is a very rough control: I used a fixed temperature difference of 5 degrees. The main problem is that with this method the plant temperatures are getting too hot during the warm-up and you will get an error. Therefore I added a constant value equal to the 2.5% of the design pump mass flow rate (1.1 kg/s): it solved the temperatures error in my case.

I obtained: -21.88% pump energy consumption and -1% in cooling energy consumption (beacause the chiller condensed inlet temperature is lower in the EMS case). The energy saving is related to this specific example.

more

Surprisingly, EnergyPlus still lacks a feature of variable condenser water flow as of V23-2-0. I referred to @Julien Marrec and @Gio 's 4 year old answers.

My case is as follows. The condenser water loop has 6 nos. of CoolingTower:SingleSpeed and one HeaderedPumps:VariableSpeed with 6 pumps in bank.

After much consideration, my EMS was finally as follows.

SetpointManager:FollowOutdoorAirTemperature,
CHWloop CndW Temp Manager,  !- Name
Temperature,             !- Control Variable
OutdoorAirWetBulb,       !- Reference Temperature Type
3.6,                     !- Offset Temperature Difference {deltaC}
32,                      !- Maximum Setpoint Temperature {C}
5,                       !- Minimum Setpoint Temperature {C}
CHWloop CndW Supply Setpoint Nodes;  !- Setpoint Node or NodeList Name

EnergyManagementSystem:Sensor,
ChW_Supply_Cooling_Demand,  !- Name
CHWloop Chilled Water Loop,  !- Output:Variable or Output:Meter Index Key Name
Plant Supply Side Cooling Demand Rate;  !- Output:Variable or Output:Meter Name

EnergyManagementSystem:Sensor,
CndW_Supply_Inlet_Temp,  !- Name
CHWloop Condenser Water Loop,  !- Output:Variable or Output:Meter Index Key Name
Plant Supply Side Inlet Temperature ;  !- Output:Variable or Output:Meter Name

EnergyManagementSystem:Sensor,
Site_OA_WB,              !- Name
Environment,             !- Output:Variable or Output:Meter Index Key Name
Site Outdoor Air Wetbulb Temperature ;  !- Output:Variable or Output:Meter Name

EnergyManagementSystem:Sensor,
CndW_Demand_Outlet_Temp,  !- Name
CHWloop CndW Demand Outlet,  !- Output:Variable or Output:Meter Index Key Name
System Node Temperaure ;  !- Output:Variable or Output:Meter Name

EnergyManagementSystem:Actuator,
CndW_Supply_Pump_Mass_Flow,  !- Name
CndW Supply Pump,!- Actuated Component Unique Name
Pump,                    !- Actuated Component Type
Pump Mass Flow Rate;     !- Actuated Component Control Type

EnergyManagementSystem:ProgramCallingManager,
EMS_PCM_CndW_Supply_Pump_Mass_Flow_Override,  !- Name
InsideHVACSystemIterationLoop,  !- EnergyPlus Model Calling Point
EMS_Program_CndW_Supply_Pump_Mass_Flow_Override;  !- Program Name 1

EnergyManagementSystem:Program,
EMS_Program_CndW_Supply_Pump_Mass_Flow_Override,  !- Name
IF ChW_Supply_Cooling_Demand == 0,  !- Program Line 1
SET CndW_Supply_Pump_Mass_Flow = 0,  !- Program Line 2
ELSEIF CndW_Supply_Inlet_Temp <= 5,  !- A4
SET CndW_Supply_Pump_Mass_Flow = 80.3,  !- A5
ELSEIF CndW_Demand_Outlet_Temp >= 40,  !- A6
SET CndW_Supply_Pump_Mass_Flow = 963.8,  !- A7
ELSEIF Site_OA_WB <= 1.4,  !- A8
SET CndW_Supply_Pump_Mass_Flow = @MIN (@MAX 20.075 (ChW_Supply_Cooling_Demand * 1.25 / 4180 / (CndW_Supply_Inlet_Temp - 5))) 963.8,  !- A9
ELSE,                    !- A10
SET CndW_Supply_Pump_Mass_Flow = @MIN (@MAX 20.075 (ChW_Supply_Cooling_Demand * 1.25 / 4180 / (CndW_Supply_Inlet_Temp - (Site_OA_WB + 3.6)))) 963.8,  !- A11
ENDIF;                   !- A12


The chart below shows the condensor water pump flow rate of two cases (No EMS and With EMS) in May as an example. The building has retails, restaurants and plant rooms, and chillers run 24h/day. Please note that since the condenser water pump is a headered pump with 6 pumps in bank, the condenser water flow rate varies to some extent according to the number of cooling towers in operation even if there is no EMS. HeaderedPumps:VariableSpeed acts as if it is HeaderedPumps:ConstantSpeed if there is no EMS.

The annual electricity end uses are -51.4% condenser water pump, +8.8% heat rejection, +0.3％ cooling, and -0.1% chilled water pump in my case. The total end use of above 4 categories is -10.3%. No increase in the cooling unmet hours.

Here are some findings.

1. I had to use Plant Supply Side Cooling Demand Rate [W] of Chilled water loop instead of Condenser water loop to calculate Pump Mass Flow Rate of the condenser water pump. When I used Plant Supply Side Cooling Demand Rate [W] of Condenser ...

more