What the Analog Output Object Is
The Analog Output object, defined in Clause 12.3 of ANSI/ASHRAE 135-2024, is the standardized way a BACnet device represents an analog output: a value the device drives out to the physical world, such as a valve position, damper command, or fan-speed signal. Where an Analog Input reports a reading you cannot change, an Analog Output is commandable: clients write to it to move the physical output.
Because many controllers, sequences, and operators may all want to command the same output, the Analog Output does not hold a single writable value. It holds a priority array, and the value that actually reaches the hardware is arbitrated by priority. That mechanism is the defining feature of this object type. Analog Output objects that support intrinsic reporting apply the OUT_OF_RANGE event algorithm.
Where You’ll See It
- Modulating equipment. Valve and damper actuators, variable-frequency drives, and any 0-10V or 4-20mA output a controller drives is typically an Analog Output object.
- Setpoint downloads. A supervisory controller writing a reset setpoint to a field controller writes an Analog Output (or Analog Value) with a chosen priority.
- Overrides. An operator forcing a valve open from the head end writes the Analog Output at a high priority; releasing the override writes
Nullat that priority to hand control back.
How Commanding Works
A WriteProperty to Present_Value does not set the output directly. It places the value in one of 16 slots of the Priority_Array, chosen by the write’s priority (1 = highest, 16 = lowest). The object then presents the highest-priority non-Null slot as Present_Value and drives that to the hardware. Writing Null at a priority clears that slot (relinquishes the command). When every slot is Null, the object falls back to Relinquish_Default. Current_Command_Priority reports which slot is currently in control. This is why two operators can both “write the valve” without conflict: the priority decides who wins, and releasing a command restores whoever was next in line.
Required Properties
Clause 12.3 requires every Analog Output object to provide these properties. Datatypes are the spec’s names: REAL is a floating-point number, 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 analog-output for this object |
Present_Value | REAL | The commanded output value. Writable, but through the priority array, not as a direct store |
Status_Flags | BACnetStatusFlags | Four health flags: in-alarm, fault, overridden, out-of-service |
Event_State | BACnetEventState | The object’s current event state (normal, high-limit, low-limit, or fault for this object type) |
Out_Of_Service | BOOLEAN | When true, Present_Value is decoupled from the physical output for testing |
Units | BACnetEngineeringUnits | The engineering units of the value (percent, degrees, pascals) |
Priority_Array | BACnetPriorityArray | The 16 command slots; the highest-priority non-Null slot wins |
Relinquish_Default | REAL | The value the output takes when every priority slot is Null |
Current_Command_Priority | BACnetOptionalUnsigned | Which priority slot (1-16) is currently in control, or none |
Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | The list of properties this instance actually implements |
Optional Properties
The optional set adds alarming, fault detection, and command-tracking. The properties integrators meet most are the alarm-limit group (High_Limit, Low_Limit, Deadband, Limit_Enable), COV_Increment, and the command-tracking group (Value_Source, Last_Command_Time), which records who last commanded the output and when. The intrinsic-reporting group generally appears or is absent as a set.
| Property | Datatype | Group |
|---|---|---|
Description | CharacterString | General |
Device_Type | CharacterString | General |
Resolution | REAL | General |
Min_Pres_Value | REAL | Value range |
Max_Pres_Value | REAL | Value range |
COV_Increment | REAL | COV reporting |
Time_Delay | Unsigned | Intrinsic reporting |
Notification_Class | Unsigned | Intrinsic reporting |
High_Limit | REAL | Intrinsic reporting |
Low_Limit | REAL | Intrinsic reporting |
Deadband | REAL | Intrinsic reporting |
Limit_Enable | BACnetLimitEnable | 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 |
Value_Source | BACnetValueSource | Commanding |
Value_Source_Array | BACnetARRAY[16] of BACnetValueSource | Commanding |
Last_Command_Time | BACnetTimeStamp | Commanding |
Command_Time_Array | BACnetARRAY[16] of BACnetTimeStamp | Commanding |
Audit_Level | BACnetAuditLevel | Auditing |
Auditable_Operations | BACnetAuditOperationFlags | Auditing |
Interface_Value | BACnetOptionalREAL | Integration |
Tags | BACnetARRAY[N] of BACnetNameValue | Tagging and profile |
Profile_Location | CharacterString | Tagging and profile |
Profile_Name | CharacterString | Tagging and profile |
Related Objects
- Analog Input: the read-only counterpart for a measured value.
- Analog Value: a commandable analog point with no physical output behind it (a shared setpoint or software value).
- Binary Output: the two-state commandable equivalent, with the same priority-array model.
What Chipkin Provides
The Analog Output object, including the 16-level priority array and Relinquish_Default arbitration, is a first-class object type in the CAS BACnet Stack. Talk to us about modeling your device’s points.