Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ \subsubsection{Inputs}\label{inputs-054}

Each non-zero control type which is used in this schedule must appear in the following fields which list the specific thermostat control objects to be used for this zone.

\paragraph{Field: Temperature Difference Between Cutout And Setpoint}\label{field-temperature-difference-between-cutout-and-Setpoint}

This optional choice field provides a temperature difference between cutout temperature and setpoint. When the temperature difference is greater than 0.0, the difference is applied to both heating and cooling by possibly revising setpoints based on control types.

\paragraph{Field Set (Control Object Type, Control Name)}\label{field-set-control-object-type-control-name}

Up to four pairs of Control Object Type and Control Name may be listed to specify which control objects are used for this zone. This list is not order-dependent, and the position in this list has no impact on the control type schedule. In the control type schedule, a value of 1 always means ``Single Heating Setpoint'', even if that control type is not first in this list.
Expand All @@ -78,10 +82,6 @@ \subsubsection{Inputs}\label{inputs-054}

The corresponding control type name. The name is used in an object with the name of the control type and specifies the schedule.

\paragraph{Field: Temperature Difference Between Cutout And Setpoint}\label{field-temperature-difference-between-cutout-and-Setpoint}

This optional choice field provides a temperature difference between cutout temperature and setpoint. When the temperature difference is greater than 0.0, the difference is applied to both heating and cooling by possibly revising setpoints based on control types.

If MAT is defined as zone air temperature at previous time step, DeltaT represents the temperature difference between cutout and setpoint and is greater than 0.0, and PredictedLoad represents predicted load calculated in the ZoneTempPredictorCorrector, following action will be taken:

\begin{lstlisting}
Expand Down Expand Up @@ -130,7 +130,7 @@ \subsubsection{Inputs}\label{inputs-054}

\begin{lstlisting}
ZoneControl:Thermostat, Zone 3 Thermostat, NORTH ZONE,
Zone Control Type Sched,
Zone Control Type Sched, 0.0,
DUAL SETPOINT WITH DEADBAND, VAV Setpoints;
\end{lstlisting}

Expand All @@ -140,14 +140,15 @@ \subsubsection{Inputs}\label{inputs-054}
ZoneList,AllControlledZones,SPACE1-1,SPACE2-1,SPACE3-1,SPACE4-1,SPACE5-1;
ZoneControl:Thermostat,
AllControlledZones Thermostat, !- Name
AllControlledZones, !- Zone Name
Zone Control Type Sched, !- Control Type Schedule Name
AllControlledZones, !- Zone Name
Zone Control Type Sched, !- Control Type Schedule Name
, !- Temperature Difference Between Cutout And Setpoint
ThermostatSetpoint:SingleCooling, !- Control 1 Object Type
CoolingSetPoint, !- Control 1 Name
CoolingSetPoint, !- Control 1 Name
ThermostatSetpoint:SingleHeating, !- Control 2 Object Type
HeatingSetpoint, !- Control 2 Name
HeatingSetpoint, !- Control 2 Name
ThermostatSetpoint:DualSetpoint, !- Control 3 Object Type
DualSetPoint; !- Control 3 Name
DualSetPoint; !- Control 3 Name
\end{lstlisting}

A complete zone thermostat example showing this statement and all of the objects it must reference is:
Expand Down
16 changes: 8 additions & 8 deletions idd/Energy+.idd.in
Original file line number Diff line number Diff line change
Expand Up @@ -36837,6 +36837,13 @@ ZoneControl:Thermostat,
\required-field
\type object-list
\object-list ScheduleNames
N1 , \field Temperature Difference Between Cutout And Setpoint
\note This optional choice field provides a temperature difference between cut-out temperature and
\note setpoint. The difference is used to adjust to heating or cooling setpoint based on control types.
\units deltaC
\type real
\minimum 0.0
\default 0.0
A4 , \field Control 1 Object Type
\required-field
\type choice
Expand Down Expand Up @@ -36878,18 +36885,11 @@ ZoneControl:Thermostat,
\key ThermostatSetpoint:SingleCooling
\key ThermostatSetpoint:SingleHeatingOrCooling
\key ThermostatSetpoint:DualSetpoint
A11, \field Control 4 Name
A11; \field Control 4 Name
\note Control names are names of individual control objects (e.g. ThermostatSetpoint:SingleHeating)
\note Schedule values in these objects list actual setpoint temperatures for the control types
\type object-list
\object-list ControlTypeNames
N1 ; \field Temperature Difference Between Cutout And Setpoint
\note This optional choice field provides a temperature difference between cut-out temperature and
\note setpoint. The difference is used to adjust to heating or cooling setpoint based on control types.
\units deltaC
\type real
\minimum 0.0
\default 0.0

ZoneControl:Thermostat:OperativeTemperature,
\memo This object can be used with the ZoneList option on a thermostat or with one
Expand Down
2 changes: 1 addition & 1 deletion src/EnergyPlus/DataZoneControls.hh
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ namespace DataZoneControls {
: ActualZoneNum(0), ManageDemand(false), HeatingResetLimit(0.0), CoolingResetLimit(0.0), EMSOverrideHeatingSetPointOn(false),
EMSOverrideHeatingSetPointValue(0.0), EMSOverrideCoolingSetPointOn(false), EMSOverrideCoolingSetPointValue(0.0),
FixedRadiativeFraction(0.0), AdaptiveComfortTempControl(false), AdaptiveComfortModelTypeIndex(0), ZoneOvercoolRange(0.0),
ZoneOvercoolConstRange(0.0), ZoneOvercoolControlRatio(0.0), DeltaTCutSet(0), ZoneThermostatSetPointHi(0.0),
ZoneOvercoolConstRange(0.0), ZoneOvercoolControlRatio(0.0), DeltaTCutSet(0.0), ZoneThermostatSetPointHi(0.0),
ZoneThermostatSetPointLo(0.0), CoolModeLast(false), HeatModeLast(false), CoolModeLastSave(false), HeatModeLastSave(false),
CoolOffFlag(false), HeatOffFlag(false)

Expand Down
52 changes: 26 additions & 26 deletions src/EnergyPlus/ZoneTempPredictorCorrector.cc
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,32 @@ void GetZoneAirSetPoints(EnergyPlusData &state)
}
}

if (NumNums > 0) {
if (s_ipsc->rNumericArgs(1) >= 0.0) {
tempZone.DeltaTCutSet = s_ipsc->rNumericArgs(1);
if (s_ipsc->rNumericArgs(1) > 0.0) {
s_ztpc->NumOnOffCtrZone++;
}
} else {
ShowSevereError(state,
std::format("{}=\"{} invalid {}=[{:.0f}].",
s_ipsc->cCurrentModuleObject,
s_ipsc->cAlphaArgs(1),
s_ipsc->cNumericFieldNames(1),
s_ipsc->rNumericArgs(1)));
ShowContinueError(state, "..Allowable values must be greater or equal to 0");
ErrorsFound = true;
}
}

if (tempZone.DeltaTCutSet > 0.0 && !tempZone.setpts[(int)HVAC::SetptType::SingleHeatCool].Name.empty()) {
ShowWarningError(state,
std::format("{}=\"{}: The choice of Temperature Difference Between Cutout And Setpoint will not be applied "
"to ThermostatSetpoint:SingleHeatingOrCooling.",
s_ipsc->cCurrentModuleObject,
s_ipsc->cAlphaArgs(1)));
}

if (s_ipsc->lAlphaFieldBlanks(7)) {
NumAlphas = 5;
} else if (s_ipsc->lAlphaFieldBlanks(9)) {
Expand Down Expand Up @@ -492,32 +518,6 @@ void GetZoneAirSetPoints(EnergyPlusData &state)
tempZone.setpts[(int)setptType].Name = s_ipsc->cAlphaArgs(2 * iSetpt + 3);
tempZone.setpts[(int)setptType].isUsed = true;
}

