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

How to set LoadProfile:Plant on DesignDay

asked 2023-02-19 06:10:51 -0500

Keigo's avatar

updated 2023-03-01 19:25:34 -0500

(This post is slightly related to my previous post about SwimmingPool:Indoor.)

I want to use LoadProfile:Plant in conjection with many Coil:Heating:Water objects in a hot water plant loop as shown below.

image description

I already know 8760 hours of load profile for LoadProfile:Plant, but the entire load in the hot water loop is unknon. So, I want to simulate sizing run and autosize the boiler, pump and heating coils.

LoadProfile:Plant is used with ScheduleFile. I also know the load profile for LoadProfile:Plant on WinterDesignDay and SummerDesignDay. However, the load profile on DesignDays cannot be input to ScheduleFile. How can I set set load of LoadProfile:Plant on DesignDays?

According to Application Guide for EMS, it seems that "CurrentEnvironment == 1" represents WinterDesignDay when WinterDesignDay is Obj1 of SizingPeriod:DesignDay. I tried to override ScheduleFile during the sizing run with EMS, but my EMS input does not work for now. During the sizing run, EnergyPlus refers to loads on the same date as the sizing day in ScheduleFile i.e. load on January 21st for WinterDesignDay in my case, which is not what I expect.

I would appreciate it if anyone could correct my EMS input below or advise any other way to set LoadProfile:Plant on DesignDays.

! CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, MaxDB= -17.3°C
    CHICAGO_IL_USA Annual Heating 99% Design Conditions DB,  !- Name
    1,                       !- Month
    21,                      !- Day of Month
    WinterDesignDay,         !- Day Type
    -17.3,                   !- Maximum Dry-Bulb Temperature {C}
    0.0,                     !- Daily Dry-Bulb Temperature Range {deltaC}
    ,                        !- Dry-Bulb Temperature Range Modifier Type
    ,                        !- Dry-Bulb Temperature Range Modifier Day Schedule Name
    Wetbulb,                 !- Humidity Condition Type
    -17.3,                   !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}
    ,                        !- Humidity Condition Day Schedule Name
    ,                        !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}
    ,                        !- Enthalpy at Maximum Dry-Bulb {J/kg}
    ,                        !- Daily Wet-Bulb Temperature Range {deltaC}
    99063.,                  !- Barometric Pressure {Pa}
    4.9,                     !- Wind Speed {m/s}
    270,                     !- Wind Direction {deg}
    No,                      !- Rain Indicator
    No,                      !- Snow Indicator
    No,                      !- Daylight Saving Time Indicator
    ASHRAEClearSky,          !- Solar Model Indicator
    ,                        !- Beam Solar Day Schedule Name
    ,                        !- Diffuse Solar Day Schedule Name
    ,                        !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}
    ,                        !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless}
    0.0;                     !- Sky Clearness

    Swimming_Pool_Load_Schedule,  !- Name
    ,                        !- Schedule Type Limits Name
    C:\Project\Swimming_Pool_Load_Schedule\Swimming_Pool_Load_Schedule.csv,  !- File Name
    2,                       !- Column Number
    1,                       !- Rows to Skip at Top
    8760,                    !- Number of Hours of Data
    Comma,                   !- Column Separator
    No,                      !- Interpolate to Timestep
    60,                      !- Minutes per Item
    No;                      !- Adjust Schedule for Daylight Savings

    Swimming_Pool,  !- Name
    Swimming_Pool Inlet,  !- Inlet Node Name
    Swimming_Pool Outlet,  !- Outlet Node Name
    Swimming_Pool_Load_Schedule,  !- Load Schedule Name
    0.0398,                   !- Peak Flow Rate {m3/s}
    ASHRAE90.1_Schedule_H_Ventilation;  !- Flow Rate Fraction Schedule Name


    Swimming_Pool_Load_Schedule_Override,  !- Name
    Swimming_Pool_Load_Schedule,  !- Actuated Component Unique Name
    Schedule:File,           !- Actuated Component Type
    Schedule Value;          !- Actuated Component Control Type


    EMS_PCM_Pool_Load_Schedule_Override,  !- Name
    AfterComponentInputReadIn,  !- EnergyPlus Model Calling Point
    EMS_Program_Pool_Load_Schedule_Override;  !- Program Name 1


    EMS_Program_Pool_Load_Schedule_Override,  !- Name
    IF ...
edit retag flag offensive close merge delete

1 Answer

Sort by » oldest newest most voted

answered 2023-02-20 11:27:31 -0500

updated 2023-03-01 19:03:35 -0500

I would suggest updating the model calling point in your EMS Program Calling Manager. From the EMS Application Guide:

"Another thing that happens during the setup phase described above is that individual HVAC component models access their input data and do various setup calculations in preparation for the rest of the simulation. An EMS calling point (added for Version 7) called “AfterComponentInputReadIn” is available for selected HVAC components that allows triggering Erl programs at a point just after the component’s input data have been read in but before the component’s sizing routines have executed. This calling point is intended to be used with various actuators that are setup to override the autosize values that result from sizing."

