首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用bacnet4j发现不同网络中的BACnet设备

使用bacnet4j发现不同网络中的BACnet设备
EN

Stack Overflow用户
提问于 2018-06-26 17:43:18
回答 2查看 963关注 0票数 0

我正在使用bacnet4j库来发现远程BACnet设备。在同一个网络中,一切都按预期运行。但是我找不到位于不同网络中的BACnet控制器设备。

代码语言:javascript
复制
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的远程设备。但是它无法找到位于不同网络中的设备。这里有什么问题吗?

EN

回答 2

Stack Overflow用户

发布于 2018-06-27 00:21:08

这实际上是设计出来的。发现过程使用不经由IP路由器路由的广播“谁是谁”消息来进行。因此,不同IP子网上的任何设备都不会以这种方式被发现。如果您知道远程设备的IP地址,则可以直接将IP配置/编程为静态IP地址。

然而,有一种叫做BBMD (BACnet广播管理设备)的东西。其中一个需要放在每个子网上,每个子网都配置了另一个BBMD的IP地址。BBMD将在其子网上截取与BACnet相关的广播,将其发送到另一个子网上的对等BBMD,该对等BBMD将重新传输该广播,从而有效地桥接这两个(或更多)子网。

或者,您可以将您的客户端配置/编程为“外部设备”,让它注册到远端子网上的BBMD,这将实现大致相同的效果。

BBMD是相当常见的。大多数(所有) BACnet/IP到BACnet MS/TP路由器都具有此功能。许多BACnet设备也允许启用该功能。

希望这能有所帮助。有关详细信息,请参阅http://www.bacnetwiki.com

票数 1
EN

Stack Overflow用户

发布于 2021-05-09 23:14:23

UDP/IP广播-用作“谁是谁”(BACnet)服务的一部分,通常不会默认路由,并且在大多数情况下不允许路由-例如,安全问题是主要原因。

但是,如果设置了路由,您可以向相关设备发送单播/定向流量。

(如果我没记错,理论上你现在应该能够以单播/定向请求的形式发送谁是谁了--但即使我说的没错,大多数设备很可能只会通过广播来监听谁是谁的服务。)

BBMD并不是绝对必要的--而且被认为是安全问题,因为它们会泄露太多的信息。

可以使用(有效地)bog标准网络路由而不是BBMD -使流量在几个不同/目标VLAN上飞行。

(还要注意在客户端和服务器/服务设备之间混合使用您选择的专用IP(v4)地址和公共IP(v4)地址,您可能会遇到问题。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51039727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档