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

Revision history [back]

This configuration (Primary / Secondary) exposes a bug in OpenStudio. Normally OpenStudio categorizes plant equipment as heating, cooling, or uncontrolled and puts it on the appropriate plant operation scheme. If there is a setpoint manager on the immediate outlet node OS will write the component setpoint operation scheme. In this case the HeatExchangerFluidToFluid object was uncategorized therefore it didn't end up any any operation scheme. Essentially uncontrolled. EnergyPlus will let this slide if there are other components on the plant, but not if there is a completely empty operation scheme list like in this case.

We have done two things.

One we created an OpenStudio Idf Measure to fix your idf file so that it will run. You enter the plant name and the HX name, and the measure will modify the idf file and insert a cooling operation scheme for the heat exchanger. I uploaded it to Google Drive here. You could of course edit the idf file similarly outside of OpenStudio.

The other thing is that we made a change to OS so that the heat exchanger will at least be put on an uncontrolled operation scheme if nothing else. This change will drop in our 1.5.3 iteration build expected on Monday. Uncontrolled operation probably isn't appropriate for a primary secondary setup however. The other thing that change included was the ability to include HX on the component setpoint operation scheme. To do this you simply drop a setpoint manger on the HX's supply side outlet node, and OS will add it to the operation scheme like it does for other components. I believe you can get a valid primary / secondary setup with component setpoint but it needs further research to be certain. OS should have a writeup in our documentation about this use case soon, along with any code changes that are required to do this most correctly.

This configuration (Primary / Secondary) exposes a bug in OpenStudio. Normally OpenStudio categorizes plant equipment as heating, cooling, or uncontrolled and puts it on the appropriate plant operation scheme. If there is a setpoint manager on the immediate outlet node OS will write the component setpoint operation scheme. In this case the HeatExchangerFluidToFluid object was uncategorized therefore it didn't end up any any operation scheme. Essentially uncontrolled. EnergyPlus will let this slide if there are other components on the plant, but not if there is a completely empty operation scheme list like in this case.

We have done two things.

One we created an OpenStudio Idf Measure to fix your idf file so that it will run. You enter the plant name and the HX name, and the measure will modify the idf file and insert a cooling operation scheme for the heat exchanger. I uploaded it to Google Drive here. You could of course edit the idf file similarly outside of OpenStudio.

The other thing is that we made a change to OS so that the heat exchanger will at least be put on an uncontrolled operation scheme if nothing else. This change will drop in our 1.5.3 iteration build expected on Monday. Uncontrolled operation probably isn't appropriate for a primary secondary setup however. The other thing that change included was the ability to include HX on the component setpoint operation scheme. To do this you simply drop a setpoint manger on the HX's supply side outlet node, and OS will add it to the operation scheme like it does for other components. I believe you can get a valid primary / secondary setup with component setpoint but it needs further research to be certain. OS should have a writeup in our documentation about this use case soon, along with any code changes that are required to do this most correctly.

The important bit of the measure that actually modifies the idf is the following.

  string_objects = []
  string_objects << "
    PlantEquipmentList,
        #{plant_name} EquipmentList,
        HeatExchanger:FluidTofluid,
        #{hx_name};
    "
  string_objects << "    
    PlantEquipmentOperation:CoolingLoad, 
      #{plant_name} CoolingLoad, 
      0,
      100000, 
      #{plant_name} EquipmentList;
    "
  string_objects.each do |o|
    idfObject = OpenStudio::IdfObject::load(o)
    object = idfObject.get
    wsObject = workspace.addObject(object)
  end

  operation_list = operation_list.get
  operation_list.setString(1,"PlantEquipmentOperation:CoolingLoad")
  operation_list.setString(2,"#{plant_name} CoolingLoad")
  operation_list.setString(3,"Always On Discrete")

This configuration (Primary / Secondary) exposes a bug in OpenStudio. Normally OpenStudio categorizes plant equipment as heating, cooling, or uncontrolled and puts it on the appropriate plant operation scheme. If there is a setpoint manager on the immediate outlet node OS will write the component setpoint operation scheme. In this case the HeatExchangerFluidToFluid object was uncategorized therefore it didn't end up any any operation scheme. Essentially uncontrolled. EnergyPlus will let this slide if there are other components on the plant, but not if there is a completely empty operation scheme list like in this case.

We have done two things.

One we created an OpenStudio Idf Measure to fix your idf file so that it will run. You enter the plant name and the HX name, and the measure will modify the idf file and insert a cooling operation scheme for the heat exchanger. I uploaded it to Google Drive here. You could of course edit the idf file similarly outside of OpenStudio.

The other thing is that we made a change to OS so that the heat exchanger will at least be put on an uncontrolled operation scheme if nothing else. This change will drop in our 1.5.3 iteration build expected on Monday. Uncontrolled operation probably isn't appropriate for a primary secondary setup however. The other thing that change included was the ability to include HX on the component setpoint operation scheme. To do this you simply drop a setpoint manger on the HX's supply side outlet node, and OS will add it to the operation scheme like it does for other components. I believe you can get a valid primary / secondary setup with component setpoint but it needs further research to be certain. OS should have a writeup in our documentation about this use case soon, along with any code changes that are required to do this most correctly.

The important bit of the measure that actually modifies the idf is the following.

 operation_list = workspace.getObjectByTypeAndName("PlantEquipmentOperationSchemes".to_IddObjectType,"#{plant_name} Operation Scheme List")
  string_objects = []
  string_objects << "
    PlantEquipmentList,
        #{plant_name} EquipmentList,
        HeatExchanger:FluidTofluid,
        #{hx_name};
    "
  string_objects << "    
    PlantEquipmentOperation:CoolingLoad, 
      #{plant_name} CoolingLoad, 
      0,
      100000, 
      #{plant_name} EquipmentList;
    "
  string_objects.each do |o|
    idfObject = OpenStudio::IdfObject::load(o)
    object = idfObject.get
    wsObject = workspace.addObject(object)
  end

  operation_list = operation_list.get
  operation_list.setString(1,"PlantEquipmentOperation:CoolingLoad")
  operation_list.setString(2,"#{plant_name} CoolingLoad")
  operation_list.setString(3,"Always On Discrete")