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

电力通信规约-104实战

电力通信规约-104实战

概述

        104规约在广泛应用于电力系统远动过程中,主要用来进行数据传输和转发,本文将结合实际开发实例来讲解104规约的真实使用情况。

实例讲解

        因为个人技术栈是Java,所以本篇将采用Java实例来进行讲解。首先我们搭建一个springboot的基础工程,引入如下依赖:

<dependency>
    <groupId>org.openmuc</groupId>
    <artifactId>j60870</artifactId>
    <version>1.7.2</version>
</dependency>

        搭建好的项目之后我们进行核心类的设计,整体结构如下图所示:

        接下来我将详细讲解一些这些核心类的作用和核心方法代码的说明,首先我们需要实现采集通信连接管理的功能,因为我这边使用的技术栈是spring boot,要实现在程序启动之后就能够初始化连接,这里我通过实现CommandLineRunner接口的方式来实现的。如下是采集通道类中的核心实现代码:

for (AppConfig.IEC104ChannelConfig config : appConfig.getIec104channels()) {try {configs.add(config);IDataChannel<AppConfig.IEC104ChannelConfig> channel = new IEC104Channel();channel.init(config);channelMap.put(config.getId(), channel);channelStatusMap.put(config.getId(), false);iec104ChannelList.add((IEC104Channel) channel);} catch (Exception e) {log.warn("failed to create channel:{}", config, e);}
}

        这里考虑到多通道的情况,所以在此使用了循环初始化的方式来做,这里往下具体实现创建连接的方法如下:

