What the Loop Object Is
The Loop object, defined in Clause 12.17 of ANSI/ASHRAE 135-2024, is the standardized way a BACnet device exposes a feedback control loop: the proportional-integral-derivative (PID) mechanism that drives an output to hold a controlled variable at its setpoint. A loop that modulates a heating valve to keep a discharge-air temperature at setpoint is the everyday example.
The object separates the three parts of the loop into properties. Controlled_Variable_Reference points at the measured value being held, Setpoint (or Setpoint_Reference) is the target, and Manipulated_Variable_Reference points at the output the loop writes through Priority_For_Writing. The gain constants (Proportional_Constant, Integral_Constant, Derivative_Constant) tune the response, with no assumed units since the algorithm is a local matter. Present_Value is the loop’s current output. When a Loop supports intrinsic reporting it applies the FLOATING_LIMIT event algorithm, alarming when the controlled variable drifts too far from setpoint.
Where You’ll See It
- Modulating control. A Loop drives a valve, damper, or variable-speed output to hold a temperature, pressure, or flow at setpoint.
- Exposed tuning. Because the gain constants are readable and writable properties, a technician can tune a loop over the network rather than at the panel.
- Cascade and reset.
Setpoint_Referencelets one loop’s output become another loop’s setpoint, the basis of reset and cascade strategies.
Required Properties
Clause 12.17 requires every Loop object to provide these properties. Datatypes are the spec’s names: REAL is a floating-point number, Unsigned an integer, BOOLEAN a true/false flag, and the BACnet-prefixed types are structured values defined by the standard.
| Property | Datatype | What it holds |
|---|---|---|
Object_Identifier | BACnetObjectIdentifier | The object’s type and instance number, unique within the device |
Object_Name | CharacterString | The human-readable point name, unique within the device |
Object_Type | BACnetObjectType | Always loop for this object |
Present_Value | REAL | The loop’s current output value |
Status_Flags | BACnetStatusFlags | Four health flags: in-alarm, fault, overridden, out-of-service |
Event_State | BACnetEventState | The object’s current event state (normal or off-normal when the value floats out of limits) |
Out_Of_Service | BOOLEAN | When true, the loop calculation is decoupled for testing and override |
Output_Units | BACnetEngineeringUnits | The engineering units of the loop’s output |
Manipulated_Variable_Reference | BACnetObjectPropertyReference | The output property the loop drives |
Controlled_Variable_Reference | BACnetObjectPropertyReference | The measured property the loop holds at setpoint |
Controlled_Variable_Value | REAL | The current value of the controlled variable |
Controlled_Variable_Units | BACnetEngineeringUnits | The engineering units of the controlled variable |
Setpoint_Reference | BACnetSetpointReference | An optional external source for the setpoint (for cascade and reset) |
Setpoint | REAL | The target value the loop drives toward |
Action | BACnetAction | Whether the output rises or falls as the error grows (direct or reverse) |
Priority_For_Writing | Unsigned | The priority slot used when writing to the manipulated output |
Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | The list of properties this instance actually implements |
Optional Properties
The properties integrators meet most are the PID gain constants (Proportional_Constant, Integral_Constant, Derivative_Constant) and the output clamps (Maximum_Output, Minimum_Output). The intrinsic-reporting group appears or is absent as a set.
| Property | Datatype | Group |
|---|---|---|
Description | CharacterString | General |
Update_Interval | Unsigned | General |
Proportional_Constant | REAL | Tuning |
Proportional_Constant_Units | BACnetEngineeringUnits | Tuning |
Integral_Constant | REAL | Tuning |
Integral_Constant_Units | BACnetEngineeringUnits | Tuning |
Derivative_Constant | REAL | Tuning |
Derivative_Constant_Units | BACnetEngineeringUnits | Tuning |
Bias | REAL | Tuning |
Maximum_Output | REAL | Tuning |
Minimum_Output | REAL | Tuning |
COV_Increment | REAL | COV reporting |
Time_Delay | Unsigned | Intrinsic reporting |
Notification_Class | Unsigned | Intrinsic reporting |
Error_Limit | REAL | Intrinsic reporting |
Deadband | REAL | Intrinsic reporting |
Low_Diff_Limit | BACnetOptionalREAL | Intrinsic reporting |
Event_Enable | BACnetEventTransitionBits | Intrinsic reporting |
Acked_Transitions | BACnetEventTransitionBits | Intrinsic reporting |
Notify_Type | BACnetNotifyType | Intrinsic reporting |
Event_Time_Stamps | BACnetARRAY[3] of BACnetTimeStamp | Intrinsic reporting |
Event_Message_Texts | BACnetARRAY[3] of CharacterString | Intrinsic reporting |
Event_Message_Texts_Config | BACnetARRAY[3] of CharacterString | Intrinsic reporting |
Event_Detection_Enable | BOOLEAN | Intrinsic reporting |
Event_Algorithm_Inhibit_Ref | BACnetObjectPropertyReference | Intrinsic reporting |
Event_Algorithm_Inhibit | BOOLEAN | Intrinsic reporting |
Time_Delay_Normal | Unsigned | Intrinsic reporting |
Reliability | BACnetReliability | Fault detection |
Reliability_Evaluation_Inhibit | BOOLEAN | Fault detection |
Audit_Level | BACnetAuditLevel | Auditing |
Auditable_Operations | BACnetAuditOperationFlags | Auditing |
Tags | BACnetARRAY[N] of BACnetNameValue | Tagging and profile |
Profile_Location | CharacterString | Tagging and profile |
Profile_Name | CharacterString | Tagging and profile |
Related Objects
- Analog Input: a typical source for the controlled variable a Loop holds at setpoint.
- Analog Output: a typical manipulated output a Loop drives through its priority slot.
- Analog Value: often holds the setpoint a Loop references.
What Chipkin Provides
The Loop object exposes a PID control loop with its gain constants, output clamps, and FLOATING_LIMIT intrinsic reporting as network-visible properties. Talk to us about modeling your device’s points.