BACnet/IP predominantly communicates through broadcast messages, which are received by every device on the same network. Broadcasts are super important for discovering devices or finding and sharing new information. On big systems, though, you can’t have every device on every network sending and responding to broadcasts. If you broadcast to an entire system, it could bring the whole building network down. But sending individual messages from device to device would be overly complicated.
Instead, we send messages between BBMDs. To put it simply, BACnet Broadcast Management Devices (BBMDs) act as a sort of forwarding service. They’re especially useful on large, complicated networks. A BBMD forwards messages from one subnetwork to another, so communications can be broadcast locally. No overwhelming the network, and no convoluted network of one-to-one communications.
How does it work? A BBMD (BBMD1) on one network receives a message from one of the devices on its network (network 1) that is intended for devices on another network (network 2). The BBMD has a database of IP addresses that tells it where to send that message. It forwards that message to the other network’s BBMD (BBMD 2), which broadcasts the message locally to its network (network 2). These diagrams from ControlsCourse illustrate the process nicely.
Here are three separate IPv4 networks, with devices that want to communicate across networks. Without a BBMD, they have no way of doing that: they’re blocked between their separate networks.
With a BBMD, however, the messages can be sent between subnetworks and distributed to the appropriate devices.
That’s the gist! For advanced readers, Contemporary Controls has some great technical info you can dig into. Note that you do not need a BBMD-specific device: many routers and controllers can act as the BBMD on a network.
It’s also important not to have more than one BBMD on the same subnet, as they will repeat all of the same information. If you’re struggling with duplicate BBMDs, check out our webinar on troubleshooting the issue: