From 304ce618e782b4ae65c28d0948d1ad7e323c2cb8 Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Mon, 7 Aug 2023 11:51:17 -0700 Subject: [PATCH 01/22] add 4.11 components shapes --- libraries/ashrae/guideline36/components.ttl | 101 ++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/libraries/ashrae/guideline36/components.ttl b/libraries/ashrae/guideline36/components.ttl index fe00495f8..152d2f1b3 100644 --- a/libraries/ashrae/guideline36/components.ttl +++ b/libraries/ashrae/guideline36/components.ttl @@ -170,3 +170,104 @@ sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] . + +# Water Side + +# Pumps + +# component of 4.11.2 +:constant-speed-pump-motor a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Speed Pump Motor" ; + sh:class brick:Motor ; + # required + sh:property [ + rdfs:label "Pump Start" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # required + sh:property [ + rdfs:label "Pump Status" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Pump_Status ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] . + +:variable-speed-pump-motor a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Speed Pump Motor" ; + sh:class brick:Variable_Frequency_Drive ; + # required + sh:property [ + rdfs:label "Pump Start" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # required + sh:property [ + rdfs:label "Pump Status" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Pump_Status ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # application-specific, required for VFDs + sh:property [ + rdfs:label "Pump Speed" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Frequency_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] . + +:constant-speed-pump a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Speed Pump" ; + sh:class brick:Hot_Water_Pump ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :constant-speed-pump-motor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # application-specific + # TODO required for pump(s) serving multiple control valves + sh:property [ + rdfs:label "Differential Pressure" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Differential_Pressure_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] . + +:variable-speed-pump a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Speed Pump" ; + sh:class brick:Hot_Water_Pump ; + # TODO hasPart might not be the correct relationship for a pump with a VFD, which is a separate piece of equipment + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :variable-speed-pump-motor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # application-specific + # TODO required for pump(s) serving multiple control valves + sh:property [ + rdfs:label "Differential Pressure" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Differential_Pressure_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] ; + # optional + sh:property [ + rdfs:label "Alarm" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Fault_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] . + From 288cd31d2e51ba28b114093b429267820274c50b Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Mon, 7 Aug 2023 11:51:57 -0700 Subject: [PATCH 02/22] add 4.11 hot water plant shapes --- .../guideline36/4.11-hot-water-plant.ttl | 434 ++++++++++++++++++ 1 file changed, 434 insertions(+) create mode 100644 libraries/ashrae/guideline36/4.11-hot-water-plant.ttl diff --git a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl new file mode 100644 index 000000000..47058dd1c --- /dev/null +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl @@ -0,0 +1,434 @@ +@prefix sh: . +@prefix brick: . +@prefix rdfs: . +@prefix owl: . +@prefix bmotif: . +@prefix components: . +@prefix : . + +# NOTE the following differentiates between a System (plant) and a Loop (loop) per Brick, +# where a plant produces and a loop distributes the fluid. + +# NOTE the following two subsections are not well organized for translating into machine readable code. +# For example, 4.11.3 mixes primary-only points with primary-secondary points. +# Thus, the following two subsections have been explicitly separated into Primary (only) HW Loops +# and (Primary) Secondary HW Loops. + +# 4.11 Hot Water Plant + +:hot-water-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; + sh:or ( + sh:node :primary-plant + sh:node :primary-seconary-plant + ) . + +:primary-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; + rdfs:label "Primary HW Plant" ; + sh:class brick:Hot_Water_System ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :boiler ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :primary-loop ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] . + +:primary-secondary-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; + rdfs:label "Primary Secondary HW Plant" ; + sh:class brick:Hot_Water_System ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :boiler ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :primary-seconary-loop ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] . + +# 4.11.1 Boilers +# TODO add dedicated boiler pump + +:boiler a sh:NodeShape, owl:Class, bmotif:HVAC ; + sh:or ( + sh:class brick:Electric_Boiler + sh:class brick:Condensing_Natural_Gas_Boiler + sh:node :noncondensing-boiler + ) ; + rdfs:label "Boiler" ; + # required + sh:property [ + rdfs:label "Boiler enable" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Enable_Status ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # required + sh:property [ + rdfs:label "HW supply temperature setpoint" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Hot_Water_Temperature_Setpoint ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # optional + sh:property [ + rdfs:label "Boiler firing rate" ; + rdfs:comment "Optional point for monitoring boiler firing rate." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Valve_Position_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] ; + # applications + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :isolation-valve ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] ; + # optional + sh:property [ + rdfs:label "Boiler natural gas flow" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Natural_Gas_Flow_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] . + +# TODO topology see comment +:noncondensing-boiler a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Noncondensing Boiler" ; + sh:class brick:Noncondensing_Natural_Gas_Boiler ; + # applications, required for primary-only plants and primary-secondary plants with noncondensing boilers + sh:property [ + rdfs:label "Plant HW return temperature" ; + rdfs:comment "For primary-only plants, locate on plant side of the HW minimum flow bypass to allow for correct load calculations." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Hot_Water_Return_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] . + +# application-specific +# TODO required for boiler plants with headered primary pumps +# TODO add Boiler_Isolation_Valve subclass to brick? +:isolation-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Isolation Valve" ; + rdfs:comment "Required for boiler plants with headered primary pumps. Delete otherwise." ; + sh:class brick:Isolation_Valve ; + # required, inferred from DO point + sh:property [ + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Valve_Position_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMinCount 1 ; + ] ; + # optional, but required for application + sh:property [ + rdfs:label "isolation valve closed end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Switch_Status ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # optional, but required for application + sh:property [ + rdfs:label "isolation valve open end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Switch_Status ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] . + +# 4.11.2 HW Pumps (see components.ttl) + +# 4.11.3 Primary (only) HW Loop + +:primary-loop a sh:NodeShape, owl:Class, bmotif:System_Specification ; + sh:or ( + sh:node :constant-primary-loop + sh:node :variable-primary-loop + ) ; + # applications, required for primary-only plants + # TODO see comment + sh:property [ + rdfs:label "HW supply or return flow" ; + rdfs:comment "the flow meter must be located on the plant side of the HW minimum flow bypass where provided" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ + sh:or ( sh:class brick:Hot_Water_Supply_Flow_Sensor sh:class brick:Hot_Water_Return_Flow_Sensor ) + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # applications, required for primary-only plants + sh:property [ + rdfs:label "HW supply temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Hot_Water_Supply_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # optional + # TODO https://github.com/BrickSchema/Brick/issues/532 + sh:property [ + rdfs:label "HW system gauge pressure" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Pressure_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] . + +:constant-primary-loop a sh:NodeShape, owl:Class, bmotif:System_Specification ; + rdfs:label "Constant Primary HW Loop" ; + sh:class brick:Hot_Water_Loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] . + +:variable-primary-loop a sh:NodeShape, owl:Class, bmotif:System_Specification ; + rdfs:label "Variable Primary HW Loop" ; + sh:class brick:Hot_Water_Loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :bypass-valve ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] . + +# TODO see comment +:bypass-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Bypass Valve" ; + rdfs:comment "HW bypass valve is required for variable flow primary-only plants with boilers with non-zero minimum flow. Delete otherwise." ; + sh:class brick:Bypass_Valve ; + # applications + sh:property [ + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Valve_Position_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMinCount 1 ; + ] ; + # optional + sh:property [ + rdfs:label "Loop HW return temperature" ; + rdfs:comment "Optional sensor for monitoring temperature coming back from coils in primary-only plants with a HW bypass. Delete for all other plant configurations." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Hot_Water_Return_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] . + +# 4.11.4 (Primary) Secondary HW Loop + +:primary-secondary-loop a sh:NodeShape, owl:class, bmotif:HVAC ; + sh:or ( + sh:node :constant-primary-constant-secondary-loop + sh:node :constant-primary-variable-secondary-loop + sh:node :variable-primary-constant-secondary-loop + sh:node :variable-primary-variable-secondary-loop + ) ; + # applications, optional per 4.11.3 + sh:property [ + rdfs:label "HW supply temperature" ; + rdfs:comment "Optional for primary-secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Hot_Water_Supply_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] ; + # required + sh:property [ + rdfs:label "Secondary HW supply temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Hot_Water_Supply_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # required + sh:property [ + rdfs:label "Secondary HW return temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Hot_Water_Return_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # applications + sh:property [ + rdfs:label "Secondary HW supply or return flow" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ + sh:or ( sh:class brick:Hot_Water_Supply_Flow_Sensor sh:class brick:Hot_Water_Return_Flow_Sensor ) + ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] ; + # TODO applications, for hybrid plants with condensing and non-condensing boilers. + sh:property [ + rdfs:label "Intermediate HW supply temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Hot_Water_Supply_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] . + +:constant-primary-constant-secondary-loop a sh:NodeShape, owl:class, bmotif:HVAC ; + rdfs:label "Constant Primary Constant Secondary HW Loop" ; + sh:class brick:Hot_Water_Loop ; + sh:property [ + rdfs:label "Constant Primary HW Loop" ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:class brick:Hot_Water_Loop ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + sh:property [ + rdfs:label "Constant Secondary HW Loop" ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:class brick:Hot_Water_Loop ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] . + +:constant-primary-variable-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Primary-Variable Secondary HW Loop" ; + sh:class brick:Hot_Water_Loop ; + sh:property [ + rdfs:label "Constant Primary HW Loop" ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:class brick:Hot_Water_Loop ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + sh:property [ + rdfs:label "Variable Secondary HW Loop" ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:class brick:Hot_Water_Loop ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # applications, not recommended per 4.11.3 + sh:property [ + rdfs:label "HW supply or return flow" ; + rdfs:comment "Not required nor recommended for constant primary-variable secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ + sh:or ( sh:class brick:Hot_Water_Supply_Flow_Sensor sh:class brick:Hot_Water_Return_Flow_Sensor ) + ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 0 ; + ] . + +:variable-primary-constant-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Primary Constant Secondary HW Loop" ; + sh:class brick:Hot_Water_Loop ; + sh:property [ + rdfs:label "Variable Primary HW Loop" ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:class brick:Hot_Water_Loop ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + sh:property [ + rdfs:label "Constant Secondary HW Loop" ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:class brick:Hot_Water_Loop ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] . + +:variable-primary-variable-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Primary-Variable Secondary HW Loop" ; + sh:class brick:Hot_Water_Loop ; + sh:property [ + rdfs:label "Variable Primary HW Loop" ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:class brick:Hot_Water_Loop ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:node components:variable-speed-pump ; + # optional, per 4.11.3 + sh:property [ + rdfs:label "Decoupler flow" ; + rdfs:comment "Optional flow meter for primary pump speed control in variable primary-variable secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:node brick:Hot_Water_Flow_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] ; + ] ; + sh:qualifiedMinCount 1 ; + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + sh:property [ + rdfs:label "Variable Secondary HW Loop" ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:class brick:Hot_Water_Loop ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # applications, optional per 4.11.3 + sh:property [ + rdfs:label "HW supply or return flow" ; + rdfs:comment "Optional for variable primary-variable secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ + sh:or ( sh:class brick:Hot_Water_Supply_Flow_Sensor sh:class brick:Hot_Water_Return_Flow_Sensor ) + ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] . From d1727a3a7bc7ccd8341aae37d6046d14206cd63b Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Sat, 12 Aug 2023 13:04:45 -0700 Subject: [PATCH 03/22] replace deprecated supply/return with leaving/entering --- .../guideline36/4.11-hot-water-plant.ttl | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl index 47058dd1c..dfd91127a 100644 --- a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl @@ -114,7 +114,7 @@ rdfs:label "Plant HW return temperature" ; rdfs:comment "For primary-only plants, locate on plant side of the HW minimum flow bypass to allow for correct load calculations." ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Hot_Water_Return_Temperature_Sensor ] ; + sh:qualifiedValueShape [ sh:class brick:Entering_Hot_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] . @@ -166,7 +166,7 @@ rdfs:comment "the flow meter must be located on the plant side of the HW minimum flow bypass where provided" ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ - sh:or ( sh:class brick:Hot_Water_Supply_Flow_Sensor sh:class brick:Hot_Water_Return_Flow_Sensor ) + sh:or ( sh:class brick:Leaving_Hot_Water_Flow_Sensor sh:class brick:Entering_Hot_Water_Flow_Sensor ) ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; @@ -175,7 +175,7 @@ sh:property [ rdfs:label "HW supply temperature" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Hot_Water_Supply_Temperature_Sensor ] ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Hot_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] ; @@ -230,7 +230,7 @@ rdfs:label "Loop HW return temperature" ; rdfs:comment "Optional sensor for monitoring temperature coming back from coils in primary-only plants with a HW bypass. Delete for all other plant configurations." ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Hot_Water_Return_Temperature_Sensor ] ; + sh:qualifiedValueShape [ sh:class brick:Entering_Hot_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] . @@ -249,7 +249,7 @@ rdfs:label "HW supply temperature" ; rdfs:comment "Optional for primary-secondary plants." ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Hot_Water_Supply_Temperature_Sensor ] ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Hot_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] ; @@ -257,7 +257,7 @@ sh:property [ rdfs:label "Secondary HW supply temperature" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Hot_Water_Supply_Temperature_Sensor ] ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Hot_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] ; @@ -265,7 +265,7 @@ sh:property [ rdfs:label "Secondary HW return temperature" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Hot_Water_Return_Temperature_Sensor ] ; + sh:qualifiedValueShape [ sh:class brick:Entering_Hot_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] ; @@ -274,7 +274,7 @@ rdfs:label "Secondary HW supply or return flow" ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ - sh:or ( sh:class brick:Hot_Water_Supply_Flow_Sensor sh:class brick:Hot_Water_Return_Flow_Sensor ) + sh:or ( sh:class brick:Leaving_Hot_Water_Flow_Sensor sh:class brick:Entering_Hot_Water_Flow_Sensor ) ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; @@ -283,7 +283,7 @@ sh:property [ rdfs:label "Intermediate HW supply temperature" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Hot_Water_Supply_Temperature_Sensor ] ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Hot_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] . @@ -349,7 +349,7 @@ rdfs:comment "Not required nor recommended for constant primary-variable secondary plants." ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ - sh:or ( sh:class brick:Hot_Water_Supply_Flow_Sensor sh:class brick:Hot_Water_Return_Flow_Sensor ) + sh:or ( sh:class brick:Leaving_Hot_Water_Flow_Sensor sh:class brick:Entering_Hot_Water_Flow_Sensor ) ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 0 ; @@ -427,7 +427,7 @@ rdfs:comment "Optional for variable primary-variable secondary plants." ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ - sh:or ( sh:class brick:Hot_Water_Supply_Flow_Sensor sh:class brick:Hot_Water_Return_Flow_Sensor ) + sh:or ( sh:class brick:Leaving_Hot_Water_Flow_Sensor sh:class brick:Entering_Hot_Water_Flow_Sensor ) ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; From c80b9a285aef1058259e89c9a84fb65e89c04fc9 Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Sat, 12 Aug 2023 13:27:22 -0700 Subject: [PATCH 04/22] put sh:path inside sh:property --- .../guideline36/4.11-hot-water-plant.ttl | 84 +++++++++++-------- 1 file changed, 50 insertions(+), 34 deletions(-) diff --git a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl index dfd91127a..5d29ab504 100644 --- a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl @@ -296,9 +296,11 @@ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:class brick:Hot_Water_Loop ; - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; - sh:qualifiedMinCount 1 ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; @@ -308,9 +310,11 @@ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:class brick:Hot_Water_Loop ; - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; - sh:qualifiedMinCount 1 ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; @@ -324,9 +328,11 @@ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:class brick:Hot_Water_Loop ; - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; - sh:qualifiedMinCount 1 ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; @@ -336,9 +342,11 @@ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:class brick:Hot_Water_Loop ; - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; - sh:qualifiedMinCount 1 ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; @@ -363,9 +371,11 @@ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:class brick:Hot_Water_Loop ; - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; - sh:qualifiedMinCount 1 ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; @@ -375,9 +385,11 @@ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:class brick:Hot_Water_Loop ; - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; - sh:qualifiedMinCount 1 ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; @@ -391,20 +403,22 @@ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:class brick:Hot_Water_Loop ; - sh:path brick:hasPart ; - sh:qualifiedValueShape [ - sh:node components:variable-speed-pump ; - # optional, per 4.11.3 - sh:property [ - rdfs:label "Decoupler flow" ; - rdfs:comment "Optional flow meter for primary pump speed control in variable primary-variable secondary plants." ; - sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:node brick:Hot_Water_Flow_Sensor ] ; - sh:qualifiedMinCount 0 ; - sh:qualifiedMaxCount 1 ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:node components:variable-speed-pump ; + # optional, per 4.11.3 + sh:property [ + rdfs:label "Decoupler flow" ; + rdfs:comment "Optional flow meter for primary pump speed control in variable primary-variable secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:node brick:Hot_Water_Flow_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] ; ] ; - ] ; - sh:qualifiedMinCount 1 ; + sh:qualifiedMinCount 1 ; + ] ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; @@ -414,9 +428,11 @@ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:class brick:Hot_Water_Loop ; - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; - sh:qualifiedMinCount 1 ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; From 966cfe430535139f941b1587125ab5e78208bd37 Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Wed, 30 Aug 2023 13:05:27 -0600 Subject: [PATCH 05/22] 4.11 cleanup with new loop implementation --- .../guideline36/4.11-hot-water-plant.ttl | 379 +++++++++--------- 1 file changed, 194 insertions(+), 185 deletions(-) diff --git a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl index 5d29ab504..f8f9290ca 100644 --- a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl @@ -6,64 +6,66 @@ @prefix components: . @prefix : . -# NOTE the following differentiates between a System (plant) and a Loop (loop) per Brick, -# where a plant produces and a loop distributes the fluid. - -# NOTE the following two subsections are not well organized for translating into machine readable code. -# For example, 4.11.3 mixes primary-only points with primary-secondary points. -# Thus, the following two subsections have been explicitly separated into Primary (only) HW Loops -# and (Primary) Secondary HW Loops. - # 4.11 Hot Water Plant :hot-water-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; sh:or ( - sh:node :primary-plant - sh:node :primary-seconary-plant + sh:node :primary-only-plant + sh:node :primary-secondary-plant ) . -:primary-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; - rdfs:label "Primary HW Plant" ; +:primary-only-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; + rdfs:label "Primary-Only HW Plant" ; sh:class brick:Hot_Water_System ; sh:property [ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:node :boiler ] ; - sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 ; + sh:qualifiedMinCount 1 ] ; sh:property [ sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node :primary-loop ] ; + sh:qualifiedValueShape [ + sh:or ( + sh:node :constant-primary-only-loop + sh:node :variable-primary-only-loop + ) + ] ; sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 ; + sh:qualifiedMaxCount 1 ] . :primary-secondary-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; - rdfs:label "Primary Secondary HW Plant" ; + rdfs:label "Primary-Secondary HW Plant" ; sh:class brick:Hot_Water_System ; sh:property [ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:node :boiler ] ; - sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 ; + sh:qualifiedMinCount 1 ] ; sh:property [ sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node :primary-seconary-loop ] ; + sh:qualifiedValueShape [ + sh:or ( + sh:node :constant-primary-constant-secondary-loop + sh:node :constant-primary-variable-secondary-loop + sh:node :variable-primary-constant-secondary-loop + sh:node :variable-primary-variable-secondary-loop + ) + ] ; sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 ; + sh:qualifiedMaxCount 1 ] . # 4.11.1 Boilers # TODO add dedicated boiler pump :boiler a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Boiler" ; sh:or ( sh:class brick:Electric_Boiler sh:class brick:Condensing_Natural_Gas_Boiler sh:node :noncondensing-boiler ) ; - rdfs:label "Boiler" ; # required sh:property [ rdfs:label "Boiler enable" ; @@ -105,65 +107,52 @@ sh:qualifiedMaxCount 1 ; ] . -# TODO topology see comment :noncondensing-boiler a sh:NodeShape, owl:Class, bmotif:HVAC ; - rdfs:label "Noncondensing Boiler" ; - sh:class brick:Noncondensing_Natural_Gas_Boiler ; - # applications, required for primary-only plants and primary-secondary plants with noncondensing boilers - sh:property [ - rdfs:label "Plant HW return temperature" ; - rdfs:comment "For primary-only plants, locate on plant side of the HW minimum flow bypass to allow for correct load calculations." ; - sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Entering_Hot_Water_Temperature_Sensor ] ; - sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 ; - ] . + sh:class brick:Noncondensing_Natural_Gas_Boiler . -# application-specific -# TODO required for boiler plants with headered primary pumps -# TODO add Boiler_Isolation_Valve subclass to brick? +# TODO see comment :isolation-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; rdfs:label "Isolation Valve" ; rdfs:comment "Required for boiler plants with headered primary pumps. Delete otherwise." ; sh:class brick:Isolation_Valve ; - # required, inferred from DO point + # applications, required if present sh:property [ + rdfs:label "Boiler isolation valve" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Valve_Position_Command ] ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Command ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMinCount 1 ; ] ; - # optional, but required for application + # optional sh:property [ - rdfs:label "isolation valve closed end switch" ; + rdfs:label "Boiler isolation valve closed end switch" ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Switch_Status ] ; - sh:qualifiedMinCount 1 ; + sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] ; - # optional, but required for application + # optional sh:property [ - rdfs:label "isolation valve open end switch" ; + rdfs:label "Boiler isolation valve open end switch" ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Switch_Status ] ; - sh:qualifiedMinCount 1 ; + sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] . # 4.11.2 HW Pumps (see components.ttl) # 4.11.3 Primary (only) HW Loop +# NOTE this subsection mixes primary-only points with primary-secondary points. +# Thus, these two subsections have been explicitly separated into Primary (only) HW Loops +# and (Primary) Secondary HW Loops in 4.11.4. -:primary-loop a sh:NodeShape, owl:Class, bmotif:System_Specification ; - sh:or ( - sh:node :constant-primary-loop - sh:node :variable-primary-loop - ) ; - # applications, required for primary-only plants - # TODO see comment +:primary-only-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + sh:class brick:Hot_Water_Loop ; + # applications, TODO see comment sh:property [ rdfs:label "HW supply or return flow" ; - rdfs:comment "the flow meter must be located on the plant side of the HW minimum flow bypass where provided" ; + rdfs:comment "HW flow required for primary-only plants; the flow meter must be located on the plant side of the HW minimum flow bypass where provided." ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:or ( sh:class brick:Leaving_Hot_Water_Flow_Sensor sh:class brick:Entering_Hot_Water_Flow_Sensor ) @@ -171,16 +160,18 @@ sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] ; - # applications, required for primary-only plants + # applications sh:property [ rdfs:label "HW supply temperature" ; + rdfs:comment "HW supply temperature sensor required for primary-only plants." ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Leaving_Hot_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] ; - # optional - # TODO https://github.com/BrickSchema/Brick/issues/532 + # Plant HW return temperature see variable-primary-only-loop + # Loop HW return temperature see variable-primary-only-loop + # optional, TODO https://github.com/BrickSchema/Brick/issues/532 sh:property [ rdfs:label "HW system gauge pressure" ; sh:path brick:hasPoint ; @@ -188,19 +179,20 @@ sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] . + # Decoupler flow see 4.11.4 variable-primary-variable-secondary-loop -:constant-primary-loop a sh:NodeShape, owl:Class, bmotif:System_Specification ; - rdfs:label "Constant Primary HW Loop" ; - sh:class brick:Hot_Water_Loop ; +:constant-primary-only-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Primary Only HW Loop" ; + sh:class :primary-only-loop ; sh:property [ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; sh:qualifiedMinCount 1 ; ] . -:variable-primary-loop a sh:NodeShape, owl:Class, bmotif:System_Specification ; - rdfs:label "Variable Primary HW Loop" ; - sh:class brick:Hot_Water_Loop ; +:variable-primary-only-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Primary Only HW Loop" ; + sh:node :primary-only-loop ; sh:property [ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; @@ -211,6 +203,34 @@ sh:qualifiedValueShape [ sh:node :bypass-valve ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; + ] ; + # applications, TODO see comment which is unclear whether boiler type is a condition for both plant flow types or just the latter + sh:property [ + rdfs:label "Plant HW return temperature" ; + rdfs:comment "HW return temperature is required for primary-only plants and primary-secondary plants with non-condensing boilers. For primary-only plants, locate on plant side of the HW minimum flow bypass to allow for correct load calculations." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Hot_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # NOTE this makes the distinction between the "demand" loop on the coil side and the "supply" loop on the plant side where the bypass is the demarcation between the two loops + sh:property [ + sh:path brick:feeds ; + sh:qualifiedValueShape [ + rdfs:label "HW Demand Loop" ; + sh:class brick:Hot_Water_Loop ; + # optional + sh:property [ + rdfs:label "Loop HW return temperature" ; + rdfs:comment "Optional sensor for monitoring temperature coming back from coils in primary-only plants with a HW bypass. Delete for all other plant configurations." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Hot_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] ; + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; ] . # TODO see comment @@ -218,32 +238,19 @@ rdfs:label "Bypass Valve" ; rdfs:comment "HW bypass valve is required for variable flow primary-only plants with boilers with non-zero minimum flow. Delete otherwise." ; sh:class brick:Bypass_Valve ; - # applications + # applications, required if present sh:property [ + rdfs:label "HW Min flow bypass valve" ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Valve_Position_Command ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMinCount 1 ; - ] ; - # optional - sh:property [ - rdfs:label "Loop HW return temperature" ; - rdfs:comment "Optional sensor for monitoring temperature coming back from coils in primary-only plants with a HW bypass. Delete for all other plant configurations." ; - sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Entering_Hot_Water_Temperature_Sensor ] ; - sh:qualifiedMinCount 0 ; - sh:qualifiedMaxCount 1 ; ] . # 4.11.4 (Primary) Secondary HW Loop -:primary-secondary-loop a sh:NodeShape, owl:class, bmotif:HVAC ; - sh:or ( - sh:node :constant-primary-constant-secondary-loop - sh:node :constant-primary-variable-secondary-loop - sh:node :variable-primary-constant-secondary-loop - sh:node :variable-primary-variable-secondary-loop - ) ; +:primary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + sh:class brick:Hot_Water_Loop ; # applications, optional per 4.11.3 sh:property [ rdfs:label "HW supply temperature" ; @@ -253,6 +260,45 @@ sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] ; + # applications, required per 4.11.3 TODO see comment which is unclear whether boiler type is a condition for both plant flow types or just the latter + sh:property [ + rdfs:label "Plant HW return temperature" ; + rdfs:comment "HW return temperature is required for primary-only plants and primary-secondary plants with non-condensing boilers." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Hot_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # optional, TODO https://github.com/BrickSchema/Brick/issues/532 + sh:property [ + rdfs:label "HW system gauge pressure" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Pressure_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] . + +:constant-primary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Primary HW Loop" ; + sh:node :primary-loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] . + +:variable-primary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Primary HW Loop" ; + sh:node :primary-loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 ; + ] . + +:secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + sh:class brick:Hot_Water_Loop ; + # The following points apply if the plant has a secondary loop. Delete otherwise. “R” in this section should be interpreted as required for secondary loop operation. # required sh:property [ rdfs:label "Secondary HW supply temperature" ; @@ -269,7 +315,7 @@ sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] ; - # applications + # applications, TODO unclear whether optional or required sh:property [ rdfs:label "Secondary HW supply or return flow" ; sh:path brick:hasPoint ; @@ -279,7 +325,11 @@ sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] ; - # TODO applications, for hybrid plants with condensing and non-condensing boilers. + # TODO + # Retain the following sensor for hybrid boiler plants. Delete otherwise. Sensor is to be located in the secondary loop + # downstream of the condensing boiler primary loop decoupler but upstream of the non-condensing boiler + # primary loop decoupler. + # applications sh:property [ rdfs:label "Intermediate HW supply temperature" ; sh:path brick:hasPoint ; @@ -288,108 +338,83 @@ sh:qualifiedMaxCount 1 ; ] . -:constant-primary-constant-secondary-loop a sh:NodeShape, owl:class, bmotif:HVAC ; - rdfs:label "Constant Primary Constant Secondary HW Loop" ; - sh:class brick:Hot_Water_Loop ; +:constant-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Secondary HW Loop" ; + sh:node :secondary-loop ; sh:property [ - rdfs:label "Constant Primary HW Loop" ; sh:path brick:hasPart ; - sh:qualifiedValueShape [ - sh:class brick:Hot_Water_Loop ; - sh:property [ - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; - sh:qualifiedMinCount 1 ; - ] - ] ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 ; - ] ; + ] . + +:variable-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Secondary HW Loop" ; + sh:node :secondary-loop ; sh:property [ - rdfs:label "Constant Secondary HW Loop" ; sh:path brick:hasPart ; - sh:qualifiedValueShape [ - sh:class brick:Hot_Water_Loop ; - sh:property [ - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; - sh:qualifiedMinCount 1 ; - ] - ] ; + sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 ; ] . -:constant-primary-variable-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; - rdfs:label "Constant Primary-Variable Secondary HW Loop" ; +:constant-primary-constant-secondary-loop a sh:NodeShape, owl:class, bmotif:HVAC ; + rdfs:label "Constant Primary-Constant Secondary HW Loop" ; sh:class brick:Hot_Water_Loop ; sh:property [ - rdfs:label "Constant Primary HW Loop" ; sh:path brick:hasPart ; sh:qualifiedValueShape [ - sh:class brick:Hot_Water_Loop ; + sh:node :constant-primary-loop ; sh:property [ - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:path brick:feeds ; + sh:qualifiedValueShape [ sh:node :constant-secondary-loop ] ; sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; ] ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; - ] ; + ] . + +:constant-primary-variable-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Primary-Variable Secondary HW Loop" ; + sh:class brick:Hot_Water_Loop ; sh:property [ - rdfs:label "Variable Secondary HW Loop" ; sh:path brick:hasPart ; sh:qualifiedValueShape [ - sh:class brick:Hot_Water_Loop ; + sh:node :constant-primary-loop ; sh:property [ - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; + sh:path brick:feeds ; + sh:qualifiedValueShape [ sh:node :variable-secondary-loop ] ; sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # 4.11.3 + sh:property [ + rdfs:label "HW supply or return flow" ; + rdfs:comment "Not required nor recommended for constant primary-variable secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ + sh:or ( sh:class brick:Leaving_Hot_Water_Flow_Sensor sh:class brick:Entering_Hot_Water_Flow_Sensor ) + ] ; + sh:qualifiedMaxCount 0 ; ] ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; - ] ; - # applications, not recommended per 4.11.3 - sh:property [ - rdfs:label "HW supply or return flow" ; - rdfs:comment "Not required nor recommended for constant primary-variable secondary plants." ; - sh:path brick:hasPoint ; - sh:qualifiedValueShape [ - sh:or ( sh:class brick:Leaving_Hot_Water_Flow_Sensor sh:class brick:Entering_Hot_Water_Flow_Sensor ) - ] ; - sh:qualifiedMinCount 0 ; - sh:qualifiedMaxCount 0 ; ] . :variable-primary-constant-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; - rdfs:label "Variable Primary Constant Secondary HW Loop" ; + rdfs:label "Variable Primary-Constant Secondary HW Loop" ; sh:class brick:Hot_Water_Loop ; sh:property [ - rdfs:label "Variable Primary HW Loop" ; - sh:path brick:hasPart ; - sh:qualifiedValueShape [ - sh:class brick:Hot_Water_Loop ; - sh:property [ - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; - sh:qualifiedMinCount 1 ; - ] - ] ; - sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 ; - ] ; - sh:property [ - rdfs:label "Constant Secondary HW Loop" ; sh:path brick:hasPart ; sh:qualifiedValueShape [ - sh:class brick:Hot_Water_Loop ; + sh:node :variable-primary-loop ; sh:property [ - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:path brick:feeds ; + sh:qualifiedValueShape [ sh:node :constant-secondary-loop ] ; sh:qualifiedMinCount 1 ; - ] + sh:qualifiedMaxCount 1 ; + ] ; ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; @@ -399,52 +424,36 @@ rdfs:label "Variable Primary-Variable Secondary HW Loop" ; sh:class brick:Hot_Water_Loop ; sh:property [ - rdfs:label "Variable Primary HW Loop" ; sh:path brick:hasPart ; sh:qualifiedValueShape [ - sh:class brick:Hot_Water_Loop ; + sh:node :variable-primary-loop ; + # optional per 4.11.3 sh:property [ - sh:path brick:hasPart ; + rdfs:label "HW supply or return flow" ; + rdfs:comment "Optional for variable primary-variable secondary plants." ; + sh:path brick:hasPoint ; sh:qualifiedValueShape [ - sh:node components:variable-speed-pump ; - # optional, per 4.11.3 - sh:property [ - rdfs:label "Decoupler flow" ; - rdfs:comment "Optional flow meter for primary pump speed control in variable primary-variable secondary plants." ; - sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:node brick:Hot_Water_Flow_Sensor ] ; - sh:qualifiedMinCount 0 ; - sh:qualifiedMaxCount 1 ; - ] ; + sh:or ( sh:class brick:Leaving_Hot_Water_Flow_Sensor sh:class brick:Entering_Hot_Water_Flow_Sensor ) ] ; - sh:qualifiedMinCount 1 ; - ] - ] ; - sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 ; - ] ; - sh:property [ - rdfs:label "Variable Secondary HW Loop" ; - sh:path brick:hasPart ; - sh:qualifiedValueShape [ - sh:class brick:Hot_Water_Loop ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] ; + # optional per 4.11.3 sh:property [ - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; + rdfs:label "Decoupler flow" ; + rdfs:comment "Optional flow meter for primary pump speed control in variable primary-variable secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:node brick:Hot_Water_Flow_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] ; + sh:property [ + sh:path brick:feeds ; + sh:qualifiedValueShape [ sh:node :variable-secondary-loop ] ; sh:qualifiedMinCount 1 ; - ] + sh:qualifiedMaxCount 1 ; + ] ; ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; - ] ; - # applications, optional per 4.11.3 - sh:property [ - rdfs:label "HW supply or return flow" ; - rdfs:comment "Optional for variable primary-variable secondary plants." ; - sh:path brick:hasPoint ; - sh:qualifiedValueShape [ - sh:or ( sh:class brick:Leaving_Hot_Water_Flow_Sensor sh:class brick:Entering_Hot_Water_Flow_Sensor ) - ] ; - sh:qualifiedMinCount 0 ; - sh:qualifiedMaxCount 1 ; ] . From 5269e603c06b5e20df9f9618723f258a89fbd2c4 Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Tue, 5 Sep 2023 20:13:17 -0600 Subject: [PATCH 06/22] 4.11 more cleanup --- .../guideline36/4.11-hot-water-plant.ttl | 57 +++++++------------ 1 file changed, 22 insertions(+), 35 deletions(-) diff --git a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl index f8f9290ca..ee4544b7b 100644 --- a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl @@ -64,13 +64,13 @@ sh:or ( sh:class brick:Electric_Boiler sh:class brick:Condensing_Natural_Gas_Boiler - sh:node :noncondensing-boiler + sh:class brick:Noncondensing_Natural_Gas_Boiler ) ; # required sh:property [ rdfs:label "Boiler enable" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Enable_Status ] ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Command ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] ; @@ -91,7 +91,6 @@ sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] ; - # applications sh:property [ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:node :isolation-valve ] ; @@ -102,14 +101,11 @@ sh:property [ rdfs:label "Boiler natural gas flow" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Natural_Gas_Flow_Sensor ] ; + sh:qualifiedValueShape [ sh:class brick:Valve_Status ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] . -:noncondensing-boiler a sh:NodeShape, owl:Class, bmotif:HVAC ; - sh:class brick:Noncondensing_Natural_Gas_Boiler . - # TODO see comment :isolation-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; rdfs:label "Isolation Valve" ; @@ -123,6 +119,7 @@ sh:qualifiedMinCount 1 ; sh:qualifiedMinCount 1 ; ] ; + # Retain the following two points for optional valve end switch status feedback. # optional sh:property [ rdfs:label "Boiler isolation valve closed end switch" ; @@ -144,8 +141,8 @@ # 4.11.3 Primary (only) HW Loop # NOTE this subsection mixes primary-only points with primary-secondary points. -# Thus, these two subsections have been explicitly separated into Primary (only) HW Loops -# and (Primary) Secondary HW Loops in 4.11.4. +# Thus, these two subsections have been explicitly separated into +# Primary (only) HW Loops and (Primary) Secondary HW Loops in 4.11.4. :primary-only-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; sh:class brick:Hot_Water_Loop ; @@ -160,6 +157,7 @@ sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] ; + # HW Min flow bypass valve see variable-primary-only-loop # applications sh:property [ rdfs:label "HW supply temperature" ; @@ -182,7 +180,7 @@ # Decoupler flow see 4.11.4 variable-primary-variable-secondary-loop :constant-primary-only-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; - rdfs:label "Constant Primary Only HW Loop" ; + rdfs:label "Constant Primary-Only HW Loop" ; sh:class :primary-only-loop ; sh:property [ sh:path brick:hasPart ; @@ -191,20 +189,22 @@ ] . :variable-primary-only-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; - rdfs:label "Variable Primary Only HW Loop" ; + rdfs:label "Variable Primary-Only HW Loop" ; sh:node :primary-only-loop ; sh:property [ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; sh:qualifiedMinCount 1 ; ] ; + # applications, TODO see comment sh:property [ + rdfs:comment "HW bypass valve is required for variable flow primary-only plants with boilers with non-zero minimum flow. Delete otherwise." ; sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node :bypass-valve ] ; + sh:qualifiedValueShape [ sh:node components:min-flow-bypass-valve ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] ; - # applications, TODO see comment which is unclear whether boiler type is a condition for both plant flow types or just the latter + # applications, TODO see comment which implies it's required because a min-flow-bypass is required for variable-primary-only-loop sh:property [ rdfs:label "Plant HW return temperature" ; rdfs:comment "HW return temperature is required for primary-only plants and primary-secondary plants with non-condensing boilers. For primary-only plants, locate on plant side of the HW minimum flow bypass to allow for correct load calculations." ; @@ -233,22 +233,9 @@ sh:qualifiedMaxCount 1 ; ] . -# TODO see comment -:bypass-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; - rdfs:label "Bypass Valve" ; - rdfs:comment "HW bypass valve is required for variable flow primary-only plants with boilers with non-zero minimum flow. Delete otherwise." ; - sh:class brick:Bypass_Valve ; - # applications, required if present - sh:property [ - rdfs:label "HW Min flow bypass valve" ; - sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Valve_Position_Command ] ; - sh:qualifiedMinCount 1 ; - sh:qualifiedMinCount 1 ; - ] . - # 4.11.4 (Primary) Secondary HW Loop +# common points from 4.11.3 :primary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; sh:class brick:Hot_Water_Loop ; # applications, optional per 4.11.3 @@ -260,7 +247,7 @@ sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] ; - # applications, required per 4.11.3 TODO see comment which is unclear whether boiler type is a condition for both plant flow types or just the latter + # applications, required per 4.11.3 TODO boiler type sh:property [ rdfs:label "Plant HW return temperature" ; rdfs:comment "HW return temperature is required for primary-only plants and primary-secondary plants with non-condensing boilers." ; @@ -315,7 +302,7 @@ sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] ; - # applications, TODO unclear whether optional or required + # applications, TODO unclear what the application is sh:property [ rdfs:label "Secondary HW supply or return flow" ; sh:path brick:hasPoint ; @@ -427,6 +414,12 @@ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:node :variable-primary-loop ; + sh:property [ + sh:path brick:feeds ; + sh:qualifiedValueShape [ sh:node :variable-secondary-loop ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; # optional per 4.11.3 sh:property [ rdfs:label "HW supply or return flow" ; @@ -447,12 +440,6 @@ sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] ; - sh:property [ - sh:path brick:feeds ; - sh:qualifiedValueShape [ sh:node :variable-secondary-loop ] ; - sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 ; - ] ; ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; From ee7f624ef4cce6d487e98cb8a4d944e04b30b849 Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Wed, 13 Sep 2023 13:06:17 -0600 Subject: [PATCH 07/22] add 4.10 chilled water plant shapes --- .../guideline36/4.10-chilled-water-plant.ttl | 1221 +++++++++++++++++ 1 file changed, 1221 insertions(+) create mode 100644 libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl diff --git a/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl new file mode 100644 index 000000000..7cd1d5131 --- /dev/null +++ b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl @@ -0,0 +1,1221 @@ +@prefix sh: . +@prefix brick: . +@prefix rdfs: . +@prefix owl: . +@prefix bmotif: . +@prefix components: . +@prefix : . + +# 4.10 Chilled Water Plant + +:chilled-water-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; + sh:or ( + sh:node :air-cooled-primary-only-plant + sh:node :wtr-cooled-primary-only-plant + sh:node :air-cooled-primary-secondary-plant + sh:node :wtr-cooled-primary-secondary-plant + ) . + +:air-cooled-primary-only-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; + rdfs:label "Air-Cooled Primary-Only CHW Plant" ; + sh:class brick:Chilled_Water_System ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:node :air-cooled-chiller ; + # Primary-only plant sequences use the demand limit point to promote stable staging. Flowrates can change rapidly + # through operating chiller(s) when an additional chiller is brought online; limiting output can help prevent a low + # supply temperature trip condition. This is not an issue for primary/secondary plants, but the demand limit point may + # be retained for custom electric utility driven load shed logic not covered by this guideline. Note that load shed logic is + # covered in Thermal Zone Guideline 36 sequences and the reduced demand generated by zones ultimately serves to + # reduce plant output. + # applications, per 4.10.1 + sh:property [ + rdfs:label "CH Demand Limit" ; + rdfs:comment "Required for primary-only CHW plants, optional for other plant types." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Cooling_Demand_Setpoint ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] + ] ; + sh:qualifiedMinCount 1 + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:or ( + sh:node :constant-primary-only-loop + sh:node :variable-primary-only-loop + ) + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # applications, TODO see comment + sh:property [ + rdfs:label "Plant CHW return temperature" ; + rdfs:comment "CHW return temperature required for primary-only plants; locate on plant side of the CHW minimum flow bypass to allow for correct load calculations." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . + +:wtr-cooled-primary-only-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; + rdfs:label "Water-Cooled Primary-Only CHW Plant" ; + sh:class brick:Chilled_Water_System ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:node :wtr-cooled-chiller ; + # Primary-only plant sequences use the demand limit point to promote stable staging. Flowrates can change rapidly + # through operating chiller(s) when an additional chiller is brought online; limiting output can help prevent a low + # supply temperature trip condition. This is not an issue for primary/secondary plants, but the demand limit point may + # be retained for custom electric utility driven load shed logic not covered by this guideline. Note that load shed logic is + # covered in Thermal Zone Guideline 36 sequences and the reduced demand generated by zones ultimately serves to + # reduce plant output. + # applications, per 4.10.1 + sh:property [ + rdfs:label "CH Demand Limit" ; + rdfs:comment "Required for primary-only CHW plants, optional for other plant types." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Cooling_Demand_Setpoint ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] + ] ; + sh:qualifiedMinCount 1 + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:or ( + sh:node :constant-primary-only-loop + sh:node :variable-primary-only-loop + ) + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # applications, TODO see comment + sh:property [ + rdfs:label "Plant CHW return temperature" ; + rdfs:comment "CHW return temperature required for primary-only plants; locate on plant side of the CHW minimum flow bypass to allow for correct load calculations." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + sh:path brick:isFedBy ; + sh:qualifiedValueShape [ sh:node :condenser-water-plant ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . + +:air-cooled-primary-secondary-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; + rdfs:label "Air-Cooled Primary-Secondary CHW Plant" ; + sh:class brick:Chilled_Water_System ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:node :air-cooled-chiller ; + # Primary-only plant sequences use the demand limit point to promote stable staging. Flowrates can change rapidly + # through operating chiller(s) when an additional chiller is brought online; limiting output can help prevent a low + # supply temperature trip condition. This is not an issue for primary/secondary plants, but the demand limit point may + # be retained for custom electric utility driven load shed logic not covered by this guideline. Note that load shed logic is + # covered in Thermal Zone Guideline 36 sequences and the reduced demand generated by zones ultimately serves to + # reduce plant output. + # applications, per 4.10.1 + sh:property [ + rdfs:label "CH Demand Limit" ; + rdfs:comment "Required for primary-only CHW plants, optional for other plant types." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Cooling_Demand_Setpoint ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + ] ; + sh:qualifiedMinCount 1 + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:or ( + sh:node :constant-primary-constant-secondary-loop + sh:node :constant-primary-variable-secondary-loop + sh:node :variable-primary-constant-secondary-loop + sh:node :variable-primary-variable-secondary-loop + ) + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # applications + sh:property [ + rdfs:label "Plant CHW return temperature" ; + rdfs:comment "Optional for primary-secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + +:wtr-cooled-primary-secondary-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; + rdfs:label "Water-Cooled Primary-Secondary CHW Plant" ; + sh:node :primary-secondary-plant ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:node :wtr-cooled-chiller ; + # Primary-only plant sequences use the demand limit point to promote stable staging. Flowrates can change rapidly + # through operating chiller(s) when an additional chiller is brought online; limiting output can help prevent a low + # supply temperature trip condition. This is not an issue for primary/secondary plants, but the demand limit point may + # be retained for custom electric utility driven load shed logic not covered by this guideline. Note that load shed logic is + # covered in Thermal Zone Guideline 36 sequences and the reduced demand generated by zones ultimately serves to + # reduce plant output. + # applications, per 4.10.1 + sh:property [ + rdfs:label "CH Demand Limit" ; + rdfs:comment "Required for primary-only CHW plants, optional for other plant types." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Cooling_Demand_Setpoint ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + ] ; + sh:qualifiedMinCount 1 + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:or ( + sh:node :constant-primary-constant-secondary-loop + sh:node :constant-primary-variable-secondary-loop + sh:node :variable-primary-constant-secondary-loop + sh:node :variable-primary-variable-secondary-loop + ) + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # applications + sh:property [ + rdfs:label "Plant CHW return temperature" ; + rdfs:comment "Optional for primary-secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + sh:path brick:isFedBy ; + sh:qualifiedValueShape [ sh:node :condenser-water-plant ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . + +:condenser-water-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; + rdfs:label "Condenser Water Plant" ; + sh:class brick:Condenser_Water_System ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :cooling-tower ] ; + sh:qualifiedMinCount 1 + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :condenser-water-loop ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + sh:path brick:feeds ; + sh:qualifiedValueShape [ sh:node :wse-loop ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + +# 4.10.1 Chillers + +:chiller a sh:NodeShape, owl:Class, bmotif:HVAC ; + sh:class brick:Chiller ; + # required + sh:property [ + rdfs:label "CH on/off" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # required + sh:property [ + rdfs:label "Chiller status" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Status ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # required + sh:property [ + rdfs:label "CHWST Setpoint Reset" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Reset_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # required + sh:property [ + rdfs:label "Chiller Fault Code" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Last_Fault_Code_Status ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # applications + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :ch-chw-isolation-valve ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # applications + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :ch-chw-bypass-valve ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # see wtr-cooled-chiller for... + # CH CW isolation valve + # CH CW isolation valve closed end switch + # CH CW isolation valve open end switch + # CH CW isolation valve position feedback + # see primary-only-plant and primary-secondary-plant for... + # CH Demand Limit + # applications + sh:property [ + rdfs:label "Head pressure control signal from CH" ; + rdfs:comment "Head pressure control output required only for chillers that require head pressure control. This is an output from the chiller controller head pressure control loop." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Pressure_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # TODO + # CH CHW supply temperature is required for (1) variable primary-variable secondary plants using primary and + # secondary supply temperatures to reset primary pump speed that do not have a CHWST sensor in the primary + # loop, (2) head pressure control for chillers that do not have a head pressure control signal. Optional otherwise. + # applications + sh:property [ + rdfs:label "CH CHW supply temperature" ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # see wtr-cooled-chiller for... + # CH CW return temperature + # optional + sh:property [ + rdfs:label "CH CHW return temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # see wtr-cooled-chiller for... + # CH CW supply temperature + # optional + sh:property [ + rdfs:label "CH evaporator buddle CHW differential pressure" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Chilled_Water_Differential_Pressure_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # see wtr-cooled-chiller for... + # CH condenser buddle CW differential pressure + # optional + sh:property [ + rdfs:label "CH refrigerant evaporator temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # optional + sh:property [ + rdfs:label "CH refrigerant condenser temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # optional + sh:property [ + rdfs:label "Chiller local/auto switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Manual_Auto_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + +:air-cooled-chiller a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Air-Cooled Chiller" ; + sh:node :chiller . + +:wtr-cooled-chiller a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Water-Cooled Chiller" ; + sh:node :chiller ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :ch-cw-isolation-valve ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # applications, TODO see comment + sh:property [ + rdfs:label "CH CW return temperature" ; + rdfs:comment "CH CW return temperature is required for head pressure control for chillers that do not have a head pressure control signal. Optional otherwise." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Condenser_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # optional + sh:property [ + rdfs:label "CH CW supply temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Condenser_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # optional + sh:property [ + rdfs:label "CH condenser buddle CW differential pressure" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Differential_Pressure_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + +# TODO see comment, could separate first point based on flow type +# A modulating valve is recommended on primary-only variable flow systems to allow for slow changes in flow during +# chiller staging. Sometimes electric valve timing may be sufficiently slow that 2-position valves can provide stable +# performance. Two-position valves are acceptable on primary-secondary systems. +:ch-chw-isolation-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Chiller CHW Isolation Valve" ; + rdfs:comment "Required for parallel or series piped chillers with headered primary CHW pumps. Delete otherwise." ; + sh:class brick:Isolation_Valve ; + # applications + sh:property [ + rdfs:label "CH CHW isolation valve" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ + sh:or ( + sh:class brick:Valve_Position_Command + sh:class brick:On_Off_Command + ) + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMinCount 1 + ] ; + # Retain the following two points for optional valve end switch status feedback. + # optional + sh:property [ + rdfs:label "CH CHW isolation valve closed end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # optional + sh:property [ + rdfs:label "CH CHW isolation valve open end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Off_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # Retain the following points for optional analog valve position feedback. + # optional + sh:property [ + rdfs:label "CH CHW isolation valve position feedback" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Valve_Position_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + +# TODO see comment +:ch-chw-bypass-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Chiller CHW Bypass Valve" ; + rdfs:comment "Required for series piped chillers and primary-only parallel CHW plants with waterside economizers. Delete otherwise." ; + sh:class brick:Bypass_Valve ; + # applications + sh:property [ + rdfs:label "CH CHW bypass valve" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMinCount 1 + ] . + +# TODO +# Required for plants with headered condenser water pumps. Delete otherwise. CW isolation valves may be two-position +# for chillers that do not require head pressure control or for plants with variable speed condenser +# pumps but no waterside economizer. +:ch-cw-isolation-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Chiller CW Isolation Valve" ; + sh:class brick:Condenser_Water_Isolation_Valve ; + # applications, required if present + sh:property [ + rdfs:label "CH CW isolation valve" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ + sh:or ( + sh:class brick:Valve_Position_Command + sh:class brick:On_Off_Command + ) + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # Retain the following two points for optional valve end switch status feedback. + # optional + sh:property [ + rdfs:label "CH CW isolation valve closed end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # optional + sh:property [ + rdfs:label "CH CW isolation valve open end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Off_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # Retain the following points for optional analog valve position feedback. + # optional + sh:property [ + rdfs:label "CH CW isolation valve position feedback" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Valve_Position_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + +# 4.10.2 Chilled Water Pumps (see components.ttl) + +# Provide one speed point for each group of variable speed CHW pumps controlled to the same speed (e.g., all +# primary pumps or all secondary pumps, if applicable). Speed point not required for constant speed pumps. + +# TODO currently optional in components... +# Provide a CHW differential pressure sensor hardwired to the pump controller for any pump or set of pumps +# serving multiple control valves. Additional pressure sensors may be provided with feedback sent over the +# network to the pump controller. + +# 4.10.3 Primary (only) CHW Loop + +:primary-only-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + sh:class brick:Chilled_Water_Loop ; + # applications + sh:property [ + rdfs:label "CHW supply or return flow" ; + rdfs:comment "CHW flow required for primary-only plants; the flow meter must be located on the plant side of the CHW minimum flow bypass where provided." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ + sh:or ( + sh:class brick:Leaving_Chilled_Water_Flow_Sensor + sh:class brick:Entering_Chilled_Water_Flow_Sensor + ) + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # see variable-primary-only-loop for... + # CHW Min Flow Bypass Valve + # applications + sh:property [ + rdfs:label "CHW supply temperature" ; + rdfs:comment "CHW supply temperature sensor required for primary-only plants." ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # see variable-primary-only-loop for... + # Plant CHW return temperature + # Loop CHW return temperature + # optional https://github.com/BrickSchema/Brick/issues/532 + sh:property [ + rdfs:label "CHW system gauge pressure" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Pressure_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + # see 4.10.4 variable-primary-variable-secondary-loop for... + # Decoupler flow + +:constant-primary-only-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Primary-Only CHW Loop" ; + sh:node :primary-only-loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 + ] . + +:variable-primary-only-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Primary-Only CHW Loop" ; + sh:node :primary-only-loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; + sh:qualifiedMinCount 1 + ] ; + # applications + sh:property [ + rdfs:comment "CHW bypass valve is required for variable flow primary-only plants. Delete otherwise." ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:min-flow-bypass-valve ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMinCount 1 + ] ; + # applications + sh:property [ + rdfs:label "Plant CHW return temperature" ; + rdfs:comment "CHW return temperature required for primary-only plants; locate on plant side of the CHW minimum flow bypass to allow for correct load calculations." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # NOTE this makes the distinction between the "demand" loop on the coil side and the "supply" loop on the plant side where the bypass is the demarcation between the two loops + sh:property [ + sh:path brick:feeds ; + sh:qualifiedValueShape [ + rdfs:label "CHW Demand Loop" ; + sh:class brick:Chilled_Water_Loop ; + # optional, TODO see comment + sh:property [ + rdfs:label "Loop CHW return temperature" ; + rdfs:comment "Optional sensor for monitoring temperature coming back from coils in primary-only plants with a CHW bypass and no waterside economizer. Located on the load side of minimum flow bypass. Delete for all other plant configurations." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] . + +# 4.10.4 (Primary) Secondary CHW Loop + +:primary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + sh:class brick:Chilled_Water_Loop ; + # applications, optional per 4.10.3 + sh:property [ + rdfs:label "CHW supply temperature" ; + rdfs:comment "Optional for primary-secondary Plants." ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # applications, optional per 4.11.3 + sh:property [ + rdfs:label "Plant CHW return temperature" ; + rdfs:comment "Optional for primary-secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + +:constant-primary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Primary CHW Loop" ; + sh:node :primary-loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 + ] . + +:variable-primary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Primary CHW Loop" ; + sh:node :primary-loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; + sh:qualifiedMinCount 1 + ] . + +:secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + sh:class brick:Chilled_Water_Loop ; + # required + sh:property [ + rdfs:label "Secondary CHW supply temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # applications, TODO see comment + sh:property [ + rdfs:label "Secondary CHW return temperature" ; + rdfs:comment "Retain this sensor for primary-secondary plants without waterside economizers. Delete otherwise." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # required + sh:property [ + rdfs:label "Secondary CHW supply or return flow" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ + sh:or ( + sh:class brick:Leaving_Chilled_Water_Flow_Sensor + sh:class brick:Entering_Chilled_Water_Flow_Sensor + ) + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . + +:constant-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Secondary CHW Loop" ; + sh:node :secondary-loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedMinCount 1 + ] . + +:variable-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Secondary CHW Loop" ; + sh:node :secondary-loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; + sh:qualifiedMinCount 1 + ] . + +:constant-primary-constant-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Primary-Constant Secondary CHW Loop" ; + sh:class brick:Chilled_Water_Loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:node :constant-primary-loop ; + sh:property [ + sh:path brick:feeds ; + sh:qualifiedValueShape [ sh:node :constant-secondary-loop ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] . + +:constant-primary-variable-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Primary-Variable Secondary CHW Loop" ; + sh:class brick:Chilled_Water_Loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:node :constant-primary-loop ; + # 4.10.3 + sh:property [ + rdfs:label "CHW supply or return flow" ; + rdfs:comment "Not required nor recommended for constant primary-variable secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ + sh:or ( + sh:class brick:Leaving_Chilled_Water_Flow_Sensor + sh:class brick:Entering_Chilled_Water_Flow_Sensor + ) + ] ; + sh:qualifiedMaxCount 0 + ] ; + sh:property [ + sh:path brick:feeds ; + sh:qualifiedValueShape [ sh:node :variable-secondary-loop ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . + +:variable-primary-constant-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Primary-Constant Secondary CHW Loop" ; + sh:class brick:Chilled_Water_Loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:node :variable-primary-loop ; + sh:property [ + sh:path brick:feeds ; + sh:qualifiedValueShape [ sh:node :constant-secondary-loop ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . + +:variable-primary-variable-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Primary-Variable Secondary CHW Loop" ; + sh:class brick:Chilled_Water_Loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:node :variable-primary-loop ; + # optional per 4.10.3 + sh:property [ + rdfs:label "CHW supply or return flow" ; + rdfs:comment "Optional for variable primary-variable secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ + sh:or ( + sh:class brick:Leaving_Chilled_Water_Flow_Sensor + sh:class brick:Entering_Chilled_Water_Flow_Sensor + ) + ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # optional per 4.10.3 + sh:property [ + rdfs:label "Decoupler flow" ; + rdfs:comment "Optional flow meter for primary pump speed control in variable primary-variable secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:node brick:Chilled_Water_Flow_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + sh:path brick:feeds ; + sh:qualifiedValueShape [ sh:node :variable-secondary-loop ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . + +# 4.10.5 Condenser Water Pumps (see components.ttl) +# The following points apply for water-cooled plants. Delete otherwise. + +# 4.10.6 Cooling Towers +# The following points apply for water-cooled plants. Delete otherwise. + +:cooling-tower a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Cooling Tower" ; + sh:class brick:Cooling_Tower ; + # see variable-speed-fan for... + # Start CT + # CT Status + # CT Speed + # CT Alarm + # NOTE VFD fans appear to be required implicitly by point requirements + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :variable-speed-fan ] ; + sh:qualifiedMinCount 1 + ] ; + # required + sh:property [ + rdfs:label "Tower basin level" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Collection_Basin_Water_Level_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # Keep the following inlet and outlet isolation valve points if cooling towers have actuated isolation valves. They + # may have a valve only on the supply with an oversized equalizer used to avoid valves on the outlet, or they may + # have valves at both inlet and outlet. Delete otherwise. + sh:or ( + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :ct-outlet-isolation-valve ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:and ( + sh:node :ct-inlet-isolation-valve + sh:node :ct-outlet-isolation-valve + ) + ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] + ) ; + # Keep the following tower bypass, basin heater, and basin temperature points for freezing climates where basins + # will not be drained during winter months due to continued plant operation. Delete otherwise. + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :ct-bypass-valve ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :ct-basin-heater ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # Keep the following piping heat trace points for freezing climates with outdoor piping. Delete otherwise. + # applications + sh:property [ + rdfs:label "Piping heat trace enable" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Heating_Enable_Command ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # applications + sh:property [ + rdfs:label "Piping heat trace status" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Enable_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + +:variable-speed-fan-motor a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Speed Fan Motor" ; + sh:class brick:Variable_Frequency_Drive ; + # required + sh:property [ + rdfs:label "Fan Start" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # required + sh:property [ + rdfs:label "Fan Status" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Status ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # required + sh:property [ + rdfs:label "Fan Speed" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Frequency_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # optional + sh:property [ + rdfs:label "Fan Alarm" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Fault_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + +:variable-speed-fan a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Variable Speed Fan" ; + sh:class brick:Cooling_Tower_Fan ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :variable-speed-fan-motor ] ; + sh:qualifiedMinCount 1 + ] . + +:ct-inlet-isolation-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Cooling Tower Inlet Isolation Valve" ; + sh:class brick:Isolation_Valve ; + # applications + sh:property [ + rdfs:label "CT inlet isolation valve" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Valve_Position_Command ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # Retain the following two points for optional valve end switch status feedback. Delete otherwise. + # optional + sh:property [ + rdfs:label "CT inlet isolation valve closed end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # optional + sh:property [ + rdfs:label "CT inlet isolation valve open end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Off_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + +:ct-outlet-isolation-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Cooling Tower Outlet Isolation Valve" ; + sh:class brick:Isolation_Valve ; + # applications + sh:property [ + rdfs:label "CT outlet isolation valve" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Valve_Position_Command ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # Retain the following two points for optional valve end switch status feedback. Delete otherwise. + # optional + sh:property [ + rdfs:label "CT outlet isolation valve closed end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # optional + sh:property [ + rdfs:label "CT outlet isolation valve open end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Off_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + +:ct-bypass-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Cooling Tower Bypass Valve" ; + sh:class brick:Bypass_Valve ; + # applications + sh:property [ + rdfs:label "CT bypass valve to cold water basin" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . + +:ct-basin-heater a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Cooling Tower Basin Heater" ; + sh:class brick:Collection_Basin_Water_Heater ; + # applications + sh:property [ + rdfs:label "CT basin heater enable" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Heating_Enable_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # applications + sh:property [ + rdfs:label "CT basin heater status" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Enable_Status ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # applications + sh:property [ + rdfs:label "CT basin temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Collection_Basin_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . + +# 4.10.7 Condenser Water Loop +# The following points apply for water-cooled plants. Delete otherwise. + +:condenser-water-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Condenser Water Loop" ; + sh:class brick:Chilled_Water_Loop ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:or ( + sh:node components:constant-speed-pump + sh:node components:variable-speed-pump + ) + ] ; + sh:qualifiedMinCount 1 + ] ; + # required, TODO see comment + sh:property [ + rdfs:label "Common CW supply temperature from towers" ; + rdfs:comment "If controlling cooling towers to maintain CWST (see 5.20.12.2), CWST sensor must be hardwired to the same controller as the cooling towers." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Condenser_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # required, TODO see comment + sh:property [ + rdfs:label "Common CW return temperature to towers" ; + rdfs:comment "If controlling cooling towers to maintain CWRT (as opposed to CWST, see 5.20.12.2), CWRT sensor must be hardwired to the same controller as the cooling towers." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Condenser_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:class brick:Makeup_Water_Valve ; + # required + sh:property [ + rdfs:label "Makeup water valve" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . + +# 4.10.8 Waterside Economizer +# Retain the following points if the plant has a waterside economizer. Delete otherwise. “R” in this section should +# be interpreted as required for waterside economizer operation. + +:chilled-water-loop-without-wse a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Condenser Water Loop without Waterside Economizer" ; + sh:node :chilled-water-loop . + +:wse-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Waterside Economizer Loop" ; + sh:class brick:Chilled_Water_Loop ; + sh:property [ + rdfs:label "Waterside Economizer" ; + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:class brick:Heat_Exchanger ; + sh:property [ + sh:path brick:isFedBy ; + sh:qualifiedValueShape [ sh:node :cooling-tower ] ; + sh:qualifiedMinCount 1 + ] + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :wse-isolation-valve ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # required + sh:property [ + rdfs:label "WSE CW return temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Condenser_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # required, TODO check topology, does this point belong on a demand side loop? + sh:property [ + rdfs:label "CHW return temperature before WSE" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # applications, NOTE is this implicitly required? + sh:property [ + rdfs:label "CHW return temperature after WSE" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :wse-bypass-valve ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ + sh:or ( + sh:node components:constant-speed-pump + sh:node components:variable-speed-pump + ) + ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # required, TODO implicitly? + sh:property [ + rdfs:label "WSE entering CHW temperature" ; + rdfs:comment "Note: WSE entering CHW temperatures is located in the pipe entering the HX, not the CHWR main upstream of the WSE." ; + sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . + +:wse-isolation-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Waterside Economizer Isolation Valve" ; + sh:class brick:Condenser_Water_Isolation_Valve ; + # required + sh:property [ + rdfs:label "WSE HX CW isolation valve" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # Retain the following two points for optional valve end switch status feedback. + # optional + sh:property [ + rdfs:label "WSE HX CW isolation valve closed end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # optional + sh:property [ + rdfs:label "WSE HX CW isolation valve open end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Off_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] . + +:wse-bypass-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "WSE Bypass Valve" ; + sh:class brick:Bypass_Valve ; + # Retain the following two points if CHW flowrate through the heat exchanger is controlled by a modulating + # bypass valve. Delete otherwise. + # applications + sh:property [ + rdfs:label "WSE CHW bypass valve" ; + sh:qualifiedValueShape [ sh:node brick:Valve_Position_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # applications + sh:property [ + rdfs:label "WSE CHW differential pressure" ; + sh:qualifiedValueShape [ sh:node brick:Differential_Pressure_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . From f32842452a62aea667ad6fa64b4bd9d518a22e5e Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Wed, 13 Sep 2023 13:08:14 -0600 Subject: [PATCH 08/22] update components shapes --- libraries/ashrae/guideline36/components.ttl | 42 +++++++++++++-------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/libraries/ashrae/guideline36/components.ttl b/libraries/ashrae/guideline36/components.ttl index 152d2f1b3..5b58b22d2 100644 --- a/libraries/ashrae/guideline36/components.ttl +++ b/libraries/ashrae/guideline36/components.ttl @@ -76,7 +76,7 @@ rdfs:label "Filter" ; sh:class brick:Filter ; # optional for all - sh:property [ + sh:property [ rdfs:label "Filter pressure drop" ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Differential_Pressure_Sensor ] ; @@ -161,7 +161,7 @@ sh:qualifiedValueShape [ sh:class brick:Open_Close_Status ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; - ] ; + ] ; # application-specific for all sh:property [ rdfs:label "Zone CO2 level" ; @@ -174,8 +174,8 @@ # Water Side # Pumps +# component of 4.10.2, 4.10.5, 4.11.2 -# component of 4.11.2 :constant-speed-pump-motor a sh:NodeShape, owl:Class, bmotif:HVAC ; rdfs:label "Constant Speed Pump Motor" ; sh:class brick:Motor ; @@ -191,7 +191,7 @@ sh:property [ rdfs:label "Pump Status" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Pump_Status ] ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Status ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] . @@ -211,22 +211,31 @@ sh:property [ rdfs:label "Pump Status" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Pump_Status ] ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Status ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] ; # application-specific, required for VFDs sh:property [ rdfs:label "Pump Speed" ; + rdfs:comment "Provide one speed point for each group of variable speed pumps controlled to the same speed (e.g. all primary pumps or all secondary pumps, if applicable). Speed point not required for constant speed pumps." ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Frequency_Command ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; + ] ; + # optional + sh:property [ + rdfs:label "Alarm" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Fault_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; ] . :constant-speed-pump a sh:NodeShape, owl:Class, bmotif:HVAC ; rdfs:label "Constant Speed Pump" ; - sh:class brick:Hot_Water_Pump ; + sh:class brick:Pump ; sh:property [ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:node :constant-speed-pump-motor ] ; @@ -245,9 +254,9 @@ :variable-speed-pump a sh:NodeShape, owl:Class, bmotif:HVAC ; rdfs:label "Variable Speed Pump" ; - sh:class brick:Hot_Water_Pump ; + sh:class brick:Pump ; # TODO hasPart might not be the correct relationship for a pump with a VFD, which is a separate piece of equipment - sh:property [ + sh:property [ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:node :variable-speed-pump-motor ] ; sh:qualifiedMinCount 1 ; @@ -261,13 +270,16 @@ sh:qualifiedValueShape [ sh:class brick:Differential_Pressure_Sensor ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; - ] ; - # optional + ] . + +# component of 4.10.3 and 4.11.3 +:min-flow-bypass-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; + sh:class brick:Bypass_Valve ; + # applications, required if present sh:property [ - rdfs:label "Alarm" ; + rdfs:label "Min Flow Bypass Valve" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Fault_Status ] ; - sh:qualifiedMinCount 0 ; - sh:qualifiedMaxCount 1 ; + sh:qualifiedValueShape [ sh:class brick:Valve_Position_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMinCount 1 ; ] . - From 4a1ead1690656730e31a3875bbcfdb07ccdec31c Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Wed, 27 Sep 2023 20:36:31 -0600 Subject: [PATCH 09/22] Update libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl --- libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl index 7cd1d5131..eda527265 100644 --- a/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl +++ b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl @@ -1185,7 +1185,7 @@ # Retain the following two points for optional valve end switch status feedback. # optional sh:property [ - rdfs:label "WSE HX CW isolation valve closed end switch" ; + rdfs:label "WSE HX CW isolation valve closed end switch" ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:On_Status ] ; sh:qualifiedMinCount 0 ; From b7a1149b4826d0891c1dce67e32b50d4d9ab11af Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Tue, 3 Oct 2023 14:25:17 -0600 Subject: [PATCH 10/22] address review comments --- .../guideline36/4.10-chilled-water-plant.ttl | 44 ++++++++++++++++++- libraries/ashrae/guideline36/components.ttl | 2 +- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl index eda527265..53efffb72 100644 --- a/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl +++ b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl @@ -232,7 +232,39 @@ ] ; sh:property [ sh:path brick:feeds ; - sh:qualifiedValueShape [ sh:node :wse-loop ] ; + sh:qualifiedValueShape [ + sh:node :wse-loop ; + # 4.10.9 + # Temperature and relative humidity sensors are necessary for calculating wet bulb temperature for waterside + # economizer sequences. Sensors are optional for plants without waterside economizers. + sh:property [ + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Outside_Air_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Outside_Air_Humidity_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] + ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # 4.10.9 + # Temperature and relative humidity sensors are necessary for calculating wet bulb temperature for waterside + # economizer sequences. Sensors are optional for plants without waterside economizers. + sh:property [ + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Outside_Air_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Outside_Air_Humidity_Sensor ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ] . @@ -359,6 +391,14 @@ sh:qualifiedValueShape [ sh:class brick:Manual_Auto_Status ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 + ] ; + # optional per 4.10.9 + sh:property [ + rdfs:label "Emergency Chiller Off Switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Off_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ] . :air-cooled-chiller a sh:NodeShape, owl:Class, bmotif:HVAC ; @@ -919,7 +959,7 @@ sh:property [ rdfs:label "Fan Speed" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Frequency_Command ] ; + sh:qualifiedValueShape [ sh:class brick:Speed_Command ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ] ; diff --git a/libraries/ashrae/guideline36/components.ttl b/libraries/ashrae/guideline36/components.ttl index 5b58b22d2..f1c72c9fa 100644 --- a/libraries/ashrae/guideline36/components.ttl +++ b/libraries/ashrae/guideline36/components.ttl @@ -220,7 +220,7 @@ rdfs:label "Pump Speed" ; rdfs:comment "Provide one speed point for each group of variable speed pumps controlled to the same speed (e.g. all primary pumps or all secondary pumps, if applicable). Speed point not required for constant speed pumps." ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Frequency_Command ] ; + sh:qualifiedValueShape [ sh:class brick:Speed_Command ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ; ] ; From 594b7ef7f976b52f8569e901bdfbf861c7267d78 Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Wed, 25 Oct 2023 14:15:44 -0600 Subject: [PATCH 11/22] few fixes per @gtfierro --- libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl | 6 ++++++ libraries/ashrae/guideline36/4.11-hot-water-plant.ttl | 2 ++ 2 files changed, 8 insertions(+) diff --git a/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl index 53efffb72..be856b95b 100644 --- a/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl +++ b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl @@ -6,6 +6,8 @@ @prefix components: . @prefix : . +: a owl:Ontology . + # 4.10 Chilled Water Plant :chilled-water-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; @@ -583,6 +585,7 @@ sh:property [ rdfs:label "CHW supply temperature" ; rdfs:comment "CHW supply temperature sensor required for primary-only plants." ; + sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Leaving_Chilled_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 @@ -1206,6 +1209,7 @@ sh:property [ rdfs:label "WSE entering CHW temperature" ; rdfs:comment "Note: WSE entering CHW temperatures is located in the pipe entering the HX, not the CHWR main upstream of the WSE." ; + sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 @@ -1248,6 +1252,7 @@ # applications sh:property [ rdfs:label "WSE CHW bypass valve" ; + sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:node brick:Valve_Position_Command ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 @@ -1255,6 +1260,7 @@ # applications sh:property [ rdfs:label "WSE CHW differential pressure" ; + sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:node brick:Differential_Pressure_Sensor ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 diff --git a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl index ee4544b7b..a1172e6b2 100644 --- a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl @@ -6,6 +6,8 @@ @prefix components: . @prefix : . +: a owl:Ontology . + # 4.11 Hot Water Plant :hot-water-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; From 65ac15ca3c438c09ed849629fbb7cae4cfa9183f Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Tue, 13 Feb 2024 16:40:56 -0700 Subject: [PATCH 12/22] add 4.11 hot water plant templates --- .../guideline36/4.11-hot-water-plant.yml | 330 ++++++++++++++++++ 1 file changed, 330 insertions(+) create mode 100644 libraries/ashrae/guideline36/4.11-hot-water-plant.yml diff --git a/libraries/ashrae/guideline36/4.11-hot-water-plant.yml b/libraries/ashrae/guideline36/4.11-hot-water-plant.yml new file mode 100644 index 000000000..92cc3e7b8 --- /dev/null +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.yml @@ -0,0 +1,330 @@ +# 4.11 Hot Water Plant + +hot-water-plant: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a sh:or ( p:primary-only-plant p:primary-secondary-plant ) . + dependencies: + - template: primary-only-plant + args: {'name': 'primary-only-plant'} + - template: primary-secondary-plant + args: {'name': 'primary-secondary-plant'} + +primary-only-plant: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Hot_Water_System ; + brick:hasPart p:boiler, + p:constant-primary-only-loop, p:variable-primary-only-loop . + optional: ['constant-primary-only-loop', 'variable-primary-only-loop'] + dependencies: + - template: boiler + args: {'name': 'Boiler'} + - template: constant-primary-only-loop + args: {'name': 'Constant Primary-Only HW Loop'} + - template: variable-primary-only-loop + args: {'name': 'Variable Primary-Only HW Loop'} + +primary-secondary-plant: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Hot_Water_System ; + brick:hasPart p:boiler, + p:constant-primary-constant-secondary-loop, + p:constant-primary-variable-secondary-loop, + p:variable-primary-constant-secondary-loop, + p:variable-primary-variable-secondary-loop . + optional: [ + 'constant-primary-constant-secondary-loop', + 'constant-primary-variable-secondary-loop', + 'variable-primary-constant-secondary-loop', + 'variable-primary-variable-secondary-loop' + ] + dependencies: + - template: constant-primary-constant-secondary-loop + args: {'name': 'constant-primary-constant-secondary-loop'} + - template: constant-primary-variable-secondary-loop + args: {'name': 'constant-primary-variable-secondary-loop'} + - template: variable-primary-constant-secondary-loop + args: {'name': 'variable-primary-constant-secondary-loop'} + - template: variable-primary-variable-secondary-loop + args: {'name': 'variable-primary-variable-secondary-loop'} + +# 4.11.1 Boilers + +boiler: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Boiler ; + brick:hasPart p:isolation-valve ; + brick:hasPoint p:b-enable, p:hws-temp-setpt, p:b-firing-rate, p:b-nat-gas-flow . + optional: ['b-firing-rate', 'isolation-valve', 'b-nat-gas-flow'] + dependencies: + - template: isolation-valve + args: {'name': 'isolation-valve'} + - template: https://brickschema.org/schema/Brick#On_Off_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'b-enable'} + - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Temperature_Setpoint + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hws-temp-setpt'} + - template: https://brickschema.org/schema/Brick#Valve_Position_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'b-firing-rate'} + - template: https://brickschema.org/schema/Brick#Valve_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'b-nat-gas-flow'} + +isolation-valve: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Isolation_Valve ; + brick:hasPoint p:b-iso-valve, p:b-iso-valve-closed-switch, p:b-iso-valve-open-switch . + optional: ['b-iso-valve-closed-switch', 'b-iso-valve-open-switch'] + dependencies: + - template: https://brickschema.org/schema/Brick#On_Off_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'b-iso-valve'} + - template: https://brickschema.org/schema/Brick#Switch_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'b-iso-valve-closed-switch'} + - template: https://brickschema.org/schema/Brick#Switch_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'b-iso-valve-open-switch'} + +# 4.11.2 HW Pumps (see components.yml) + +# 4.11.3 Primary (only) HW Loop + +primary-only-loop: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Hot_Water_Loop ; + brick:hasPoint sh:or ( p:hws-flow p:hwr-flow ), p:hws-temp, p:hw-sys-gauge . + optional: ['hw-sys-gauge'] + dependencies: + - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hws-flow'} + - template: https://brickschema.org/schema/Brick#Entering_Hot_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hwr-flow'} + - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hws-temp'} + - template: https://brickschema.org/schema/Brick#Pressure_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hw-sys-gauge'} + +constant-primary-only-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a p:primary-only-loop ; + brick:hasPart p:constant-speed-pump . + dependencies: + - template: primary-only-loop + args: {'name': 'primary-only-loop'} + - template: constant-speed-pump + args: {'name': 'constant-speed-pump'} + +# TODO check syntax for loop hwr temp +variable-primary-only-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a p:primary-only-loop ; + brick:hasPart p:variable-speed-pump, p:min-flow-bypass-valve ; + brick:hasPoint p:hwr-temp ; + brick:feeds p:demand-loop [ brick:hasPoint p:loop-hwr-temp ] . + optional: ['loop-hwr-temp'] + dependencies: + - template: primary-only-loop + args: {'name': 'primary-only-loop'} + - template: variable-speed-pump + args: {'name': 'variable-speed-pump'} + - template: min-flow-bypass-valve + args: {'name': 'min-flow-bypass-valve'} + - template: https://brickschema.org/schema/Brick#Entering_Hot_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hwr-temp'} + - template: https://brickschema.org/schema/Brick#Hot_Water_Loop + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'demand-loop'} + - template: https://brickschema.org/schema/Brick#Entering_Hot_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'loop-hwr-temp'} + +# 4.11.4 (Primary) Secondary HW Loop + +# common points from 4.11.3 +primary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Hot_Water_Loop ; + brick:hasPoint p:hws-temp, p:hwr-temp, p:hw-sys-gauge . + optional: ['hws-temp', 'hw-sys-gauge'] + dependencies: + - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hws-temp'} + - template: https://brickschema.org/schema/Brick#Entering_Hot_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hwr-temp'} + - template: https://brickschema.org/schema/Brick#Pressure_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hw-sys-gauge'} + +constant-primary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a p:primary-loop ; + brick:hasPart p:constant-speed-pump . + dependencies: + - template: primary-loop + args: {'name': 'primary-loop'} + - template: constant-speed-pump + args: {'name': 'constant-speed-pump'} + +variable-primary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a p:primary-loop ; + brick:hasPart p:variable-speed-pump . + dependencies: + - template: primary-loop + args: {'name': 'primary-loop'} + - template: constant-speed-pump + args: {'name': 'variable-speed-pump'} + +secondary-loop: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Hot_Water_Loop ; + brick:hasPoint p:sec-hws-temp, p:sec-hwr-temp, + sh:or ( p:sec-hws-flow p:sec-hwr-flow ), p:int-hws-temp . + optional: ['sec-hws-flow', 'sec-hwr-flow', 'int-hws-temp'] + dependencies: + - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'sec-hws-temp'} + - template: https://brickschema.org/schema/Brick#Entering_Hot_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'sec-hwr-temp'} + - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'sec-hws-flow'} + - template: https://brickschema.org/schema/Brick#Entering_Hot_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'sec-hwr-flow'} + - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'int-hws-temp'} + +constant-secondary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a p:secondary-loop ; + brick:hasPart p:constant-speed-pump . + dependencies: + - template: secondary-loop + args: {'name': 'secondary-loop'} + - template: constant-speed-pump + args: {'name': 'constant-speed-pump'} + +variable-secondary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a p:secondary-loop ; + brick:hasPart p:variable-speed-pump . + dependencies: + - template: secondary-loop + args: {'name': 'secondary-loop'} + - template: variable-speed-pump + args: {'name': 'variable-speed-pump'} + +# TODO nested syntax +constant-primary-constant-secondary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Hot_Water_Loop ; + brick:hasPart [ + p:constant-primary-loop ; + brick:feeds p:constant-secondary-loop + ] . + dependencies: + - template: constant-primary-loop + args: {'name': 'constant-primary-loop'} + - template: constant-secondary-loop + args: {'name': 'constant-secondary-loop'} + +constant-primary-variable-secondary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Hot_Water_Loop ; + brick:hasPart [ + p:constant-primary-loop ; + brick:feeds p:variable-secondary-loop . + dependencies: + - template: constant-primary-loop + args: {'name': 'constant-primary-loop'} + - template: variable-secondary-loop + args: {'name': 'variable-secondary-loop'} + +variable-primary-constant-secondary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Hot_Water_Loop ; + brick:hasPart p:variable-primary-loop [ + brick:feeds p:constant-secondary-loop + ] . + dependencies: + - template: variable-primary-loop + args: {'name': 'variable-primary-loop'} + - template: constant-secondary-loop + args: {'name': 'constant-secondary-loop'} + +variable-primary-variable-secondary-loop: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Hot_Water_Loop ; + brick:hasPart [ + p:variable-primary-loop ; + brick:feeds p:variable-secondary-loop ; + brick:hasPoint sh:or ( p:hws-flow p:hwr-flow ), p:decoupler-flow + ] . + optional: ['hws-flow', 'hwr-flow', 'decoupler-flow'] + dependencies: + - template: constant-primary-loop + args: {'name': 'constant-primary-loop'} + - template: variable-secondary-loop + args: {'name': 'variable-secondary-loop'} + - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hws-flow'} + - template: https://brickschema.org/schema/Brick#Entering_Hot_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hwr-flow'} + - template: https://brickschema.org/schema/Brick#Hot_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'decoupler-flow'} \ No newline at end of file From 2a8e5224dfc9c46b957ef436882fc7d95a76acdc Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Sat, 17 Feb 2024 20:15:25 -0700 Subject: [PATCH 13/22] cleanup 4.11 hot water plant template --- .../guideline36/4.11-hot-water-plant.yml | 92 +++++++++++-------- 1 file changed, 55 insertions(+), 37 deletions(-) diff --git a/libraries/ashrae/guideline36/4.11-hot-water-plant.yml b/libraries/ashrae/guideline36/4.11-hot-water-plant.yml index 92cc3e7b8..0ecc72033 100644 --- a/libraries/ashrae/guideline36/4.11-hot-water-plant.yml +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.yml @@ -16,28 +16,32 @@ primary-only-plant: body: > @prefix p: . @prefix brick: . + @prefix sh: . p:name a brick:Hot_Water_System ; brick:hasPart p:boiler, - p:constant-primary-only-loop, p:variable-primary-only-loop . + sh:or ( p:constant-primary-only-loop p:variable-primary-only-loop ) . optional: ['constant-primary-only-loop', 'variable-primary-only-loop'] dependencies: - template: boiler - args: {'name': 'Boiler'} + args: {'name': 'boiler'} - template: constant-primary-only-loop - args: {'name': 'Constant Primary-Only HW Loop'} + args: {'name': 'constant-primary-only-loop'} - template: variable-primary-only-loop - args: {'name': 'Variable Primary-Only HW Loop'} + args: {'name': 'variable-primary-only-loop'} primary-secondary-plant: body: > @prefix p: . @prefix brick: . + @prefix sh: . p:name a brick:Hot_Water_System ; brick:hasPart p:boiler, - p:constant-primary-constant-secondary-loop, - p:constant-primary-variable-secondary-loop, - p:variable-primary-constant-secondary-loop, - p:variable-primary-variable-secondary-loop . + sh:or ( + p:constant-primary-constant-secondary-loop + p:constant-primary-variable-secondary-loop + p:variable-primary-constant-secondary-loop + p:variable-primary-variable-secondary-loop + ) . optional: [ 'constant-primary-constant-secondary-loop', 'constant-primary-variable-secondary-loop', @@ -45,6 +49,8 @@ primary-secondary-plant: 'variable-primary-variable-secondary-loop' ] dependencies: + - template: boiler + args: {'name': 'boiler'} - template: constant-primary-constant-secondary-loop args: {'name': 'constant-primary-constant-secondary-loop'} - template: constant-primary-variable-secondary-loop @@ -62,41 +68,41 @@ boiler: @prefix brick: . p:name a brick:Boiler ; brick:hasPart p:isolation-valve ; - brick:hasPoint p:b-enable, p:hws-temp-setpt, p:b-firing-rate, p:b-nat-gas-flow . - optional: ['b-firing-rate', 'isolation-valve', 'b-nat-gas-flow'] + brick:hasPoint p:enable, p:hws-temp-setpt, p:firing-rate, p:nat-gas-flow . + optional: ['firing-rate', 'isolation-valve', 'nat-gas-flow'] dependencies: - template: isolation-valve args: {'name': 'isolation-valve'} - template: https://brickschema.org/schema/Brick#On_Off_Command library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'b-enable'} + args: {'name': 'enable'} - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Temperature_Setpoint library: https://brickschema.org/schema/1.3/Brick args: {'name': 'hws-temp-setpt'} - template: https://brickschema.org/schema/Brick#Valve_Position_Sensor library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'b-firing-rate'} + args: {'name': 'firing-rate'} - template: https://brickschema.org/schema/Brick#Valve_Status library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'b-nat-gas-flow'} + args: {'name': 'nat-gas-flow'} isolation-valve: body: > @prefix p: . @prefix brick: . p:name a brick:Isolation_Valve ; - brick:hasPoint p:b-iso-valve, p:b-iso-valve-closed-switch, p:b-iso-valve-open-switch . - optional: ['b-iso-valve-closed-switch', 'b-iso-valve-open-switch'] + brick:hasPoint p:iso-valve, p:closed-switch, p:open-switch . + optional: ['closed-switch', 'open-switch'] dependencies: - template: https://brickschema.org/schema/Brick#On_Off_Command library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'b-iso-valve'} + args: {'name': 'iso-valve'} - template: https://brickschema.org/schema/Brick#Switch_Status library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'b-iso-valve-closed-switch'} + args: {'name': 'closed-switch'} - template: https://brickschema.org/schema/Brick#Switch_Status library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'b-iso-valve-open-switch'} + args: {'name': 'open-switch'} # 4.11.2 HW Pumps (see components.yml) @@ -108,8 +114,8 @@ primary-only-loop: @prefix brick: . @prefix sh: . p:name a brick:Hot_Water_Loop ; - brick:hasPoint sh:or ( p:hws-flow p:hwr-flow ), p:hws-temp, p:hw-sys-gauge . - optional: ['hw-sys-gauge'] + brick:hasPoint sh:or ( p:hws-flow p:hwr-flow ), p:hws-temp, p:gauge-pressure . + optional: ['gauge-pressure'] dependencies: - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Flow_Sensor library: https://brickschema.org/schema/1.3/Brick @@ -122,7 +128,7 @@ primary-only-loop: args: {'name': 'hws-temp'} - template: https://brickschema.org/schema/Brick#Pressure_Sensor library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'hw-sys-gauge'} + args: {'name': 'gauge-pressure'} constant-primary-only-loop: body: > @@ -142,26 +148,29 @@ variable-primary-only-loop: @prefix p: . @prefix brick: . p:name a p:primary-only-loop ; + brick:feeds [ + p:demand-loop ; + brick:hasPoint p:loop-hwr-temp + ] ; brick:hasPart p:variable-speed-pump, p:min-flow-bypass-valve ; - brick:hasPoint p:hwr-temp ; - brick:feeds p:demand-loop [ brick:hasPoint p:loop-hwr-temp ] . + brick:hasPoint p:plant-hwr-temp . optional: ['loop-hwr-temp'] dependencies: - template: primary-only-loop args: {'name': 'primary-only-loop'} + - template: https://brickschema.org/schema/Brick#Hot_Water_Loop + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'demand-loop'} - template: variable-speed-pump args: {'name': 'variable-speed-pump'} - template: min-flow-bypass-valve args: {'name': 'min-flow-bypass-valve'} - template: https://brickschema.org/schema/Brick#Entering_Hot_Water_Flow_Sensor library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'hwr-temp'} - - template: https://brickschema.org/schema/Brick#Hot_Water_Loop - library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'demand-loop'} + args: {'name': 'loop-hwr-temp'} - template: https://brickschema.org/schema/Brick#Entering_Hot_Water_Flow_Sensor library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'loop-hwr-temp'} + args: {'name': 'plant-hwr-temp'} # 4.11.4 (Primary) Secondary HW Loop @@ -171,8 +180,8 @@ primary-loop: @prefix p: . @prefix brick: . p:name a brick:Hot_Water_Loop ; - brick:hasPoint p:hws-temp, p:hwr-temp, p:hw-sys-gauge . - optional: ['hws-temp', 'hw-sys-gauge'] + brick:hasPoint p:hws-temp, p:hwr-temp, p:gauge-pressure . + optional: ['hws-temp', 'gauge-pressure'] dependencies: - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Temperature_Sensor library: https://brickschema.org/schema/1.3/Brick @@ -182,7 +191,7 @@ primary-loop: args: {'name': 'hwr-temp'} - template: https://brickschema.org/schema/Brick#Pressure_Sensor library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'hw-sys-gauge'} + args: {'name': 'gauge-pressure'} constant-primary-loop: body: > @@ -205,7 +214,7 @@ variable-primary-loop: dependencies: - template: primary-loop args: {'name': 'primary-loop'} - - template: constant-speed-pump + - template: variable-speed-pump args: {'name': 'variable-speed-pump'} secondary-loop: @@ -258,7 +267,6 @@ variable-secondary-loop: - template: variable-speed-pump args: {'name': 'variable-speed-pump'} -# TODO nested syntax constant-primary-constant-secondary-loop: body: > @prefix p: . @@ -278,22 +286,32 @@ constant-primary-variable-secondary-loop: body: > @prefix p: . @prefix brick: . + @prefix sh: . p:name a brick:Hot_Water_Loop ; brick:hasPart [ p:constant-primary-loop ; - brick:feeds p:variable-secondary-loop . + brick:feeds p:variable-secondary-loop ; + brick:hasPoint sh:or ( p:hws-flow p:hwr-flow ) + ] . dependencies: - template: constant-primary-loop args: {'name': 'constant-primary-loop'} - template: variable-secondary-loop args: {'name': 'variable-secondary-loop'} + - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hws-flow'} + - template: https://brickschema.org/schema/Brick#Entering_Hot_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'hwr-flow'} variable-primary-constant-secondary-loop: body: > @prefix p: . @prefix brick: . p:name a brick:Hot_Water_Loop ; - brick:hasPart p:variable-primary-loop [ + brick:hasPart [ + p:variable-primary-loop ; brick:feeds p:constant-secondary-loop ] . dependencies: @@ -315,8 +333,8 @@ variable-primary-variable-secondary-loop: ] . optional: ['hws-flow', 'hwr-flow', 'decoupler-flow'] dependencies: - - template: constant-primary-loop - args: {'name': 'constant-primary-loop'} + - template: variable-primary-loop + args: {'name': 'variable-primary-loop'} - template: variable-secondary-loop args: {'name': 'variable-secondary-loop'} - template: https://brickschema.org/schema/Brick#Leaving_Hot_Water_Flow_Sensor From 93af6f3b92c338f731fd8d3b2b8d9ad9c55e0b7b Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Wed, 21 Feb 2024 08:47:58 -0700 Subject: [PATCH 14/22] add 4.10 chilled water plant templates --- .../guideline36/4.10-chilled-water-plant.yml | 851 ++++++++++++++++++ 1 file changed, 851 insertions(+) create mode 100644 libraries/ashrae/guideline36/4.10-chilled-water-plant.yml diff --git a/libraries/ashrae/guideline36/4.10-chilled-water-plant.yml b/libraries/ashrae/guideline36/4.10-chilled-water-plant.yml new file mode 100644 index 000000000..f56f245e4 --- /dev/null +++ b/libraries/ashrae/guideline36/4.10-chilled-water-plant.yml @@ -0,0 +1,851 @@ +# 4.10 Chilled Water Plant + +chilled-water-plant: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a sh:or ( + p:air-cooled-primary-only-plant + p:wtr-cooled-primary-only-plant + p:air-cooled-primary-secondary-plant + p:wtr-cooled-primary-secondary-plant + ) . + optional: [ + 'air-cooled-primary-only-plant', + 'wtr-cooled-primary-only-plant', + 'air-cooled-primary-secondary-plant', + 'wtr-cooled-primary-secondary-plant' + ] + dependencies: + - template: air-cooled-primary-only-plant + args: {'name': 'air-cooled-primary-only-plant'} + - template: wtr-cooled-primary-only-plant + args: {'name': 'wtr-cooled-primary-only-plant'} + - template: air-cooled-primary-secondary-plant + args: {'name': 'air-cooled-primary-secondary-plant'} + - template: wtr-cooled-primary-secondary-plant + args: {'name': 'wtr-cooled-primary-secondary-plant'} + +air-cooled-primary-only-plant: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Chilled_Water_System ; + brick:hasPart [ + p:air-cooled-chiller ; + brick:hasPoint p:demand-limit ], + sh:or ( p:constant-primary-only-loop p:variable-primary-only-loop ) ; + brick:hasPoint p:plant-chwr-temp . + optional: ['constant-primary-only-loop', 'variable-primary-only-loop'] + dependencies: + - template: air-cooled-chiller + args: {'name': 'air-cooled-chiller'} + - template: https://brickschema.org/schema/Brick#Cooling_Demand_Setpoint + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'demand-limit'} + - template: constant-primary-only-loop + args: {'name': 'constant-primary-only-loop'} + - template: variable-primary-only-loop + args: {'name': 'variable-primary-only-loop'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'plant-chwr-temp'} + +wtr-cooled-primary-only-plant: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Chilled_Water_System ; + brick:hasPart [ + p:wtr-cooled-chiller ; + brick:hasPoint p:demand-limit ], + sh:or ( p:constant-primary-only-loop p:variable-primary-only-loop ), + p:waterside-economizer ; + brick:hasPoint p:plant-chwr-temp, p:oa-temp, p:rh-sen ; + brick:isFedBy p:condenser-water-plant . + optional: ['constant-primary-only-loop', 'variable-primary-only-loop', 'waterside-economizer', 'oa-temp', 'rh-sen'] + dependencies: + - template: wtr-cooled-chiller + args: {'name': 'wtr-cooled-chiller'} + - template: https://brickschema.org/schema/Brick#Cooling_Demand_Setpoint + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'demand-limit'} + - template: constant-primary-only-loop + args: {'name': 'constant-primary-only-loop'} + - template: variable-primary-only-loop + args: {'name': 'variable-primary-only-loop'} + - template: waterside-economizer + args: {'name': 'waterside-economizer'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'plant-chwr-temp'} + - template: https://brickschema.org/schema/Brick#Outside_Air_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'oa-temp'} + - template: https://brickschema.org/schema/Brick#Outside_Air_Humidity_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'rh-sen'} + - template: condenser-water-plant + args: {'name': 'condenser-water-plant'} + +air-cooled-primary-secondary-plant: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Chilled_Water_System ; + brick:hasPart [ + p:air-cooled-chiller ; + brick:hasPoint p:demand-limit ], + sh:or ( + p:constant-primary-constant-secondary-loop + p:constant-primary-variable-secondary-loop + p:variable-primary-constant-secondary-loop + p:variable-primary-variable-secondary-loop + ) ; + brick:hasPoint p:plant-chwr-temp . + optional: ['demand-limit', 'plant-chwr-temp', + 'constant-primary-constant-secondary-loop', + 'constant-primary-variable-secondary-loop', + 'variable-primary-constant-secondary-loop', + 'variable-primary-variable-secondary-loop', + ] + dependencies: + - template: air-cooled-chiller + args: {'name': 'air-cooled-chiller'} + - template: https://brickschema.org/schema/Brick#Cooling_Demand_Setpoint + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'demand-limit'} + - template: constant-primary-constant-secondary-loop + args: {'name': 'constant-primary-constant-secondary-loop'} + - template: constant-primary-variable-secondary-loop + args: {'name': 'constant-primary-variable-secondary-loop'} + - template: variable-primary-constant-secondary-loop + args: {'name': 'variable-primary-constant-secondary-loop'} + - template: variable-primary-variable-secondary-loop + args: {'name': 'variable-primary-variable-secondary-loop'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'plant-chwr-temp'} + +wtr-cooled-primary-secondary-plant: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Chilled_Water_System ; + brick:hasPart [ + p:wtr-cooled-chiller ; + brick:hasPoint p:demand-limit ], + sh:or ( + p:constant-primary-constant-secondary-loop + p:constant-primary-variable-secondary-loop + p:variable-primary-constant-secondary-loop + p:variable-primary-variable-secondary-loop + ), + p:waterside-economizer ; + brick:hasPoint p:plant-chwr-temp, oa-temp, rh-sen ; + brick:isFedBy p:condenser-water-plant . + optional: ['demand-limit', + 'constant-primary-constant-secondary-loop', + 'constant-primary-variable-secondary-loop', + 'variable-primary-constant-secondary-loop', + 'variable-primary-variable-secondary-loop', + 'waterside-economizer', 'plant-chwr-temp', 'oa-temp', 'rh-sen' + ] + dependencies: + - template: wtr-cooled-chiller + args: {'name': 'wtr-cooled-chiller'} + - template: https://brickschema.org/schema/Brick#Cooling_Demand_Setpoint + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'demand-limit'} + - template: constant-primary-constant-secondary-loop + args: {'name': 'constant-primary-constant-secondary-loop'} + - template: constant-primary-variable-secondary-loop + args: {'name': 'constant-primary-variable-secondary-loop'} + - template: variable-primary-constant-secondary-loop + args: {'name': 'variable-primary-constant-secondary-loop'} + - template: variable-primary-variable-secondary-loop + args: {'name': 'variable-primary-variable-secondary-loop'} + - template: waterside-economizer + args: {'name': 'waterside-economizer'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'plant-chwr-temp'} + - template: https://brickschema.org/schema/Brick#Outside_Air_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'oa-temp'} + - template: https://brickschema.org/schema/Brick#Outside_Air_Humidity_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'rh-sen'} + - template: condenser-water-plant + args: {'name': 'condenser-water-plant'} + +condenser-water-plant: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Condenser_Water_System ; + brick:hasPart p:cooling-tower, p:condenser-water-loop . + dependencies: + - template: cooling-tower + args: {'name': 'cooling-tower'} + - template: condenser-water-loop + args: {'name': 'condenser-water-loop'} + +# 4.10.1 Chillers + +chiller: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Chiller ; + brick:hasPart p:ch-chw-isolation-valve, p:ch-chw-bypass-valve ; + brick:hasPoint + p:on-off-cmd, + p:on-off-status, + p:chws-temp-setpt-reset, + p:fault-code, + p:head-pressure, + p:chws-temp, + p:chwr-temp, + p:chw-dp, + p:refrig-evap-temp, + p:refrig-cond-temp, + p:manual-auto-status, + p:off-switch + optional: [ + 'ch-chw-isolation-valve', + 'ch-chw-bypass-valve', + 'head-pressure', + 'chws-temp', + 'chwr-temp', + 'chw-dp', + 'refrig-evap-temp', + 'refrig-cond-temp', + 'manual-auto-status', + 'off-switch' + ] + dependencies: + - template: ch-chw-isolation-valve + args: {'name': 'ch-chw-isolation-valve'} + - template: ch-chw-bypass-valve + args: {'name': 'ch-chw-bypass-valve'} + - template: https://brickschema.org/schema/Brick#On_Off_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'on-off-cmd'} + - template: https://brickschema.org/schema/Brick#On_Off_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'on-off-status'} + - template: https://brickschema.org/schema/Brick#Reset_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chws-temp-setpt-reset'} + - template: https://brickschema.org/schema/Brick#Last_Fault_Code_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'fault-code'} + - template: https://brickschema.org/schema/Brick#Pressure_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'head-pressure'} + - template: https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chws-temp'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chwr-temp'} + - template: https://brickschema.org/schema/Brick#Chilled_Water_Differential_Pressure_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chw-dp'} + - template: https://brickschema.org/schema/Brick#Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'refrig-evap-temp'} + - template: https://brickschema.org/schema/Brick#Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'refrig-cond-temp'} + - template: https://brickschema.org/schema/Brick#Manual_Auto_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'manual-auto-status'} + - template: https://brickschema.org/schema/Brick#Off_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'off-switch'} + +air-cooled-chiller: + body: > + @prefix p: . + @prefix brick: . + p:name a p:chiller . + dependencies: + - template: chiller + args: {'name': 'chiller'} + +wtr-cooled-chiller: + body: > + @prefix p: . + @prefix brick: . + p:name a p:chiller ; + brick:hasPart p:ch-cw-isolation-valve ; + brick:hasPoint p:cwr-temp, p:cws-temp, p:cw-dp . + optional: ['ch-cw-isolation-valve', 'cwr-temp', 'cws-temp', 'cw-dp'] + dependencies: + - template: chiller + args: {'name': 'chiller'} + - template: ch-cw-isolation-valve + args: {'name': 'ch-cw-isolation-valve'} + - template: https://brickschema.org/schema/Brick#Entering_Condenser_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'cwr-temp'} + - template: https://brickschema.org/schema/Brick#Leaving_Condenser_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'cws-temp'} + - template: https://brickschema.org/schema/Brick#Differential_Pressure_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'cw-dp'} + +ch-chw-isolation-valve: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Isolation_Valve ; + brick:hasPoint + sh:or ( p:valve-position-cmd p:on-off-cmd), + p:closed-end-switch, + p:open-end-switch, + p:position-feedback . + optional: [ + 'valve-position-cmd', + 'on-off-cmd', + 'closed-end-switch', + 'open-end-switch', + 'position-feedback' + ] + dependencies: + - template: https://brickschema.org/schema/Brick#Valve_Position_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'valve-position-cmd'} + - template: https://brickschema.org/schema/Brick#On_Off_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'on-off-cmd'} + - template: https://brickschema.org/schema/Brick#On_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'closed-end-switch'} + - template: https://brickschema.org/schema/Brick#Off_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'open-end-switch'} + - template: https://brickschema.org/schema/Brick#Valve_Position_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'position-feedback'} + +ch-chw-bypass-valve: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Bypass_Valve ; + brick:hasPoint p:on-off-cmd . + dependencies: + - template: https://brickschema.org/schema/Brick#On_Off_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'on-off-cmd'} + +ch-cw-isolation-valve: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Isolation_Valve ; + brick:hasPoint + sh:or ( p:valve-position-cmd p:on-off-cmd), + p:closed-end-switch, + p:open-end-switch, + p:position-feedback . + optional: [ + 'valve-position-cmd', + 'on-off-cmd', + 'closed-end-switch', + 'open-end-switch', + 'position-feedback' + ] + dependencies: + - template: https://brickschema.org/schema/Brick#Valve_Position_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'valve-position-cmd'} + - template: https://brickschema.org/schema/Brick#On_Off_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'on-off-cmd'} + - template: https://brickschema.org/schema/Brick#On_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'closed-end-switch'} + - template: https://brickschema.org/schema/Brick#Off_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'open-end-switch'} + - template: https://brickschema.org/schema/Brick#Valve_Position_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'position-feedback'} + +# 4.10.2 Chilled Water Pumps (see components.yml) + +# 4.10.3 Primary (only) CHW Loop + +primary-only-loop: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Chilled_Water_Loop ; + brick:hasPoint + sh:or ( p:chws-flow p:chwr-flow ), + p:chws-temp, p:gauge-pressure . + optional: ['chws-flow-sen', 'chwr-flow-sen', 'gauge-pressure'] + dependencies: + - template: https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chws-flow'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chwr-flow'} + - template: https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chws-temp'} + - template: https://brickschema.org/schema/Brick#Pressure_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'gauge-pressure'} + +constant-primary-only-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a p:primary-only-loop ; + brick:hasPart p:constant-speed-pump . + dependencies: + - template: primary-only-loop + args: {'name': 'primary-only-loop'} + - template: constant-speed-pump + args: {'name': 'constant-speed-pump'} + +variable-primary-only-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a p:primary-only-loop ; + brick:feeds p:chw-demand-loop [ brick:hasPoint p:dem-chwr-temp ] ; + brick:hasPart p:variable-speed-pump, p:min-flow-bypass-valve ; + brick:hasPoint p:sup-chwr-temp . + optional: ['dem-chwr-temp-sen'] + dependencies: + - template: primary-only-loop + args: {'name': 'primary-only-loop'} + - template: https://brickschema.org/schema/Brick#Chilled_Water_Loop + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chw-demand-loop'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'dem-chwr-temp'} + - template: variable-speed-pump + args: {'name': 'variable-speed-pump'} + - template: min-flow-bypass-valve + args: {'name': 'min-flow-bypass-valve'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'sup-chwr-temp'} + +# 4.10.4 (Primary) Secondary CHW Loop + +primary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Chilled_Water_Loop ; + brick:hasPoint p:chws-temp, p:chwr-temp . + optional: ['chws-temp', 'chwr-temp'] + dependencies: + - template: https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chws-temp'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chwr-temp'} + +constant-primary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a p:primary-loop ; + brick:hasPart p:constant-speed-pump . + dependencies: + - template: primary-loop + args: {'name': 'primary-loop'} + - template: constant-speed-pump + args: {'name': 'constant-speed-pump'} + +variable-primary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a p:primary-loop ; + brick:hasPart p:variable-speed-pump . + dependencies: + - template: primary-loop + args: {'name': 'primary-loop'} + - template: variable-speed-pump + args: {'name': 'variable-speed-pump'} + +secondary-loop: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Chilled_Water_Loop ; + brick:hasPoint p:chws-temp, p:chwr-temp, + sh:or ( p:chws-flow p:chwr-flow ) . + optional: ['chwr-temp', 'chws-flow', 'chwr-flow'] + dependencies: + - template: https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chws-temp'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chwr-temp'} + - template: https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chws-flow'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chwr-flow'} + +constant-secondary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a p:secondary-loop ; + brick:hasPart p:constant-speed-pump . + dependencies: + - template: secondary-loop + args: {'name': 'secondary-loop'} + - template: constant-speed-pump + args: {'name': 'constant-speed-pump'} + +variable-secondary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a p:secondary-loop ; + brick:hasPart p:variable-speed-pump . + dependencies: + - template: secondary-loop + args: {'name': 'secondary-loop'} + - template: variable-speed-pump + args: {'name': 'variable-speed-pump'} + +constant-primary-constant-secondary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Chilled_Water_Loop ; + brick:hasPart [ + p:constant-primary-loop ; + brick:feeds p:constant-secondary-loop + ] . + dependencies: + - template: constant-primary-loop + args: {'name': 'constant-primary-loop'} + - template: constant-secondary-loop + args: {'name': 'constant-secondary-loop'} + +constant-primary-variable-secondary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Chilled_Water_Loop ; + brick:hasPart [ + p:constant-primary-loop ; + brick:feeds p:variable-secondary-loop + ] . + dependencies: + - template: constant-primary-loop + args: {'name': 'constant-primary-loop'} + - template: variable-secondary-loop + args: {'name': 'variable-secondary-loop'} + +variable-primary-constant-secondary-loop: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Chilled_Water_Loop ; + brick:hasPart [ + p:variable-primary-loop ; + brick:feeds p:constant-secondary-loop + ] . + dependencies: + - template: variable-primary-loop + args: {'name': 'variable-primary-loop'} + - template: constant-secondary-loop + args: {'name': 'constant-secondary-loop'} + +variable-primary-variable-secondary-loop: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Chilled_Water_Loop ; + brick:hasPart [ + p:variable-primary-loop ; + brick:hasPoint + sh:or ( p:chws-flow p:chwr-flow ), p:decoupler-flow ; + brick:feeds p:variable-secondary-loop + ] . + dependencies: + - template: variable-primary-loop + args: {'name': 'constant-primary-loop'} + - template: https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chws-flow'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chwr-flow'} + - template: https://brickschema.org/schema/Brick#Chilled_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'decoupler-flow'} + - template: variable-secondary-loop + args: {'name': 'variable-secondary-loop'} + +# 4.10.5 Condenser Water Pumps (see components.yml) + +# 4.10.6 Cooling Towers + +cooling-tower: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Cooling_Tower ; + brick:hasPart p:variable-speed-fan, p:ct-bypass-valve, p:ct-basin-heater ; + sh:or ( + p:ct-outlet-isolation-valve + sh:and ( p:ct-inlet-isolation-valve p:ct-outlet-isolation-valve ) + ) ; + brick:hasPoint p:twr-basin-lvl, p:heat-trace-enable, p:heat-trace-status . + optional: [ + 'ct-bypass-valve', 'ct-basin-heater', + 'ct-outlet-isolation-valve', 'ct-inlet-isolation-valve', + 'heat-trace-enable', 'heat-trace-status' + ] + dependencies: + - template: variable-speed-fan + args: {'name': 'variable-speed-fan'} + - template: ct-bypass-valve + args: {'name': 'ct-bypass-valve'} + - template: ct-basin-heater + args: {'name': 'ct-basin-heater'} + - template: ct-outlet-isolation-valve + args: {'name': 'ct-outlet-isolation-valve'} + - template: ct-inlet-isolation-valve + args: {'name': 'ct-inlet-isolation-valve'} + - template: https://brickschema.org/schema/Brick#Collection_Basin_Water_Level_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'twr-basin-lvl'} + - template: https://brickschema.org/schema/Brick#Heating_Enable_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'heat-trace-enable'} + - template: https://brickschema.org/schema/Brick#Enable_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'heat-trace-status'} + +variable-speed-fan-motor: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Variable_Frequency_Drive ; + brick:hasPoint p:fan-start, p:fan-status, p:fan-speed, p:fan-alarm . + optional: ['fan-alarm'] + dependencies: + - template: https://brickschema.org/schema/Brick#On_Off_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'fan-start'} + - template: https://brickschema.org/schema/Brick#On_Off_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'fan-status'} + - template: https://brickschema.org/schema/Brick#Speed_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'fan-speed'} + - template: https://brickschema.org/schema/Brick#Fault_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'fan-alarm'} + +variable-speed-fan: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Cooling_Tower_Fan ; + brick:hasPart p:variable-speed-fan-motor . + dependencies: + - template: variable-speed-fan-motor + args: {'name': 'variable-speed-fan-motor'} + +ct-inlet-isolation-valve: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Isolation_Valve ; + brick:hasPoint p:isolation-valve, p:closed-end-switch, p:open-end-switch . + optional: ['isolation-valve', 'closed-end-switch', 'open-end-switch'] + dependencies: + - template: https://brickschema.org/schema/Brick#Valve_Position_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'isolation-valve'} + - template: https://brickschema.org/schema/Brick#On_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'closed-end-switch'} + - template: https://brickschema.org/schema/Brick#Off_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'open-end-switch'} + +ct-outlet-isolation-valve: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Isolation_Valve ; + brick:hasPoint p:isolation-valve, p:closed-end-switch, p:open-end-switch . + optional: ['isolation-valve', 'closed-end-switch', 'open-end-switch'] + dependencies: + - template: https://brickschema.org/schema/Brick#Valve_Position_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'isolation-valve'} + - template: https://brickschema.org/schema/Brick#On_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'closed-end-switch'} + - template: https://brickschema.org/schema/Brick#Off_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'open-end-switch'} + +ct-bypass-valve: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Bypass_Valve ; + brick:hasPoint p:bypass-valve . + dependencies: + - template: https://brickschema.org/schema/Brick#On_Off_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'bypass-valve'} + +ct-basin-heater: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Collection_Basin_Water_Heater ; + brick:hasPoint p:enable, p:status, p:temp . + dependencies: + - template: https://brickschema.org/schema/Brick#Heating_Enable_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'enable'} + - template: https://brickschema.org/schema/Brick#Enable_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'status'} + - template: https://brickschema.org/schema/Brick#Collection_Basin_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'temp'} + +# 4.10.7 Condenser Water Loop + +condenser-water-loop: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Chilled_Water_Loop ; + brick:hasPart + sh:or ( p:constant-speed-pump p:variable-speed-pump ), + p:makeup-water-valve [ brick:hasPoint p:on-off-cmd ] ; + brick:hasPoint p:cws-temp, p:cwr-temp . + optional: ['constant-speed-pump', 'variable-speed-pump'] + dependencies: + - template: constant-speed-pump + args: {'name': 'constant-speed-pump'} + - template: variable-speed-pump + args: {'name': 'variable-speed-pump'} + - template: https://brickschema.org/schema/Brick#Makeup_Water_Valve + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'makeup-water-valve'} + - template: https://brickschema.org/schema/Brick#On_Off_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'on-off-cmd'} + - template: https://brickschema.org/schema/Brick#Leaving_Condenser_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'cws-temp'} + - template: https://brickschema.org/schema/Brick#Entering_Condenser_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'cwr-temp'} + +# 4.10.8 Waterside Economizer + +waterside-economizer: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Heat_Exchanger ; + brick:hasPart p:wse-isolation-valve, p::wse-bypass-valve, + sh:or ( p:constant-speed-pump p:variable-speed-pump ) ; + brick:hasPoint p:cwr-temp, p:chwr-temp, p:chws-temp, p:wse-chwr-temp, p:oa-temp, p:rh-sen . + optional: ['wse-bypass-valve', 'constant-speed-pump', 'variable-speed-pump'] + dependencies: + - template: wse-isolation-valve + args: {'name': 'wse-isolation-valve'} + - template: wse-bypass-valve + args: {'name': 'wse-bypass-valve'} + - template: constant-speed-pump + args: {'name': 'constant-speed-pump'} + - template: variable-speed-pump + args: {'name': 'variable-speed-pump'} + - template: https://brickschema.org/schema/Brick#Leaving_Condenser_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'cwr-temp'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chwr-temp'} + - template: https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chws-temp'} + - template: https://brickschema.org/schema/Brick#Entering_Chilled_Water_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'wse-chwr-temp'} + - template: https://brickschema.org/schema/Brick#Outside_Air_Temperature_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'oa-temp'} + - template: https://brickschema.org/schema/Brick#Outside_Air_Humidity_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'rh-sen'} + +wse-isolation-valve: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Condenser_Water_Isolation_Valve ; + brick:hasPoint p:cw-isolation-valve, p:closed-end-switch, p:open-end-switch . + optional: ['closed-end-switch', 'open-end-switch'] + dependencies: + - template: https://brickschema.org/schema/Brick#On_Off_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'cw-isolation-valve'} + - template: https://brickschema.org/schema/Brick#On_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'closed-end-switch'} + - template: https://brickschema.org/schema/Brick#Off_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'open-end-switch'} + +wse-bypass-valve: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Bypass_Valve ; + brick:hasPoint p:chw-bypass-valve, p:chw-dp-sen . + dependencies: + - template: https://brickschema.org/schema/Brick#Valve_Position_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'bypass-valve'} + - template: https://brickschema.org/schema/Brick#Differential_Pressure_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'chw-dp-sen'} \ No newline at end of file From 2864c0bfddd73915818a118cb5d2c36282369eed Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Thu, 22 Feb 2024 11:41:59 -0700 Subject: [PATCH 15/22] cleanup 4.10 chilled water plant templates --- .../guideline36/4.10-chilled-water-plant.yml | 87 +++++++++---------- 1 file changed, 40 insertions(+), 47 deletions(-) diff --git a/libraries/ashrae/guideline36/4.10-chilled-water-plant.yml b/libraries/ashrae/guideline36/4.10-chilled-water-plant.yml index f56f245e4..201117c5b 100644 --- a/libraries/ashrae/guideline36/4.10-chilled-water-plant.yml +++ b/libraries/ashrae/guideline36/4.10-chilled-water-plant.yml @@ -107,11 +107,12 @@ air-cooled-primary-secondary-plant: p:variable-primary-variable-secondary-loop ) ; brick:hasPoint p:plant-chwr-temp . - optional: ['demand-limit', 'plant-chwr-temp', + optional: ['demand-limit', 'constant-primary-constant-secondary-loop', 'constant-primary-variable-secondary-loop', 'variable-primary-constant-secondary-loop', 'variable-primary-variable-secondary-loop', + 'plant-chwr-temp' ] dependencies: - template: air-cooled-chiller @@ -205,8 +206,8 @@ chiller: p:name a brick:Chiller ; brick:hasPart p:ch-chw-isolation-valve, p:ch-chw-bypass-valve ; brick:hasPoint - p:on-off-cmd, - p:on-off-status, + p:on-off, + p:status, p:chws-temp-setpt-reset, p:fault-code, p:head-pressure, @@ -215,7 +216,7 @@ chiller: p:chw-dp, p:refrig-evap-temp, p:refrig-cond-temp, - p:manual-auto-status, + p:local-auto-switch, p:off-switch optional: [ 'ch-chw-isolation-valve', @@ -236,10 +237,10 @@ chiller: args: {'name': 'ch-chw-bypass-valve'} - template: https://brickschema.org/schema/Brick#On_Off_Command library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'on-off-cmd'} + args: {'name': 'on-off'} - template: https://brickschema.org/schema/Brick#On_Off_Status library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'on-off-status'} + args: {'name': 'status'} - template: https://brickschema.org/schema/Brick#Reset_Command library: https://brickschema.org/schema/1.3/Brick args: {'name': 'chws-temp-setpt-reset'} @@ -266,7 +267,7 @@ chiller: args: {'name': 'refrig-cond-temp'} - template: https://brickschema.org/schema/Brick#Manual_Auto_Status library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'manual-auto-status'} + args: {'name': 'local-auto-switch'} - template: https://brickschema.org/schema/Brick#Off_Status library: https://brickschema.org/schema/1.3/Brick args: {'name': 'off-switch'} @@ -343,18 +344,18 @@ ch-chw-bypass-valve: @prefix p: . @prefix brick: . p:name a brick:Bypass_Valve ; - brick:hasPoint p:on-off-cmd . + brick:hasPoint p:bypass-valve . dependencies: - template: https://brickschema.org/schema/Brick#On_Off_Command library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'on-off-cmd'} + args: {'name': 'bypass-valve'} ch-cw-isolation-valve: body: > @prefix p: . @prefix brick: . @prefix sh: . - p:name a brick:Isolation_Valve ; + p:name a brick:Condenser_Water_Isolation_Valve ; brick:hasPoint sh:or ( p:valve-position-cmd p:on-off-cmd), p:closed-end-switch, @@ -429,7 +430,7 @@ variable-primary-only-loop: @prefix p: . @prefix brick: . p:name a p:primary-only-loop ; - brick:feeds p:chw-demand-loop [ brick:hasPoint p:dem-chwr-temp ] ; + brick:feeds [ p:chw-demand-loop ; brick:hasPoint p:dem-chwr-temp ] ; brick:hasPart p:variable-speed-pump, p:min-flow-bypass-valve ; brick:hasPoint p:sup-chwr-temp . optional: ['dem-chwr-temp-sen'] @@ -543,10 +544,7 @@ constant-primary-constant-secondary-loop: @prefix p: . @prefix brick: . p:name a brick:Chilled_Water_Loop ; - brick:hasPart [ - p:constant-primary-loop ; - brick:feeds p:constant-secondary-loop - ] . + brick:hasPart [ p:constant-primary-loop ; brick:feeds p:constant-secondary-loop ] . dependencies: - template: constant-primary-loop args: {'name': 'constant-primary-loop'} @@ -558,10 +556,7 @@ constant-primary-variable-secondary-loop: @prefix p: . @prefix brick: . p:name a brick:Chilled_Water_Loop ; - brick:hasPart [ - p:constant-primary-loop ; - brick:feeds p:variable-secondary-loop - ] . + brick:hasPart [ p:constant-primary-loop ; brick:feeds p:variable-secondary-loop ] . dependencies: - template: constant-primary-loop args: {'name': 'constant-primary-loop'} @@ -573,10 +568,7 @@ variable-primary-constant-secondary-loop: @prefix p: . @prefix brick: . p:name a brick:Chilled_Water_Loop ; - brick:hasPart [ - p:variable-primary-loop ; - brick:feeds p:constant-secondary-loop - ] . + brick:hasPart [ p:variable-primary-loop ; brick:feeds p:constant-secondary-loop ] . dependencies: - template: variable-primary-loop args: {'name': 'variable-primary-loop'} @@ -591,13 +583,14 @@ variable-primary-variable-secondary-loop: p:name a brick:Chilled_Water_Loop ; brick:hasPart [ p:variable-primary-loop ; - brick:hasPoint - sh:or ( p:chws-flow p:chwr-flow ), p:decoupler-flow ; - brick:feeds p:variable-secondary-loop + brick:feeds p:variable-secondary-loop ; + brick:hasPoint sh:or ( p:chws-flow p:chwr-flow ), p:decoupler-flow ] . dependencies: - template: variable-primary-loop args: {'name': 'constant-primary-loop'} + - template: variable-secondary-loop + args: {'name': 'variable-secondary-loop'} - template: https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Flow_Sensor library: https://brickschema.org/schema/1.3/Brick args: {'name': 'chws-flow'} @@ -607,8 +600,6 @@ variable-primary-variable-secondary-loop: - template: https://brickschema.org/schema/Brick#Chilled_Water_Flow_Sensor library: https://brickschema.org/schema/1.3/Brick args: {'name': 'decoupler-flow'} - - template: variable-secondary-loop - args: {'name': 'variable-secondary-loop'} # 4.10.5 Condenser Water Pumps (see components.yml) @@ -620,28 +611,30 @@ cooling-tower: @prefix brick: . @prefix sh: . p:name a brick:Cooling_Tower ; - brick:hasPart p:variable-speed-fan, p:ct-bypass-valve, p:ct-basin-heater ; - sh:or ( - p:ct-outlet-isolation-valve - sh:and ( p:ct-inlet-isolation-valve p:ct-outlet-isolation-valve ) - ) ; + brick:hasPart + p:variable-speed-fan, + sh:or ( + p:ct-outlet-isolation-valve + sh:and ( p:ct-inlet-isolation-valve p:ct-outlet-isolation-valve ) + ), + p:ct-bypass-valve, p:ct-basin-heater ; brick:hasPoint p:twr-basin-lvl, p:heat-trace-enable, p:heat-trace-status . optional: [ - 'ct-bypass-valve', 'ct-basin-heater', 'ct-outlet-isolation-valve', 'ct-inlet-isolation-valve', + 'ct-bypass-valve', 'ct-basin-heater', 'heat-trace-enable', 'heat-trace-status' ] dependencies: - template: variable-speed-fan args: {'name': 'variable-speed-fan'} - - template: ct-bypass-valve - args: {'name': 'ct-bypass-valve'} - - template: ct-basin-heater - args: {'name': 'ct-basin-heater'} - template: ct-outlet-isolation-valve args: {'name': 'ct-outlet-isolation-valve'} - template: ct-inlet-isolation-valve args: {'name': 'ct-inlet-isolation-valve'} + - template: ct-bypass-valve + args: {'name': 'ct-bypass-valve'} + - template: ct-basin-heater + args: {'name': 'ct-basin-heater'} - template: https://brickschema.org/schema/Brick#Collection_Basin_Water_Level_Sensor library: https://brickschema.org/schema/1.3/Brick args: {'name': 'twr-basin-lvl'} @@ -657,21 +650,21 @@ variable-speed-fan-motor: @prefix p: . @prefix brick: . p:name a brick:Variable_Frequency_Drive ; - brick:hasPoint p:fan-start, p:fan-status, p:fan-speed, p:fan-alarm . - optional: ['fan-alarm'] + brick:hasPoint p:start, p:status, p:speed, p:alarm . + optional: ['alarm'] dependencies: - template: https://brickschema.org/schema/Brick#On_Off_Command library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'fan-start'} + args: {'name': 'start'} - template: https://brickschema.org/schema/Brick#On_Off_Status library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'fan-status'} + args: {'name': 'status'} - template: https://brickschema.org/schema/Brick#Speed_Command library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'fan-speed'} + args: {'name': 'speed'} - template: https://brickschema.org/schema/Brick#Fault_Status library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'fan-alarm'} + args: {'name': 'alarm'} variable-speed-fan: body: > @@ -757,7 +750,7 @@ condenser-water-loop: p:name a brick:Chilled_Water_Loop ; brick:hasPart sh:or ( p:constant-speed-pump p:variable-speed-pump ), - p:makeup-water-valve [ brick:hasPoint p:on-off-cmd ] ; + [ p:makeup-water-valve ; brick:hasPoint p:on-off-cmd ] ; brick:hasPoint p:cws-temp, p:cwr-temp . optional: ['constant-speed-pump', 'variable-speed-pump'] dependencies: @@ -841,11 +834,11 @@ wse-bypass-valve: @prefix p: . @prefix brick: . p:name a brick:Bypass_Valve ; - brick:hasPoint p:chw-bypass-valve, p:chw-dp-sen . + brick:hasPoint p:chw-bypass-valve, p:chw-dp . dependencies: - template: https://brickschema.org/schema/Brick#Valve_Position_Command library: https://brickschema.org/schema/1.3/Brick args: {'name': 'bypass-valve'} - template: https://brickschema.org/schema/Brick#Differential_Pressure_Sensor library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'chw-dp-sen'} \ No newline at end of file + args: {'name': 'chw-dp'} \ No newline at end of file From 504bbed50fd36bcdd7e63780d729aa5e4020766a Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Thu, 22 Feb 2024 11:52:55 -0700 Subject: [PATCH 16/22] water-side components templates --- libraries/ashrae/guideline36/components.yml | 84 +++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/libraries/ashrae/guideline36/components.yml b/libraries/ashrae/guideline36/components.yml index 9dbd48463..dbf9562ab 100644 --- a/libraries/ashrae/guideline36/components.yml +++ b/libraries/ashrae/guideline36/components.yml @@ -138,3 +138,87 @@ zone: - template: https://brickschema.org/schema/Brick#CO2_Level_Sensor library: https://brickschema.org/schema/1.3/Brick args: {"name": "zone_co2_sensor"} + +# Water-Side + +# Pumps +# components of 4.10.2, 4.10.5, 4.11.2 + +constant-speed-pump-motor: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Motor ; + brick:hasPoint p:start, p:status . + dependencies: + - template: https://brickschema.org/schema/Brick#On_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'start'} + - template: https://brickschema.org/schema/Brick#On_Off_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'status'} + +variable-speed-pump-motor: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Variable_Frequency_Drive ; + brick:hasPoint p:start, p:status, p:speed, p:alarm . + optional: ['pump-alarm'] + dependencies: + - template: https://brickschema.org/schema/Brick#On_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'start'} + - template: https://brickschema.org/schema/Brick#On_Off_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'status'} + - template: https://brickschema.org/schema/Brick#Speed_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'speed'} + - template: https://brickschema.org/schema/Brick#Fault_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'alarm'} + +constant-speed-pump: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Pump ; + brick:hasPart p:constant-speed-pump-motor ; + brick:hasPoint p:dp . + optional: ['dp'] + dependencies: + - template: constant-speed-pump-motor + args: {'name': 'constant-speed-pump-motor'} + - template: https://brickschema.org/schema/Brick#Differential_Pressure_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'dp'} + +variable-speed-pump: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Pump ; + brick:hasPart p:variable-speed-pump-motor ; + brick:hasPoint p:dp . + optional: ['dp'] + dependencies: + - template: variable-speed-pump-motor + args: {'name': 'variable-speed-pump-motor'} + - template: https://brickschema.org/schema/Brick#Differential_Pressure_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'dp'} + +# Loops +# component of 4.10.3 and 4.11.3 + +min-flow-bypass-valve: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Bypass_Valve ; + brick:hasPoint p:valve-position-cmd . + dependencies: + - template: https://brickschema.org/schema/Brick#Valve_Position_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'valve-position-cmd'} \ No newline at end of file From 86ef30ee36cf6fe46fc6397f752bb8019e225165 Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Thu, 22 Feb 2024 11:54:03 -0700 Subject: [PATCH 17/22] cleanup water-side components shapes --- libraries/ashrae/guideline36/components.ttl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/ashrae/guideline36/components.ttl b/libraries/ashrae/guideline36/components.ttl index f1c72c9fa..19962e7ae 100644 --- a/libraries/ashrae/guideline36/components.ttl +++ b/libraries/ashrae/guideline36/components.ttl @@ -171,10 +171,10 @@ sh:qualifiedMaxCount 1 ; ] . -# Water Side +# Water-Side # Pumps -# component of 4.10.2, 4.10.5, 4.11.2 +# components of 4.10.2, 4.10.5, 4.11.2 :constant-speed-pump-motor a sh:NodeShape, owl:Class, bmotif:HVAC ; rdfs:label "Constant Speed Pump Motor" ; @@ -272,6 +272,8 @@ sh:qualifiedMaxCount 1 ; ] . +# Loops + # component of 4.10.3 and 4.11.3 :min-flow-bypass-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; sh:class brick:Bypass_Valve ; From de85b4c795b4c5a27a75059b849040d883945f1d Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Thu, 22 Feb 2024 12:05:44 -0700 Subject: [PATCH 18/22] cleanup 4.10 chilled water plant shapes --- .../guideline36/4.10-chilled-water-plant.ttl | 128 ++++++++++-------- 1 file changed, 71 insertions(+), 57 deletions(-) diff --git a/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl index be856b95b..247c9200c 100644 --- a/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl +++ b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl @@ -114,6 +114,30 @@ sh:qualifiedValueShape [ sh:node :condenser-water-plant ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 + ] ; + # 4.10.8 + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :waterside-economizer ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + # 4.10.9 + # Temperature and relative humidity sensors are necessary for calculating wet bulb temperature for waterside + # economizer sequences. Sensors are optional for plants without waterside economizers. + sh:property [ + dfs:label "Outdoor Air Temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Outside_Air_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + rdfs:label "Relative humidity sensor" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Outside_Air_Humidity_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ] . :air-cooled-primary-secondary-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; @@ -166,7 +190,7 @@ :wtr-cooled-primary-secondary-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; rdfs:label "Water-Cooled Primary-Secondary CHW Plant" ; - sh:node :primary-secondary-plant ; + sh:class brick:Chilled_Water_System ; sh:property [ sh:path brick:hasPart ; sh:qualifiedValueShape [ @@ -216,42 +240,11 @@ sh:qualifiedValueShape [ sh:node :condenser-water-plant ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 - ] . - -:condenser-water-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; - rdfs:label "Condenser Water Plant" ; - sh:class brick:Condenser_Water_System ; - sh:property [ - sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node :cooling-tower ] ; - sh:qualifiedMinCount 1 ] ; + # 4.10.8 sh:property [ sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node :condenser-water-loop ] ; - sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 - ] ; - sh:property [ - sh:path brick:feeds ; - sh:qualifiedValueShape [ - sh:node :wse-loop ; - # 4.10.9 - # Temperature and relative humidity sensors are necessary for calculating wet bulb temperature for waterside - # economizer sequences. Sensors are optional for plants without waterside economizers. - sh:property [ - sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Outside_Air_Temperature_Sensor ] ; - sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 - ] ; - sh:property [ - sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Outside_Air_Humidity_Sensor ] ; - sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 - ] - ] ; + sh:qualifiedValueShape [ sh:node :waterside-economizer ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ] ; @@ -259,18 +252,35 @@ # Temperature and relative humidity sensors are necessary for calculating wet bulb temperature for waterside # economizer sequences. Sensors are optional for plants without waterside economizers. sh:property [ + dfs:label "Outdoor Air Temperature" ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Outside_Air_Temperature_Sensor ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ] ; sh:property [ + rdfs:label "Relative humidity sensor" ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Outside_Air_Humidity_Sensor ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ] . +:condenser-water-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; + rdfs:label "Condenser Water Plant" ; + sh:class brick:Condenser_Water_System ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :cooling-tower ] ; + sh:qualifiedMinCount 1 + ] ; + sh:property [ + sh:path brick:hasPart ; + sh:qualifiedValueShape [ sh:node :condenser-water-loop ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] . + # 4.10.1 Chillers :chiller a sh:NodeShape, owl:Class, bmotif:HVAC ; @@ -344,6 +354,7 @@ # applications sh:property [ rdfs:label "CH CHW supply temperature" ; + sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Leaving_Chilled_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 @@ -490,7 +501,8 @@ sh:qualifiedMaxCount 1 ] . -# TODO see comment +# TODO combine? +#TODO see comment :ch-chw-bypass-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; rdfs:label "Chiller CHW Bypass Valve" ; rdfs:comment "Required for series piped chillers and primary-only parallel CHW plants with waterside economizers. Delete otherwise." ; @@ -666,6 +678,7 @@ sh:property [ rdfs:label "CHW supply temperature" ; rdfs:comment "Optional for primary-secondary Plants." ; + sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Leaving_Chilled_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 @@ -939,6 +952,7 @@ sh:qualifiedMaxCount 1 ] . +# TODO consider moving to components if there's overlap with air-side fans :variable-speed-fan-motor a sh:NodeShape, owl:Class, bmotif:HVAC ; rdfs:label "Variable Speed Fan Motor" ; sh:class brick:Variable_Frequency_Drive ; @@ -984,6 +998,7 @@ sh:qualifiedMinCount 1 ] . +#TODO combine with outlet? :ct-inlet-isolation-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; rdfs:label "Cooling Tower Inlet Isolation Valve" ; sh:class brick:Isolation_Valve ; @@ -1137,34 +1152,16 @@ # Retain the following points if the plant has a waterside economizer. Delete otherwise. “R” in this section should # be interpreted as required for waterside economizer operation. -:chilled-water-loop-without-wse a sh:NodeShape, owl:Class, bmotif:HVAC ; - rdfs:label "Condenser Water Loop without Waterside Economizer" ; - sh:node :chilled-water-loop . - -:wse-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; - rdfs:label "Waterside Economizer Loop" ; - sh:class brick:Chilled_Water_Loop ; - sh:property [ - rdfs:label "Waterside Economizer" ; - sh:path brick:hasPart ; - sh:qualifiedValueShape [ - sh:class brick:Heat_Exchanger ; - sh:property [ - sh:path brick:isFedBy ; - sh:qualifiedValueShape [ sh:node :cooling-tower ] ; - sh:qualifiedMinCount 1 - ] - ] ; - sh:qualifiedMinCount 1 ; - sh:qualifiedMaxCount 1 - ] ; +:waterside-economizer a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Waterside Economizer" ; + sh:class brick:Heat_Exchanger ; sh:property [ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:node :wse-isolation-valve ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 ] ; - # required + # required TODO check sh:property [ rdfs:label "WSE CW return temperature" ; sh:path brick:hasPoint ; @@ -1213,6 +1210,23 @@ sh:qualifiedValueShape [ sh:class brick:Entering_Chilled_Water_Temperature_Sensor ] ; sh:qualifiedMinCount 1 ; sh:qualifiedMaxCount 1 + ] ; + # 4.10.9 + # Temperature and relative humidity sensors are necessary for calculating wet bulb temperature for waterside + # economizer sequences. Sensors are optional for plants without waterside economizers. + sh:property [ + rdfs:label "Outdoor Air Temperature" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Outside_Air_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + sh:property [ + rdfs:label "Relative humidity sensor" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Outside_Air_Humidity_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ] . :wse-isolation-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; From 6782c56de14d0bf2d7bd7cf49203afa5be003897 Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Thu, 22 Feb 2024 12:08:11 -0700 Subject: [PATCH 19/22] cleanup 4.11 hot water plant shapes --- .../ashrae/guideline36/4.11-hot-water-plant.ttl | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl index a1172e6b2..4d78be347 100644 --- a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl @@ -63,11 +63,7 @@ :boiler a sh:NodeShape, owl:Class, bmotif:HVAC ; rdfs:label "Boiler" ; - sh:or ( - sh:class brick:Electric_Boiler - sh:class brick:Condensing_Natural_Gas_Boiler - sh:class brick:Noncondensing_Natural_Gas_Boiler - ) ; + sh:class brick:Boiler ; # required sh:property [ rdfs:label "Boiler enable" ; @@ -93,6 +89,7 @@ sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] ; + # applications sh:property [ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:node :isolation-valve ] ; @@ -118,8 +115,8 @@ rdfs:label "Boiler isolation valve" ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:On_Off_Command ] ; - sh:qualifiedMinCount 1 ; - sh:qualifiedMinCount 1 ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; ] ; # Retain the following two points for optional valve end switch status feedback. # optional @@ -183,7 +180,7 @@ :constant-primary-only-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; rdfs:label "Constant Primary-Only HW Loop" ; - sh:class :primary-only-loop ; + sh:node :primary-only-loop ; sh:property [ sh:path brick:hasPart ; sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; @@ -281,7 +278,7 @@ sh:node :primary-loop ; sh:property [ sh:path brick:hasPart ; - sh:qualifiedValueShape [ sh:node components:constant-speed-pump ] ; + sh:qualifiedValueShape [ sh:node components:variable-speed-pump ] ; sh:qualifiedMinCount 1 ; ] . From 67af3cc413a98c5404ee8b0be017cc886c4c0cf3 Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Thu, 22 Feb 2024 12:51:01 -0700 Subject: [PATCH 20/22] update HW valve switches --- libraries/ashrae/guideline36/4.11-hot-water-plant.ttl | 4 ++-- libraries/ashrae/guideline36/4.11-hot-water-plant.yml | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl index 4d78be347..37a32b20d 100644 --- a/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl @@ -123,7 +123,7 @@ sh:property [ rdfs:label "Boiler isolation valve closed end switch" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Switch_Status ] ; + sh:qualifiedValueShape [ sh:class brick:On_Status ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] ; @@ -131,7 +131,7 @@ sh:property [ rdfs:label "Boiler isolation valve open end switch" ; sh:path brick:hasPoint ; - sh:qualifiedValueShape [ sh:class brick:Switch_Status ] ; + sh:qualifiedValueShape [ sh:class brick:Off_Status ] ; sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] . diff --git a/libraries/ashrae/guideline36/4.11-hot-water-plant.yml b/libraries/ashrae/guideline36/4.11-hot-water-plant.yml index 0ecc72033..f2e1c58c6 100644 --- a/libraries/ashrae/guideline36/4.11-hot-water-plant.yml +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.yml @@ -91,18 +91,18 @@ isolation-valve: @prefix p: . @prefix brick: . p:name a brick:Isolation_Valve ; - brick:hasPoint p:iso-valve, p:closed-switch, p:open-switch . + brick:hasPoint p:iso-valve, p:closed-end-switch, p:open-end-switch . optional: ['closed-switch', 'open-switch'] dependencies: - template: https://brickschema.org/schema/Brick#On_Off_Command library: https://brickschema.org/schema/1.3/Brick args: {'name': 'iso-valve'} - - template: https://brickschema.org/schema/Brick#Switch_Status + - template: https://brickschema.org/schema/Brick#On_Status library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'closed-switch'} - - template: https://brickschema.org/schema/Brick#Switch_Status + args: {'name': 'closed-end-switch'} + - template: https://brickschema.org/schema/Brick#Off_Status library: https://brickschema.org/schema/1.3/Brick - args: {'name': 'open-switch'} + args: {'name': 'open-end-switch'} # 4.11.2 HW Pumps (see components.yml) From 89f0b92dbf59669e9c5fac977992d1ddf2ca12e1 Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Thu, 22 Feb 2024 12:52:08 -0700 Subject: [PATCH 21/22] update comment --- libraries/ashrae/guideline36/components.ttl | 3 +-- libraries/ashrae/guideline36/components.yml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/libraries/ashrae/guideline36/components.ttl b/libraries/ashrae/guideline36/components.ttl index 19962e7ae..e00162b97 100644 --- a/libraries/ashrae/guideline36/components.ttl +++ b/libraries/ashrae/guideline36/components.ttl @@ -272,8 +272,7 @@ sh:qualifiedMaxCount 1 ; ] . -# Loops - +# Valves # component of 4.10.3 and 4.11.3 :min-flow-bypass-valve a sh:NodeShape, owl:Class, bmotif:HVAC ; sh:class brick:Bypass_Valve ; diff --git a/libraries/ashrae/guideline36/components.yml b/libraries/ashrae/guideline36/components.yml index dbf9562ab..53f2396ef 100644 --- a/libraries/ashrae/guideline36/components.yml +++ b/libraries/ashrae/guideline36/components.yml @@ -209,9 +209,8 @@ variable-speed-pump: library: https://brickschema.org/schema/1.3/Brick args: {'name': 'dp'} -# Loops +# Valves # component of 4.10.3 and 4.11.3 - min-flow-bypass-valve: body: > @prefix p: . From 5680be8d19a4027244afcb2dd1e445594db1315f Mon Sep 17 00:00:00 2001 From: Matt Steen Date: Thu, 22 Feb 2024 15:26:32 -0700 Subject: [PATCH 22/22] syntax --- libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl index 247c9200c..41584859a 100644 --- a/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl +++ b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl @@ -126,7 +126,7 @@ # Temperature and relative humidity sensors are necessary for calculating wet bulb temperature for waterside # economizer sequences. Sensors are optional for plants without waterside economizers. sh:property [ - dfs:label "Outdoor Air Temperature" ; + rdfs:label "Outdoor Air Temperature" ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Outside_Air_Temperature_Sensor ] ; sh:qualifiedMinCount 0 ; @@ -252,7 +252,7 @@ # Temperature and relative humidity sensors are necessary for calculating wet bulb temperature for waterside # economizer sequences. Sensors are optional for plants without waterside economizers. sh:property [ - dfs:label "Outdoor Air Temperature" ; + rdfs:label "Outdoor Air Temperature" ; sh:path brick:hasPoint ; sh:qualifiedValueShape [ sh:class brick:Outside_Air_Temperature_Sensor ] ; sh:qualifiedMinCount 0 ;