Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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
8 changes: 4 additions & 4 deletions HPXMLtoOpenStudio/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>hpxm_lto_openstudio</name>
<uid>b1543b30-9465-45ff-ba04-1d1f85e763bc</uid>
<version_id>bf9d7070-c3d0-4251-ad9d-e45da9629d51</version_id>
<version_modified>2026-04-09T03:47:56Z</version_modified>
<version_id>b2c2fc5a-5062-45bb-85ef-d93fe797f8ab</version_id>
<version_modified>2026-04-07T23:13:47Z</version_modified>
<xml_checksum>D8922A73</xml_checksum>
<class_name>HPXMLtoOpenStudio</class_name>
<display_name>HPXML to OpenStudio Translator</display_name>
Expand Down Expand Up @@ -499,7 +499,7 @@
<filename>output.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>2712B090</checksum>
<checksum>7F8E008D</checksum>
</file>
<file>
<filename>psychrometrics.rb</filename>
Expand Down Expand Up @@ -715,7 +715,7 @@
<filename>waterheater.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>096F8A5F</checksum>
<checksum>E9274389</checksum>
</file>
<file>
<filename>weather.rb</filename>
Expand Down
37 changes: 2 additions & 35 deletions HPXMLtoOpenStudio/resources/waterheater.rb
Original file line number Diff line number Diff line change
Expand Up @@ -317,24 +317,8 @@ def self.apply_combi(runner, model, spaces, hpxml_bldg, hpxml_header, water_heat
unavailable_periods: unavailable_periods,
unit_multiplier: unit_multiplier)
water_heater.setSourceSideDesignFlowRate(100 * unit_multiplier) # set one large number, override by EMS
water_heater.setSourceSideFlowControlMode('StorageTank')

# Create alternate setpoint schedule for source side flow request
alternate_stp_sch = water_heater.setpointTemperatureSchedule.get.clone(model).to_Schedule.get
alternate_stp_sch.setName("#{obj_name_combi} Alt Spt")
water_heater.setIndirectAlternateSetpointTemperatureSchedule(alternate_stp_sch)

# Create setpoint schedule to specify source side temperature
# tank source side inlet temperature, degree C
boiler_spt_mngr = model.getSetpointManagerScheduleds.find { |spt_mngr| spt_mngr.setpointNode.get == boiler_plant_loop.loopTemperatureSetpointNode }
boiler_heating_spt = boiler_spt_mngr.to_SetpointManagerScheduled.get.schedule.to_ScheduleConstant.get.value
source_stp_sch = Model.add_schedule_constant(
model,
name: "#{obj_name_combi} Source Spt",
value: boiler_heating_spt,
limits: EPlus::ScheduleTypeLimitsTemperature
)
# reset dhw boiler setpoint
boiler_spt_mngr.to_SetpointManagerScheduled.get.setSchedule(source_stp_sch)
boiler_plant_loop.autosizeMaximumLoopFlowRate()

# change loop equipment operation scheme to heating load
Expand Down Expand Up @@ -460,9 +444,8 @@ def self.apply_combi_system_EMS(model, water_heating_systems, plantloop_map)
equipment_sch_sensors = {}
equipment_target_temp_sensors = {}
tank_volume, deadband, tank_source_temp = 0.0, 0.0, 0.0
alt_spt_sch = nil
tank_temp_sensor, tank_spt_sensor, tank_loss_energy_sensor = nil, nil, nil
altsch_actuator, pump_actuator = nil, nil
pump_actuator = nil, nil
water_heater = nil

# Create sensors and actuators
Expand Down Expand Up @@ -495,20 +478,6 @@ def self.apply_combi_system_EMS(model, water_heating_systems, plantloop_map)
output_var_or_meter_name: 'Schedule Value',
key_name: water_heater.setpointTemperatureSchedule.get.name
)

alt_spt_sch = water_heater.indirectAlternateSetpointTemperatureSchedule.get
if alt_spt_sch.to_ScheduleConstant.is_initialized
comp_type_and_control = EPlus::EMSActuatorScheduleConstantValue
elsif alt_spt_sch.to_ScheduleRuleset.is_initialized
comp_type_and_control = EPlus::EMSActuatorScheduleYearValue
else
comp_type_and_control = EPlus::EMSActuatorScheduleFileValue
end
altsch_actuator = Model.add_ems_actuator(
name: "#{combi_sys_id} AltSchedOverride",
model_object: alt_spt_sch,
comp_type_and_control: comp_type_and_control
)
end
plant_loop.components.each do |c|
next unless c.to_WaterUseConnections.is_initialized
Expand Down Expand Up @@ -597,10 +566,8 @@ def self.apply_combi_system_EMS(model, water_heating_systems, plantloop_map)
combi_ctrl_program.addLine('Set WH_Energy_Heat = WH_Use + WH_Loss - WH_HeatToHighSetpoint')
combi_ctrl_program.addLine('If WH_Energy_Demand > 0')
combi_ctrl_program.addLine("Set #{pump_actuator.name} = WH_Energy_Heat / (Cp * DeltaT * 3600 * ZoneTimeStep)")
combi_ctrl_program.addLine("Set #{altsch_actuator.name} = 100") # Set the alternate setpoint temperature to highest level to ensure maximum source side flow rate
combi_ctrl_program.addLine('Else')
combi_ctrl_program.addLine("Set #{pump_actuator.name} = 0")
combi_ctrl_program.addLine("Set #{altsch_actuator.name} = NULL")
combi_ctrl_program.addLine('EndIf')

# ProgramCallingManagers
Expand Down
Loading