Skip to content

0.17.5 Release Notes

Joel Bender edited this page Apr 22, 2020 · 1 revision

Object Identifier Strings

The ObjectIdentifier can now be given a string in the form type:instance where type is a name like analogInput or an unsigned integer, and instance is an unsigned integer. This is a quite simple change except all the sample applications have been updated to use the new syntax. For example, the ReadProperty.py sample application took commands like this:

> read 123:45 analogInput 67 presentValue

It now takes commands like this:

> read 123:45 analogInput:67 presentValue

What-Is-Network-Number/Network-Number-Is

The network layer nows supports these two relatively new NPDUs for discovering the local topology. When a Network Service Access Point is bound to a network stack (like a BACnet/IP BVLL stack or a VLAN node) and the network number is None it can be learned. The adapater object has an additional attribute that matches the 'flag' in the Network-Number-Is, zero (0) is learned and one (1) is configured.

Note that there is a chance that the local adapter learns the network number to which it is connected and the adapter.adapterNet will seem to mysteriously change from None to a network number. Applications should not rely on nsap.adapters[None] always referencing the local adapter, use nsap.local_adapter instead. The WhoIsRouter.py sample application has been updated to reflect this change.

As it stands now, you cannot build a router between two completely unknown networks, you have to have at least one of them known. This limitation might be lifted in the future.

You can use the new what_is_network_number() function to ask about all the networks you don't know about, or pass it an adapter to learn about a specific downstream connection. You can pass it an additional optional destination for a unicast request.

Similarly, the new network_number_is() function sends out local broadcast messages about configured networks (and routers should call this function at startup). If a specific adapter parameter is given, it will send out a local broadcast about a "learned" network.

I-Am-Router-To-Network Helper

There is a new i_am_router_to_network() function (and routers should call this function at startup) which announces its network topology information.

COV Period

The covPeriod property is now supported for the PulseConverterObject.

Fixed Size Arrays

There is now support for fixed length arrays. The ArrayOf() function, which returns a class that is a subclass of Array, now has two additional parameters, a fixed_length with constrains the array to a specific number of elements and a prototype for initializing array elements.

The simplest example is an ArrayOf(Integer, fixed_length=3) which is just what it looks like. The PriorityArray is a little more interesting because each element of the array is a PriorityValue which is a Choice. So in that case, since the array elements cannot be None, the prototype is cloned into new array elements.

The prototype parameter is also used for variable length arrays, so when the array is extended (by increasing the length, writing to array index zero which are BACnet array semantics) the additional elements are deep copies of the prototype.