gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:05:04 68 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

希望这有帮助。请参阅http://www.bacnetwiki.com了解更多。

关于java - 使用 bacnet4j 发现不同网络中的 BACnet 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51039727/

68 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com