pub struct OutOfRangeDetector {Show 13 fields
pub high_limit: f32,
pub low_limit: f32,
pub deadband: f32,
pub limit_enable: LimitEnable,
pub notification_class: u32,
pub notify_type: NotifyType,
pub event_enable: EventTransitionBits,
pub time_delay: u32,
pub time_delay_normal: Option<u32>,
pub event_state: EventState,
pub acked_transitions: EventTransitionBits,
pub pending: Option<PendingTransition>,
pub fault_reliability: Option<Reliability>,
}Expand description
OUT_OF_RANGE event detector for analog objects.
Implements the OUT_OF_RANGE event state machine:
- NORMAL → HIGH_LIMIT when
present_value > high_limit(if high_limit enabled) - NORMAL → LOW_LIMIT when
present_value < low_limit(if low_limit enabled) - HIGH_LIMIT → NORMAL when
present_value < high_limit - deadband - LOW_LIMIT → NORMAL when
present_value > low_limit + deadband - HIGH_LIMIT → LOW_LIMIT when
present_value < low_limit - LOW_LIMIT → HIGH_LIMIT when
present_value > high_limit
Time_Delay (and Time_Delay_Normal for the NORMAL direction) is
honored via the split Self::probe / Self::tick entry points: a
present-value write calls probe, which seeds a pending transition (or
fires immediately when the direction-appropriate delay is zero,
delay_toward); a one-second periodic task calls tick to advance the
countdown and fire on expiry.
Fields§
§high_limit: f32High_Limit; a present value above it is a HIGH_LIMIT condition.
low_limit: f32Low_Limit; a present value below it is a LOW_LIMIT condition.
deadband: f32Deadband applied when returning toward NORMAL, in the monitored value’s units.
limit_enable: LimitEnableWhich of the two limits are checked.
notification_class: u32Instance number of the Notification Class object that distributes the events.
notify_type: NotifyTypeNotify_Type: whether the transitions are reported as alarms or as events.
event_enable: EventTransitionBitsEvent_Enable: the transitions whose notifications are distributed.
time_delay: u32Seconds an offnormal condition must persist before TO_OFFNORMAL fires, and the NORMAL
delay too when time_delay_normal is None; 0 fires immediately. Fault transitions are
never delayed.
time_delay_normal: Option<u32>Time_Delay_Normal (property 356): the Clause 13.3.6 pTimeDelayNormal
parameter — the number of seconds a return to normal has to be
sustained before the detector confirms it. None is the not-configured case
and uses time_delay as the fallback required for absent pTimeDelayNormal.
event_state: EventStateCurrent event state.
acked_transitions: EventTransitionBitsAcked_Transitions: a set flag means that transition was acknowledged.
pending: Option<PendingTransition>Pending delayed transition, or None when no delay is in progress.
fault_reliability: Option<Reliability>Reliability value in force at the last entry to FAULT; None outside FAULT.
Implementations§
Source§impl OutOfRangeDetector
impl OutOfRangeDetector
Sourcepub const ALGORITHM: EventType = EventType::OUT_OF_RANGE
pub const ALGORITHM: EventType = EventType::OUT_OF_RANGE
BACnet Event Type corresponding to this detector’s event algorithm.
Sourcepub fn evaluate(
&mut self,
present_value: f32,
reliability: Reliability,
) -> Option<TransitionOutcome>
pub fn evaluate( &mut self, present_value: f32, reliability: Reliability, ) -> Option<TransitionOutcome>
Evaluate the present value against configured limits.
This is the per-write entry point: it seeds a pending delayed
transition (or fires immediately when the direction-appropriate delay
is zero) but never advances the countdown — so repeated writes to the
same value do not shorten the delay. Returns Some(TransitionOutcome)
whenever a transition fires; the outcome’s distribute flag carries
the event_enable bit rather than withholding the transition.
Sourcepub fn probe(
&mut self,
present_value: f32,
reliability: Reliability,
) -> Option<TransitionOutcome>
pub fn probe( &mut self, present_value: f32, reliability: Reliability, ) -> Option<TransitionOutcome>
Per-write probe: seed or cancel a pending transition, fire on zero delay.
When the direction-appropriate delay (delay_toward) is zero the
transition is confirmed immediately and event_state is updated,
preserving the legacy instant-transition behavior. Otherwise a
PendingTransition is seeded (or cleared if the condition
reverted) and None is returned; the periodic Self::tick
advances and eventually confirms it.
Sourcepub fn tick(
&mut self,
present_value: f32,
reliability: Reliability,
) -> Option<TransitionOutcome>
pub fn tick( &mut self, present_value: f32, reliability: Reliability, ) -> Option<TransitionOutcome>
Periodic tick: advance the countdown and fire on expiry.
Returns Some(TransitionOutcome) when the pending transition’s delay
elapses this tick, or None if still counting down / no pending
transition / the condition reverted (which cancels the pending).