What the Accumulator Object Is
The Accumulator object, defined in Clause 12.61 of ANSI/ASHRAE 135-2024, is the standardized way a BACnet device represents a counting register that totals incoming pulses over time. It is the object type behind utility metering: each pulse from an electricity, water, gas, or steam meter increments the count, and Present_Value reports the running total.
Present_Value holds the accumulated count as an integer, Scale and the optional Prescale describe how raw pulses relate to metered quantity, and Max_Pres_Value sets the rollover point where the count wraps back to zero. When an Accumulator supports intrinsic reporting it applies the UNSIGNED_RANGE event algorithm, raising an alarm through the event notification services when the count leaves configured limits; a device that also detects faults may apply the FAULT_OUT_OF_RANGE fault algorithm.
Where You’ll See It
- Utility meters. A pulse-output kWh, water, or gas meter wired to a controller appears on the network as an Accumulator whose count advances with each pulse.
- Sub-metering and tenant billing. Per-floor or per-tenant consumption totals a head end (the central BMS server) reads periodically for billing and energy dashboards.
- Paired scaling. An Accumulator’s raw count is often handed to a Pulse Converter, which presents the same flow already scaled into engineering units.
Required Properties
Clause 12.61 requires every Accumulator 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 accumulator for this object |
Present_Value | Unsigned | The accumulated pulse count. Read-only in normal operation; required to be writable while Out_Of_Service is true |
Status_Flags | BACnetStatusFlags | Four health flags: in-alarm, fault, overridden, out-of-service |
Event_State | BACnetEventState | The object’s current event state (normal, high-limit, low-limit, or fault for this object type) |
Out_Of_Service | BOOLEAN | When true, Present_Value is decoupled from the physical input for testing and override |
Scale | BACnetScale | The multiplier or divisor that converts accumulated pulses to the metered quantity in Units |
Units | BACnetEngineeringUnits | The engineering units of the scaled quantity (kilowatt-hours, cubic meters) |
Max_Pres_Value | Unsigned | The count at which Present_Value rolls over back to zero |
Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | The list of properties this instance actually implements |
Optional Properties
The properties integrators meet most are Prescale (raw-pulse divisor applied before Scale), Value_Set (writable override of the count for meter alignment), and the Logging_Record / Logging_Object pair that feeds a reliable metering snapshot into a Trend Log. The intrinsic-reporting group generally appears or is absent as a set.
| Property | Datatype | Group |
|---|---|---|
Description | CharacterString | General |
Device_Type | CharacterString | General |
Prescale | BACnetPrescale | Metering |
Value_Change_Time | BACnetDateTime | Metering |
Value_Before_Change | Unsigned | Metering |
Value_Set | Unsigned | Metering |
Pulse_Rate | Unsigned | Metering |
Logging_Record | BACnetAccumulatorRecord | Logging |
Logging_Object | BACnetObjectIdentifier | Logging |
High_Limit | Unsigned | Intrinsic reporting |
Low_Limit | Unsigned | Intrinsic reporting |
Limit_Monitoring_Interval | Unsigned | Intrinsic reporting |
Notification_Class | Unsigned | Intrinsic reporting |
Time_Delay | Unsigned | Intrinsic reporting |
Limit_Enable | BACnetLimitEnable | 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 |
Fault_High_Limit | Unsigned | Fault detection |
Fault_Low_Limit | Unsigned | 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
- Pulse Converter: scales an Accumulator’s raw pulse count into engineering units and presents it as an analog value.
- Analog Input: a directly measured analog value, where the Accumulator instead totals discrete pulses.
- Trend Log: records the count over time, often using the Accumulator’s
Logging_Recordfor a clean metering snapshot.
What Chipkin Provides
The Accumulator object is a first-class object type in the CAS BACnet Stack, modeled with its scaling and metering properties. Talk to us about modeling your device’s points.