if (NumNums > 0) {
if (s_ipsc->rNumericArgs(1) >= 0.0) {
tempZone.DeltaTCutSet = s_ipsc->rNumericArgs(1);
if (s_ipsc->rNumericArgs(1) > 0.0) {
s_ztpc->NumOnOffCtrZone++;
}
} else {
ShowSevereError(state,
std::format("{}=\"{} invalid {}=[{:.0f}].",
s_ipsc->cCurrentModuleObject,
s_ipsc->cAlphaArgs(1),
s_ipsc->cNumericFieldNames(1),
s_ipsc->rNumericArgs(1)));
ShowContinueError(state, "..Allowable values must be greater or equal to 0");
ErrorsFound = true;
}
}

if (tempZone.DeltaTCutSet > 0.0 && !tempZone.setpts[(int)HVAC::SetptType::SingleHeatCool].Name.empty()) {
ShowWarningError(state,
std::format("{}=\"{}: The choice of Temperature Difference Between Cutout And Setpoint will not be applied "
"to ThermostatSetpoint:SingleHeatingOrCooling.",
s_ipsc->cCurrentModuleObject,
s_ipsc->cAlphaArgs(1)));
}
}
} // NumTStatStatements
} // Check on number of TempControlledZones
Expand Down
16 changes: 16 additions & 0 deletions src/Transition/CreateNewIDFUsingRulesV27_1_0.f90
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ SUBROUTINE CreateNewIDFUsingRules(EndOfFile,DiffOnly,InLfn,AskForInput,InputFile
INTEGER NA
INTEGER NN
INTEGER CurArgs
INTEGER TmpArgs
INTEGER DifLfn
INTEGER xCount
INTEGER Num
Expand Down Expand Up @@ -120,6 +121,8 @@ SUBROUTINE CreateNewIDFUsingRules(EndOfFile,DiffOnly,InLfn,AskForInput,InputFile
INTEGER :: AlphaNumI
REAL :: SaveNumber

CHARACTER(len=10) :: ZoneControlInputField='Thermostat'

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to clean up these new vars (lines 81 and 124) that aren't needed now.


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! I N S E R T L O C A L V A R I A B L E S H E R E !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Expand Down Expand Up @@ -461,6 +464,19 @@ SUBROUTINE CreateNewIDFUsingRules(EndOfFile,DiffOnly,InLfn,AskForInput,InputFile

! If your original object starts with Z, insert the rules here

CASE('ZONECONTROL:THERMOSTAT')
CALL GetNewObjectDefInIDD(ObjectName,NwNumArgs,NwAorN,NwReqFld,NwObjMinFlds,NwFldNames,NwFldDefaults,NwFldUnits)
OutArgs(1:3)=InArgs(1:3)
IF (CurArgs .EQ. 12) THEN
OutArgs(4)=InArgs(CurArgs)
OutArgs(5:CurArgs)=InArgs(4:CurArgs - 1)
ELSE
OutArgs(4)=' '
OutArgs(5:CurArgs + 1)=InArgs(4:CurArgs)
CurArgs = CurArgs + 1
ENDIF
nodiff=.false.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Decided to just leave the blank lines and make this robust.

Image

CASE('ZONEHVAC:EVAPORATIVECOOLERUNIT')
CALL GetNewObjectDefInIDD(ObjectName,NwNumArgs,NwAorN,NwReqFld,NwObjMinFlds,NwFldNames,NwFldDefaults,NwFldUnits)
OutArgs(1:CurArgs)=InArgs(1:CurArgs)
Expand Down
12 changes: 12 additions & 0 deletions tst/EnergyPlus/unit/AirLoopHVACDOAS.unit.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2554,34 +2554,39 @@ TEST_F(EnergyPlusFixture, AirLoopHVACDOASTest)
" Core_ZN Thermostat, !- Name",
" Core_ZN, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Core_ZN DualSPSched; !- Control 1 Name",

" ZoneControl:Thermostat,",
" Perimeter_ZN_1 Thermostat, !- Name",
" Perimeter_ZN_1, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Perimeter_ZN_1 DualSPSched; !- Control 1 Name",

" ZoneControl:Thermostat,",
" Perimeter_ZN_2 Thermostat, !- Name",
" Perimeter_ZN_2, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Perimeter_ZN_2 DualSPSched; !- Control 1 Name",

" ZoneControl:Thermostat,",
" Perimeter_ZN_3 Thermostat, !- Name",
" Perimeter_ZN_3, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Perimeter_ZN_3 DualSPSched; !- Control 1 Name",

" ZoneControl:Thermostat,",
" Perimeter_ZN_4 Thermostat, !- Name",
" Perimeter_ZN_4, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Perimeter_ZN_4 DualSPSched; !- Control 1 Name",

Expand Down Expand Up @@ -6961,34 +6966,39 @@ TEST_F(EnergyPlusFixture, AirLoopHVACDOAS_ReportVariableResetTest)
" Core_ZN Thermostat, !- Name",
" Core_ZN, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Core_ZN DualSPSched; !- Control 1 Name",

" ZoneControl:Thermostat,",
" Perimeter_ZN_1 Thermostat, !- Name",
" Perimeter_ZN_1, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Perimeter_ZN_1 DualSPSched; !- Control 1 Name",

" ZoneControl:Thermostat,",
" Perimeter_ZN_2 Thermostat, !- Name",
" Perimeter_ZN_2, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Perimeter_ZN_2 DualSPSched; !- Control 1 Name",

" ZoneControl:Thermostat,",
" Perimeter_ZN_3 Thermostat, !- Name",
" Perimeter_ZN_3, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Perimeter_ZN_3 DualSPSched; !- Control 1 Name",

" ZoneControl:Thermostat,",
" Perimeter_ZN_4 Thermostat, !- Name",
" Perimeter_ZN_4, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Perimeter_ZN_4 DualSPSched; !- Control 1 Name",

Expand Down Expand Up @@ -9506,6 +9516,7 @@ TEST_F(EnergyPlusFixture, AirLoopHVACDOAS_TestFanHeatAddeToCoolingCoilSize)
" Core_ZN Thermostat, !- Name",
" Core_ZN, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Core_ZN DualSPSched; !- Control 1 Name",

Expand Down Expand Up @@ -11075,6 +11086,7 @@ TEST_F(EnergyPlusFixture, AirLoopHVACDOAS_TestFanDrawThroughPlacement)
" Core_ZN Thermostat, !- Name",
" Core_ZN, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Core_ZN DualSPSched; !- Control 1 Name",

Expand Down
1 change: 1 addition & 0 deletions tst/EnergyPlus/unit/AirTerminalSingleDuctPIUReheat.unit.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1057,6 +1057,7 @@ TEST_F(EnergyPlusFixture, AirTerminalSingleDuctSeriesPIU_SimTest)
" Thermal Zone 1 Thermostat, !- Name",
" Thermal Zone 1, !- Zone or ZoneList Name",
" Thermal Zone 1 Thermostat Schedule, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Thermal Zone 1 Thermostat; !- Control 1 Name",

Expand Down
2 changes: 2 additions & 0 deletions tst/EnergyPlus/unit/AirflowNetworkComponents.unit.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1719,6 +1719,7 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_UserDefinedDuctViewFactors)
" Zone Thermostat, !- Name",
" OCCUPIED ZONE, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Setpoints; !- Control 1 Name",

Expand Down Expand Up @@ -4289,6 +4290,7 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_TestFanModel)
" Zone Thermostat, !- Name",
" LIVING ZONE, !- Zone or ZoneList Name",
" Dual Zone Control Type Sched, !- Control Type Schedule Name",
" , !- Temperature Difference Between Cutout And Setpoint",
" ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type",
" Setpoints; !- Control 1 Name",

Expand Down
Loading
Loading