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

article/2025/7/21 11:57:48

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.hkcw.cn/article/YGkpbHqhwN.shtml

相关文章

ESP8266远程控制:实现网络通信与设备控制

概述&#xff1a; 最近一直在弄esp8266的网络通信&#xff0c;但是一直都还没搞懂到底esp8266可不可以通过连接一个网络过后&#xff0c;在很远的地方使用网络将其关掉 在网上找了两个教程都有程序&#xff0c;都跑通了 第一个 第二个找不到了&#xff0c;但是程序有 CSDN上放文…

解决方案:__cplusplus宏的值始终为199711L(即 C++98)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 问题现象&#xff1a;被 "冻结" 的__cplusplus宏 在使用 Visual Studio&#xff08;MSVC&#xff09;编译 C 代码时&…

c++流之sstream/堆or优先队列的应用[1]

目录 c流之sstream 解释 注意事项 215.数据流的第k大 问题分析 修正代码 主要修改点 优先队列的比较规则 代码中的比较逻辑 为什么这样能维护第 k 大元素&#xff1f; 举个例子 总结 Python 实现&#xff08;使用heapq库&#xff09; Java 实现&#xff08;使用P…

智慧工厂整体解决方案

该方案围绕智能工厂建设,阐述其基于工业 4.0 和数字化转型需求,通过物联网、大数据、人工智能等技术实现生产自动化、数据化管理及联网协同的特点。建设步骤包括评估现状、设定目标、制定方案、测试调整、实施计划及持续改进,需整合 MES、ERP 等软件系统与传感器、机器人等硬…

OpenTelemetry × Elastic Observability 系列(一):整体架构介绍

本文是 OpenTelemetry Elastic Observability 系列的第一篇&#xff0c;将介绍 OpenTelemetry Demo 的整体架构&#xff0c;以及如何集成 Elastic 来采集和可视化可观测性数据。后续文章将分别针对不同编程语言&#xff0c;深入讲解 OpenTelemetry 的集成实践。 程序架构 Op…

Cypress API 中文详解

🌐 Cypress API 中文详解(全分类汇总) 📌 Cypress 是一款专为现代 Web 应用构建的前端测试工具,它提供了强大且直观的 API 来模拟用户操作、监听网络请求、控制浏览器行为。**本篇文章将系统梳理 Cypress 所提供的常用命令与 API,帮助你快速掌握自动化测试核心能力。 �…

宇树机器狗go2—slam建图(2)gmapping

0.前言 上一篇番外文章带大家认识了一下slam中常用的一些点云格式&#xff0c;本期文章会教大家如何让宇树的机器狗go2在仿真环境中使用gnaaping进行2d建图&#xff0c;在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道。宇树机器狗go2仿真会作为一个长期项目…

CVE-2019-17558源码分析与漏洞复现

漏洞概述 漏洞名称&#xff1a;Apache Solr Velocity 模板注入远程命令执行漏洞 漏洞编号&#xff1a;CVE-2019-17558 CVSS 评分&#xff1a;9.8 影响版本&#xff1a;Apache Solr 5.0.0 - 8.3.1 修复版本&#xff1a;Apache Solr ≥ 8.4.0 漏洞类型&#xff1a;远程代码执行&…

Linux入门——入门常用基础指令(3)

文章目录 入门常用基础指令(3)grep指令压缩解压打包压缩的必要性zip/unzip指令关于rzsz的操作tar指令(重要) bc指令uname指令shutdown指令history指令几个常用的热键ctrl c和ctrl dctrl rTab按键 入门常用基础指令(3) 入门Linux的常用指令还是比较多的。本篇文章是Linux入门部…

常见压缩算法性能和压缩率对比 LZ4 LZO ZSTD SNAPPY

