What the Binary Output Object Is
The Binary Output object, defined in Clause 12.7 of ANSI/ASHRAE 135-2024, is how a BACnet device represents a two-state output it drives: a relay, a stage, or an on/off command. Where a Binary Input reports a contact you cannot change, a Binary Output is commandable, and clients write active or inactive to switch it.
Like the Analog Output, a Binary Output is commanded through a 16-slot priority array rather than a single writable value, so multiple controllers and operators can command the same output without conflict. It also adds Polarity (the input-style physical mapping) and two properties unique to switched loads: Minimum_On_Time and Minimum_Off_Time, which protect equipment from short-cycling. Binary Output objects that support intrinsic reporting apply the CHANGE_OF_STATE event algorithm.
Where You’ll See It
- Relay and stage control. Starting a fan, energizing a stage of heating, or switching a pump.
- Enable and command points. An operator or sequence turning equipment on and off from the head end (the central BMS server).
- Short-cycle protection. With
Minimum_On_TimeandMinimum_Off_Time, a Binary Output enforces a runtime floor so a compressor or motor is not switched too rapidly.
How Commanding Works
A WriteProperty to Present_Value does not set the output directly. It places active or inactive in one of 16 slots of the Priority_Array, chosen by the write’s priority (1 = highest, 16 = lowest). The object drives the highest-priority non-Null slot; writing Null at a priority relinquishes that command, and when every slot is Null the object falls back to Relinquish_Default. Current_Command_Priority reports the active slot. This is the same model the Analog Output uses, applied to a two-state value.
Required Properties
Clause 12.7 requires every Binary Output object to provide these properties. Datatypes are the spec’s names: BACnetBinaryPV is the two-state present value (active or inactive), BACnetPriorityArray is the 16-slot command array, and the other 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 binary-output for this object |
Present_Value | BACnetBinaryPV | The commanded state. 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, off-normal, or fault) |
Out_Of_Service | BOOLEAN | When true, Present_Value is decoupled from the physical output for testing |
Polarity | BACnetPolarity | Maps the logical state to the physical signal (normal or reverse) |
Priority_Array | BACnetPriorityArray | The 16 command slots; the highest-priority non-Null slot wins |
Relinquish_Default | BACnetBinaryPV | The state 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 properties integrators meet most are Minimum_On_Time and Minimum_Off_Time (short-cycle protection), the state labels Inactive_Text and Active_Text, and Feedback_Value (the sensed actual state, for proving the command took effect). The intrinsic-reporting group generally appears or is absent as a set.
| Property | Datatype | Group |
|---|---|---|
Description | CharacterString | General |
Device_Type | CharacterString | General |
Inactive_Text | CharacterString | State labels |
Active_Text | CharacterString | State labels |
Minimum_Off_Time | Unsigned32 | Switching protection |
Minimum_On_Time | Unsigned32 | Switching protection |
Change_Of_State_Time | BACnetDateTime | Runtime tracking |
Change_Of_State_Count | Unsigned | Runtime tracking |
Time_Of_State_Count_Reset | BACnetDateTime | Runtime tracking |
Elapsed_Active_Time | Unsigned32 | Runtime tracking |
Time_Of_Active_Time_Reset | BACnetDateTime | Runtime tracking |
Feedback_Value | BACnetBinaryPV | Commanding |
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 |
Time_Delay | Unsigned | Intrinsic reporting |
Notification_Class | Unsigned | 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 |
Interface_Value | BACnetOptionalBinaryPV | Integration |
Tags | BACnetARRAY[N] of BACnetNameValue | Tagging and profile |
Profile_Location | CharacterString | Tagging and profile |
Profile_Name | CharacterString | Tagging and profile |
Related Objects
- Binary Input: the read-only two-state counterpart for contacts and statuses.
- Binary Value: a two-state software point (a mode or enable flag).
- Analog Output: the modulating equivalent, with the same priority-array model.
What Chipkin Provides
The Binary Output object, including the priority array, minimum on/off timing, and CHANGE_OF_STATE intrinsic reporting, is a first-class object type in the CAS BACnet Stack. Talk to us about modeling your device’s points.
Related Pages
- BACnet
- BACnet Objects
- BACnet Binary Input Object
- BACnet Analog Output Object
- BACnet Object Types & Properties Reference
- BACnet’s Intrinsic Event Algorithms: CommandFailure and ChangeOfState on a commandable output