What the Multi-state Value Object Is
The Multi-state Value object, defined in Clause 12.20 of ANSI/ASHRAE 135-2024, represents a multi-state value inside a BACnet device that is not tied to physical I/O. Where a Binary Value is a two-state software flag, a Multi-state Value holds one of several named states: a system mode of occupied, unoccupied, or standby; a control strategy selector; any enumerated software setting.
Present_Value is an unsigned integer from 1 to Number_Of_States, each mapped to a label through the optional State_Text array. A Multi-state Value can be read-only or commandable; when commandable it carries the priority array, when a simple stored mode it does not. Multi-state Value objects that support intrinsic reporting apply the CHANGE_OF_STATE event algorithm.
Where You’ll See It
- System modes. An occupancy mode or operating mode a scheduler or operator sets and many controllers read.
- Strategy selectors. A software selection of one control strategy from several, with no physical switch.
- Enumerated setpoints. A named preference (eco, comfort, boost) exposed as a shared value.
Required Properties
Clause 12.20 requires every Multi-state Value object to provide these properties. Datatypes are the spec’s names: Unsigned is 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 multi-state-value for this object |
Present_Value | Unsigned | The state, 1 to Number_Of_States. Read-only or commandable depending on the instance |
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 for testing and override |
Number_Of_States | Unsigned | How many discrete states this object has |
Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | The list of properties this instance actually implements |
When the object is commandable, it additionally implements Priority_Array, Relinquish_Default, and Current_Command_Priority. See How Commanding Works on the Multi-state Output page for the priority-array model.
Optional Properties
The properties integrators meet most are State_Text (the label for each state number), Alarm_Values and Fault_Values (which states alarm or fault), and, on commandable instances, the command-tracking group. The intrinsic-reporting group generally appears or is absent as a set.
| Property | Datatype | Group |
|---|---|---|
Description | CharacterString | General |
State_Text | BACnetARRAY[N] of CharacterString | State labels |
Priority_Array | BACnetPriorityArray | Commanding |
Relinquish_Default | Unsigned | Commanding |
Current_Command_Priority | BACnetOptionalUnsigned | 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 |
Alarm_Values | BACnetLIST of Unsigned | Intrinsic reporting |
Fault_Values | BACnetLIST of Unsigned | Fault detection |
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 |
Tags | BACnetARRAY[N] of BACnetNameValue | Tagging and profile |
Profile_Location | CharacterString | Tagging and profile |
Profile_Name | CharacterString | Tagging and profile |
Related Objects
- Multi-state Input: a multi-state value from a physical input.
- Multi-state Output: a multi-state value commanded to hardware.
- Binary Value: the two-state software-point equivalent.
What Chipkin Provides
The Multi-state Value object, in both read-only and commandable forms, is a first-class object type in the CAS BACnet Stack. Talk to us about modeling your device’s points.