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规约帧报文解析》

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • class.getclassloader()_javaassist

    class.getclassloader()_javaassist全屏java.lang.Class.getClassLoader()方法返回的类加载器的类。一些实现可能使用null表示引导类加载器。如果这个类是由引导类加载器加载的方法在这样的实现将返回null。声明以下是java.lang.Class.getClassLoader()方法的声明publicClassLoadergetClassLoader()参数NA返回值此方法返回加载此对象所表示的类或接…

    2022年5月3日
    61
  • matlab库函数大全[通俗易懂]

    matlab库函数大全[通俗易懂]附录MATLAB函数参考附录1常用命令附录1.1管理用命令函数名功能描述函数名功能描述addpath增加一条搜索路径rmpath删除一条搜索路径demo运行Matlab演示程序type列出.M文件

    2022年7月17日
    18
  • 大数据数据分析架构探究

    大数据数据分析架构探究

    2021年7月5日
    78
  • pet的结构单元_三层架构

    pet的结构单元_三层架构PetShop4架构设计分析(三) petshop4.0详解之三(PetShop数据访问层之消息处理)三、PetShop数据访问层之消息处理在进行系统设计时,除了对安全、事务等问题给与足够的重视外,性能也是一个不可避免的问题所在,尤其是一个B/S结构的软件系统,必须充分地考虑访问量、数据流量、服务器负荷的问题。解决性能的瓶颈,除了对硬件系统进行升级外,软件设计的合理性尤为重要。在前

    2022年10月16日
    0
  • ubuntu20.04安装pycharm2021.3.3_ubuntu镜像安装

    ubuntu20.04安装pycharm2021.3.3_ubuntu镜像安装1.下载PyCharmhttps://www.jetbrains.com/pycharm/download/#section=linux这里我下载的是社区开源免费版2.解压PyCharm我下载的pycharm放到了下载文件夹中,在下载文件夹中启动终端,输入以下命令解压到当前文件夹tar-xzfpycharm-community-2021.1.3.tar.gz3.在opt目录下新建pycharm文件夹用于放置pycharm程序文件opt文件夹主要是:安装程序的引导和程序文件,如果缺少必

    2022年8月27日
    3
  • Spring boot Mybatis 整合(完整版)

    Spring boot Mybatis 整合(完整版)对Mybatis注解方式有兴趣的,可以查看我的另一篇:SpringbootMybatis整合(注解版)注解方式更加简洁简单,极大程度的提高了开发速度。如果大家需要使用更高的版本比如springboot2.0,请参照我最新的博客springboot2.0Mybatis整合(springboot2.0版本)更多干货SpringBoot快速入门SpringB…

    2022年4月27日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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