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..41584859a --- /dev/null +++ b/libraries/ashrae/guideline36/4.10-chilled-water-plant.ttl @@ -0,0 +1,1281 @@ +@prefix sh: . +@prefix brick: . +@prefix rdfs: . +@prefix owl: . +@prefix bmotif: . +@prefix components: . +@prefix : . + +: a owl:Ontology . + +# 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 + ] ; + # 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 [ + rdfs: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 ; + 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: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 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 + ] ; + # 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 [ + rdfs: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 ; + 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:path brick:hasPoint ; + 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 + ] ; + # 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 ; + 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 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." ; + 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:path brick:hasPoint ; + 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:path brick:hasPoint ; + 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 + ] . + +# 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 ; + # 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:Speed_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 + ] . + +#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 ; + # 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. + +: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 TODO check + 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:path brick:hasPoint ; + 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 ; + 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:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:node brick:Valve_Position_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 + ] ; + # 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.10-chilled-water-plant.yml b/libraries/ashrae/guideline36/4.10-chilled-water-plant.yml new file mode 100644 index 000000000..201117c5b --- /dev/null +++ b/libraries/ashrae/guideline36/4.10-chilled-water-plant.yml @@ -0,0 +1,844 @@ +# 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', + '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 + 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, + p: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:local-auto-switch, + 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'} + - 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#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': 'local-auto-switch'} + - 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:bypass-valve . + dependencies: + - template: https://brickschema.org/schema/Brick#On_Off_Command + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'bypass-valve'} + +ch-cw-isolation-valve: + body: > + @prefix p: . + @prefix brick: . + @prefix sh: . + p:name a brick:Condenser_Water_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: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'} + - 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'} + +# 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, + 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-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-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'} + - 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: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': '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'} + +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 . + 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'} \ No newline at end of file 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..37a32b20d --- /dev/null +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.ttl @@ -0,0 +1,445 @@ +@prefix sh: . +@prefix brick: . +@prefix rdfs: . +@prefix owl: . +@prefix bmotif: . +@prefix components: . +@prefix : . + +: a owl:Ontology . + +# 4.11 Hot Water Plant + +:hot-water-plant a sh:NodeShape, owl:Class, bmotif:System_Specification ; + sh:or ( + sh:node :primary-only-plant + sh:node :primary-secondary-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: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 + ] . + +: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: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 + ] . + +# 4.11.1 Boilers +# TODO add dedicated boiler pump + +:boiler a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Boiler" ; + sh:class brick:Boiler ; + # required + sh:property [ + rdfs:label "Boiler enable" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Command ] ; + 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:Valve_Status ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] . + +# 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 ; + # applications, required if present + sh:property [ + rdfs:label "Boiler isolation valve" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:On_Off_Command ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] ; + # Retain the following two points for optional valve end switch status feedback. + # optional + sh:property [ + rdfs:label "Boiler 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 "Boiler isolation valve open end switch" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Off_Status ] ; + 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-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 "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 ) + ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # HW Min flow bypass valve see variable-primary-only-loop + # 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 ; + ] ; + # 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 ; + sh:qualifiedValueShape [ sh:class brick:Pressure_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] . + # 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" ; + 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 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 components:min-flow-bypass-valve ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # 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." ; + 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 ; + ] . + +# 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 + sh:property [ + rdfs:label "HW supply temperature" ; + rdfs:comment "Optional for primary-secondary plants." ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Hot_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] ; + # 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." ; + 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:variable-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" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Hot_Water_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:Entering_Hot_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # applications, TODO unclear what the application is + sh:property [ + rdfs:label "Secondary HW supply or return flow" ; + 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 ; + ] ; + # 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 ; + sh:qualifiedValueShape [ sh:class brick:Leaving_Hot_Water_Temperature_Sensor ] ; + sh:qualifiedMinCount 0 ; + sh:qualifiedMaxCount 1 ; + ] . + +:constant-secondary-loop a sh:NodeShape, owl:Class, bmotif:HVAC ; + rdfs:label "Constant Secondary HW 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 HW 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 HW Loop" ; + sh:class brick:Hot_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 HW Loop" ; + sh:class brick:Hot_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 :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 ; + ] . + +: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 [ + 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 HW Loop" ; + sh:class brick:Hot_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 :variable-secondary-loop ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMaxCount 1 ; + ] ; + # 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 ; + ] ; + # 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:qualifiedMaxCount 1 ; + ] . 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..f2e1c58c6 --- /dev/null +++ b/libraries/ashrae/guideline36/4.11-hot-water-plant.yml @@ -0,0 +1,348 @@ +# 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: . + @prefix sh: . + p:name a brick:Hot_Water_System ; + brick:hasPart p:boiler, + 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'} + - template: constant-primary-only-loop + args: {'name': 'constant-primary-only-loop'} + - template: variable-primary-only-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, + 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', + 'variable-primary-constant-secondary-loop', + '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 + 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: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': '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': 'firing-rate'} + - template: https://brickschema.org/schema/Brick#Valve_Status + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'nat-gas-flow'} + +isolation-valve: + body: > + @prefix p: . + @prefix brick: . + p:name a brick:Isolation_Valve ; + 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#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'} + +# 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: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 + 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': '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'} + +# TODO check syntax for loop hwr temp +variable-primary-only-loop: + body: > + @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: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': 'loop-hwr-temp'} + - template: https://brickschema.org/schema/Brick#Entering_Hot_Water_Flow_Sensor + library: https://brickschema.org/schema/1.3/Brick + args: {'name': 'plant-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: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 + 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': 'gauge-pressure'} + +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: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'} + +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: . + @prefix sh: . + p:name a brick:Hot_Water_Loop ; + brick:hasPart [ + p:constant-primary-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: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: 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 + 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 diff --git a/libraries/ashrae/guideline36/components.ttl b/libraries/ashrae/guideline36/components.ttl index fe00495f8..e00162b97 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" ; @@ -170,3 +170,117 @@ sh:qualifiedMinCount 0 ; sh:qualifiedMaxCount 1 ; ] . + +# Water-Side + +# Pumps +# 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" ; + 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:On_Off_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: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:Speed_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: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: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 ; + ] . + +# 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 ; + # applications, required if present + sh:property [ + rdfs:label "Min Flow Bypass Valve" ; + sh:path brick:hasPoint ; + sh:qualifiedValueShape [ sh:class brick:Valve_Position_Command ] ; + sh:qualifiedMinCount 1 ; + sh:qualifiedMinCount 1 ; + ] . diff --git a/libraries/ashrae/guideline36/components.yml b/libraries/ashrae/guideline36/components.yml index 9dbd48463..53f2396ef 100644 --- a/libraries/ashrae/guideline36/components.yml +++ b/libraries/ashrae/guideline36/components.yml @@ -138,3 +138,86 @@ 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'} + +# Valves +# 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