首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >远程设备的BACnet访问

远程设备的BACnet访问
EN

Stack Overflow用户
提问于 2015-11-18 15:08:43
回答 1查看 1.8K关注 0票数 0

我使用bacnet4j访问远程设备。

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

  1. 设备92068: BACnetDemo :IP: MAC 1 on net 50和MAC网:45:186:192
  2. 设备2100: BACnet路由IP: MAC 1 on net 50和MAC网:59:186:192
  3. 设备1001: 001 - 001 - CBM24在IP: MAC 1上的net1201与MAC 1

以下是java代码:

代码语言:javascript
运行
复制
    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();
      }
     }
    }

我在以下时间暂停:

代码语言:javascript
运行
复制
   RemoteDevice d2 = localDevice1.findRemoteDevice(address2, 1001);

每次运行这个程序,我都无法访问设备/路由器2100和1001。我试着直接访问它们,上面的路由器使用不同的本地设备。有人知道吗?

两个设备2100和1001都有与它们相关联的对象,而另一个项则没有。

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

EN

回答 1

Stack Overflow用户

发布于 2015-11-18 16:51:10

奥利弗

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

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

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

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

我认为您的问题是,作为BACnet服务器,而不是作为客户机,血清素库可能很好。

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

https://stackoverflow.com/questions/33783569

复制
相关文章

相似问题

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