前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >104规约笔记「建议收藏」

104规约笔记「建议收藏」

作者头像
全栈程序员站长
发布2022-08-31 14:53:12
2.2K0
发布2022-08-31 14:53:12
举报

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

电力系统中常见的设备分为 调度端(控制站、主站、客户机) , 服务端(被控站、子站,典型设备包含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.cn/151348.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档