Example 1. Whole-Building Average Zone Air Temperature[LINK]

Although EnergyPlus can report an enormous number of output variables, you may want a custom report variable such as one for the average temperature in the building. Only zone-by-zone indoor air temperatures are available. Because it is nearly always important to check that models are properly controlling zone air conditions, you may need to examine air temperature results from your models. Compared to scanning across the many zones in a large building, you could save time when checking a model if you have a single value for a whole-building average temperature. Of course, you could calculate such a value after a run by postprocessing, but redoing this for every run is cumbersome and time consuming. Therefore, it would be more convenient to automatically calculate such a value inside the program and output it in the usual manner. For example, if we take the Small Office Reference Building (RefBldgSmallOfficeNew2004_Chicago.idf), is there a way to create a custom report variable that provides a weighted average for the indoor temperature of all the occupied zones in a model?

This is a fairly simple example in that the EMS controls nothing. There are no actuators.

The example file has six zones, but one is an attic that we do not care about. Therefore, the main inputs, or EMS sensors, will be the zone air temperatures for the five occupied zones. We will use EnergyManagementSystem:Sensor objects to obtain the values for the air temperatures by mapping to the output variable called “Zone Mean Air Temperature.”

A model for average temperature can be constructed by using the zone air volumes as weights so larger zones have more influence than smaller zones on the resulting average. The model equation we will implement in EMS for our new report variable is

Taverage=(TzoneVolzone)(Volzone)

The example file specifies the zone volume in its zone objects so we have the data needed for the weighting factors from elsewhere in the IDF. However, a study could vary the geometry such that the volumes differ from one simulation to another. Zone Air Volume is available as internal data, so we will use EnergyManagementSystem:InternalVariable input objects to assign these weighting factors into global Erl variables. If we did not know beforehand that Zone Air Volume was an available internal variable, we would have had to prerun the model with some EMS-related objects and the appropriate level of reporting selected in an Output:EnergyManagementSystem object, and then studied the EDD output file. Note that the EDD file is only produced if you have EMS/Erl programs in your input file.

The custom output variable will be defined by using an EnergyManagementSystem:OutputVariable input object. This requires the Erl variable to be global, so we need to declare a variable. Let’s call it AverageBuildingTemp, to be global using an EnergyManagementSystem:GlobalVariable object so we have a way to connect the result calculated in the Erl program to the custom output.

There are two main considerations when selecting an EMS calling point:

• The call should be toward the end of the zone timestep so the zone air temperature calculations are finalized.

• The call should be before reporting updates so our new value is available before the reporting is finalized.

We therefore choose the EMS calling point with the key of “EndOfZoneTimestepBeforeReporting.”

A set of input objects to solve this problem appears below and is included in the example file called “EMSCustomOutputVariable.idf.”

EnergyManagementSystem:Sensor,
T1, !Name
Perimeter_ZN_1 ,! Output:Variable or Output:Meter Index Key Name
Zone Mean Air Temperature ; ! Output:Variable or Output:Meter Name

EnergyManagementSystem:Sensor,
T2, !Name
Perimeter_ZN_2 , ! Output:Variable or Output:Meter Index Key Name
Zone Mean Air Temperature ; ! Output:Variable or Output:Meter Name

EnergyManagementSystem:Sensor,
T3, !Name
Perimeter_ZN_3 , ! Output:Variable or Output:Meter Index Key Name
Zone Mean Air Temperature ; ! Output:Variable or Output:Meter Name

EnergyManagementSystem:Sensor,
T4, !Name
Perimeter_ZN_4, ! Output:Variable or Output:Meter Index Key Name
Zone Mean Air Temperature ;! Output:Variable or Output:Meter Name

EnergyManagementSystem:Sensor,
T5, !Name
Core_ZN , ! Output:Variable or Output:Meter Index Key Name
Zone Mean Air Temperature ; ! Output:Variable or Output:Meter Name

EnergyManagementSystem:ProgramCallingManager,
Average Building Temperature , ! Name
EndOfZoneTimestepBeforeZoneReporting , ! EnergyPlus Model Calling Point
AverageZoneTemps ; ! Program Name 1

EnergyManagementSystem:GlobalVariable,
AverageBuildingTemp;

EnergyManagementSystem:OutputVariable,
Weighted Average Building Zone Air Temperature [C], ! Name
AverageBuildingTemp, ! EMS Variable Name
Averaged, ! Type of Data in Variable
ZoneTimeStep ; ! Update Frequency

EnergyManagementSystem:InternalVariable,
Zn1vol,
Perimeter_ZN_1,
Zone Air Volume;

EnergyManagementSystem:InternalVariable,
Zn2vol,
Perimeter_ZN_2,
Zone Air Volume;

EnergyManagementSystem:InternalVariable,
Zn3vol,
Perimeter_ZN_3,
Zone Air Volume;

EnergyManagementSystem:InternalVariable,
Zn4vol,
Perimeter_ZN_4,
Zone Air Volume;

EnergyManagementSystem:InternalVariable,
Zn5vol,
Core_ZN ,
Zone Air Volume;

EnergyManagementSystem:Program,
AverageZoneTemps , ! Name
SET SumNumerator = T1*Zn1vol + T2*Zn2vol + T3*Zn3vol + T4*Zn4vol + T5*Zn5vol,
SET SumDenominator = Zn1vol + Zn2vol + Zn3vol + Zn4vol + Zn5vol,
SET AverageBuildingTemp = SumNumerator / SumDenominator;

Output:EnergyManagementSystem,
Verbose,
Verbose,
Verbose;

Output:Variable,
*,                       !- Key Value
Weighted Average Building Zone Air Temperature,  !- Variable Name
timestep;                  !- Reporting Frequency