Warning
Potential for Data Loss: The steps detailed in the resolution of this article may result in a loss of critical data if not performed properly. Before beginning these steps, make sure all important data is backed up in the event of data loss. If you are unsure or unfamiliar with any complex steps detailed in this article, please contact Product Support for assistance.
Issue
There is a limit of around 200 user-created objects in b3/i2 devices, once that limit is reached, an attempt to create a new object of any type in the device will result in "Invalid Handle" error.
See https://community.se.com/t5/Building-Automation-Knowledge/Creating-an-object-in-a-BACnet-B3-or-Infin... for more info.
Product Line
Andover Continuum, EcoStruxure Building Operation
Environment
- Continuum b3920 Controller
- Continuum i2920 Controller
Cause
Each Continuum object is represented in the system by a "Handle Id", in b3/i2 devices, the handle ID is stored in the controller as a byte value which allows for a maximum of 255 handles, the system objects (System Variables etc.) use around 55 of the handles leaving around 200 for user-created objects.
CX controllers store handle IDs using a 2 bytes value, which allows for 65535 handles, CX controllers rarely run out of handle IDs.
Resolution
One way to deal with this limitation in the Continuum field devices is to combine InfinityNumeric, InfinityDateTime objects (when possible) into one object configured as an array (manual log).
EXAMPLE:
The screen capture below shows 10 InfinityNumeric objects in an i2920 device that are used in the control application of a room named "MainLab"
Let's say for the purpose of this illustration that the following is the control program for MainLab
Since InfinityNumeric objects MainLab.a thru MainLab.j are used exclusivity to store values *** (i.e Setpoint etc), we can configure one of the objects as an array and have it hold all 10 values, thus allowing us to delete 9 InfinityNumeric objects and free 9 handle ids
Before deleting MainLab.b thru MainLab.j we need to modify ALL references to those objects, instead of referencing MainLab.b - MainLab.j we need to reference MainLab.a[1] - MainLab.a[9], note that MainLab.a holds its value (70) normally (not as part of the array), so in this case, we are only using 9 of the 10 array elements.
***IMPORTANT
Only InfinityNumeric and InfinityDateTime objects that are used exclusively to hold a value should be combined, if the object is being used for any of the following operations then it should be left as its own object.
- Object triggers one or more programs
- Object is configured as a log
- Object is Occupancy flag of a schedule
- Object has alarms associated with it or is alarm point
- Object is a setpoint