Skip to content
Version 6.1.0
Contact Us

Loop

A Loop object represents a control loop, usually PID, in a controller. It exposes the loop’s output, the controlled variable, the setpoint and the tuning gains, so a client can watch and tune the loop. A controller exposes one per loop that operators need to see.

  • Tune the gains of a temperature control loop
  • Show setpoint, process value and output on one screen
  • Alarm when the process drifts from the setpoint
  • Switch a loop between automatic and manual
Property What it holds
Present_Value The loop’s current output.
Controlled_Variable_Value The measured value the loop is controlling.
Setpoint The target for the controlled variable.
Proportional_Constant The proportional gain. Integral and derivative gains have their own properties.
Manipulated_Variable_Reference The property the loop writes its output to.
Action Whether the loop acts directly or in reverse.

The loop algorithm itself is a local matter in the device. The standard pairs the Loop with the FLOATING_LIMIT algorithm, which alarms when the controlled variable drifts too far from the setpoint. It sends change-of-value notices when Present_Value moves by COV_Increment.

Enable it with the STACK_OPTION_OBJECT_TYPE_LOOP build option and add each object with BACnetStack_AddObject. Serve Present_Value with the callback you register with BACnetStack_RegisterCallbackGetPropertyReal and accept writes with the BACnetStack_RegisterCallbackSetPropertyReal callback; Object_Name uses the BACnetStack_RegisterCallbackGetPropertyCharacterString callback. The stack does not run the PID algorithm; your application does. Arm the drift alarm with BACnetStack_SetAlarmsAndEventsForObjectEnabled and then BACnetStack_SetIntrinsicFloatingLimitAlgorithm, which takes the setpoint and separate low and high difference limits.

Analog Input, Analog Output, Analog Value

The properties ASHRAE 135-2024 clause 12.17 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 Real R7 yes no (yes while Out_Of_Service is true) No default: value-not-initialized.
Description 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 O7 no no (yes while Out_Of_Service is true) 0
Out_Of_Service Boolean R yes no false
Update_Interval Unsigned O no no 0
Output_Units BACnetEngineeringUnits R yes no 0
Manipulated_Variable_Reference BACnetObjectPropertyReference R yes no No default: the read fails.
Controlled_Variable_Reference BACnetObjectPropertyReference R yes no No default: the read fails.
Controlled_Variable_Value Real R yes no 0.0
Controlled_Variable_Units BACnetEngineeringUnits R yes no 0
Setpoint_Reference BACnetSetpointReference R yes no No default: the read fails.
Setpoint Real R yes no 0.0
Action BACnetAction R yes no 0
Proportional_Constant Real O1 no no 0.0
Proportional_Constant_Units BACnetEngineeringUnits O1 no no 0
Integral_Constant Real O2 no no 0.0
Integral_Constant_Units BACnetEngineeringUnits O2 no no 0
Derivative_Constant Real O3 no no 0.0
Derivative_Constant_Units BACnetEngineeringUnits O3 no no 0
Bias Real O no no 0.0
Maximum_Output Real O no no 0.0
Minimum_Output Real O no no 0.0
Priority_For_Writing Unsigned(1..16) R yes no 0
COV_Increment Real O4 no no 0.0
Time_Delay Unsigned O5,8 no no 0
Notification_Class Unsigned O5,8 no no 0
Error_Limit Real O5,8 no no 0.0
Deadband Real O5,8 no no 0.0
Event_Enable BACnetEventTransitionBits O5,8 no no An empty bit string.
Acked_Transitions BACnetEventTransitionBits O5,8 no no An empty bit string.
Notify_Type BACnetNotifyType O5,8 no no 0
Event_Time_Stamps BACnetARRAY[3] of BACnetTimeStamp O5,8 no no No default: the read fails.
Event_Message_Texts BACnetARRAY[3] of CharacterString O8 no no ""
Event_Message_Texts_Config BACnetARRAY[3] of CharacterString O8 no no ""
Event_Detection_Enable Boolean O5,8 no no false
Event_Algorithm_Inhibit_Ref BACnetObjectPropertyReference O8 no no No default: the read fails.
Event_Algorithm_Inhibit Boolean O8,9 no no false
Time_Delay_Normal Unsigned O8 no no 0
Reliability_Evaluation_Inhibit Boolean O10 no no false
Property_List BACnetARRAY[N] of BACnetPropertyIdentifier R yes no Held by the stack.
Low_Diff_Limit BACnetOptionalReal O 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.
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 ""