-
Notifications
You must be signed in to change notification settings - Fork 472
Dew-point temperature setpoint for zone humidity control #11500
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
lymereJ
wants to merge
10
commits into
develop
Choose a base branch
from
dewpoint_humidistat
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 7 commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
3a0cb77
New test file.
lymereJ 58ce6bb
Add NFP document, code changes, unit test, and docs changes.
lymereJ 4486df9
Forgot to push two files...
lymereJ 59d14f5
Add example file to test files list and update SizingPeriod:DesignDay…
lymereJ 0c3aad0
Change location to Miami. Fix trailing space.
lymereJ f777e26
Correct typos and rename example file.
lymereJ b6ba220
Address review comments.
lymereJ 20a42b6
Merge branch 'develop' into dewpoint_humidistat
mitchute 644d8df
minor doc touch-up
mitchute 70f3328
Add DP humidistat changes to system availability manager.
lymereJ File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,80 @@ | ||
| Dew-point Temperature Humidistat | ||
| ================ | ||
|
|
||
| **Jeremy Lerond, Pacific Northwest National Laboratory** | ||
|
|
||
| - Original Date: 03/03/2026 | ||
| - Revision Date: 03/03/2026 | ||
|
|
||
|
|
||
| ## Justification for New Feature ## | ||
|
|
||
| Currently, EnergyPlus humidistats are used to control zone humidity using relative humidity (RH). However, in practice it is also common for thermostats/humidity controllers to control (or limit) humidity using dew-point temperature. In addition, standards such as ASHRAE 62.1 include requirements—under certain conditions—that the zone (space) dew-point temperature must not exceed a specified limit (see Addendum k to ASHRAE 62.1–2022). | ||
|
|
||
| This feature will allow users to specify a maximum/minimum allowable space dew-point temperature (i.e., a dew-point setpoint) to trigger humidity control. | ||
|
|
||
| While controlling humidity based on dew-point is currently possible in EnergyPlus using EMS programs, it requires having multiple programs (or a large one) to recalculate each zone's relative humidity setpoint based on the targeted dew-point temperature. This new feature will provide a more streamlined and user-friendly way to control humidity based on dew-point temperature. | ||
|
|
||
| ## E-mail and Conference Call Conclusions ## | ||
|
|
||
| N/A | ||
|
|
||
| ## Overview ## | ||
|
|
||
| The `ZoneControl:Humidistat` object uses both a humidifying and dehumidifying setpoint schedule based on RH. The new features will add a new `Control Variable` input field to specify what variable is described in the schedule. The value for this new input would be `RelativeHumidity` (current approach) and `Dew-point Temperature` (new approach). | ||
|
|
||
| ## Approach ## | ||
|
|
||
| First, the existing schedule fields would be renamed as follows: | ||
| - `Humidifying Relative Humidity Setpoint Schedule Name` -> `Humidifying Setpoint Schedule Name` | ||
| - `Dehumidifying Relative Humidity Setpoint Schedule Name` -> `Dehumidifying Setpoint Schedule Name` | ||
|
|
||
| Second, a new input field would be added to the `ZoneControl:Humidistat` object: `Control Variable`. | ||
|
|
||
| Third, that control variable would be used to determine In `calcPredictedCorrector` the current schedule inputs are used to calculate `WZoneSetPoint` which is the zone humidity setpoint. The new schedules would be used to also calculate `WZoneSetpoint` but based on a dew-point temperature target rather than a relative humidity target. The user could mix/match schedules to control zone humidity, for instance, use a dew-point-based dehumidification schedule and a relative humidity-based humidification schedule. | ||
|
|
||
| ## Testing/Validation/Data Sources ## | ||
|
|
||
| A unit test will be included to test the new feature. | ||
|
|
||
| ## Input Output Reference Documentation ## | ||
|
|
||
| The following field description would be added to the input/output reference guide: | ||
|
|
||
| ```latex | ||
| \paragraph{Field: Control Variable}\label{field-humidistat-control-variable} | ||
|
|
||
| This field describes if the schedules describe relative humidity or dew-point temperature values. | ||
| ``` | ||
|
|
||
| ## Input Description ## | ||
|
|
||
| The following fields would be added to the `ZoneControl:Humidistat` object: | ||
|
|
||
| ``` | ||
| ZoneControl:Humidistat, | ||
| [...] | ||
| A5 ; \field Control Variable | ||
| \note When using RelativeHumidity, the schedule values should be in percentages. | ||
| \type choice | ||
| \key RelativeHumidity | ||
| \key Dewpoint | ||
| \default RelativeHumidity | ||
| ``` | ||
|
|
||
| ## Outputs Description ## | ||
|
|
||
| No new outputs will be added. | ||
|
|
||
| ## Engineering Reference ## | ||
|
|
||
| This new feature doesn't require any engineering reference changes. | ||
|
|
||
| ## Example File and Transition Changes ## | ||
|
|
||
| This new feature doesn't require any transition changes. | ||
|
|
||
| ## References ## | ||
|
|
||
| - ASHRAE Standard 62.1-2022 Addendum k, https://www.ashrae.org/file%20library/technical%20resources/standards%20and%20guidelines/standards%20errata/standards/62_1_2022_k_20240422.pdf | ||
| - Lennox S40 Smart Thermostat, https://www.lennox.com/dA/6003ce4d6f/508223-03b.pdf |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -869,6 +869,10 @@ void GetZoneAirSetPoints(EnergyPlusData &state) | |
| ErrorsFound = true; | ||
| } | ||
|
|
||
| // Control variable | ||
| humidControlledZone.humidityControlVariableType = | ||
| static_cast<DataZoneControls::HumidityCtrlVarType>(getEnumValue(DataZoneControls::humidityCtrlVarTypeNamesUC, s_ipsc->cAlphaArgs(5))); | ||
|
|
||
| } // HumidControlledZoneNum | ||
|
|
||
| // Start to read Thermal comfort control objects | ||
|
|
@@ -3491,8 +3495,24 @@ void ZoneSpaceHeatBalanceData::calcPredictedHumidityRatio(EnergyPlusData &state, | |
| if (thisZone.humidityControlZoneIndex > 0) { | ||
| auto &humidityControlZone = state.dataZoneCtrls->HumidityControlZone(thisZone.humidityControlZoneIndex); | ||
| assert(humidityControlZone.ActualZoneNum == zoneNum); | ||
| ZoneRHHumidifyingSetPoint = humidityControlZone.humidifyingSched->getCurrentVal(); | ||
| ZoneRHDehumidifyingSetPoint = humidityControlZone.dehumidifyingSched->getCurrentVal(); | ||
| if (humidityControlZone.humidityControlVariableType == DataZoneControls::HumidityCtrlVarType::RelativeHumidity) { | ||
| ZoneRHHumidifyingSetPoint = humidityControlZone.humidifyingSched->getCurrentVal(); | ||
| ZoneRHDehumidifyingSetPoint = humidityControlZone.dehumidifyingSched->getCurrentVal(); | ||
| } else if (humidityControlZone.humidityControlVariableType == | ||
| DataZoneControls::HumidityCtrlVarType::DewPoint) { // Recalculate RH setpoint from DP | ||
| ZoneRHHumidifyingSetPoint = | ||
| 100 * Psychrometrics::PsyRhFnTdbWPb( | ||
| state, | ||
| this->ZT, | ||
| Psychrometrics::PsyWFnTdpPb(state, humidityControlZone.humidifyingSched->getCurrentVal(), state.dataEnvrn->OutBaroPress), | ||
| state.dataEnvrn->OutBaroPress); | ||
| ZoneRHDehumidifyingSetPoint = | ||
| 100 * Psychrometrics::PsyRhFnTdbWPb( | ||
| state, | ||
| this->ZT, | ||
| Psychrometrics::PsyWFnTdpPb(state, humidityControlZone.dehumidifyingSched->getCurrentVal(), state.dataEnvrn->OutBaroPress), | ||
| state.dataEnvrn->OutBaroPress); | ||
| } | ||
|
Comment on lines
+3498
to
+3515
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Use the less "invasive" approach; If a dew-point setpoint is used convert to RH since the existing approach uses RH. |
||
|
|
||
| // Apply EMS values to overwrite the humidistat values | ||
| if (humidityControlZone.EMSOverrideHumidifySetPointOn) { | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe keep the notes and add "or Dew Point (C) based on the Control Variable field." That would also send home that both schedules need to have the same units.