网传压缩算法对比表 算法压缩率压缩速度解压速度支持流式压缩适用场景LZ4低极快极快是实时数据压缩、日志压缩、内存缓存等Zstandard高快快是文件压缩、网络传输、数据库备份等Brotli很高中等快是静态资源压缩&#xff08;HTML、CSS、JS&#xff09;等LZO低极快快是嵌入式系统…

Tkinter软件——显示txt标签的目标水平边框图像

代码&#xff1a; import tkinter as tk from tkinter import filedialog from tkinter import messagebox import cv2 from PIL import Image, ImageTk import osclass ImageBoxApp:def __init__(self, master):self.master masterself.master.title("Image Box Drawer…

学习vue3阶段性复习(插槽,Pinia,生命周期)

目录 插槽(匿名插槽&#xff0c;具名插槽) 插槽概述 匿名插槽 具名插槽 Pinia(统一管理&#xff0c;共享数据&#xff09; pinia概述 安装和使用Pinia 1 使用命令下载Pinia 2 再main.js中导入&#xff0c;注册到vue框架中 3使用pinia 持久化存储插件 1 第一步&…

创建环境 镜像报错UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel...

报错&#xff1a;Platform: win-64 Collecting package metadata (repodata.json): failed UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel anaconda/pkgs/main <https://mirrors.aliyun.com/anaconda/pkgs/main> The channel is not accessible or is inva…

小狼毫输入法雾凇拼音输入方案辅码由默认的部件拆字/拼音输入方案修改为五笔画方案

搜狗拼音输入法不单单是弹出广告的问题&#xff0c;还有收集输入习惯等隐私的嫌疑。所以最近彻底删除了这个输入法&#xff0c;改安装了小狼毫输入法。关于小狼毫输入法的安装和使用网上已经有了无数文章&#xff0c;我这里就不重复了。在试用多个拼音方案后&#xff0c;最终我…

车载通信网络 --- OSI模型中传输层、会话层、表示层和应用层

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

Dify理论+部署+实战

概述 一个功能强大的开源AI应用开发平台&#xff0c;融合后端即服务&#xff08;Backend as Service&#xff09;和LLMOps理念&#xff0c;使开发者能够快速搭建生产级的生成式AI应用。 核心优势 直观的用户界面&#xff1a;提供简洁明了的操作界面&#xff0c;使得用户能够…

Java类和对象详解

文章目录 1.初步认识2.类的定义与实例化2.1 类的定义2.2 类的实例化与使用 3.this关键字4.对象的构造和初始化4.1 默认初始化4.2 就地初始化4.3 构造方法初始化 5.对象的打印6.包的理解6.1 导入包中的类6.2 自定义包6.3 包访问权限 7.封装7.1 访问限定符详解 8.static关键字8.1…

【Go语言】Fyne GUI 库使用指南 (面向有经验开发者)

引言 Fyne 是一个使用 Go 语言编写的、易于使用的跨平台 GUI 工具包和应用程序 API。它旨在通过单一代码库构建在桌面和移动设备上运行的应用程序。本文档面向有一定 Go 语言开发经验的开发者&#xff0c;将详细介绍 Fyne 最新版的核心功能&#xff0c;包括基础组件、布局系统…

1. pytorch手写数字预测

1. pytorch手写数字预测 1.背景2.准备数据集2.定义模型3.dataloader和训练4.训练模型5.测试模型6.保存模型 1.背景 因为自身的研究方向是多模态目标跟踪&#xff0c;突然对其他的视觉方向产生了兴趣&#xff0c;所以心血来潮的回到最经典的视觉任务手写数字预测上来&#xff0…

武警智能兵器室系统架构设计与关键技术解析

在现代化武警部队建设中&#xff0c;武器弹药的安全管理与快速响应能力直接影响部队战斗力。本文基于某实战化智能兵器室建设案例&#xff0c;深入解析其系统架构设计、关键技术实现及创新管理机制&#xff0c;为安防领域提供可借鉴的解决方案。 整体拓扑结构 系统采用分层分布…