0

我正在使用 bacnet4j 来访问远程设备。

现在我可以正常访问 3 个设备中的 1 个,但不能访问其他 2 个。使用 BACnet 发现工具,我设置了正确的端口和 BBMD 地址,并找到以下列表:

  1. 设备 92068:BACnetDemo 在 IP:bac1 在网络 50 上,MAC localnet:45:186:192
  2. 设备 2100:BACnet 路由在 IP:bac1 上的网络 50 与 MAC localnet:59:186:192
  3. 设备 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 具有与之关联的对象,但另一个项目没有。

有人知道我做错了什么吗?

4

1 回答 1

1

奥利弗

在我看来,您正试图在您的应用程序中混合客户端和服务器模式。(不熟悉血清素,只是 BACnet)。对您的物理设置的描述会有所帮助:您似乎有:

  • 到 MSTP 路由器的真实 IP,设备 2100,本地网络号 50,“远”网络号 1201
  • 一个真正的 MSTP 设备 Device Instance 1001,MAC 1,在远端网络 1201
  • 虚拟设备 92068,在您的 Java 应用程序中,您的应用程序充当 BACnet服务器

现在,您的应用程序充当客户端,您“发现”了 92068(至少,我认为是这样,因为您在这里从未提及问题)。

然后,再次将您的应用程序用作 BACnet 客户端,您尝试发现设备实例 1001,它在您的盒子外部,将需要一个全局(或远程)但不是本地的广播才能通过真实路由器到达。

我认为您的问题是血清素库可能可以很好地充当 BACnet 服务器,但不能充当客户端。

于 2015-11-18T16:51:10.117 回答