/*** 创建连接* @throws IOException*/
public void connect() throws IOException {try {InetAddress addr = InetAddress.getByName(connInfo.host);ClientConnectionBuilder clientConnectionBuilder = new ClientConnectionBuilder(addr).setPort(connInfo.port);conn = clientConnectionBuilder.connect();conn.setId(config.getId());conn.setMaxMessageInMinutes(config.getMaxMessageInMinute());} catch (Exception e) {logger.warn("failed to connect host: {}, try to connect host2 :{}", connInfo, connInfo2, e);//尝试连接备用地址if (connInfo2 != null) {logger.info("try to connect backup host: {}", connInfo2);InetAddress addr = InetAddress.getByName(connInfo2.host);ClientConnectionBuilder clientConnectionBuilder = new ClientConnectionBuilder(addr).setPort(connInfo2.port);conn = clientConnectionBuilder.connect();conn.setId(config.getId());conn.setMaxMessageInMinutes(config.getMaxMessageInMinute());} else {throw e;}}
}

        上面展示的创建连接的方法有个比较特殊的实现,就是备用地址连接的逻辑,这里也是根据实际业务来考虑的,因为一般发送数据主站会提供两个地址,进行主备的考虑,这样做的目的为了采集链路的稳定。

        项目中还是实现了一个初始化数据的类 InitializeDataManager,这个类也需要在程序启动之后初始化的,所以也是通过实现CommandLineRunner接口的方式来实现的。做数据采集有一个很重要的环节就是对点,通俗来讲就是对方发过来的点位需要转换适配到我们的系统中,这里需要初始化我们需要的点位信息,所以定义了初始化数据的类。

        接下来讲解一下最关键的一个类,事件监听器IEC104ClientEventListener的实现,首先我们需要实现ConnectionEventListener接口,在ConnectionEventListener接口中定义了如下两个方法:

public interface ConnectionEventListener {void newASdu(ASdu var1, String var2);void connectionClosed(IOException var1);
}

        在IEC104ClientEventListener中重写了这两个方法,其中newASdu是监听数据事件的connectionClosed是处理连接关闭事件的。

        采集和监听部分设计完成之后,我们需要将采集的数据进行业务处理,这套系统开发的是采集光伏场站的数据,所以设计如下处理任务,分别用来采集逆变器,集电线的数据:

总结

        本文讲解了104在光伏场站采集场景中的具体实践案例,通过对104程序设计的讲解,希望能够帮助我们将104运用到实际场景中。

相关文章:

电力通信规约-104实战

电力通信规约-104实战 概述 104规约在广泛应用于电力系统远动过程中&#xff0c;主要用来进行数据传输和转发&#xff0c;本文将结合实际开发实例来讲解104规约的真实使用情况。 实例讲解 因为个人技术栈是Java&#xff0c;所以本篇将采用Java实例来进行讲解。首先我们搭建一…...

什么是事务

在数据库管理系统中&#xff0c;事务&#xff08;Transaction&#xff09;是执行一系列操作的最小工作单元&#xff0c;这些操作要么全部成功&#xff0c;要么全部失败。为了确保数据的一致性和完整性&#xff0c;事务被设计为具备四大特性&#xff0c;即原子性&#xff08;Ato…...

数据结构:双向循坏链表

目录 1.1双向循环链表的结构 2.双向链表功能的实现 2.1初始化链表 2.2销毁链表 2.3创建结点 2.4打印链表 2.5链表查找 2.6链表在pos的前面进行插入 2.7链表删除pos位置的节点 2.8链表的头插&#xff0c;头删 &#xff0c;尾插&#xff0c;尾删 1.1双向循环链表的结构 …...

3.1、SDH的5种标准容器

1、定义与作用 在 SDH&#xff08;同步数字体系&#xff09;中&#xff0c;标准容器&#xff08;C&#xff09;是一种用来装载各种速率的 PDH&#xff08;准同步数字系列&#xff09;信号的信息结构。它的主要作用是进行速率适配&#xff0c;使不同速率的 PDH 信号能够在 SDH 的…...

Jenkins介绍

Jenkins 是一款流行的开源自动化服务器&#xff0c;在软件开发和持续集成 / 持续交付&#xff08;CI/CD&#xff09;流程中发挥着关键作用。 一、主要功能 1.持续集成&#xff08;CI&#xff09; &#xff08;1&#xff09;.自动构建&#xff1a;Jenkins 可以配置为监听代码仓…...

5G学习笔记之Non-Public Network

目录 0. NPN系列 1. 概述 2. SNPN 2.1 SNPN概述 2.2 SNPN架构 2.3 SNPN部署 2.3.1 完全独立 2.3.2 共享PLMN基站 2.3.3 共享PLMN基站和PLMN频谱 3. PNI-NPN 3.1 PNI-NPN概述 3.2 PNI-NPN部署 3.2.1 UPF独立 3.2.2 完全共享 0. NPN系列 1. NPN概述 2. NPN R18 3. 【SNPN系列】S…...

网页生成鸿蒙App

如何网页生成鸿蒙App 纯鸿蒙发布后&#xff0c;鸿蒙App需求上升。如何快速生成鸿蒙App。变色龙云(http://www.appbsl.cn)推出了鸿蒙App打包服务。可以在线自动打包鸿蒙App。 第一步 创建应用 输入网站网址&#xff0c;上传图标。 第二步 生成鸿蒙证书 打开华为开发者管理中…...

JavaWeb通过Web查询数据库内容:(pfour_webquerymysql)

JavaWeb通过Web查询数据库内容&#xff1a; 数据库&#xff1a; 自行建库建表&#xff0c;主键 id 后端&#xff1a; 新建项目模块选择模块&#xff0c;添加依赖创建配置文件&#xff1a; db.propertiesJava类&#xff1a; query查询 前端&#xff1a; Web添加创建query.html…...

将java项目部署到linux

命令解析 Dockerfile: Dockerfile 是一个文本文件&#xff0c;包含了所有必要的指令来组装&#xff08;build&#xff09;一个 Docker 镜像。 docker build: 根据 Dockerfile 或标准指令来构建一个新的镜像。 docker save: 将本地镜像保存为一个 tar 文件。 docker load: 从…...

moviepy将图片序列制作成视频并加载字幕 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…...

ROS1入门教程5:简单行为处理

一、新建项目 # 创建工作空间 mkdir -p demo5/src && cd demo5# 初始化工作空间 catkin_make# 创建功能包 cd src catkin_create_pkg demo roscpp actionlib_msgs message_generation tf 二、创建行为 # 创建行为目录 mkdir action && cd action# 创建行为文…...

Vue:实现输入框不能输负数功能

1、使用v-model指令 <input type"number" v-model"value" min"0" input"checkInput"> checkInput() {this.value Math.max(0, parseInt(this.value)); } 2、使用计算属性 <template><div><input type"…...

管理系统、微信小程序类源码文档-哔哩哔哩教程同步

文章目录 前言通用表基于JavaSpringBootVue前后端分离手机销售商城系统设计实现:基于JavaSpringBootVueuniapp实现大学生校园兼职微信小程序更新中。。。评论区打出你的题目 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能…...

AOP切点表达式之方法表达式execution

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

clickhouse-题库

1、clickhouse介绍以及架构 clickhouse一个分布式列式存储数据库&#xff0c;主要用于在线分析查询 2、列式存储和行式存储有什么区别&#xff1f; 行式存储&#xff1a; 1&#xff09;、数据是按行存储的 2&#xff09;、没有建立索引的查询消耗很大的IO 3&#xff09;、建…...

在 Sanic 应用中使用内存缓存管理 IP 黑名单

[外链图片转存中…(img-Pm0K9mzd-1734859380698)] 在现代 web 应用中&#xff0c;保护 API 接口免受恶意请求的攻击至关重要。IP 黑名单是一种常见的安全措施&#xff0c;可以有效阻止某些 IP 地址的访问。本文将介绍如何在 Python 的 Sanic 框架中实现 IP 黑名单功能&#xf…...

可翻折的CPCI导冷板卡插拔机构

本技术涉及一种cpci板卡模块拔插&#xff0c;尤其涉及一种可翻折的cpci导冷板卡插拔机构。 背景技术&#xff1a; 1、cpci(compactpci)导冷板卡是一种基于compactpci计算机总线标准的卡式电子模块&#xff0c;它在标准的cpci架构之上增加了导热板来提高散热能力&#xff0c;常…...

面试题整理9----谈谈对k8s的理解2

面试题整理9----谈谈对k8s的理解2 1. Service 资源1.1 ServiceClusterIPNodePortLoadBalancerIngressExternalName 1.2 Endpoints1.3 Ingress1.4 EndpointSlice1.5 IngressClass 2. 配置和存储资源2.1 ConfigMap2.2 Secret2.3 PersistentVolume2.4 PersistentVolumeClaim2.5 St…...

12个城市人文扫街、旅拍、人像风光摄影后期Lightroom调色预设

12个城市人文扫街、旅拍、人像风光摄影后期Lightroom调色预设 12 个专为城市场景设计的专业 Adobe Lightroom 预设。只需单击一下&#xff0c;即可通过一致、专业的基础简化您的编辑流程。 Lightroom & Lightroom Classic&#xff0c;桌面和移动兼容包括 12 张由 pat_kay…...

无人设备遥控器之数传功率篇

一、数传功率的基本概念 数传功率是指遥控器发射端在传输数据时所使用的功率。这个功率值直接影响了数据传输的距离和信号强度。一般来说&#xff0c;数传功率越大&#xff0c;遥控器与无人设备之间的通信距离就越远&#xff0c;信号强度也相应增强。 二、数传功率的调节与选择…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...