#895 Revisiting: Loops and Plants

Cory Mosiman Mon 15 Mar


I have been looking at previous posts on loops:

I also put together a question in the Haystack Github regarding loops:

I recently did some relevant work on the Brick side of things, although it didn't get fully fleshed out, there are some good discussions there:

I am currently working on a project where we need to model an "ambient type loop", i.e. a loop that is controlled to ~ 60 - 70F and feeds WSHPs. The setup is:

  • a hot water loop with two boilers
  • a cooling tower
  • a building loop. it's connected to the hw loop through a HX. and still trying to figure out how exactly it's connected to the CT but my guess is there's a bypass with a three way valve to the CT or a HX between the building loop and the CT.
  • WSHPs connect to the building loop and provide zone temp control

It seems like a typical enough system in multifamily residential that we should have a well defined way to do this (but I don't know it...). As outlined on the Github issue, I'm unsure of how loops are used / defined in Haystack and it seems like something we should tackle as part of the Haystack 4 update, especially when trying to understand the role of conduit, specifically pipes in Haystack 4. I've also been noodling on how this relates to the 223 work.

Summary of my understanding (based on currently proposed Haystack 4)

  • There currently is no first class loop type.
  • A plant is a type of equip (which isn't worth arguing about IMO it's fine). A plant has subtypes: chilled-water-plant, hot-water-plant, steam-plant. This seems to align with the Alpha and Bravo examples
  • In the alpha example, the chilled water plant consists of:
    • 3 chillers
    • 2 CTs
    • 2 CW pumps
    • 2 CHW pumps
  • It seems to me that adding a condenser-water-plant would be beneficial. A chilled-water-plant would then interface with a condenser-water-plant (via a condenserWaterRef). The alpha example would then break out into:
    • A condenser-water-plant with the 2x CTs and 2x CW pumps
    • A chilled-water-plant with the 3x chillers and 2x CHW pumps and condenserWaterRef -> @cwp
  • Distinguishing the type of plant primarily seems to be done based on the expected temperature output. In discussing with some folks, my understanding is as follows:
    • chilled-water-plant: ~ 45 - 55 degF. chw plants consist of the primary cooling equipment as well as the piping and pumping equipment (a chilled-water-loop)
    • hot-water-plant: ~ 110 - 120 degF. hw plants consist of the primary heating equipment as well as the piping and pumping equipment (a hot-water-loop)
    • condenser-water-plant: ~ 70 - 85 degF. Used specifically to represent the condenser side of plant chw plants. consists of heat rejection equipment. The piping and pumping equipment (a condenser-water-loop)
    • steam-plant: ... and on ...

Using the above as a guide, I think it makes sense to add in the concept of an ambient-water-loop. I don't think an ambient-water-plant makes sense. The other distinguishing factor of an ambient loop might be that they are often used in both a source and a sink type fashion (WSHPs, district systems, etc.). A more specific type of ambient-water-loop could be a ground-water-loop, which one could infer that the addition / removal of energy from the loop is done by the ground.

  • I think the current definition of a heatPump is good, but I think we need to add something about the fluid on the other side of the condenser/evaporator (i.e. air or water). How would people go about doing that? Also, would we just use a waterRef or a new ambientWaterRef tag to point back to the ambient-water-loop?


I think we have the following concepts to add:

  • condenser-water-plant
  • Top level loop with subtypes:
    • chilled-water-loop
    • hot-water-loop
    • condenser-water-loop
    • steam-loop
    • ambient-water-loop:
      • ground-water-loop

I would like some feedback on:

  • How to define what a heatPump is accepting / rejecting from (water source vs. air source)?
  • What the ref should be: waterRef or ambientWaterRef?
  • If we start modeling loops, what should be our recommended way to connect loops, plants, and pumps? i.e. should a pump on a condenser water loop ref the loop or the condenser water plant? (and so on for chw, hw, etc.)

If people are interested in hashing this out, it's probably worth getting a group together. The hope would be to provide sketches / drawings of a few typical plant types as well as recommended ways to model them, which I think we should then contribute back to the group. Please respond if interested.

Mike Melillo Mon 15 Mar

I really like the idea overall. Making modest attempts to use fandoc formatting here..

Modelling Loops

Rambling a little bit about how to model loops... From what I'm reading, loop lives in its own little world (and it sounds like if you had a do-over button you'd make plant that way too ... not that it's necessary, just trying to get perspective) and has some inputs/outputs relationship with its plant.

For whatever reason, in my head I think of a plant as containing the central equipment and producing x-water and the loop being a transport mechanism. That would leave me wanting to organize all equipment that is physically located in the plant room or rooms as part of the plant and it conveys x-water to the loop. The loop then conveys it to downstream equipment.

That would make consumption references for chilled-water-input to chilled-water-output go something like:

ahu -> chilled-water-loop -> chilled-water-plant

Depending on how crazy someone wanted to get with defining equips along the way this could get as detailed as a Chilled Water Valve Actuator contained by an AHU inputs Chilled Water conveyed by some Pipe Section which is part of the Primary Chilled Water Loop fed by Chilled Water Plant A. With that little string of relationships you could bring all sorts of fun inferences along the way. I guess that looks like:

chilled-water-valve-actuator contained by ahu which is a chilledWaterCooling entity and so inputs chilled-water from a chilled-water-pipe which is contained by the chilled-water-loop which both outputs chw to our ahu and inputs chw from our chilled-water-plant

I'm skipping the multitudes of possible pipe section back to the plant, but that's the gist I suppose.

Plant Entities vs Loop Entities

I do think there should be a logical separation between which entities show up in the plant vs what entities show up in the loop, and I'm not sure how to do so without involving grey areas. The best way I can think of is physical location. So for the pumps and sensors located within the "Chiller MER", I would put them in the respective chilled-water or condenser-water plant. If there are secondary booster pumps, or temp/pressure sensors located out on the riser, I would put those as a part of the chilled-water-loop. Even if one of those pressure sensors is the loop-pressure sensor that may serve as control variable for the pump speed control back in the plant.

In a way, that could constrain the definition of the condenser-water-plant to entities existing between the towers, heat exchangers, pumps,and chillers directly to the plant entity, and then if that pipe is fed to other equipment such as a heat pump any sensors or pipes along there become part of the loop. Not sure how that plays out for the other loop types.

waterRef vs ambient

For feedback question 2, waterRef until someone comes up with a good idea for what to do with older buildings that have dual temp loops (50-60F in the summer, 130-150F in the winter). Right now I'm doing both hot-water and chilled-water ref to the same entities and it feels bonkers.

heatPump and water sources

For your note on heatPump. I think that is a separate issue dealing with how haystack currently views equipFunction, process, and relates what an equipment does to how it does it. I'm not sure what to do to solve it but have written about it. Based on the decision to explode point types, I would say follow suit for the variations of equipment processes. In short, a process should (if it involves an input and output should probably have that information encoded in its def).

That post is here: https://project-haystack.org/forum/topic/878#c5

David Waterworth Mon 22 Mar

This is fairly similar to how we model the chilled water system - the main difference being that we use system rather than plant, we generally have

condenser water system (CWS): contains cooling towers (with associated fans, vsds), condenser water bypass, condenser water bypass valve, condenser water pump.

chilled water system (CHWS): contains chillers, chilled water bypass, chilled water bypass valve, chilled water pump.

We also almost always have a primary chilled water system (PCHWS) and a secondary chilled water system (SCHWS). The secondary system usually consists of just of pumps and bypass.

I'm never really sure if the entire thing should be contained in a CHWS entity which then consists of CWS, PCHWS and SCHWS. This makes some sense when trying to work out where "field" related points should be pinned, i.e. #AHU's calling for cooling or Total Building Thermal Load. The latter being measured over the entire series of the primary and second chilled water system doesn't really logically belong to either.

Login or Signup to reply.