【104协议】【光伏电站】电站系统中的104协议学习

news2024/10/6 0:28:36

文章目录

    • 104协议学习
      • I帧
      • S帧
      • U帧
      • ASDU
      • 总结:关于各类帧的通俗描述
      • 建立流程详细分析

104协议学习

在这里插入图片描述

起始一个apdu的总长度不会超过255个字节;
在协议中的第二个字节会记录本apdu的长度,但是这个记录的长度数是除开前面两个字节之外的长读数,比如下面有个单点信息的apdu协议报文:

|-- APCI ------------| |-- ASDU
68 31 02 00 02 00 01 A4 14 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

其中第二个字节31H就是长度转为10进制为49个字节,你可以数下后面肯定是49个字节,如果不是就不是一个apdu协议;
在这里插入图片描述

I帧

I帧 IFRAME : (0X68 + len + ctrl[4])APCI + ASDU

I帧的一些规则:
在这里插入图片描述
I帧报文格式规定控制域1和控制域3的最低位为0

I帧的控制域:
在这里插入图片描述
所以报文为I帧报文时,控制域1和控制域2这两个字节是发送序列号

如下读取发送序列号的逻辑:
在这里插入图片描述

注意:只有I帧才有发送序列号!!!
上面代码 position 为2 则是读取接受序列号,U帧没有序列号

S帧

S帧:(0X68 + len + ctrl[4])APCI 1 + 1 + 4 = 6B
在这里插入图片描述

S帧的控制域:
在这里插入图片描述

U帧

U帧:(0X68 + len + ctrl[4])APCI 1 + 1 + 4 = 6B

U帧是控制帧,用于控制启动/停止子站进行数据传输,或测试TCP链路连接,长度等于6个字节。
① U帧只用于控制,并且只存在APCI中(意思就是U帧的apdu报文只会有apci不会存在asdu);
② 测试、停止和开启在一个U帧报文中只可能存在其中的一种;

U帧的控制域:
在这里插入图片描述

测试、停止和开启在一个U帧报文中只可能存在其中的一种:
在这里插入图片描述

Tips:测试U帧一般用于子站判断主站是否还在连接子站,主站判断子站是否还在运行,保证数据传输的畅通性.

ASDU

在这里插入图片描述

代码中定义:
 /**
     * 命令
     */
    private byte cmdType;
    /**
     * 可变结构限定词
     */
    private byte sq;
    /**
     * 传输原因
     */
    private short cot;
    /**
     * 公共地址
     */
    private short pubAddr;
    /**
     * 地址
     */
    private int infoAddress;
    /**数据*/
    private byte[] info;
    private boolean isOrdered = true;

在这里插入图片描述

连续信息传输型:
在这里插入图片描述

非连续信息传输型:
在这里插入图片描述

可变结构限定词:
在这里插入图片描述
在这里插入图片描述

过程描述
在这里插入图片描述在这里插入图片描述

总结:关于各类帧的通俗描述


1. I帧(Information frame):I帧用于传输实际数据信息。可以将其视为常规的数据帧,用于在终端和主站之间传输有效的应用层数据。I帧通常用于传输具体的控制命令、测量数据或状态信息等。

2. S帧(Supervisory frame):S帧用于进行监督和确认操作。它用于管理和控制数据流,实现可靠的数据传输。S帧通常包含了序列号(sequence number)和确认(acknowledgement)信息,用于确认接收到的I帧和请求重传丢失的数据。

3. U帧(Unnumbered frame):U帧用于控制连接的建立、终止和管理。它提供了与连接相关的功能和控制操作。U帧通常用于发送连接请求、连接确认、断开连接等连接管理的控制命令。

总结起来,I帧用于传输实际的数据信息,S帧用于确认和管理数据流,U帧用于连接的建立、终止和管理。

这些帧类型在104协议中的使用,可以根据具体的通信需求进行配置和组合,以实现可靠的、双向的数据传输。

建立流程详细分析

①建立TCP连接
流程:
1.启动ims-web同时启动InitConnection.run()
2.run方法中通过HttpPost的方式请求/sauOrder/start触发 iec104Master.start();
3.Start()中使用Iec104Master.ReConnectRunnable 调用
Iec104Master.reconnect
4. 在reconnect中获取配置中的ip和端口号,并调用父类的connect方法来初始化连接 (完成第一步建立TCP连接)
在这里插入图片描述

