Skip to content
Version 6.1.0
Contact Us

Multi-state Output

A Multi-state Output object models an output that can take one of several numbered states, such as a fan with Off, Low, Medium and High. A client writes the state number to command it. The object reports the number of states and can carry a text label for each one.

  • Fan speed selection: Off, Low, Medium, High
  • Chiller or boiler operating mode
  • Damper or valve preset position
  • Lighting scene selector
  • Pump staging mode
Property What it holds
Present_Value The commanded state, a number from 1 to Number_Of_States. A client writes it at a priority; the value in force is the highest-priority entry of the priority array.
Number_Of_States How many states the output has. Valid values of Present_Value run from 1 up to this number.
State_Text An optional array of labels, one per state. Clients show these instead of bare numbers.
Priority_Array Sixteen slots, one per command priority. A slot is either empty (relinquished) or holds a state.
Relinquish_Default The state used when every slot of the priority array is empty.
Feedback_Value Optional. The state the physical equipment reports back, used to detect a command that did not take effect.

The object is always commandable. When it reports intrinsic events, the standard pairs it with the COMMAND_FAILURE algorithm: the object goes off-normal when the commanded state and Feedback_Value disagree for the time delay, and returns to normal once they agree again. COV notifications go out on any change to Present_Value or Status_Flags.

Enable it with the STACK_OPTION_OBJECT_TYPE_MULTISTATE_OUTPUT build option and add each object with BACnetStack_AddObject. The stack always treats this type as commandable. It reads the priority array, one slot at a time, through the callback you register with BACnetStack_RegisterCallbackGetPropertyBool (is the slot empty) and the BACnetStack_RegisterCallbackGetPropertyUnsignedInteger callback (the state), and applies writes through the BACnetStack_RegisterCallbackSetPropertyUnsignedInteger callback. It never calls the plain Present_Value getter. To alarm on a disagreement with the feedback, enable alarms for the object and call BACnetStack_SetIntrinsicCommandFailureAlgorithm. Call BACnetStack_UpdateValue whenever the value you serve changes, so COV, trend logs and alarms see it.

Multi-state Input, Multi-state Value, Binary Output

The properties ASHRAE 135-2024 clause 12.19 defines for this object type.

How to read the table:

  • Conformance is what the standard asks of every object of this type: R is required, W is required and writable by a client, O is optional. A digit after the letter marks a condition in the standard that decides when the property is present or writable, such as support for intrinsic reporting.
  • Present by default: yes means the stack presents the property as soon as you add the object; no means it is optional and you turn it on with BACnetStack_SetPropertyEnabled. This is the stack’s starting setup, so it can differ from the conformance code.
  • Writable is whether a client can write the property by default. Change it with BACnetStack_SetPropertyWritable.
  • not in profile means the stack does not offer this property for this object type.
  • Value when your callback does not answer: “Held by the stack” means the stack stores and serves the value itself and does not ask your callbacks. Otherwise it is the value the stack answers when your callback declines or is not registered.
Property Datatype Conformance Present by default Writable Value when your callback does not answer
Object_Identifier BACnetObjectIdentifier R yes no Held by the stack.
Object_Name CharacterString R yes no "Object <type>,<instance>", such as "Object 0,1" for Analog Input 1.
Object_Type BACnetObjectType R yes no Held by the stack.
Present_Value Unsigned W yes yes Built by the stack from the priority array your callbacks serve, or Relinquish_Default when every slot is empty.
Description CharacterString O no no ""
Device_Type CharacterString O no no ""
Status_Flags BACnetStatusFlags R yes no Built by the stack from your callbacks.
Event_State BACnetEventState R yes no 0
Reliability BACnetReliability O no no 0
Out_Of_Service Boolean R yes no false
Number_Of_States Unsigned R yes no No default: value-not-initialized until a callback or a client write supplies one.
State_Text BACnetARRAY[N] of CharacterString O no no ""
Priority_Array BACnetARRAY[16] of BACnetOptionalUnsigned R yes no Built by the stack from your callbacks.
Relinquish_Default Unsigned R yes no No default: value-not-initialized until a callback or a client write supplies one.
Time_Delay Unsigned O1,3 no no 0
Notification_Class Unsigned O1,3 no no 0
Feedback_Value Unsigned O1 no no 0
Event_Enable BACnetEventTransitionBits O1,3 no no An empty bit string.
Acked_Transitions BACnetEventTransitionBits O1,3 no no An empty bit string.
Notify_Type BACnetNotifyType O1,3 no no 0
Event_Time_Stamps BACnetARRAY[3] of BACnetTimeStamp O1,3 no no No default: the read fails.
Event_Message_Texts BACnetARRAY[3] of CharacterString O3 no no ""
Event_Message_Texts_Config BACnetARRAY[3] of CharacterString O3 no no ""
Event_Detection_Enable Boolean O1,3 no no false
Event_Algorithm_Inhibit_Ref BACnetObjectPropertyReference O3 no no No default: the read fails.
Event_Algorithm_Inhibit Boolean O3,4 no no false
Time_Delay_Normal Unsigned O3 no no 0
Reliability_Evaluation_Inhibit Boolean O5 no no false
Property_List BACnetARRAY[N] of BACnetPropertyIdentifier R yes no Held by the stack.
Interface_Value BACnetOptionalUnsigned O no no Null
Current_Command_Priority BACnetOptionalUnsigned R yes no Built by the stack from your callbacks.
Value_Source BACnetValueSource O6,8,10 no no No default: the read fails.
Value_Source_Array BACnetARRAY[16] of BACnetValueSource O7,9 no no No default: the read fails.
Last_Command_Time BACnetTimeStamp O7,9 no no No default: the read fails.
Command_Time_Array BACnetARRAY[16] of BACnetTimeStamp O9 no no No default: the read fails.
Audit_Level BACnetAuditLevel O11 not in profile not in profile No default: the read fails.
Auditable_Operations BACnetAuditOperationFlags O11 not in profile not in profile No default: the read fails.
Audit_Priority_Filter BACnetOptionalPriorityFilter O11 not in profile not in profile No default: the read fails.
Tags BACnetARRAY[N] of BACnetNameValue O no no No default: the read fails.
Profile_Location CharacterString O no no ""
Profile_Name CharacterString O no no ""