java对接bacnet ip协议(跨网段方式)

[复制链接]
发表于 2025-7-9 02:50:59 | 显示全部楼层 |阅读模式
1、环境准备

  1. #maven环境
  2.     <repositories>
  3.         <repository>
  4.             <id>ias-releases</id>
  5.             <url>https://maven.mangoautomation.net/repository/ias-release/</url>
  6.         </repository>
  7.     </repositories>
  8. <dependencies>
  9.         <dependency>
  10.             <groupId>com.infiniteautomation</groupId>
  11.             <artifactId>bacnet4j</artifactId>
  12.             <version>6.0.0</version>
  13.         </dependency>
  14. </dependencies>
复制代码
2、实现

  1. IpNetwork ipNetwork = new IpNetworkBuilder()
  2.                     .withLocalBindAddress("0.0.0.0")
  3.                     .withSubnet("255.255.252.0", 22)
  4.                     .withPort(port) // <== 修改为你设备的端口
  5.                     .build();
  6.             ipNetwork.enableBBMD(); //跨网段必须开启BBMD
  7.             //创建虚拟的本地设备,deviceNumber随意 初始化本地设备
  8.             localDevice = new LocalDevice(123456, new DefaultTransport(ipNetwork)).withClock(new WarpClock()).initialize();
  9.             ipNetwork.registerAsForeignDevice(new InetSocketAddress("ba设备所在地址ip", "ba设备所在地址的端口"), 10000000);
  10.             //搜寻网段内远程设备
  11.             localDevice.startRemoteDeviceDiscovery();
  12.             //获取远程设备,instanceNumber是远程设备ID
  13.             RemoteDevice remoteDevice = localDevice.getRemoteDeviceBlocking(reqVO.getDeviceId());
  14.             //获取远程设备的标识符对象
  15.             List<ObjectIdentifier> objectList = RequestUtils.getObjectList(localDevice, remoteDevice).getValues();
  16.             List<ObjectIdentifier> biList = new ArrayList<>();
  17.             List<ObjectIdentifier> aiList = new ArrayList<>();
  18.             System.out.println("<===================对象标识符的对象类型,实例数(下标)===================>");
  19.             //Object所有标识符 binaryInput
  20.             for (ObjectIdentifier oi : objectList) {
  21. //                System.out.println(oi.getObjectType().toString() + "," + oi.getInstanceNumber());
  22.                 //binary-input
  23.                 if (oi.getObjectType().equals(ObjectType.binaryInput)) {
  24.                     biList.add(new ObjectIdentifier(ObjectType.binaryInput, oi.getInstanceNumber()));
  25.                 }
  26.                 //analog-input
  27.                 if (oi.getObjectType().equals(ObjectType.analogInput)) {
  28.                     aiList.add(new ObjectIdentifier(ObjectType.analogInput, oi.getInstanceNumber()));
  29.                 }
  30.             }
  31.             System.out.println("<==================================================================>");
  32.             System.out.println("取值开始!!!================>");
  33.             final PropertyReferences refs = new PropertyReferences();
  34.             if (biList != null && biList.size() > 0) {
  35.                 for (final ObjectIdentifier oid : biList) {
  36.                     if (reqVO.getInstNums() != null && !reqVO.getInstNums().contains(oid.getInstanceNumber())) continue;
  37.                     refs.add(oid, PropertyIdentifier.objectName);
  38.                     refs.add(oid, PropertyIdentifier.presentValue);
  39.                     //  refs.add(oid, PropertyIdentifier.description);
  40.                 }
  41.                 PropertyValues pvAll = RequestUtils.readProperties(localDevice, remoteDevice, refs, false, null);
  42.                 for (ObjectIdentifier oi : biList) {
  43.                 System.out.println("instanceNumber:" + oi.getInstanceNumber());
  44.                 System.out.println(oi.getObjectType() + " " + oi.getInstanceNumber() + " Name: " + pvAll.get(oi, PropertyIdentifier.objectName));
  45.                 System.out.println(oi.getObjectType() + " " + oi.getInstanceNumber() + " PresentValue: " + pvAll.get(oi, PropertyIdentifier.presentValue));
  46.                 }
  47.             } else if (aiList != null && aiList.size() > 0) {
  48.                 for (final ObjectIdentifier oid : aiList) {
  49.                     if (reqVO.getInstNums() != null && !reqVO.getInstNums().contains(oid.getInstanceNumber())) continue;
  50.                     refs.add(oid, PropertyIdentifier.objectName);
  51.                     refs.add(oid, PropertyIdentifier.presentValue);
  52.                     //  refs.add(oid, PropertyIdentifier.description);
  53.                 }
  54.                 PropertyValues pvAll = RequestUtils.readProperties(localDevice, remoteDevice, refs, false, null);
  55.                 for (ObjectIdentifier oi : aiList) {
  56.                 System.out.println("instanceNumber:" + oi.getInstanceNumber());
  57.                 System.out.println(oi.getObjectType() + " " + oi.getInstanceNumber() + " Name: " + pvAll.get(oi, PropertyIdentifier.objectName));
  58.                 System.out.println(oi.getObjectType() + " " + oi.getInstanceNumber() + " PresentValue: " + pvAll.get(oi, PropertyIdentifier.presentValue));
  59.                 }
  60.             }
  61.             System.out.println("================>取值结束!!!");
复制代码
3、可以是用可视化工具Bacnet Scane可视化工具
bacnet scane可视化下载地址



图中含义:搜刮ip地址为172.16.33.250下的47809端口的ba装备。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-7-25 07:48 , Processed in 0.085203 second(s), 31 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表