Question-and-Answer Resource for the Building Energy Modeling Community
Get started with the Help page
Ask Your Question
1

CHW FCU with Electric Heat in OpenStudio

asked 2018-06-27 09:01:25 -0600

JCR562's avatar

updated 2018-06-27 09:46:44 -0600

I'm wanting to model a chilled water FCU with electric heat in OpenStudio but am having trouble finding the best way to do so. The FCU equipment is for a 4-pipe unit that uses heating water as the heat source and I don't see an option to use an electric heat strip instead. I thought about creating an airloop but I have ~75 of these scenarios so it would be a major haul to create 75 airloops (I don't see a way to copy an airloop).

I also thought about overwriting the 4-pipe FCU heating coil to 0 btu/hr, but am not sure how I would add heat to the space.

Does anyone have any ideas? Thanks!

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
1

answered 2018-06-27 10:41:30 -0600

gokul's avatar

Have you tried setting the heating coil capacity to zero in your FourPipeFanCoil, and adding a UnitHeater:Electric for the electric space heating?

edit flag offensive delete link more

Comments

1

Thanks for the quick response. This seems like a good work around.

JCR562's avatar JCR562  ( 2018-06-27 21:16:01 -0600 )edit

this won't capture fan energy use associated with the fan coil in heating mode.

mdahlhausen's avatar mdahlhausen  ( 2018-06-28 16:53:15 -0600 )edit
0

answered 2018-06-27 12:15:56 -0600

This is straightforward with the OpenStudio SDK.

Create a ZoneHVACFourPipeFanCoil object for each zone. Each FCU requires a schedule, fan, cooling coil, and a heating coil to create the object. The heating coil can be an electric resistance coil.

Example script:

require 'openstudio' # load the OpenStudio SDK

# logic to load the model in the current version of the SDK
osm_path = OpenStudio::Path.new("C:/Users/yourname/Desktop/model.osm")
translator = OpenStudio::OSVersion::VersionTranslator.new
model = translator.loadModel(osm_path)
model = model.get

# create an array of zones served by FCUs
zones = model.getThermalZones # this returns all zones in the model
# there are many other ways you can create an array of zones, e.g. by space names, zone names, from a .csv file, etc.
# for example, choose only zones with "served by FCU" in name
zones = zones.select {|zone| zone.name.to_s.include? "served by FCU"}

# reference a chilled water loop in your model
chilled_water_loop = model.getPlantLoopByName("Chilled Water Loop").get

# loop through each zone and add an FCU
zones.each do |zone|

  # create a coil cooling water
  clg_coil = OpenStudio::Model::CoilCoolingWater.new(model)
  clg_coil.setName("#{zone.name.to_s} FCU Cooling Coil")
  chilled_water_loop.addDemandBranchForComponent(clg_coil) # add to chilled water loop
  clg_coil.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
  clg_coil.setHeatExchangerConfiguration('CrossFlow')
  # set cooling coil design temperatures if desired
  # clg_coil.setDesignInletWaterTemperature()
  # clg_coil.setDesignInletAirTemperature()
  # clg_coil.setDesignOutletAirTemperature()
  # coil controller properties
  clg_coil_controller = clg_coil.controllerWaterCoil.get
  clg_coil_controller.setName("#{clg_coil.name.to_s} Controller")
  clg_coil_controller.setMinimumActuatedFlow(0.0)

  # create an electric heating coil
  htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model)
  htg_coil.setName("#{zone.name.to_s} FCU Electric Heating Coil")
  htg_coil.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
  htg_coil.setEfficiency(1.0)

  # create a fan onoff
  fan = OpenStudio::Model::FanOnOff.new(model)
  fan.setName("#{zone.name.to_s} FCU Fan")
  fan.setPressureRise(300.0) # pa
  fan.setFanEfficiency(0.60)
  fan.setMotorEfficiency(0.80)
  fan.setMotorInAirstreamFraction(1.0)
  fan.setEndUseSubcategory("FCU Fans")
  fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
  fan.autosizeMaximumFlowRate

  # create a fan coil unit with these objects
  fcu = OpenStudio::Model::ZoneHVACFourPipeFanCoil.new(model,
                                                       model.alwaysOnDiscreteSchedule,
                                                       fan,
                                                       clg_coil,
                                                       htg_coil)
  fcu.setName("#{zone.name} FCU")
  fcu.setCapacityControlMethod('CyclingFan')
  fcu.autosizeMaximumSupplyAirFlowRate
  fcu.setMaximumOutdoorAirFlowRate(0.0) # no outdoor ventilation from FCUs
  fcu.addToThermalZone(zone)
end

path = "C:/Users/yourname/Desktop/model_new.osm"
model.save(path,true)

The Prototype.hvac_system has plenty of examples for building all different kinds of HVAC systems. Use can use the methods directly with require 'openstudio-standards', or copy them into your own scripts.

See the OpenStudio measure writing guide if you'd like to expand this into an OpenStudio measure.

edit flag offensive delete link more

Comments

Thank you for your help. Unfortunately, my OS skills are limited at the moment and your answer is going over my head a little. I'll need some time to fully comprehend your answer but this seems to be the most appropriate and accurate way.

JCR562's avatar JCR562  ( 2018-06-27 21:19:48 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Training Workshops

Careers

Question Tools

2 followers

Stats

Asked: 2018-06-27 09:01:25 -0600

Seen: 571 times

Last updated: Jun 27 '18