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

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设备。

http://www.lryc.cn/news/2397042.html

相关文章:

  • LabVIEW超宽带紧凑场测量系统
  • 编译rustdesk,使用flutter、hwcodec硬件编解码、支持Windows 7系统
  • ROS机器人和NPU的往事和新知-250602
  • 【从零开始学习QT】信号和槽
  • MCP调研
  • TDengine 运维——巡检工具(定期检查)
  • 8.7 基于EAP-AKA的订阅转移
  • qwen 2.5 并行计算机制:依靠 PyTorch 和 Transformers 库的分布式能力
  • 调整数据集的方法
  • TCP 四次挥手
  • MSTNet:用于糖尿病视网膜病变分类的多尺度空间感知 Transformer 与多实例学习方法|文献速递-深度学习医疗AI最新文献
  • docker运行程序Killed异常排查
  • 【数学 逆序对 构造】P12386 [蓝桥杯 2023 省 Python B] 混乱的数组|普及+
  • Excel 批量下载PDF、批量下载考勤图片——仙盟创梦IDE
  • PCIe-Error Detection(一)
  • 向量空间的练习题目
  • Leetcode 2123. 使矩阵中的 1 互不相邻的最小操作数
  • MySQL高可用集群
  • day14 leetcode-hot100-27(链表6)
  • YOLOv5 :训练自己的数据集
  • flutter项目迁移空安全
  • vue element日期范围选择器只能选择指定天数内的
  • 从 AMQP 到 RabbitMQ:核心组件设计与工作原理(二)
  • MySql(十二)
  • 51c视觉~3D~合集3
  • windows11安装编译QtMvvm
  • 【2025年电工杯数学建模竞赛A题】光伏电站发电功率日前预测问题+完整思路+paper+源码
  • OpenCv高阶(十九)——dlib关键点定位
  • BUUCTF之[ACTF2020 新生赛]BackupFile
  • 头歌之动手学人工智能-Pytorch 之autograd