建立连接和连接后的事件触发都在NettyHandler中,NettyHandler中对应触发的方法其实又对应到Iec104master中相应的方法,且对应到Iec104ProtocalHandler中对应的方法
在这里插入图片描述

② 上图表示,建立TCP连接的同时,主站给从站发送启动确认帧

③ 从站收到启动帧,给主站发送启动确认帧
从站发送过来的确认帧,触发:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

handleIframe()中使用Iec104MessageRunnable对不同cmdTtype做不同的处理

④ 主站给从站发送总召唤
在这里插入图片描述

⑤ 从站收到主站的总召唤命令,给主站发送总召唤确认

WholeCallRunnable:

在这里插入图片描述

sendWholeCall():发送总招消息
在这里插入图片描述

⑥ 从站上传遥信,遥测,电度等I帧信息帧,发送完毕从站发送总召唤结束帧;
在这里插入图片描述

RealTimeDataHandler:处理实时数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⑦ 主站收到从站发送的结束帧,会回复一个S帧的确认帧;

⑧ 进入下—个周期(其中如何数据有变化,从站需要主动上报)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/820076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】开源:Linux端V4L2视频设备库

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Linux端V4L2视频设备库。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…

笨办法学python3进阶篇pdf,笨办法学python3pdf完整版

大家好,小编来为大家解答以下问题,笨办法学python 3电子书下载,笨办法学python3pdf完整版,今天让我们一起来看看吧! 1、笨方法学python习题43 按照你说的 Map是一个类,scene_map是一老胡镇个类实例 scene_…

Scratch 详解 流畅光线追踪(盲区)引擎:角度 + 一次函数 + 区域判断

【提示1】本文将全程使用原版积木实现这一功能,请不要在评论区发送扩展中有相应积木。若喜欢使用扩展,可以自行将本文介绍的方法用扩展积木替代。 【提示2】本文中代码里出现的所有最后带*号的变量,均为私有变量! 正文 近日&…

C数据结构——无向图(邻接矩阵方式) 创建与基本使用

源码注释 // // Created by Lenovo on 2022-05-13-上午 9:06. // 作者&#xff1a;小象 // 版本&#xff1a;1.0 //#include <stdio.h> #include <malloc.h>#define MAXSIZE 1000 // BFS队列可能达到的最大长度 #define MAX_AMVNUMS 100 // 最大顶点数typedef enu…

用SpringBoot实现post和get请求(多图)

用SpringBoot实现post和get请求&#xff08;多图&#xff09; 用SpringBoot实现post和get请求创建SpringBoot工程创建controller验证FAQ创建项目后依赖报错Project org.springframework.boot:spring-boot-starter-parent:3.1.2.RELEASE not found more 用SpringBoot实现post和g…

AQS构建锁和同步器的框架

1.概述 AQS全称AbstractQueuedSynchronizer&#xff0c;此类在java.util.concurrent.locks包下面&#xff0c;是一个构建锁和同步器的框架&#xff0c;比如ReentrantLock就是基于AQS来实现的。 2.AQS实现原理 AQS内部有一个由volatile修饰(保证其可见性)的变量state&#xf…

PDF文件忘记密码,怎么办?

PDF文件设置密码分为打开密码和限制密码&#xff0c;忘记了密码分别如何解密PDF密码&#xff1f; 如果是限制编辑密码忘记了&#xff0c;我们可以试着将PDF文件转换成其他格式来避开限制编辑&#xff0c;然后重新将文件转换回PDF格式就可以了。 如果因为转换之后导致文件格式…

Tuxera NTFS2023Mac强大的Mac读写工具

Mac用户在使用NTFS格式移动硬盘时&#xff0c;会遇到无法写入硬盘的情况。要想解决无法写入的问题&#xff0c;很多人选择使用Mac读写软件。面对市面上“众多”的读写硬盘软件&#xff0c;用户应该怎么选择呢&#xff1f;初次接触移动硬盘的伙伴可能不知道移动硬盘怎么和电脑连…

RabbitMQ 教程 | 第6章 RabbitMQ 配置

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

科大讯飞 - 基于论文摘要的文本分类与关键词抽取挑战赛(DataWhale-Camp)

