Segementation in BACnet

BACnet messages that don’t fit in a single packet use segmentation. Why would one message need more than one packet ? Well IP packets have a maximum length of 1500 bytes. So if you are sending a BACnet IP message that is longer than 1500 bytes then you need to send more than one Ethernet packet.

Example: Ask your fishing buddy if he wants another beer. The reply is short and fits in s single response packet. Yes. Now ask him to tell you about the one that got away. He will need multiple sentences to tell you the long storey. Your buddy needs you to support segmentation otherwise you will only hear the first sentence of his storey (lucky you.)

Be aware: 1500 is not a hard coded Maximum Transmission Unit (MTU) length in all Ethernet applications. Often the size is set smaller.

Most serial protocols like MS/TP choose a small number for the MTU because am error requires retransmission and the data is slow so it better to catch an error in smaller packet.

Practical / Field Issues

How does Segmentation affect you as a user ?If a device has a large number of objects and a message is sent to read the object list then it is possible that the response wont fit in a single packet. If both the device and the requestor support segmentation then there is no problem. If either side doesn’t support segmentation then 1) You are out of luck or 2) The requestor must use a different method to read the object list – for example, reading each object using its index until it reaches an index number with no object.The CAS BACNet explorer works like that – first it tries the most efficient method and then it slowly downgrades itself to try and ensure the response will fit in a single packet.

How do you know if a device supports segmentation ?

You can read the vendor’s PIC (Protocol Implementation and Conformance) Statement or you can look at the device object’s properties.

segmentation in bacnet

segmentation in bacnet

segmented-both (0)

segmented-transmit (1)

segmented-receive (2)

no-segmentation (3)

How can you work around the segmentation issue ?

If you can configure the services your system uses to read data you have a fighting chance. Ensure you use read-property for a single property – avoiding read-property for all properties. If you have to use read-property-multiple then limit the list of properties to be read and avoid reading all using this service.