BACnet访问远程设备

时间:2015-11-18 15:08:44

标签: java bacnet bacnet4j

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

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

  1. 设备92068:IP上的BACnetDemo:网络50上的bac1,MAC localnet:45:186:192
  2. 设备2100:IP上的BACnet路由:网络50上的bac1,MAC localnet:59:186:192
  3. Device 1001:001 - 001 - CBM24 at IP:bac1 on net 1201 with MAC 1
  4. 这是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);
    

    每次运行此操作,我都无法访问Device / Routers 2100和1001。 我尝试使用不同的本地设备直接访问它们,上面的路由器方法。有人有任何想法吗?

    2台设备2100和1001有与之关联的对象,但另一项没有。

    任何人都有想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

奥利弗

在我看来,您正在尝试在应用中混合使用客户端和服务器模式。 (不熟悉5-羟色胺,只是BACnet)。您的物理设置说明会有所帮助:您似乎有:

  • 真正的IP到MSTP路由器,设备2100,本地网络号50,'远'网络号1201
  • 远端网络1201上的真实MSTP设备设备实例1001,MAC 1
  • 您的Java应用中的虚拟设备92068,您的应用充当BACnet 服务器

现在,当您的应用充当客户端时,您会发现'92068(至少,我认为是因为您从未在此处提到问题)。

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

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