First time here? Check out the Help page!
| 1 | initial version |
OpenStudio enforces correspondance of the ScheduleTypeLimits when you try to set schedules.
You can see the expected schedule type limits for the DefaultScheduleSet here in ScheduleTypeRegistry.cpp:
// className, scheduleDisplayName, scheduleRelationshipName, isContinuous, unitType, lowerLimitValue, upperLimitValue;
{"DefaultScheduleSet","Hours of Operation","hoursofOperationSchedule",false,"Availability",0.0,1.0},
{"DefaultScheduleSet","Number of People","numberofPeopleSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","People Activity Level","peopleActivityLevelSchedule",true,"ActivityLevel",0.0,OptionalDouble()},
{"DefaultScheduleSet","Lighting","lightingSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Electric Equipment","electricEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Gas Equipment","gasEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Hot Water Equipment","hotWaterEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Infiltration","infiltrationSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Steam Equipment","steamEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Other Equipment","otherEquipmentSchedule",true,"",OptionalDouble(),OptionalDouble()},
If you're curious:
className, scheduleDisplayName) is done in class file, cf DefaultScheduleSet::getScheduleTypeKeys | 2 | No.2 Revision |
TL;DR: DefaultScheduleSet will never accept any schedule with a "Temperature" unit type (which is what the default Temperature ScheduleTypeLimits has).
OpenStudio enforces correspondance of the ScheduleTypeLimits correspondence of the ScheduleTypeLimits when you try to set schedules.
ScheduleTypeLimits, it'll create and assign one for you (it'll always work)ScheduleTypeLimits, it will check whether it's compatible, that is check the lower/upper limits and the Unit Type (it doesn't care whether it's continuous or discrete).You can see the expected schedule type limits for the DefaultScheduleSet DefaultScheduleSet here in ScheduleTypeRegistry.cpp:
// className, scheduleDisplayName, scheduleRelationshipName, isContinuous, unitType, lowerLimitValue, upperLimitValue;
{"DefaultScheduleSet","Hours of Operation","hoursofOperationSchedule",false,"Availability",0.0,1.0},
{"DefaultScheduleSet","Number of People","numberofPeopleSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","People Activity Level","peopleActivityLevelSchedule",true,"ActivityLevel",0.0,OptionalDouble()},
{"DefaultScheduleSet","Lighting","lightingSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Electric Equipment","electricEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Gas Equipment","gasEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Hot Water Equipment","hotWaterEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Infiltration","infiltrationSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Steam Equipment","steamEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Other Equipment","otherEquipmentSchedule",true,"",OptionalDouble(),OptionalDouble()},
So indeeed, none have a unitType == "Temperature"
If you're curious:
className, scheduleDisplayName) is done in class file, cf DefaultScheduleSet::getScheduleTypeKeys | 3 | No.3 Revision |
TL;DR: DefaultScheduleSet will never accept any schedule with a "Temperature" unit type (which is what the default Temperature ScheduleTypeLimits has).
OpenStudio enforces correspondence of the ScheduleTypeLimits when you try to set schedules.
ScheduleTypeLimits, it'll create and assign one for you (it'll always work)ScheduleTypeLimits, it will check whether it's compatible, that is check the lower/upper limits and the Unit Type (it doesn't care whether it's continuous or discrete).You can see the expected schedule type limits for the DefaultScheduleSet here in ScheduleTypeRegistry.cpp:
// className, scheduleDisplayName, scheduleRelationshipName, isContinuous, unitType, lowerLimitValue, upperLimitValue;
{"DefaultScheduleSet","Hours of Operation","hoursofOperationSchedule",false,"Availability",0.0,1.0},
{"DefaultScheduleSet","Number of People","numberofPeopleSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","People Activity Level","peopleActivityLevelSchedule",true,"ActivityLevel",0.0,OptionalDouble()},
{"DefaultScheduleSet","Lighting","lightingSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Electric Equipment","electricEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Gas Equipment","gasEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Hot Water Equipment","hotWaterEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Infiltration","infiltrationSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Steam Equipment","steamEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Other Equipment","otherEquipmentSchedule",true,"",OptionalDouble(),OptionalDouble()},
So indeeed, none have a unitType == "Temperature"
If you're curious:
className, scheduleDisplayName) is done in class file, cf DefaultScheduleSet::getScheduleTypeKeysAnd if you need more proof, here's a demo using the ruby bindings:
I get a model, and retrieve a Temperature schedule.
[13] model(main)> sch = m.getScheduleRulesetByName("Medium Office Heating Setpoint Schedule").get
=> #<OpenStudio::Model::ScheduleRuleset:0x000055a9f1cf8398 @__swigtype__="_p_openstudio__model__ScheduleRuleset">
[9] model(main)> puts sch
OS:Schedule:Ruleset,
{fb99be89-78c9-4473-a724-c19078c7a311}, !- Handle
Medium Office Heating Setpoint Schedule, !- Name
{4d58c6f5-7a17-476e-8c71-4472d4190115}, !- Schedule Type Limits Name
{4201662b-b6bd-4cbb-98ec-b7e57b8406e0}, !- Default Day Schedule Name
, !- Summer Design Day Schedule Name
{8e5f2044-0cc5-4ff0-aeb6-0cbef560f87b}; !- Winter Design Day Schedule Name
=> nil
[14] model(main)> puts sch.scheduleTypeLimits.get
OS:ScheduleTypeLimits,
{4d58c6f5-7a17-476e-8c71-4472d4190115}, !- Handle
Temperature, !- Name
-60, !- Lower Limit Value
200, !- Upper Limit Value
CONTINUOUS, !- Numeric Type
Temperature; !- Unit Type
Now I create a DefaultScheduleSet and tries to assign this schedule to every slot in it:
[15] model(main)> d = DefaultScheduleSet.new(m)
[16] model(main)> d.setHoursofOperationSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Hours of Operation=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[17] model(main)> d.setNumberofPeopleSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Number of People=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[18] model(main)> d.setPeopleActivityLevelSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule People Activity Level=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[19] model(main)> d.setLightingSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Lighting=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[20] model(main)> d.setElectricEquipmentSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Electric Equipment=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[21] model(main)> d.setGasEquipmentSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Gas Equipment=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[22] model(main)> d.setHotWaterEquipmentSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Hot Water Equipment=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[23] model(main)> d.setInfiltrationSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Infiltration=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[24] model(main)> d.setSteamEquipmentSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Steam Equipment=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[25] model(main)> d.setOtherEquipmentSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Other Equipment=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
| 4 | No.4 Revision |
TL;DR: DefaultScheduleSet will never accept any schedule with a "Temperature" unit type (which is what the default Temperature ScheduleTypeLimits has).
OpenStudio enforces correspondence of the ScheduleTypeLimits when you try to set schedules.
ScheduleTypeLimits, it'll create and assign one for you (it'll always work)ScheduleTypeLimits, it will check whether it's compatible, that is check the lower/upper limits and the Unit Type (it doesn't care whether it's continuous or discrete).You can see the expected schedule type limits for the DefaultScheduleSet here in ScheduleTypeRegistry.cpp:
// className, scheduleDisplayName, scheduleRelationshipName, isContinuous, unitType, lowerLimitValue, upperLimitValue;
{"DefaultScheduleSet","Hours of Operation","hoursofOperationSchedule",false,"Availability",0.0,1.0},
{"DefaultScheduleSet","Number of People","numberofPeopleSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","People Activity Level","peopleActivityLevelSchedule",true,"ActivityLevel",0.0,OptionalDouble()},
{"DefaultScheduleSet","Lighting","lightingSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Electric Equipment","electricEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Gas Equipment","gasEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Hot Water Equipment","hotWaterEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Infiltration","infiltrationSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Steam Equipment","steamEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Other Equipment","otherEquipmentSchedule",true,"",OptionalDouble(),OptionalDouble()},
So indeeed, none have a unitType == "Temperature"
If you're curious:
className, scheduleDisplayName) is done in class file, cf DefaultScheduleSet::getScheduleTypeKeysAnd if you need more proof, here's a demo using the ruby bindings:
I get a model, and retrieve a Temperature schedule.
[13] model(main)> sch = m.getScheduleRulesetByName("Medium Office Heating Setpoint Schedule").get
=> #<OpenStudio::Model::ScheduleRuleset:0x000055a9f1cf8398 @__swigtype__="_p_openstudio__model__ScheduleRuleset">
[9] model(main)> puts sch
OS:Schedule:Ruleset,
{fb99be89-78c9-4473-a724-c19078c7a311}, !- Handle
Medium Office Heating Setpoint Schedule, !- Name
{4d58c6f5-7a17-476e-8c71-4472d4190115}, !- Schedule Type Limits Name
{4201662b-b6bd-4cbb-98ec-b7e57b8406e0}, !- Default Day Schedule Name
, !- Summer Design Day Schedule Name
{8e5f2044-0cc5-4ff0-aeb6-0cbef560f87b}; !- Winter Design Day Schedule Name
=> nil
[14] model(main)> puts sch.scheduleTypeLimits.get
OS:ScheduleTypeLimits,
{4d58c6f5-7a17-476e-8c71-4472d4190115}, !- Handle
Temperature, !- Name
-60, !- Lower Limit Value
200, !- Upper Limit Value
CONTINUOUS, !- Numeric Type
Temperature; !- Unit Type
Now I create a DefaultScheduleSet and tries to assign this schedule to every slot in it:
[15] model(main)> d = DefaultScheduleSet.new(m)
Note: to get the list of methods d.methods.grep(/^set.*Schedule/i).each {|m| puts "d.#{m.to_s}(sch)"}
[16] model(main)> d.setHoursofOperationSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Hours of Operation=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[17] model(main)> d.setNumberofPeopleSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Number of People=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[18] model(main)> d.setPeopleActivityLevelSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule People Activity Level=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[19] model(main)> d.setLightingSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Lighting=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[20] model(main)> d.setElectricEquipmentSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Electric Equipment=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[21] model(main)> d.setGasEquipmentSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Gas Equipment=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[22] model(main)> d.setHotWaterEquipmentSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Hot Water Equipment=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[23] model(main)> d.setInfiltrationSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Infiltration=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[24] model(main)> d.setSteamEquipmentSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Steam Equipment=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[25] model(main)> d.setOtherEquipmentSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Other Equipment=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits