我正在使用 bacnet4j 来访问远程设备。
现在我可以正常访问 3 个设备中的 1 个,但无法访问其他 2 个设备。 使用 BACnet 发现工具,我设置了正确的端口和 BBMD 地址并找到以下列表:
- 设备 92068:BACnetDemo,IP 地址:bac1,网络 50,MAC localnet:45:186:192
- 设备 2100:BACnet 路由位于网络 50 上的 IP:bac1,MAC localnet:59:186:192
- 设备 1001:001 - 001 - CBM24,IP:bac1,网络 1201,MAC 1
这是java代码:
import com.serotonin.bacnet4j.LocalDevice;
import com.serotonin.bacnet4j.RemoteDevice;
import com.serotonin.bacnet4j.npdu.ip.IpNetwork;
import com.serotonin.bacnet4j.npdu.ip.IpNetworkUtils;
import com.serotonin.bacnet4j.transport.DefaultTransport;
import com.serotonin.bacnet4j.transport.Transport;
import com.serotonin.bacnet4j.type.constructed.Address;
public class Application {
static LocalDevice localDevice1;
public static void main(String[] args) {
IpNetwork network1 = new IpNetwork("255.255.255.255", 12345);
Transport transport1 = new DefaultTransport(network1);
transport1.addNetworkRouter(1001, IpNetworkUtils.toOctetString("IP:Port"));
localDevice1 = new LocalDevice(92068, transport1);
try {
localDevice1.initialize();
System.out.println("initialized");
Address address1 = new Address(IpNetworkUtils.toOctetString("IP:port"));
RemoteDevice d1 = localDevice1.findRemoteDevice(address1, 92068);
System.out.println(d1);
Address address2 = new Address(1001, IpNetworkUtils.toOctetString("IP:port"));
RemoteDevice d2 = localDevice1.findRemoteDevice(address2, 1001);
System.out.println(d2);
} catch (Exception e) {
System.out.println(e.toString());
} finally {
localDevice1.terminate();
}
}
}
我的超时时间为:
RemoteDevice d2 = localDevice1.findRemoteDevice(address2, 1001);
每次运行此命令时,我都无法访问设备/路由器 2100 和 1001。 我尝试使用不同的本地设备直接访问它们,即上面的路由器方法。有人知道吗?
2 个设备 2100 和 1001 有与其关联的对象,但另一个项目没有。
有人知道我做错了什么吗?
最佳答案
奥利弗
在我看来,您正在尝试在应用程序中混合客户端和服务器模式。 (不熟悉血清素,只是 BACnet)。对您的物理设置的描述会有所帮助:您似乎已经:
- 真实 IP 到 MSTP 路由器,设备 2100,本地网络号 50,“远端”网络号 1201
- 远端网络 1201 上的真实 MSTP 设备设备实例 1001、MAC 1
- 虚拟设备 92068,位于您的 Java 应用程序中,您的应用程序充当 BACnet 服务器
现在,您的应用程序充当客户端,您“发现”92068(至少,我这么认为,因为您从未在这里提到过问题)。
然后,再次,使用您的应用程序作为 BACnet 客户端,您尝试发现位于您的盒子外部的设备实例 1001,将需要全局(或远程)但不是本地广播才能通过真实路由器到达.
我认为你的问题是血清素库可能可以很好地充当 BACnet 服务器,但不能充当客户端。
关于java - BACnet 访问远程设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33783569/