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

jmcneill's profile - activity

2022-02-13 22:40:43 -0500 received badge  Popular Question (source)
2022-02-07 15:07:09 -0500 received badge  Popular Question (source)
2020-11-12 02:43:47 -0500 received badge  Popular Question (source)
2018-11-28 10:06:10 -0500 received badge  Nice Question (source)
2018-08-22 03:20:10 -0500 received badge  Necromancer (source)
2016-08-19 11:53:03 -0500 answered a question Heat Recovery Chiller and Boiler Work Together

The recovered heat from the Chiller:Electric:EIR will be added to the attached heat recovery loop, and is a passive benefit. You can control the heat recovery chiller to only recover heat to meet the loop setpoint. You will need to connect the heat recovery loop to the main heating loop with either a WaterHeater:Mixed or a HeatExchanger:FluidtoFluid. I recommend the WaterHeater:Mixed so you don't have to worry about the approach temperature, if modeling a three-way valve.

Then I would use the PlantEquipmentOperation:OutdoorDryBulb to control whether WaterHeater:Mixed or Boiler:HotWater is staged on. It may be a bit tricky to get this to work properly. I've had to really tune the temperature setpoints of the loops to get this type of system to work properly.

If that control doesn't work than I would recommend using the EMS manager to stage the equipment. Look at the PlantEquipmentOperation:UserDefined object for this capability. The Application Guide for EMS is a good resource to get started with this type of control.

2016-08-18 13:43:18 -0500 received badge  Notable Question (source)
2016-07-12 22:39:48 -0500 received badge  Popular Question (source)
2016-06-30 15:47:11 -0500 commented answer Tips on how to make a big model run quicker

@David Goldwasser what happens when 500 zones isn't a large model? It's fairly standard for my projects, so I build measures to handle that scale. Are there opportunities to enhance the OS app to handle this size model? Floor multipliers add significant uncertainty, because we don't have repetitive floor plates. Often times, this simplification adds more complexity to the process than dealing with the model scale.

Interestingly, the "Measures" tab is loading slowly in one of my models. Would scale affect that?

2016-05-25 10:37:42 -0500 commented answer How can I automate downloads of weather data from EnergyPlus with Python?

@__AmirRoth__ we did the same type of hacking the html path. Tedious... Would love a web api for this to connect to all of our scripts!

2016-05-06 10:46:43 -0500 commented answer Sizing an EnergyPlus plant loop with both heating and cooling coils

Thanks. Just voted for it and added some comments.

2016-05-06 10:23:16 -0500 commented answer EnergyPlus EMS Manager On/Off Supervisory for Heating and Cooling Coils

@rraustad I'll try these out and send you some files. Thanks.

2016-05-06 10:10:25 -0500 commented question EnergyPlus EMS Manager On/Off Supervisory for Heating and Cooling Coils

@Archmage Thanks. I ended up just controlling off of set point and it worked fairly well. I'm working on modeling a runaround loop with a single coil to do both heating and cooling. I ended up approximating this as a separate heating coil and cooling coil, and want to prevent simultaneous use of the heating and cooling coil. Hopefully I can figure out the On/Off Supervisory to insure this.

2016-05-05 19:21:07 -0500 commented answer Sizing an EnergyPlus plant loop with both heating and cooling coils

That's an unfortunate limitation. We are getting into a lot of hybrid systems that have heating and cooling equipment on a single loop.

2016-05-05 16:14:26 -0500 asked a question EnergyPlus EMS Manager On/Off Supervisory for Heating and Cooling Coils

I'm trying to control heating and cooling coils with the EMS Manager in EnergyPlus. Here is an example of the actuator that I am trying to use in the EMS Manager.

EnergyManagementSystem:Actuator,
    AHU1_HeatingCoil_Enable,
    AHU 1 Coil Heating Water,
    Plant Component Coil:Heating:Water,
    On/Off Supervisory;

The coil still operates when I set this actuator to zero.

SET AHU1_HeatingCoil_Enable = 0,

Is there something that I am missing in how to use this component, or are there issues with controlling coils in the EMS Manager?

2016-05-02 18:35:08 -0500 asked a question Sizing an EnergyPlus plant loop with both heating and cooling coils

I'm developing a model of a runaround loop heat recovery system in EnergyPlus. I have a plant loop that has both a cooling coil (cooling the outdoor air stream) and heating coil(dumping heat to exhaust air stream). I'm running into an interesting situation where I want to size the cooling coil with one Sizing:Plant object and the heating coil with another. I can get the coils to autosize using conditions in the middle of each coil (Design Loop Exit Temperature of ~60F), but this tends to undersize each coil. Has anyone successfully autosized both heating objects and cooling objects on a single plant loop?

2016-04-12 18:10:19 -0500 marked best answer Thermostat setpoint at peak load is 0

I'm running the RefBldgHospitalNew2004_Chicago.idf example file on EnergyPlus v8.2-Update 1 and noticing that the HVAC Sizing Summary: Zone Cooling and Zone Heating: Thermostat Setpoint Temperature at Peak Load is 0 C.

image description

The hourly variables for Thermostat Cooling Setpoint Temperature and Thermostat Heating Setpoint Temperature are between 18 and 25 C.

I've noticed this in other models that I have run. Any ideas on why this value is 0?

2016-04-12 18:10:01 -0500 marked best answer Problem using runmanager via SDK in openstudio 1.8.0

I'm using the runmanager via the Python bindings to run OSM models. My code from OpenStudio 1.6.0 isn't working with the latest 1.8.0 bindings. When calling:

j = openstudio.runmanager.Job(
    openstudio.runmanager.JobFactory.createModelToIdfJob(
    os.path.join(osm_path, osm_name),
    output_path
    )
)

rm = openstudio.runmanager.RunManager(rm_path, True, True, False, False)
rm.enqueue(j, True)

I get the following error:

 Traceback (most recent call last):
  File "run_openstudio_models.py", line 45, in <module>
    rm.enqueue(j, True)
  File "/home/crafter/scripts/openstudio/openstudiorunmanager.py", line 3415, in enqueue
    return _openstudiorunmanager.RunManager_enqueue(self, *args)
NotImplementedError: Wrong number or type of arguments for overloaded function 'RunManager_enqueue'.
  Possible C/C++ prototypes are:
    openstudio::runmanager::RunManager::enqueue(openstudio::runmanager::Job const &,bool,openstudio::path const &)
    openstudio::runmanager::RunManager::enqueue(openstudio::runmanager::Job const &,bool)
    openstudio::runmanager::RunManager::enqueue(std::vector< openstudio::runmanager::Job,std::allocator< openstudio::runmanager::Job > > const &,bool,openstudio::path const &)
    openstudio::runmanager::RunManager::enqueue(std::vector< openstudio::runmanager::Job,std::allocator< openstudio::runmanager::Job > > const &,bool)

I appear to have the correct number of arguments, so am at a loss for what is causing the problem.

2016-04-12 18:09:56 -0500 marked best answer Openstudio Python Bindings Set Optionals

I'm trying to set an optional double in the CoilCoolingDXTwoSpeed class. The SDK documentation mentions that the parameter will be set to autosize if the value is false or a value is specified if provided.

The C++ code for this component is:

  // N1 , \field Rated High Speed Total Cooling Capacity

 OptionalDouble CoilCoolingDXTwoSpeed_Impl::ratedHighSpeedTotalCoolingCapacity() const
  {
    return getDouble(OS_Coil_Cooling_DX_TwoSpeedFields::RatedHighSpeedTotalCoolingCapacity);
  }

  void CoilCoolingDXTwoSpeed_Impl::setRatedHighSpeedTotalCoolingCapacity( OptionalDouble value )
  {
    if(value)
    {
      setDouble(OS_Coil_Cooling_DX_TwoSpeedFields::RatedHighSpeedTotalCoolingCapacity,*value);
    }
    else
    {
      setString(OS_Coil_Cooling_DX_TwoSpeedFields::RatedHighSpeedTotalCoolingCapacity,"Autosize");
    }
  }

