Skip to content
Version 6.1.0
Contact Us

BACnetStack_SetIntrinsicFloatingLimitAlgorithm

bool BACnetStack_SetIntrinsicFloatingLimitAlgorithm(
const uint32_t deviceInstance,
const uint16_t objectType,
const uint32_t objectInstance,
const float setpoint,
const float lowDiffLimit,
const float highDiffLimit,
const float deadband,
const bool enableLowLimit,
const bool enableHighLimit,
const uint32_t timeDelay,
const bool useTimeDelayNormal,
const uint32_t timeDelayNormal,
const bool enable);

Enables the Intrinsic Floating Limit Algorithm (135-2024 cl. 13.3.5) for an object.

The object must exist before calling this function. The monitored Present_Value (REAL) is compared against a moving setpoint rather than fixed limits: the normal range is [setpoint - lowDiffLimit, setpoint + highDiffLimit], so the offnormal region tracks setpoint as it changes.

The object must exist and have alarms and events enabled by BACnetStack_SetAlarmsAndEventsForObjectEnabled(…, enabled=true) - an Event Enrollment object carries its own and needs no such call; otherwise this returns false.

lowDiffLimit/highDiffLimit are INDEPENDENT - cl. 13.3.5 defines pLowDiffLimit and pHighDiffLimit as two separate parameters (the amount the monitored value may fall below/rise above the setpoint before LOW_LIMIT/HIGH_LIMIT), so an asymmetric band - the common case in practice, where overshoot and undershoot have different tolerances - can be expressed directly. Pass the same value for both for a symmetric band.

BACnet reference: ANSI/ASHRAE 135-2024 clause 13.3.5 (FLOATING_LIMIT Event Algorithm).

Parameter Direction Description
deviceInstance in The instance number of the device that owns this object.
objectType, objectInstance in The object for alarms and events: one BACnet Object Identifier, carried as two parameters (see the API conventions).
setpoint in The reference value the monitored Present_Value is compared against.
lowDiffLimit in The allowed deviation BELOW setpoint before the low limit is exceeded.
highDiffLimit in The allowed deviation ABOVE setpoint before the high limit is exceeded.
deadband in The margin by which the value has to come back inside the exceeded limit before the event state returns to normal. A NaN or infinite deadband fails the call and changes nothing.
enableLowLimit in Ignored: cl. 13.3.5 has no pLimitEnable, so both limits always apply. Kept for the ABI.
enableHighLimit in Ignored, as enableLowLimit.
timeDelay in How long, in seconds, an offnormal condition has to persist before the event state changes to offnormal.
useTimeDelayNormal in Whether to use a different time delay value for the timeDelayNormal, or just use the timeDelay value.
timeDelayNormal in How long, in seconds, a normal condition has to persist before the event state returns to normal.
enable in Initial inhibit state, inverted - NOT a remove. true arms the algorithm; false leaves it armed but INHIBITED through the object’s Event_Algorithm_Inhibit property (or Reliability_Evaluation_Inhibit for a fault algorithm). Both of those properties are made WRITABLE by BACnetStack_SetAlarmsAndEventsForObjectEnabled(), so a remote client can change the state afterwards. To genuinely remove an armed algorithm, disable the object with BACnetStack_SetAlarmsAndEventsForObjectEnabled(…, enabled=false). Recommended value: true

True on success; false if the device or object does not exist, the object type does not support this algorithm, or Alarm-and-Event support was not compiled (STACK_OPTION_ALARMS_AND_EVENTS).

Topic: Alarms and events. Declared in CASBACnetStackDLL.h.