当前位置: 首页 > news >正文

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

1、环境准备

#maven环境<repositories><repository><id>ias-releases</id><url>https://maven.mangoautomation.net/repository/ias-release/</url></repository></repositories><dependencies><dependency><groupId>com.infiniteautomation</groupId><artifactId>bacnet4j</artifactId><version>6.0.0</version></dependency>
</dependencies>

2、实现

IpNetwork ipNetwork = new IpNetworkBuilder().withLocalBindAddress("0.0.0.0") .withSubnet("255.255.252.0", 22).withPort(port) // <== 修改为你设备的端口.build();ipNetwork.enableBBMD(); //跨网段必须开启BBMD//创建虚拟的本地设备,deviceNumber随意 初始化本地设备localDevice = new LocalDevice(123456, new DefaultTransport(ipNetwork)).withClock(new WarpClock()).initialize();ipNetwork.registerAsForeignDevice(new InetSocketAddress("ba设备所在地址ip", "ba设备所在地址的端口"), 10000000);//搜寻网段内远程设备localDevice.startRemoteDeviceDiscovery();//获取远程设备,instanceNumber是远程设备IDRemoteDevice remoteDevice = localDevice.getRemoteDeviceBlocking(reqVO.getDeviceId());//获取远程设备的标识符对象List<ObjectIdentifier> objectList = RequestUtils.getObjectList(localDevice, remoteDevice).getValues();List<ObjectIdentifier> biList = new ArrayList<>();List<ObjectIdentifier> aiList = new ArrayList<>();System.out.println("<===================对象标识符的对象类型,实例数(下标)===================>");//Object所有标识符 binaryInputfor (ObjectIdentifier oi : objectList) {//                System.out.println(oi.getObjectType().toString() + "," + oi.getInstanceNumber());//binary-inputif (oi.getObjectType().equals(ObjectType.binaryInput)) {biList.add(new ObjectIdentifier(ObjectType.binaryInput, oi.getInstanceNumber()));}//analog-inputif (oi.getObjectType().equals(ObjectType.analogInput)) {aiList.add(new ObjectIdentifier(ObjectType.analogInput, oi.getInstanceNumber()));}}System.out.println("<==================================================================>");System.out.println("取值开始!!!================>");final PropertyReferences refs = new PropertyReferences();if (biList != null && biList.size() > 0) {for (final ObjectIdentifier oid : biList) {if (reqVO.getInstNums() != null && !reqVO.getInstNums().contains(oid.getInstanceNumber())) continue;refs.add(oid, PropertyIdentifier.objectName);refs.add(oid, PropertyIdentifier.presentValue);//  refs.add(oid, PropertyIdentifier.description);}PropertyValues pvAll = RequestUtils.readProperties(localDevice, remoteDevice, refs, false, null);for (ObjectIdentifier oi : biList) {System.out.println("instanceNumber:" + oi.getInstanceNumber());System.out.println(oi.getObjectType() + " " + oi.getInstanceNumber() + " Name: " + pvAll.get(oi, PropertyIdentifier.objectName));System.out.println(oi.getObjectType() + " " + oi.getInstanceNumber() + " PresentValue: " + pvAll.get(oi, PropertyIdentifier.presentValue));}} else if (aiList != null && aiList.size() > 0) {for (final ObjectIdentifier oid : aiList) {if (reqVO.getInstNums() != null && !reqVO.getInstNums().contains(oid.getInstanceNumber())) continue;refs.add(oid, PropertyIdentifier.objectName);refs.add(oid, PropertyIdentifier.presentValue);//  refs.add(oid, PropertyIdentifier.description);}PropertyValues pvAll = RequestUtils.readProperties(localDevice, remoteDevice, refs, false, null);for (ObjectIdentifier oi : aiList) {System.out.println("instanceNumber:" + oi.getInstanceNumber());System.out.println(oi.getObjectType() + " " + oi.getInstanceNumber() + " Name: " + pvAll.get(oi, PropertyIdentifier.objectName));System.out.println(oi.getObjectType() + " " + oi.getInstanceNumber() + " PresentValue: " + pvAll.get(oi, PropertyIdentifier.presentValue));}}System.out.println("================>取值结束!!!");

3、可以是用可视化工具Bacnet Scane可视化工具
bacnet scane可视化下载地址

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

相关文章:

  • ⭐ Unity AVProVideo插件自带播放器 脚本重构 实现视频激活重置功能
  • azure web app创建分步指南
  • WPF响应式UI的基础:INotifyPropertyChanged
  • WPF的交互核心:命令系统(ICommand)
  • 工控机安装lubuntu系统
  • 跨平台浏览器集成库JxBrowser 支持 Chrome 扩展程序,高效赋能 Java 桌面应用
  • 玛哈特校平机实战指南:选型、应用痛点
  • Java String的使用续 -- StringBuilder类和StringBuffer
  • OpenCV---minAreaRect
  • Java八股-数据类型转换有哪些?类型互转会有什么问题?为什么用bigDecimal 不用double ?自动装箱和拆箱?包装类?
  • QML 滑动与翻转效果(Flickable与Flipable)
  • 随记 配置服务器的ssl整个过程
  • 华为云Flexus+DeepSeek征文 | 基于Dify和DeepSeek-R1开发企业级AI Agent全流程指南
  • Python训练营打卡Day40
  • 《系统集成项目管理工程师(第三版)》高效学习方法
  • Spring,SpringMVC,SpringBoot
  • Med-R1论文阅读理解-1
  • leetcode669.修剪二叉搜索树:递归法利用有序性精准剪枝
  • OAuth详解和应用
  • Netty 实战篇:为 Netty RPC 框架增加超时控制与重试机制,防止系统雪崩
  • 12306网站多少钱做的/石家庄疫情太严重了
  • 网页设计素材免费耐克/百度seo规则
  • 如何找到盘古做的网站/东莞最新疫情
  • 为公司制作网站/网络推广策划案
  • 哈尔滨做网站哪家好/建设网官方网站
  • 深圳沙井做网站公司/外包客服平台