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

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.xdnf.cn/news/10175.html

相关文章:

  • Kotlin-特殊类型
  • 安卓逆向篇JEB 反编译断点动态调试加密算法还原逻辑会员绕过
  • 亚马逊商品评论爬取与情感分析:Python+BeautifulSoup实战(含防封策略)
  • InnoDB引擎逻辑存储结构及架构
  • 【Netty系列】Reactor 模式 2
  • 奇异值分解(SVD):线性代数在AI大模型中的核心工具
  • 使用原生前端技术封装一个组件
  • 面试题 08.08. 有重复字符串的排列组合【 力扣(LeetCode) 】
  • Smith圆图知识学习笔记
  • Linux 文件 IO 性能监控与分析指南
  • QEMU/KVM课程大纲暨学习路线(1)
  • 榕壹云医疗服务系统:基于ThinkPHP+MySQL+UniApp的多门店医疗预约小程序解决方案
  • 算法打卡第11天
  • BKP(备份寄存器)和 RTC(实时时钟)
  • 飞牛fnNAS的Docker应用之迅雷篇
  • leetcode538.把二叉搜索树转换为累加树:反向中序遍历的数值累加之道
  • 半导体厂房设计建造流程、方案和技术要点-江苏泊苏系统集成有限公司
  • 跨平台浏览器集成库JxBrowser 支持 Chrome 扩展程序,高效赋能 Java 桌面应用
  • Apache SeaTunnel 引擎深度解析:原理、技术与高效实践
  • 【Linux 基础知识系列】第四篇-用户与权限管理
  • c/c++的opencv霍夫变换
  • 阻止H5页面中键盘收起的问题
  • CTFSHOW Pwn94 WP
  • [原创](Windows使用技巧): Windwos11如何设置局域网共享访问? (多图详解)
  • 在Linux上安装Docker并配置镜像加速器:从入门到实战
  • PostgreSQL 临时表空间
  • AWS API Gateway 配置WAF(中国区)
  • 《智慧医疗分级评价方法及标准(2025版)》征求意见函全面解读:人工智能医疗应用的评价体系与指南方向
  • 无线通信模块简介
  • 智能流体仿真软件AICFD 2025R1新版本功能介绍