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_Incrementset, 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.
| 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 pulse-converter for this object |
Present_Value | REAL | The scaled value in engineering units: Count times Scale_Factor |
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 input for testing and override |
Units | BACnetEngineeringUnits | The engineering units of the scaled value |
Scale_Factor | REAL | The multiplier that converts Count into Present_Value |
Adjust_Value | REAL | Writable; a correction applied to align the count |
Count | Unsigned | The current pulse count the object scales |
Update_Time | BACnetDateTime | The time Count was last updated |
Count_Change_Time | BACnetDateTime | The time Count last changed |
Count_Before_Change | Unsigned | The value of Count immediately before the last change |
Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | The 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.
| Property | Datatype | Group |
|---|---|---|
Description | CharacterString | General |
Input_Reference | BACnetObjectPropertyReference | Metering |
COV_Increment | REAL | COV reporting |
COV_Period | Unsigned | COV reporting |
High_Limit | REAL | Intrinsic reporting |
Low_Limit | REAL | Intrinsic reporting |
Deadband | REAL | Intrinsic reporting |
Limit_Enable | BACnetLimitEnable | Intrinsic reporting |
Notification_Class | Unsigned | Intrinsic reporting |
Time_Delay | Unsigned | 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 |
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
- 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.