BACnet Pulse Converter Object

The BACnet Pulse Converter object (Clause 12.23) scales accumulated pulses into engineering units as an analog value

What the Pulse Converter Object Is

The Pulse Converter object, defined in Clause 12.23 of ANSI/ASHRAE 135-2024, takes a running pulse count and scales it into a usable analog quantity. Where an Accumulator totals raw pulses, a Pulse Converter multiplies that count by a scale factor and presents the result as a floating-point Present_Value in engineering units, so a BACnet device can report metered flow the way it reports any other analog value.

Scale_Factor sets the conversion, Count holds the current pulse total the object is working from, and Adjust_Value lets an operator write a correction into the count. Input_Reference optionally names the counting source; when it is absent the Pulse Converter counts a physical input directly. When it supports intrinsic reporting the Pulse Converter applies the OUT_OF_RANGE event algorithm, alarming through the event notification services when the scaled value leaves its limits.

Where You’ll See It

  • Scaled metering. A pulse-output flow meter presented as gallons per minute or liters per second rather than a bare pulse count, so operators read a number they can use directly.
  • Rate and total pairs. A Pulse Converter derives an engineering-unit value from the same pulses an Accumulator totals, one object giving the scaled reading and the other the lifetime count.
  • COV reporting. With COV_Increment set, the Pulse Converter pushes updates over COV (Change of Value) instead of being polled, so a head end (the central BMS server) sees changes as they happen.

Required Properties

Clause 12.23 requires every Pulse Converter object to provide these properties. Datatypes are the spec’s names: REAL is a floating-point number, Unsigned an integer, BOOLEAN a true/false flag, and the BACnet-prefixed types are structured values defined by the standard.

PropertyDatatypeWhat it holds
Object_IdentifierBACnetObjectIdentifierThe object’s type and instance number, unique within the device
Object_NameCharacterStringThe human-readable point name, unique within the device
Object_TypeBACnetObjectTypeAlways pulse-converter for this object
Present_ValueREALThe scaled value in engineering units: Count times Scale_Factor
Status_FlagsBACnetStatusFlagsFour health flags: in-alarm, fault, overridden, out-of-service
Event_StateBACnetEventStateThe object’s current event state (normal, high-limit, low-limit, or fault for this object type)
Out_Of_ServiceBOOLEANWhen true, Present_Value is decoupled from the input for testing and override
UnitsBACnetEngineeringUnitsThe engineering units of the scaled value
Scale_FactorREALThe multiplier that converts Count into Present_Value
Adjust_ValueREALWritable; a correction applied to align the count
CountUnsignedThe current pulse count the object scales
Update_TimeBACnetDateTimeThe time Count was last updated
Count_Change_TimeBACnetDateTimeThe time Count last changed
Count_Before_ChangeUnsignedThe value of Count immediately before the last change
Property_ListBACnetARRAY[N] of BACnetPropertyIdentifierThe list of properties this instance actually implements

Optional Properties

The properties integrators meet most are Input_Reference (the object or input being counted), COV_Increment (how much Present_Value must change before a COV notification fires), and the alarm-limit group (High_Limit, Low_Limit, Deadband, Limit_Enable). The intrinsic-reporting group generally appears or is absent as a set.

PropertyDatatypeGroup
DescriptionCharacterStringGeneral
Input_ReferenceBACnetObjectPropertyReferenceMetering
COV_IncrementREALCOV reporting
COV_PeriodUnsignedCOV reporting
High_LimitREALIntrinsic reporting
Low_LimitREALIntrinsic reporting
DeadbandREALIntrinsic reporting
Limit_EnableBACnetLimitEnableIntrinsic reporting
Notification_ClassUnsignedIntrinsic reporting
Time_DelayUnsignedIntrinsic reporting
Event_EnableBACnetEventTransitionBitsIntrinsic reporting
Acked_TransitionsBACnetEventTransitionBitsIntrinsic reporting
Notify_TypeBACnetNotifyTypeIntrinsic reporting
Event_Time_StampsBACnetARRAY[3] of BACnetTimeStampIntrinsic reporting
Event_Message_TextsBACnetARRAY[3] of CharacterStringIntrinsic reporting
Event_Message_Texts_ConfigBACnetARRAY[3] of CharacterStringIntrinsic reporting
Event_Detection_EnableBOOLEANIntrinsic reporting
Event_Algorithm_Inhibit_RefBACnetObjectPropertyReferenceIntrinsic reporting
Event_Algorithm_InhibitBOOLEANIntrinsic reporting
Time_Delay_NormalUnsignedIntrinsic reporting
ReliabilityBACnetReliabilityFault detection
Reliability_Evaluation_InhibitBOOLEANFault detection
Audit_LevelBACnetAuditLevelAuditing
Auditable_OperationsBACnetAuditOperationFlagsAuditing
TagsBACnetARRAY[N] of BACnetNameValueTagging and profile
Profile_LocationCharacterStringTagging and profile
Profile_NameCharacterStringTagging and profile
  • Accumulator: totals the raw pulses the Pulse Converter scales.
  • Analog Input: a directly measured analog value, where the Pulse Converter derives its analog value from a pulse count.
  • Analog Value: a software analog point, another way a device exposes a calculated number.

What Chipkin Provides

The Pulse Converter object is a first-class object type in the CAS BACnet Stack, modeled with its scaling and count properties. Talk to us about modeling your device’s points.