First time here? Check our help page!
5

Create your own plant loop operation schemes in OpenStudio

Referenced question: Plant Loop Operation Scheme in Open Studio

OpenStudio currently generates the Plant loop operation scheme on forward translation. In my case it's definitely not doing what I want and my waterside economizer, a HeatExchanger:FluidToFluid is not turning on as a result. I know the operation scheme is the problem since I've managed to fix it in the IDF editor.

I see that in 1.10.1 (but it's been like this for a while) in the GUI if you look at the Plant Loop objects there are dropdowns to specify the operation schemes.

Can I create my operation schemes using the SDK, assign them to my plant loop and NOT have OpenStudio trying to remove them or add any other schemes?

Julien Marrec's avatar
29.7k
Julien Marrec
asked 2016-01-22 08:20:15 -0500
__AmirRoth__'s avatar
4.4k
__AmirRoth__
updated 2017-05-17 12:24:54 -0500
edit flag offensive 0 remove flag close merge delete

Comments

bonus point: when will we be able to edit the operation schemes directly in the GUI?

Julien Marrec's avatar Julien Marrec (2016-01-22 08:31:07 -0500) edit
add a comment see more comments

1 Answer

4

Yes, you can now explicitly define the PlantEquipmentOperationSchemes in OpenStudio using the API. The feature is described here. If you define any operation schemes, the OpenStudio defaulting will be disabled except for the behavior around component setpoint operation.

Here is a made up example.

chiller = model.getChillerElectricEIRs.first
chilled_plant = chiller.plantLoop.get
chiller2 = OpenStudio::Model::ChillerElectricEIR.new(model)
chilled_plant.addSupplyBranchForComponent(chiller2)
# A default constructed load scheme has a single large load range
cooling_op_scheme = OpenStudio::Model::PlantEquipmentOperationCoolingLoad.new(model)
# This method adds the equipment to the existing load range
cooling_op_scheme.addEquipment(chiller)
cooling_op_scheme.addEquipment(chiller2)
# This cuts the load range into two pieces with only chiller2 operating on the lower end of the range
# See PlantEquipmentOperationRangeBasedScheme for details about this api 
lower_range_equipment = []
lower_range_equipment.push(chiller2)
cooling_op_scheme.addLoadRange(25000.0,lower_range_equipment)
chilled_plant.setPlantEquipmentOperationCoolingLoad(cooling_op_scheme)

The details about how the load range scheme API works is here.

OpenStudio will always create a component setpoint operation scheme for any components that have a setpoint manager on their immediate outlet node, but you can overrule that scheme by assigning the component to a different operation scheme that is set as the primary scheme. You might do this if for some reason you needed a SPM on a component outlet but do not want component setpoint operation.

Kyle Benne's avatar
6k
Kyle Benne
answered 2016-01-22 09:31:12 -0500
edit flag offensive 0 remove flag delete link

Comments

Daily double if you add the op schemes to the OpenStudio UI, but we are shooting for version 1.11.0.

Kyle Benne's avatar Kyle Benne (2016-01-22 09:32:32 -0500) edit

Can we give away UH karma points or badges for code GitHub commits to OS core :)

David Goldwasser's avatar David Goldwasser (2016-01-22 09:46:17 -0500) edit

I know nothing about GUI nor C++, sorry. Can I request some convenience methods to look at the operation schemes? cooling_op_scheme.equipment(cooling_op_scheme.loadRangeUpperLimits[0]) isn't that convenient

Julien Marrec's avatar Julien Marrec (2016-01-22 10:38:13 -0500) edit

What do you have in mind?

Kyle Benne's avatar Kyle Benne (2016-01-22 10:50:41 -0500) edit

Something like cooling_op_scheme.displayInDumbedDownTerms:

cooling_op_scheme.loadRangeUpperLimits.each do |rangeLimit| puts "\nUp to #{rangeLimit}W" cooling_op_scheme.equipment(rangeLimit).each do |equip| puts equip.name end end

Julien Marrec's avatar Julien Marrec (2016-01-22 11:10:27 -0500) edit
add a comment see more comments