Откройте для себя устройство BACnet в другой сети с помощью bacnet4j - PullRequest
0 голосов
/ 26 июня 2018

Я использую библиотеку bacnet4j для обнаружения удаленных устройств BACnet. В той же сети все работает как положено. Но я не смог найти устройство контроллера BACnet, расположенное в другой сети.

String hostAddress="10.8.102.28";
IpNetwork network = new IpNetworkBuilder().withPort(47808).withSubnet(hostAddress, 24).build();
Transport transport = new DefaultTransport(network);
LocalDevice localDevice = new LocalDevice(Integer.decode(this.settings.getDeviceId()), transport);
localDevice.initialize();

//Finding remote device
int remoteId=1234;
RemoteDeviceFuture remoteFuture = RemoteDeviceFinder.findDevice(localDevice, remoteId);
RemoteDevice remoteDevice = null;
try {
        remoteDevice = remoteFuture.get(); //remote device is null here
    } catch (Exception e) {
        LOGGER.error("Remote device with id " + remoteId + " does NOT exist!");
    }

Приведенный выше фрагмент кода находит удаленное устройство с заданным remoteId в той же сети. Но он не может найти устройство, расположенное в другой сети. Здесь что-то не так?

1 Ответ

0 голосов
/ 26 июня 2018

Это на самом деле задумано. Процесс обнаружения происходит с использованием широковещательных сообщений «Кто есть», которые не маршрутизируются через IP-маршрутизаторы. Таким образом, никакие устройства в другой IP-подсети не обнаруживаются таким образом. Если вам известен IP-адрес удаленного устройства, вы можете настроить / запрограммировать IP-адрес напрямую как статический IP-адрес.

Однако есть то, что называется BBMD (BACnet Broadcast Management Device). Один из них должен быть размещен в каждой подсети, каждая из которых сконфигурирована с IP-адресом другого BBMD. BBMD будут перехватывать связанные с BACnet широковещательные рассылки в своей подсети, отправлять их на одноранговый BBMD в другой подсети, которая будет ретранслировать широковещательную рассылку, эффективно соединяя две (или более) подсети.

ИЛИ, вы можете настроить / запрограммировать вашего клиента как «Внешнее устройство», сделать так, чтобы он регистрировался в BBMD в удаленной подсети, что даст почти то же самое.

BBMD довольно распространены. Большинство (все) маршрутизаторы BACnet / IP-BACnet MS / TP имеют функциональность. Многие устройства BACnet также позволяют активировать эту функцию.

Надеюсь, это поможет. Подробнее см. http://www.bacnetwiki.com.

...