电力通讯规约-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运用到实际场景中。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |