Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/xeto/ph.attrs/actuator.xeto
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//
// Copyright (c) 2026, Project-Haystack
// Licensed under the Academic Free License version 3.0
//
// History:
// 10 Mar 2026 Adam Garnhart Creation
//

// Actuator fail position specified by engineer (failOpen, failClosed, etc.)
ActuatorFailPositionDesignAttr : EnumAttr { design, actuator, val: ActuatorFailPosition }

// Actuator control action from manufacturer (modulating, twoPosition, floating)
ActuatorControlActionRatedAttr : EnumAttr { rated, actuator, val: ActuatorControlAction }

// Actuator physical mechanism from manufacturer (electricMotor, pneumatic, etc.)
ActuatorMechanismRatedAttr : EnumAttr { rated, actuator, val: ActuatorMechanism }
5 changes: 5 additions & 0 deletions src/xeto/ph.attrs/base.xeto
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ DateAttr: Attr <abstract> {
val: Date // Date value of the attribute
}

// Attribute with an enum value type
EnumAttr: Attr <abstract> {
val: Obj // Enum value of the attribute
}

// Attribute with a number value type
NumberAttr: Attr <abstract> {
val: Number // Number value of the attribute
Expand Down
16 changes: 16 additions & 0 deletions src/xeto/ph.attrs/valve.xeto
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//
// Copyright (c) 2026, Project-Haystack
// Licensed under the Academic Free License version 3.0
//
// History:
// 10 Mar 2026 Adam Garnhart Creation
//

// Valve function specified by engineer (isolation, control, mixing, etc.)
ValveFunctionDesignAttr : EnumAttr { design, valve, val: ValveFunction }

// Valve port configuration from manufacturer (twoWay, threeWay, fourWay)
ValvePortsRatedAttr : EnumAttr { rated, valve, val: ValvePorts }

// Valve body construction type from manufacturer (globe, butterfly, ball, etc.)
ValveBodyTypeRatedAttr : EnumAttr { rated, valve, val: ValveBodyType }
5 changes: 5 additions & 0 deletions src/xeto/ph/entity.xeto
Original file line number Diff line number Diff line change
Expand Up @@ -1448,6 +1448,11 @@ PhEntity: Entity <abstract> {
// may provide an interface for setpoint control.
*thermostat: Marker

// Self-actuated temperature regulation. Used as a feature marker on
// valves (e.g. thermostatic mixing valve) and other equipment where
// temperature drives the control action without an external actuator.
*thermostatic: Marker

// Three-phase AC electricity. Power is provided by three AC voltage
// sources, each separated from the others by a 120-degree phase angle.
// May have a 4-wire connection with a neutral (Wye) or a 3-wire connection
Expand Down
69 changes: 69 additions & 0 deletions src/xeto/ph/enums.xeto
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,41 @@
// Auto-generated 17-Jan-2025
//

// Control behavior of an actuator. Determines whether the actuator
// positions continuously (modulating), snaps between discrete states
// (twoPosition), or is driven by raise/lower signals without position
// feedback (floating).
ActuatorControlAction: Enum {
modulating // continuous proportional positioning (0-100%)
twoPosition // discrete open/closed (binary)
floating // motor driven by raise/lower signals, no position feedback
}

// Relationship between command signal direction and physical position.
// The Haystack convention is 0% = closed and 100% = open. The
// actuatorDirection tells tools when the raw BAS signal is inverted.
ActuatorDirection: Enum {
directActing // 0% signal = closed, 100% signal = open
reverseActing // 0% signal = open, 100% signal = closed
}

// Position an actuator assumes on loss of control signal or power.
// Applies to both valve and damper actuators.
ActuatorFailPosition: Enum {
failOpen // actuator drives/springs to fully open
failClosed // actuator drives/springs to fully closed
failInPlace // actuator holds last position (no spring return)
failToPosition // actuator drives to a configurable intermediate position
}

// Physical mechanism used by the actuator to produce motion.
ActuatorMechanism: Enum {
electricMotor // gear motor actuator (rotary or linear)
pneumatic // compressed air diaphragm or piston
hydraulic // hydraulic fluid piston
solenoid // electromagnetic coil (linear, typically on/off)
}

// Status of point's current value reading. The [ph::PhEntity.curVal] is only available
// when curStatus is "ok" or "stale". However a "stale" value should
// be used with caution since the local system does not have a fresh value.
Expand Down Expand Up @@ -521,6 +556,40 @@ PrimaryFunction: Enum {
zoo <key:"Zoo">
}

// Valve body construction type
ValveBodyType: Enum {
ball // quarter-turn spherical closure element
butterfly // quarter-turn rotating disc
gate // linear multi-turn wedge or knife
globe // linear rising-stem plug
needle // fine-adjustment variant of globe
plug // quarter-turn tapered or cylindrical plug
}

// Functional role of a valve in a piping system.
// Features like pressureIndependent and thermostatic are layered
// as separate markers rather than enum values.
ValveFunction: Enum {
balancing // proportional flow balancing
bypass // diverts flow around equipment
check // prevents reverse flow (non-return)
control // modulating or two-position BAS control
diverting // splits one inlet to two outlets
expansion // thermal expansion relief
isolation // on/off service isolation
mixing // blends two inlets to one outlet
pressureReducing // downstream pressure regulation
relief // overpressure safety relief
safety // code-required overpressure protection (ASME rated)
}

// Number of ports on a valve body
ValvePorts: Enum {
twoWay // single inlet, single outlet
threeWay // two inlets/one outlet or one inlet/two outlets
fourWay // two inlets, two outlets (rare)
}

// Enumeration of weather conditions
WeatherCondEnum: Enum {
unknown
Expand Down
24 changes: 20 additions & 4 deletions src/xeto/ph/equip.xeto
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ AcEvsePort: EvsePort {
// hydraulics, or pneumatics.
Actuator: Equip {
actuator
actuatorDirection: ActuatorDirection?
}

// Air Handling Unit: An enclosure with a fan that delivers air to a space
Expand Down Expand Up @@ -174,12 +175,19 @@ Crac: Fcu {
crac
}

// Actuator to regulate the flow of air.
DamperActuator: Actuator {
// Equipment to regulate the flow of air in ductwork. Dampers may be
// manually operated or automated via an actuator. Non-actuated dampers
// such as manual balancing dampers, backdraft dampers, and fire dampers
// use this spec directly. BAS-controlled dampers use DamperActuator.
Damper: Equip <abstract> {
damper
ductSection: DuctSection?
}

// Actuator to regulate the flow of air.
DamperActuator: Actuator & Damper {
}

// DC Electricity meter.
// See [ph.doc::Meters] chapter.
DcElecMeter: ElecMeter {
Expand Down Expand Up @@ -481,13 +489,21 @@ Ups: Equip {
ups
}

// Actuator to regulate the flow of fluid.
ValveActuator: Actuator {
// Equipment to regulate the flow of fluid in piping. Valves may be
// manually operated, self-actuated, or automated via an actuator.
// Non-actuated valves such as manual isolation valves, check valves,
// pressure-reducing valves, and thermostatic mixing valves use this
// spec directly. BAS-controlled valves use ValveActuator.
Valve: Equip <abstract> {
valve
pipeFluid: Fluid?
pipeSection: PipeSection?
}

// Actuator to regulate the flow of fluid.
ValveActuator: Actuator & Valve {
}

// Variable air volume terminal unit. VAV systems use a constant air
// temperature with a variable air flow rate. See [ph.doc::VAVs] chapter.
Vav: AirTerminalUnit {
Expand Down