104规约笔记「建议收藏」

104规约笔记「建议收藏」电力系统中常见的设备分为调度端(控制站、主站、客户机),服务端(被控站、子站,典型设备包含TTU、RTU等),两者之间通过104规约来进行数据通信与传输。其传输层实际上使用的是TCP协议进行数据的传输。固定端口号为2404。《电力系统104规约帧报文解析》注意这里的调度端和服务端,调度端往往安装在PC电脑上,用网线连接(可靠的网络),服务端是工业设备:TTU(distributionTransformersupervisoryTerminalUnit,配电变压器监测终端)。RTU(远程终

大家好,又见面了,我是你们的朋友全栈君。

电力系统中常见的设备分为 调度端(控制站、主站、客户机) , 服务端(被控站、子站,典型设备包含TTU、RTU等),两者之间通过104规约来进行数据通信与传输。其传输层实际上使用的是TCP协议进行数据的传输。固定端口号为2404。《电力系统104规约帧报文解析》
注意这里的调度端和服务端,调度端往往安装在PC电脑上,用网线连接(可靠的网络),服务端是工业设备:
TTU(distribution Transformer supervisory Terminal Unit,配电变压器监测终端)。
RTU(远程终端单元),英文全称RemoteTerminalUnit,中2113文全称为远程终端控制系统,负责对现场信号、工业设备的监测和控制。

104规约报文格式
来自《104规约ASDU结构解析》
在这里插入图片描述
第一个字节:启动字符固定16进制数68H,十进制为104(正好代表104规约吧),二进制为:0110 1000。
第二个字节:APDU长度,注意APDU长度并不包括1字节的启动字符和1字节的APDU长度本身,而由于只有1字节代表数据长度,其最大值为255(2^8 – 1),所以最大值为255 – 2 = 253,又由于APCI除了这两个字节外还包括了4个字节的控制域(1~4),那么剩下的ASDU(可选的应用服务数据单元)长度为253 – 4 = 249字节。

报文有三种类型:
1、U格式,未编号的控制功能帧,如果第3字节不等于十六进制01H并且,第2字节长度为04,就一定是功能帧。
只有三种命令,每种命令有“命令”和“确认”两个步骤。
在这里插入图片描述
比如TCP连接后马上要做的“握手”操作,就是STARTDT命令(来自《IEC104协议规约解析》):

第一步:首次握手(U帧)
发送→激活传输启动:68(启动符)04(长度)07(控制域)00 00 00
接收→确认激活传输启动: 68(启动符)04(长度)0B(控制域)00 00 00

STARTDT用于启动传输,只有发送了这条命令,对方才会将数据发送过来,也只有发送了这条命令,才代表本方程序会解析发送过来的数据。
STOPDT用于停止传输,发送了这条命令,代表不必发送数据过来了,并且本方也不会再解析任何收到的数据。
TESTFR用于双方都空闲,无话可说的时候定时问候一下,代表对方还处于正常的服务状态。

2、S格式,编号的监视帧,当接收到I帧后需要返回一个S帧,如果第3字节为十六进制01H,就一定是S格式帧。
在这里插入图片描述
发送STARTDT启用传输后,发送方第一次发送I格式报文,其发送序列号一定是0,此时接收方的接收序列号也是0,接收报文后,接收序列号+1,但注意接收序列号在控制域3的低1bit位为0,并非序列号数据,所以第一次应答的S帧如下:

接收→S帧 :
注意:记录接收到的长帧,双方可以按频率发送,比如接收8帧I帧回答一帧S帧,也可以要求接收1帧I帧就应答1帧S帧。 68 04 01 00 02 00

接收序列号因为是2字节表示,注意第一个8bit是低字节,第二个8比特是高字节,又第一个8bit的最低位是无效数据,所以这里的无符号短整形数据(2字节)0002H / 2 = 0001H,代表的序列号的十进制数字是1。下次再发送S帧就可能是0004H,代表十进制数字2。第三次是0006H,代表十进制数据3,看二进制代码最直观:
0010 0000,取有效的二进制组合起来就是0000 001;
0100 0000,取有效的二进制组合起来就是0000 010;
0110 0000,取有效的二进制组合起来就是0000 011;
有效的二进制组合就是将后4位二进制作为高位,前4位二进制抛弃最后那个0作为低位,二进制数据仍然是从1,10,11,100,101,110这样的进位来的。

3、I格式,信息传输帧,用于信息交互。只要第2字节数不等于04,就一定是信息传输帧。
在这里插入图片描述
发送序列号N是指本设备往外发送了N帧I格式帧,接收序列号是指接收到对方N帧I格式帧。应用程序发送数据的同时,也会检查对方发过来的S帧,比如发送数据的程序已经发送了12帧了,就可以接收数据,看看S帧是否已经到了至少第8帧的序号(接收8帧至少要回答一次),如果没收到,就发送STOPDT,然后断开这个连接了(认为该连接出故障,可能对方已经断网并重启了,这是一个无效的连接了)。

I格式的帧又随着携带信息不同而不同,比如主站发送总召唤(要求传递所有遥测、遥信数据),报文如下:

总召唤(I帧)

召唤YC、YX(可变长I帧)初始化后定时发送总召唤,每次总召唤的间隔时间一般设为15分钟召唤一次,不同的主站系统设置不同。

发送→总召唤 : 68(启动符)0E(长度)00 00(发送序号)00 00(接收序号)64(类型标示)01(可变结构限定词)06 00(传输原因)01 00(公共地址即RTU地址)00 00 00(信息体地址)14(区分是总召唤还是分组召唤,02年修改后的规约中没有分组召唤)
这里每一个字节的内容都可以从协议里查到。解析如下:
68是启动字符,0E代表本次数据长度为14个字节,从0E往后数14个字节就结束了(数一数是否刚刚好?)。
发送序号是00 00,前两个00是低位,后两个00是高位(注意这里高位在后),且前两个00的最后一个二进制是无效的,所以要除以2(或右移1位,右移1位就等效于除以2),所以发送序号是十进制数0。接收序号相同算法,也是0.
64H是类型标示,十进制数是100,在手册里能查到是“站总召唤”:
在这里插入图片描述
可变结构限定词01,这里代表单个信息元素(总召唤),这个数据代表的规则很复杂,需要仔细阅读手册《配电自动化系统应用DLT634.5104-2009实施细则(试行)》
传输原因为2个字节,同理高位在后,数字为16进制0006H,就是十进制的6。查询手册,得知代表激活:
在这里插入图片描述
公共地址为0001H,一般用来代表站址(主站系统将连接上来的设备分为多个虚拟的站,可能按照连接过来的TTU,RTU进行区别对待)。
信息体地址是0,因为总召唤不是具体的信息,如果要发送遥测数据,就会带有遥测号了。
14H是十进制的20,是召唤限定词,手册里有描述:
在这里插入图片描述

再看一个发送遥信信息的帧:

68(启动符)1E(长度)04 00(发送序号)02 00(接收序号)03(类型标示,双点遥信)05(可变结构限定词,有5个遥信上送)14 00(传输原因,响应总召唤) 01 00(公共地址)01 00 00(信息体地址,第1号遥信)02(遥信合)06 00 00(信息体地址,第6号遥信)02(遥信合)0A 00 00(信息体地址,第10号遥信)01(遥信分)0B 00 00(信息体地址,第11号遥信)02(遥信合)0C 00 00(信息体地址,第12号遥信)01(遥信分)

这一帧数据带了5个遥信,每一个遥信都带有一个信息体地址,公共地址则是5个遥信公用的。而且这里双点遥信用2个二进制位标示,二进制01(01H)代表分,二进制10(02H)代表合,二进制11(03H)代表状态未知。

104规约在掌握规则以后,就是根据手册查询具体的I帧含义和ASDU(信息体)的具体规定了。所以不再具体介绍了。以后如果有新情况,我再补充这个笔记。

补充:
手册里的7 应用报文与数据结构可看出来主站和DTU,RTU之间的交互类型。
列举类型如下:
第一类:主站的系统命令
总召唤:获取所有遥测、遥信数据。
电能量召唤:召唤所有电量数据。
时钟读取:核对时间。
复位进程:
初始化结束:

第二类:DTU,RTU发送给主站
遥信报文
遥测报文
电能量报文
故障事件信息

第三类:双方交互
遥控命令报文

第四类:文件传输
召唤目录
读文件服务
写文件服务
写文件数据

第五类:远程参数读写
切换定值区
读取当前定制区
读多个/全部参数和定值
写多个参数和定值
故障录波采用文件服务传输。
历史数据文件也采用文件服务传输。
软件升级

参考资料《电力系统104规约帧报文解析》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151348.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • setScale,preScale和postScale的区别

    setScale,preScale和postScale的区别下面是Matrix3*3的矩阵结构[java] viewplaincopy1.   {MSCALE_X,MSKEW_X,MTRANS_X,  2.   MSKEW_Y,MSCALE_Y,MTRANS_Y,  3.   MPERSP_0,MPERSP_1,MPERSP_2}  一、首先介绍Scale缩放的控制scale就是缩放,我们调用Matrix的setSc

    2022年10月20日
  • 用通俗易懂的大白话讲解Map/Reduce原理「建议收藏」

    用通俗易懂的大白话讲解Map/Reduce原理「建议收藏」下面是我自己的微信公众号(不定期更新JAVA、大数据、个人成长等干货)1、公众号上有经典的技术电子书可以免费领2、大家有问题可以在公众号问我,只要你问了我就会回复(相互交流)也可以扫描下面二维码,加我个人微信,和我直接沟通Hadoop简介Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及……

  • lombok 插件_lombok插件作用

    lombok 插件_lombok插件作用在开发中,使用lombok插件能给程序开发带来极大的便利,省去Getter、Setter等无技术含量的重复代码,让我们更专注于代码的逻辑设计。lombok插件安装往往会有一些问题,IDE直接下载安装往往是失败的。这里,我给大家写一篇lombok安装的教程:1.首先查看IDEA的版本2.去官网下载对应版本的lombok插件,地址:http://plugins.jetbrains….

  • 在idea中创建web项目_idea部署web项目

    在idea中创建web项目_idea部署web项目前言:很高兴能够用自己所学知识为你提供答疑!!!今天我就来操作下如何使用idea这款软件创建web项目。步骤:1.创建项目首先新建一个项目然后选择最后一个,创建一个空白的Java项目,点击Next。这个时候给项目命名,我在这里命名为java_web,下面那个可以更改项目存放的路径,我这里放到自定的路径,点击Finish。刚进来的时候,idea会提醒你是否新建一个模块,先点击×,一会我们再创建模块。2.配置jdk这个时候,我们先来配置jdk的路径,以及tomcat的路径,方便之后

  • vue(22)Vuex的安装与使用[通俗易懂]

    vue(22)Vuex的安装与使用[通俗易懂]前言每一个Vuex应用的核心就是store(仓库)。store基本上就是一个容器,它包含着你的应用中大部分的状态(state)。Vuex和单纯的全局对象有以下两点不同:Vuex的状态存

  • Android APK反编译具体解释(附图)

    Android APK反编译具体解释(附图)

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号