BACnet Multi-state Output Object

The BACnet Multi-state Output object (Clause 12.19) is a commandable multi-state point: its priority array, Number_Of_States model

What the Multi-state Output Object Is

The Multi-state Output object, defined in Clause 12.19 of ANSI/ASHRAE 135-2024, is how a BACnet device represents a commandable output that has more than two states. Where a Binary Output switches between two states, a Multi-state Output commands one of several: a fan to off, low, medium, or high; a valve to one of a set of named positions.

Present_Value is an unsigned integer from 1 to Number_Of_States, each mapped to a label through the optional State_Text array. Like every commandable BACnet object, it is written through a 16-slot priority array rather than a direct store, so multiple controllers can command the same output without conflict. Multi-state Output objects that support intrinsic reporting apply the CHANGE_OF_STATE event algorithm.

Where You’ll See It

  • Multi-speed and multi-position control. Commanding a fan speed, a multi-stage heater, or a positioned damper to a named state.
  • Mode commands. Driving a piece of equipment to a selected operating mode over BACnet.
  • Sequenced outputs. A single object commanding one of several states in a defined order.

How Commanding Works

A WriteProperty to Present_Value places the requested state number 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 multi-state value.

Required Properties

Clause 12.19 requires every Multi-state Output object to provide these properties. Datatypes are the spec’s names: Unsigned is an integer, BACnetPriorityArray is the 16-slot command array, and the other BACnet-prefixed types are structured values defined by the standard.

PropertyDatatypeWhat it holds
Object_IdentifierBACnetObjectIdentifierThe object’s type and instance number, unique within the device
Object_NameCharacterStringThe human-readable point name, unique within the device
Object_TypeBACnetObjectTypeAlways multi-state-output for this object
Present_ValueUnsignedThe commanded state, 1 to Number_Of_States. Writable, but through the priority array
Status_FlagsBACnetStatusFlagsFour health flags: in-alarm, fault, overridden, out-of-service
Event_StateBACnetEventStateThe object’s current event state (normal, off-normal, or fault)
Out_Of_ServiceBOOLEANWhen true, Present_Value is decoupled from the physical output for testing
Number_Of_StatesUnsignedHow many discrete states this object has
Priority_ArrayBACnetPriorityArrayThe 16 command slots; the highest-priority non-Null slot wins
Relinquish_DefaultUnsignedThe state the output takes when every priority slot is Null
Current_Command_PriorityBACnetOptionalUnsignedWhich priority slot (1-16) is currently in control, or none
Property_ListBACnetARRAY[N] of BACnetPropertyIdentifierThe list of properties this instance actually implements

Optional Properties

The properties integrators meet most are State_Text (the label for each state number) 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.

PropertyDatatypeGroup
DescriptionCharacterStringGeneral
Device_TypeCharacterStringGeneral
State_TextBACnetARRAY[N] of CharacterStringState labels
Feedback_ValueUnsignedCommanding
Value_SourceBACnetValueSourceCommanding
Value_Source_ArrayBACnetARRAY[16] of BACnetValueSourceCommanding
Last_Command_TimeBACnetTimeStampCommanding
Command_Time_ArrayBACnetARRAY[16] of BACnetTimeStampCommanding
Time_DelayUnsignedIntrinsic reporting
Notification_ClassUnsignedIntrinsic reporting
Event_EnableBACnetEventTransitionBitsIntrinsic reporting
Acked_TransitionsBACnetEventTransitionBitsIntrinsic reporting
Notify_TypeBACnetNotifyTypeIntrinsic reporting
Event_Time_StampsBACnetARRAY[3] of BACnetTimeStampIntrinsic reporting
Event_Message_TextsBACnetARRAY[3] of CharacterStringIntrinsic reporting
Event_Message_Texts_ConfigBACnetARRAY[3] of CharacterStringIntrinsic reporting
Event_Detection_EnableBOOLEANIntrinsic reporting
Event_Algorithm_Inhibit_RefBACnetObjectPropertyReferenceIntrinsic reporting
Event_Algorithm_InhibitBOOLEANIntrinsic reporting
Time_Delay_NormalUnsignedIntrinsic reporting
ReliabilityBACnetReliabilityFault detection
Reliability_Evaluation_InhibitBOOLEANFault detection
Audit_LevelBACnetAuditLevelAuditing
Auditable_OperationsBACnetAuditOperationFlagsAuditing
Interface_ValueBACnetOptionalUnsignedIntegration
TagsBACnetARRAY[N] of BACnetNameValueTagging and profile
Profile_LocationCharacterStringTagging and profile
Profile_NameCharacterStringTagging and profile

What Chipkin Provides

The Multi-state Output object, including the priority array and the State_Text label model, is a first-class object type in the CAS BACnet Stack. Talk to us about modeling your device’s points.