Dew-point temperature setpoint for zone humidity control#11500
Dew-point temperature setpoint for zone humidity control#11500
Conversation
lymereJ
left a comment
There was a problem hiding this comment.
Code walkthrough:
| A3 , \field Humidifying Relative Humidity Setpoint Schedule Name | ||
| A3 , \field Humidifying Setpoint Schedule Name | ||
| \required-field | ||
| \note hourly schedule values should be in Relative Humidity (percent) | ||
| \type object-list | ||
| \object-list ScheduleNames | ||
| A4 ; \field Dehumidifying Relative Humidity Setpoint Schedule Name | ||
| \note hourly schedule values should be in Relative Humidity (percent) | ||
| A4 , \field Dehumidifying Setpoint Schedule Name | ||
| \type object-list | ||
| \object-list ScheduleNames | ||
| A5 ; \field Control Variable | ||
| \note When using RelativeHumidity, the schedule values should be in percentages. | ||
| \type choice | ||
| \key RelativeHumidity | ||
| \key Dewpoint | ||
| \default RelativeHumidity |
There was a problem hiding this comment.
Make the existing schedule inputs non-variable specific and add a control variable to indicate what variable is described by the schedules.
| 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); | ||
| } |
There was a problem hiding this comment.
Use the less "invasive" approach; If a dew-point setpoint is used convert to RH since the existing approach uses RH.
| ASSERT_EQ(10.0, state->dataZoneCtrls->HumidityControlZone(CoolHeatZoneNum).humidifyingSched->getCurrentVal()); | ||
| ASSERT_EQ(14.0, state->dataZoneCtrls->HumidityControlZone(CoolHeatZoneNum).dehumidifyingSched->getCurrentVal()); | ||
| EXPECT_NEAR(-357.443, | ||
| state->dataZoneEnergyDemand->ZoneSysMoistureDemand(CoolHeatZoneNum).OutputRequiredToDehumidifyingSP, | ||
| 0.001); // calculated based on 14 deg. C dew-point temperature |
There was a problem hiding this comment.
Check that the moisture demand is calculated based on the DP setpont.
| if (!s_ipsc->lAlphaFieldBlanks(5)) { | ||
| humidControlledZone.humidityControlVariableType = | ||
| static_cast<DataZoneControls::HumidityCtrlVarType>(getEnumValue(DataZoneControls::humidityCtrlVarTypeNamesUC, s_ipsc->cAlphaArgs(5))); | ||
| } |
There was a problem hiding this comment.
This field has a default so cannot be blank.
There was a problem hiding this comment.
Ah, yes... Addressed.
| A3 , \field Humidifying Relative Humidity Setpoint Schedule Name | ||
| A3 , \field Humidifying Setpoint Schedule Name | ||
| \required-field | ||
| \note hourly schedule values should be in Relative Humidity (percent) |
There was a problem hiding this comment.
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.
|
Thanks, @lymereJ. Your implementation looks correct to me. However, while reviewing I noticed this block: EnergyPlus/src/EnergyPlus/SystemAvailabilityManager.cc Lines 4824 to 4825 in e84d72a which reads the RH setpoints directly from the schedules, even though we're inside of a dew point control block. Am I reading this right? If so, that looks like a bug. |
|
@mitchute. Thanks for pointing this out. I looked at the code and I suspect that it might be correct. This block that's located above determines if the ventilation control status is open or closed based on outdoor air dew-point temperature: EnergyPlus/src/EnergyPlus/SystemAvailabilityManager.cc Lines 4635 to 4643 in e84d72a Then, if it is open ... ... we get to the block that you shared. My understanding is that the intent is to ensure we don’t set the ventilation control status to “open” when the outdoor air has a humidity ratio above or below the level corresponding to the humidistat setpoint (which previously was evaluated only in terms of relative humidity). That makes sense to me. It also looks like I should add a check for the control variable I introduced to handle cases where the humidistat is controlled by dew point rather than RH. I’ll push those changes. |
| // Dew point control mode | ||
| if (hybridVentMgr.ctrlType == VentCtrlType::DewPoint) { | ||
| ZoneAirRH = PsyRhFnTdbWPb(state, thisZoneHB.MAT, thisZoneHB.airHumRat, state.dataEnvrn->OutBaroPress) * 100.0; | ||
| ZoneAirDewPoint = PsyTdpFnWPb(state, thisZoneHB.airHumRat, state.dataEnvrn->OutBaroPress); |
There was a problem hiding this comment.
I don't think that this was used.

Pull request overview
Description of the purpose of this PR
This (small) feature proposal to allow users to specify a maximum/minimum dew-point temperature setpoint for zone humidity control.
Pull Request Author
Reviewer