I'm struggling with the appropriate syntax in the Python bindings to make this work. The command:

coil.setRatedHighSpeedTotalCoolingCapacity(False)

gives the following error:

TypeError: in method 'CoilCoolingDXTwoSpeed_setRatedHighSpeedTotalCoolingCapacity', argument 2 of type 'boost::optional< double

I actually get the same error if a double value is provided.

coil.setRatedHighSpeedTotalCoolingCapacity(10000.0)

Is there a specific syntax required to provide the value as an optional double?

2016-04-12 18:09:30 -0500 marked best answer Air handling unit tracking of zone exhaust in EnergyPlus

How do you track the zone exhaust with the supply air in EnergyPlus? I'm using the Fan:ZoneExhaust with the system coupled and unbalanced. I specified a zone exhaust flow rate (3 ACH) that is greater than the outdoor air and supply air flow rates (2 ACH). The hourly exhaust is not being matched by the terminal supply air flow rate. The exhaust flow rate is at 3 ACH and the supply is at 2 ACH. I want to insure that my supply air flow rate tracks the exhaust air flow rate in a zone.

2016-04-12 18:09:10 -0500 marked best answer Heat Recovery Chiller Staging in EnergyPlus

I'm having difficulty with staging the hot water side of a Chiller:Electric:EIR with heat recovery. I have the hot water side of the condenser barrel connected to the supply side of a hot water loop in parallel with a DistrictHeating object. The demand side has a LoadProfile:Plant object that provides the load.

I want the Chiller:Electric:EIR to first try to meet the load and the DistrictHeating to provide the remainder of the heat to meet the loop setpoint. I've tried various configurations and can not seem to get the heat recovery side to control in the correct way.

Does anyone know the correct way to control the heat recovery chiller model with district heat in parallel?

2016-04-12 18:08:52 -0500 marked best answer Using C++ Cast in OpenStudio Python SDK

I'm trying to create HVAC nodes using the Python bindings for the OpenStudio SDK. I'm running into a challenge with casting the ModelObject type to a Node type. It seems relatively simple in C++, but I'm unsure of the Python commands. I'm currently trying to follow this example from the OpenStudio source code.

 Node fanInletNode = fan.inletModelObject()->cast<Node>();
2016-04-12 18:07:50 -0500 marked best answer EnergyPlus Command Line Interface - Issue 4544

I noticed that EnergyPlus v8.3 has the following new feature: "#4544 : Add a proper command line interface to EnergyPlus". I wasn't able to find any documentation on this interface. Does anyone know where I can learn more about it?

2016-04-12 18:07:40 -0500 marked best answer IdealAirLoads for ThermalZone with OpenStudio SDK

I'm trying to use the ZoneHVAC:IdealLoadsAirSystem system in the OpenStudio SDK through use of openstudio::model::ThermalZone::setUseIdealAirLoads(True). I want to be able to access the sizing information from the EnergyPlus simulation and am not clear on how this may be accessed within OpenStudio.

Is the sizing information (e.g. Design Cooling Air Flow Rate) that would normally be found in the HVAC Sizing Summary report accessible through the OpenStudio objects? It is not clear to me whether this information is contained in the SQL file and is linked to the model with openstudio::model::setSqlFile(sqlFile). Any assistance is greatly appreciated.

Also, I wanted to note that I am using the python bindings to the SDK in version 1.5.4.

2016-04-12 18:07:35 -0500 marked best answer GBXML Class in OpenStudio Ruby SDK

I'm trying to use the OpenStudio Ruby SDK to import with GbXML. I get a "NameError: unitialized constant" error with

OpenStudio::GbXML::ReverseTranslator.new()

If I enter the EnergyPlus translator command it works.

OpenStudio::EnergyPlus::ReverseTranslator.new()

Creating an instance of the GbXML class also works fine.

OpenStudio::GbXML

Am I missing something in the syntax or is this class somehow missing from the Ruby SDK? Thanks for the help!

2016-04-12 18:04:28 -0500 marked best answer Python SDK Bindings for OpenStudio