文章目录 1、赛题信息2、解决方案2.1 飞桨Baseline&#xff08;提供代码&#xff09;2.2 Bert和调参2.3 chatGLMlora大模型 3、关于DataWhale-NLP 1、赛题信息 提交地址&#xff1a;https://challenge.xfyun.cn/topic/info?typeabstract-of-the-paper&chymfk4uU 项目题目…

我的会议(会议通知)

前言: 我们在实现了发布会议功能&#xff0c;我的会议功能的基础上&#xff0c;继续来实现会议通知的功能。 4.1实现的特色功能&#xff1a; 当有会议要参加时&#xff0c;通过查询会议通知可以知道会议的内容&#xff0c;以及当前会议状态&#xff08;未读&#xff09; 4.2思路…

在Linux中怎么查找文件

2023年8月1日&#xff0c;周二上午 目录 Linux的四种搜索命令find简要说明举例说明拓展阅读locate 简要说明举例说明whereis简要说明举例说明which简要说明举例说明 Linux的四种搜索命令 findlocate&#xff08;不一定内置有&#xff0c;可能要下载mlocate包&#xff09;wher…

【概念理解】HAL库的滴答定时器HAL_Delay()函数的实现原理

来源&#xff1a;bilibili视频 这里写目录标题 概述一、寄存器部分1. 控制和状态寄存器(STK_CTRL)2. 加载值寄存器&#xff08;STK_LOAD&#xff09;3.当前值寄存器&#xff08;STK_VAL&#xff09; 二、代码部分hal_delay()1. hal_initTick()滴答定时器的初始化2. 将七万二传…

Redis 客户端有哪些?

文章目录 JedisLettuceRedisson最佳实践 - 到底用哪个&#xff1f; Redis 最常见的 Java 客户端有两个&#xff0c;Jedis 和 Lettuce&#xff0c;高级客户端有 Redisson&#xff0c;见下图&#xff08;图源 Clients | Redis&#xff09; Jedis Github地址&#xff1a;redis/j…

Windows下安装Hive(包安装成功)

Windows下安装Hive Hive与Hadoop的版本选择很关键&#xff0c;千万不能选错&#xff0c;否则各种报错。一、Hive下载1.1、官网下载Hive1.2、网盘下载Hive 二、解压安装包&#xff0c;配置Hive环境变量2.1、环境变量新增&#xff1a;HIVE_HOME2.2、修改Path环境变量&#xff0c;…

Oracle免费在线编程:Oracle APEX

前提&#xff1a; 注意&#xff1a;你要有个梯子才能更稳定的访问。 不需要安装Oracle&#xff0c;但是需要注册。&#xff08;还算方便的&#xff09; 注册&登录过程 进入Oracle APEX官网&#xff0c;我们选择免费的APEX工作区即可&#xff0c;点击“免费注册”。在注册…

基于H5或者微信小程序开发GIS地图实战全套代码

1 下面有一定基础的可以不看 (1)第一篇请看 微信小程序开发天地图 (2)第二篇请看 http://GeoServer+PostgreSQL+PostGIS+Tomcat+QGIS一整套相关 (3)第三篇请看 有国产化需求的 (4)第四篇请看 支持国家EPSG:4490 2 vue+openlayers实例代码

ThreadLocal原理

ThreadLocal原理 ThreadLocal对象new出来存放到堆中&#xff0c;ThreadLocal引用是存放在栈里 Thread 类有个 ThreadLocalMap 成员变量&#xff0c;Map的key是Threadlocal 对象&#xff0c;value是你要存放的线程局部变量。 public void set(T value) {//获取当前线程Thread&…

SpringBoot复习:(11)SpringApplication中的listeners成员变量是怎么初始化的?

initializers成员变量定义如下&#xff1a; 在构造方法中&#xff1a; setListeners代码如下&#xff1a; 给setListeners方法传递的是getSpringFactoriesInstances(ApplicationListener.class). getSpringFactoriesInstances代码如下&#xff1a; 调用的重载的getSpringFa…

redis 高级篇4 分布式锁

一 redis架构图 1.1 redis的架构图 1.2 分布式锁满足条件 1.独占性&#xff1b;2.高可用&#xff1b;3.防死锁&#xff1b;4.不乱抢&#xff1b;5.重入性 二 分布式锁的案例情况 2.1 分布式锁1:单机分布式部署 描述&#xff1a; 使用lock锁和synchronized&#xff0c;单机…