Since you want to set the plant load profile load each hour during the design day, it sounds like you should instead use one of the calling points that occur each timestep. AfterPredictorAfterHVACManagers and InsideHVACSystemIterationLoop sound like your best options.

You can also make your EMS program more computationally efficient by using nested IF statements and <> logic operators checking CurrentTime values, like so.

  EMS_Program_Pool_Load_Schedule_Override,  !- Name
  IF CurrentEnvironment == 1,                           !- Winter Design Day
    IF CurrentTime < 6,                                      !- midnight until 5 AM
      SET Swimming_Pool_Load_Schedule_Override = 0,  !- no plant load
    ELSEIF CurrentTime == 6,                             !- 5-6 AM
      SET Swimming_Pool_Load_Schedule_Override = 376992.2,  !- plant load = 376992.2 W
  ELSE,               !- Could replace with ELSEIF CurrentEnvironment == 2 for summer design day
    SET Swimming_Pool_Load_Schedule_Override = NULL,  ! reset actuator to use Schedule:File


After running your IDF with two design days (one for heating, one for cooling) to look into the design day results, I also see duplicate ESO results for design days (see below).

image description

The first two days are the heating design day (21 Jan) repeated, and the last two days are the cooling design day (21 July) repeated. So, you actually have 4 days of design days + 365 days of run period.

Here is your SimulationControl object:

  Yes,                     !- Do Zone Sizing Calculation
  Yes,                     !- Do System Sizing Calculation
  Yes,                     !- Do Plant Sizing Calculation
  No,                      !- Run Simulation for Sizing Periods
  Yes,                     !- Run Simulation for Weather File Run Periods
  Yes,                     !- Do HVAC Sizing Simulation for Sizing Periods
  1;                       !- Maximum Number of HVAC Sizing Simulation Passes

I believe that the Do HVAC Sizing Simulation for Sizing Periods input field (second to last) set to "Yes" is causing the design days to be part of the CSV file. After changing this to "No", the design days no longer appear in the CSV file. However, even if you set this to "No", then swap the Yes/No settings for the Run Simulation for Sizing Periods and Run Simulation for Weather File Run Periods input fields in order to only run design days and skip the run period, there are still duplicate rows (4 total days of data).

This may be a bug to report to EnergyPlus developers.

edit flag offensive delete link more


I tested not only AfterPredictorAfterHVACManagers and InsideHVACSystemIterationLoop, but also all the EnergyPlus Model Calling Points, but unfortunately, Schedule Value of Schedule:File was not overriden. I think there is something wrong with my Program or Actuator rather than Calling Point.

Keigo's avatar Keigo  ( 2023-02-23 10:33:07 -0500 )edit

In that case, the issue might be that the Schedule:File object has no ability to set schedule values on design days. If it can't set that input, then an EMS Actuator can't override that input.

To confirm, try to run just the design days (no run period) WITHOUT EMS objects and define an Output:Variable for the Schedule Value of Swimming_Pool_Load_Schedule. If you don't see values in those columns, that could be the culprit. If you do see values, then perhaps your EMS Program or EMS Program Calling Manager are not correct (the EMS actuator looks correct).

Aaron Boranian's avatar Aaron Boranian  ( 2023-02-23 12:00:14 -0500 )edit

An option to troubleshoot is to add the following Output:EnergyManagementSystem object

  Verbose,    ! Actuator Availability Dictionary Reporting
  Verbose,    ! Internal Variable Availability Dictionary Reporting
  Verbose; ! EnergyPlus Runtime Language Debug Output Level

The last input file will generate LOTS of data in the EDD output file. For each timestep, how each line of code in the program was evaluated.

Aaron Boranian's avatar Aaron Boranian  ( 2023-02-23 12:03:46 -0500 )edit

@Aaron Boranian, thank you for your additional comments. I appologize to you. It turned out that my issue was just my misunderstanding of Output:Variable from the begining. I found my EMS worked properly when I ran simulation for Sizing Periods.

Before I posted my question, I ran simulation for Weather File Run Periods (Jan 1 to Dec 31) and looked at Output:VariablePlant Load Profile Heat Transfer Rate. Reporting Frequency is Hourly. The csv file has data for 8760 hours and more (i.e. 5 days + 365days). I mistook the result of the first 5 days for the result of sizing periods.

Keigo's avatar Keigo  ( 2023-02-25 10:28:16 -0500 )edit

The hourly result of the first 5 days did not reflect my EMS setting. That's why I posted this question. Do you know what the result of the first 5 days mean? It is not the result in sizing periods. Is it the result in warmup days? I put my idf file and the result (20230219_UnmetHours.csv) here. Could you please take a look at them? I left only LoadProfile:Plant due to confidential reason. You may need to change the File Name (file path) of Schedule:File if you want to run simulation on your PC.

Keigo's avatar Keigo  ( 2023-02-25 10:28:40 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Training Workshops


Question Tools

1 follower


Asked: 2023-02-19 06:10:51 -0500

Seen: 169 times

Last updated: Mar 01 '23