I'm trying to use the Python bindings for the OpenStudio SDK. I've gone through the instructions on the OpenStudio Wiki for developers and have used CMake and Visual Studio Express to compile the source code from the Github repository. I compiled the ALL_BUILD in the OpenStudioCore solution as Release x64. I've added "<\path_to_openstudio>\Openstudio-1.5.3\build\OSCore-prefix\src\OSCore-build\Products\python\Release" to my PythonPath.

When I test a module import in Python:

import openstudioairflow

I get the following error message:

Traceback (most recent call last):
File "stdin", line 1, in <module>

File "<\path_to_openstudio>\Openstudio-1.5.3\build\OSCore-prefix\src\OSCore-build\Products\python\Release\openstudioairflow.py", line 28, in module _openstudioairflow = swig_import_helper() File

File "<\path_to_openstudio>\Openstudio-1.5.3\build\OSCore-prefix\src\OSCore-build\Products\python\Release\openstudioairflow.py", line 24, in swig_import_helper _mod = imp.load_module('_openstudioairflow', fp, pathname, description)

ImportError: DLL load failed: The specified module could not be found.

It appears to be an error in the SWIG link to the DLLs. The Release folder contains .py, .pyd, and .exp files. I do not see any .DLL files, but there were no compiler errors.

Is there an additional step that I am missing in compiling or configuring the bindings?

2016-04-12 18:02:10 -0500 marked best answer DesignSpecification:OutdoorAir for fixed ventilation rates

The DesignSpecification:OutdoorAir object in EnergyPlus applies the occupancy schedule fractions to the design Outdoor Air Flow per Person (cfm/person), so the required hourly minimum outdoor air rate during the simulation is less than the design specification. This turns the DesignSpecification:OutdoorAir into a variation of a demand control ventilation. How can one specify the Outdoor Air Flow per Person inputs in the DesignSpecification:OutdoorAir while maintaining fixed outdoor air flow rates during occupied periods of the hourly simulation?

2016-04-12 18:02:10 -0500 marked best answer OpenStudio SDK Heat Recovery Chiller

Is there a specific way that the Chiller:EIR:Electric is placed on the hot water loop to use it as a heat recovery chiller? I'm using the Python SDK bindings and I can use:

node = openstudio.model.toNode(hotWaterPlant.supplySplitter().lastOutletModelObject().get()).get()
chiller.addToNode(node)

to add it to the hot water loop, but the node names are not written to Heat Recovery Inlet Node Name and Heat Recovery Outlet Node Name in the Chiller:Electric:EIR inputs.

2016-04-12 18:02:08 -0500 marked best answer EnergyPlus SQL Query Returns Incorrect Value

I'm looking at the results a bit closer at the results from an SQL query in EnergyPlus and I'm finding some issues. I'm able to access the HVAC Sizing Summary report properly, but the Sensible Heat Gain Summary report is a bit odd. The SQL query appears to mix up the values from the table.

For instance, the value from the SensibleHeatGainSummary report, Peak Cooling Sensible Heat Gain Components table, and Equipment Sensible Heat Removal column returns 720 W. The query using the Python bindings in OpenStudio looks like this:

sql_query = select Value from TabularDataWithStrings WHERE ReportName=\'SensibleHeatGainSummary\' and ReportForString=\'Entire Facility\' and TableName=\'Peak Cooling Sensible Heat Gain Components\' and ColumnName=\'Equipment Sensible Heat Removal\' and RowName=\'ZONE 0\';

 sql_file.execAndReturnFirstDouble(sql_query).get()

The HTML report shows that 720 W is the value for Lights Sensible Heat Addition. It is not the value for Equipment Sensible Heat Removal.

image description

Is there a mistake in my query syntax or a bug in EnergyPlus or OpenStudio? I'd greatly appreciate any help with this.

2016-04-12 18:02:06 -0500 marked best answer EnergyPlus Direct Steam Humidifiers

How should one model a direct steam or steam to steam humidifier in EnergyPlus? There is only a Humidifier:Steam:Electric, but this does not add the steam load to a steam boiler loop.