likes
comments
collection
share

Java零基础入门物联网(2): 电力104规约详解

作者站长头像
站长
· 阅读数 16

我正在参加「掘金·启航计划」

一、基础概念

1.1 电力概念解析

平衡与非平衡传输

  • 非平衡传输:一种主从式传输方式,主站是启动站,它启动所有报文传输;终端是从动站,只有它们被查询时才可以传输;
  • 平衡方式传输:一种对等传输方式,每个节点(包括主站、终端)均可以启动报文发送。

启动站与从动站

  • 发起通讯的一方为启动站
  • 响应通讯的一方为从动站

一次完整的交互过程

  • 启动方发起通讯,从动方回应此次通讯过程,双方都知道最终的通讯结果如何。

服务类型

  • 发送\无应答(S1):从动站无需回答启动站的报文,启动站也不知道从站是否接收到报文,例如:校时功能。
  • 发送\确认(S2):从动站接收后需要向启动站发送确认报文,通常用于发送参数,发送控制命令等。
  • 请求\响应(S3):从动站接收到启动站的请求报文后,用数据响应启动站的请求,例如召唤数据、请求1数据、请求链路状态等;

1.2 IEC 104 简介

电力系统 IEC104 规约是国家点位制定的调度接入网络通信规约,目前在电力系统中应用广泛。

随着电力系统网络化的发展,很多调度主站和变电站远程终端设备(RTU)的通信已经逐步采用以太网,国际电工委员会(IEC)在1998年8月制定了 IEC60870-5-104 协议。

IEC104 一般用于调度主站与变电站之间或者不同系统之间的往来数据通信。

IEC 规约可分为四种:

IEC-101厂站与调度主站间通讯串行
IEC-102电量主站与站内抄表终端通讯
IEC-103与站内继电保护设备间通讯串行
IEC-104厂站与调度主站间通讯以太网

IEC104 应用层与 IEC101 完全相同,是101的网络化访问,两者相同点和不同点见下

相同点

  • 使用范围:厂站与主站之间;
  • 规约结构:应用层定义相同;

不同点

  • 通讯方式:101 串行、104 以太网
  • 服务类型:
    • 101 串行,多采用非平衡传输
    • 104 以太网:多采用平衡传输

拓展:为什么要使用 IEC104 协议?

  • 解决一堆厂家协议不一致的问题
  • IEC 104 在数据包的控制域中加入了发送序号和接收序号,客户端和服务端都记得自己发送过多少数据,保证数据的匹配传输

1.3 IEC 协议帧格式

IEC104 协议的帧格式有三种(I 帧、U帧、S帧)

  • U 帧(控制帧):启动、停止、测试功能的帧;
  • I 帧(传输帧) :可计数的信息传输功能的帧;
  • S 帧(监视帧):可计数的确认功能的帧;

报文由三部分组成:

  • APDU:应用规约数据单元
  • APCI :应用规约控制单元
  • ASDU:应用服务数据单元

不同类型的报文包含其中的一个或多个部分,其整体结构及各部分长度如下表所示:

Java零基础入门物联网(2): 电力104规约详解

启动字符固定为 68H

控制域1 开头的两个 bit 位 1 和 0 定义了 S 帧报文

控制域1 开头的第一个 bit 位 =0 定义了 I 帧报文

控制域1 开头的第一个 bit 位=1 并且第二个 bit 位 =1 定义了 U 帧报文

二、U 帧报文(控制帧)

U 帧报文为不计数的控制功能类型,用于传输控制命令的报文。

U 帧报文的 APDU 只包含 APCI,帧长 6 字节,其具体格式如下:

Java零基础入门物联网(2): 电力104规约详解

测试、停止和开启只可能存在其中一种。下面对三种报文进行分解测试

2.1 U 帧链路开启报文解析

激活第 2 位是 1,第 3 位是 0 ;

激活确认第 2 位是 0,第 3 位是 1;

案例

U 帧【链路启动】报文:68 04 07 00 00 00

分解 07 为 0000 0111 = 07

U 帧【链路启动确认】报文:68 04 0B 00 00 00

分解 0B 为 0000 1011 = 0B = 11

小结

U 帧【链路启动】报文主要是用于主站连接子站时,主站给子站发送一个 U 帧启动报文。

链路启动报文用于激活 IEC 104 报文发送链路,允许发出 IEC104 报文。

对应操作:

  • 1、修改 IEC 104 传输标识
  • 2、发送 U 帧【启动链路确认】报文

2.2 U 帧链路测试报文解析

激活第 6 位为 1,第 7 位 0;

激活确认第 6 位为0,第 7 位 1;

案例

U 帧【链路测试】报文为: 68 04 43 00 00 00

  • 分解 43 为 0100 0011 第 6 位为1,第 7 位为0,代表测试激活状态

U 帧【链路测试确认】报文为:68 04 83 00 00 00

  • 分解 83 为 1000 0011 第 7 位为1,第 6 为0 ,代表测试激活确认状态

小结

使用场景:U 帧【链路测试】

  • 测试 U 帧 一般用于子站判断主站是否还在连接子站,主站判断子站是否还在线,目的是保证数据传输的畅通性。
  • 如果主站超过一定时间没有下发报文或 RTU 也没有上送任何报文则双方都可以按频率发送 U 帧报文来测试链路的通畅性

2.3 U 帧链路停止报文解析

激活第 4 位为 1 ,第 5 位 0;

激活确认第 4 位为 0,第 5 位为1;

案例

U 帧【停止】报文为 : 68 04 13 00 00 00

  • 13 分解为 0001 0011 ,第5位0,第4位1,代表激活停止状态

U 帧【停止确认】报文为:68 04 23 00 00 00

  • 23 分解为 0010 0011 ,第5位1,第4位0,代表激活确认

小结

使用场景:链路停止报文用于关闭 IEC104 报文发送链路,禁止发出 IEC 104 报文

对应操作:

  • 1、修改 IEC104 传输标识
  • 2、发送 U 帧【停止确认】报文

三、S 帧报文(监视帧)

S 帧报文,可计数,用于传输对站端的确认的报文。

S 帧的 APDU 只包含 APCI,帧长度 6 字节。不能用于传输信息,只用于给对方信息的确认。

S 帧和 I 帧结合使用,用于信息确认,主站和子站可以按频率发送,比如接收 8 帧 I 帧回答 1 帧 S 帧。

也可以要求接收 1 帧 I 帧就回答 1 帧 S 帧,具体格式见下图:

Java零基础入门物联网(2): 电力104规约详解

报文案例如:68 04 01 00 XX XX

S 帧报文前四个字节固定,后两个字节表示接收序号。

四、I 帧报文(传输帧)

I 帧报文则包含 APCI 和 APDU 完整的信息内容,下面对各部分进行简要解析

Java零基础入门物联网(2): 电力104规约详解

4.1 控制域格式(APCI)

I 帧报文控制域格式如下

Java零基础入门物联网(2): 电力104规约详解

注意,I 帧格式报文格式规定,控制域1和控制域3 的最低位都是 0,序列号增加时都是从第一位开始增加

  • 发送方发送信息时增加发送序号;
  • 接收方确认对方的发送序号时增加接收序号;
  • 带信息发送并确认对方帧;
  • 接收序号为“期望序号”=实际接收序号+1;
  • 每次重新建立 TCP 连接后,调度主站和子站 RTU 的接收序号和发送序号都应清零

当双方开始数据传输后,接收方若收到一个 I 格式报文,应判断此 I 格式报文的发送序号是否等于自己的接收序号;

  • 相等:将自己的接收序号加1,表示正常接收;
  • 若发送过来的序号大于自己期望序号,表示报文丢失;
  • 若发送过来的序号小于自己期望序号,表示重复发送

4.2 类型标识

记住几种常见的 TYP 就行

Java零基础入门物联网(2): 电力104规约详解

4.3 可变结构限定词

可变结构限定词,占一个字节,对应 8 位。

最高位(SQ)表示数据是否连续,其他低 7 位表示报文中包含的数据的个数。

Java零基础入门物联网(2): 电力104规约详解

SQ=0:信息对象的地址不连续(意思就是每个信息对象都会有一个对象地址);

SQ=1:信息对象的地址连续(只有第一个信息对象有地址,其他对象的地址就是累加1);

Tips:

  • 总召唤时,为了压缩信息传输时间 SQ=1;
  • 从站主动上传变化数据时,因为地址不连续,SQ=0,此时每个信息对象都包含信息体地址

4.4 传送原因

传送原因:上行(从站发送给主站)、下行(主站发送给从站);

十进制如下:

十进制含义
0未用
1周期、循环per/cyc
2背景扫描back
3突发(自发) spont
4初始化init
5请求或者被请求req
6激活act
7激活确认actcon
8停止激活deact
9停止激活确认deactcon
10激活终止actterm
13文件传输file
20响应站召唤introgen
44未知的类型标识
45未知的传送原因
46未知的应用服务数据单元公共地址
47未知的信息对象地址
48遥控执行软压板状态错误
49遥控执行时间戳错误
50遥控执行数字签名认证错误

4.5 ASDU 公共地址

代表设备站地址:1-254 为站地址,255 为全局地址。

4.6 信息体

4.6.1 信息对象地址

案例:49 01 00(信息对象地址) 01(信息体元素)

信息体地址为 00 01 49H,在报文中低位在前,高位在后,显示为 49 01 00 H

4.6.2 信息元素集

案例:01 40 00 (信息对象地址)00 c0 c9 44 00 (信息体元素,前四个为遥测值,第五个字节为品质描述词)

4.6.3 品质描述词

Java零基础入门物联网(2): 电力104规约详解

单点遥信 SPI :遥信状态值(0=开,1=合)

双点遥信 SPI :遥信状态值(0=不确定状态或中间装填)

  • 1=确定状态的开;
  • 2=确定状态的合;
  • 3=不确定状态或中间装填

IV :有效标志

  • IV =0 状态有效
  • IV =1 状态无效

NT :刷新标识符。若最近刷新成功,则值称为当前值,若一个指定的时间间隔内刷新不成功或者其值不可用,就称为非当前值。设备处于调试状态或装置通讯中断都可能造成非当前值。

  • NT = 0:刷新成功
  • NT = 1:刷新未成功

SB :取代标识符。当信息对象的值由值班员输入(人工置数)或者由当地自动原因(模拟遥信)所提供时,即为被取代

  • SB = 0 :未被取代;
  • SB = 1:被取代

BL : 封锁标识符。信息对象的值为传输而被封锁,值保持封锁前被采集的状态。封锁和解锁可由当地联锁机构或当地自动原因启动。

  • BL = 0 :未被封锁
  • BL = 1: 封锁

OV:溢出标识符。信息对象的值超出了预先定义值的范围(主要适用模拟量值),仅在遥测品质结构词中出现。

  • OV = 0 : 未溢出
  • OV = 1: 溢出

概念解析:

单点和双点区别:

以遥信为例,

  • 单点就是用一位标识一个遥信量,比如开关位置,只采集一个常开的辅助节点,值为1 表示合位,0 表示分位;
  • 双点需要采集常开和常闭两个辅助接点位置,当常开点值为 1 ,常闭点值为 0 即 10 ,则认为开关在合位;当常开点值为 0 ,常闭点值为 1 即 01 ,认为开关在分位;当两个位置都是1或都是0,则认为不确定。

4.6.4 信息对象时标

占用 7 字节,56位。

Java零基础入门物联网(2): 电力104规约详解

五、通讯过程详解

上述了解了大概帧的使用后,我们将对帧的传输过程进行详解。

  • I 帧:传输应用数据,捎带确认对方的发送;
  • S 帧:无应用数据可传输时,确认对方的发送;
  • U 帧:控制用报文
    • 启动 U 帧,用于启动应用层传输;
    • 停止 U 帧,用于停止应用层传输;
    • 测试 U 帧,双方均无发送时,维持链路活动状态

5.1 主站从站交互过程

Java零基础入门物联网(2): 电力104规约详解

Java零基础入门物联网(2): 电力104规约详解

流程详解

  1. 由客户端向服务器建立连接,同时,发送链路启动帧。
  2. 服务端在收到链路启动帧后,向客户端发送启动确认帧。
  3. 客户端收到启动确认帧后,发送总召唤命令数据请求帧。
  4. 服务端收到总召唤命令数据请求后,发送总召唤命令数据响应帧,然后继续发送总召唤命令数据。总召唤命令数据发送完成后,发送总召唤命令数据结束帧。
  5. 客户端在收到总召唤命令数据结束帧后,发送对时请求帧。
  6. 服务器收到对时请求帧后,发送对时响应帧。
  7. 由服务器主动向客户端发送变化数据帧。同时,收到客户端发送的控制类命令,回复相应的操作结果。
  8. 客户端等到下一个数据总召唤命令数据周期,重复第4步之后的流程。

5.2 报文传输

5.2.1 I 帧(正常)

Java零基础入门物联网(2): 电力104规约详解

如上图,A 站与 B 站通过 I 帧进行报文传输,其中 V 是计数器,V(S) 是发送计数器,V(R) 是接收计数器。

当 B 站给 A 站发送 I(0,0) 报文,

  • A 站 V(R) +1 =1,同时 B 站 V(S) +1 =1 ,二者相等

当 A 站给 B 站发送 I(0,3) 时:

  • A 站 V(S) + 1 =1 , 同时 B 站 V(R) + 1 =1 ,二者相等。

5.2.2 I 帧(受干扰)

Java零基础入门物联网(2): 电力104规约详解

当 A 站从 (0,0)直接跳到 (2,0) 时,B 站与预期不匹配,则表示序列错误,关闭活动。

5.2.3 I 帧(超时未确认)

Java零基础入门物联网(2): 电力104规约详解

5.2.4 S 帧(正常)

Java零基础入门物联网(2): 电力104规约详解

B 站发送三次,A 站确认一次。

5.2.5 U 帧(测试帧)

Java零基础入门物联网(2): 电力104规约详解

5.3 基本报文分析

报文初步解析可以看下面,详细内容可以看我的文档。

总召唤解析

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

TX:68(启动符)0E(长度)00 00(发送序号)00 00(接收序号)64(类型标示)01(可变结构限定词)06 00(传输原因)01 00(公共地址即RTU地址)00 00 00(信息体地址)14(区分是总召唤还是分组召唤,02年修改后的规约中没有分组召唤)

1)接收后回答--> S 帧

RX:68 04 01 00 02 00

功能:记录接收到的 I 帧,双方可以按照一定频率发送,比如接收 8 帧 I 帧回答 1 帧 S 帧。

  1. 接收后回答--> 总召唤确认

RX : 68(启动符) 0e(APDU 长度,后面有14个字节) 00 00 00 00(4个控制域) 64(类型标识,64H =100,代表总召唤) 01(可变结构限定词) 07 00(传输原因,低位在前,高位在后,值0007H,激活确认) 01 00(公共地址,低前,高后) 00 00 00(信息体) 14(召唤限定词,总召唤还是分组召唤。)

5.4 Java 软件实战

项目参考:

gitee.com/ali88888/ja…

总结

IEC104 相关的科普资料不多,很多看起来比较晦涩,这篇只做个大概入门,感谢各位同仁资料的分享,相关深入资料可以到我网盘获取。

链接:pan.baidu.com/s/19_xMqchJ… 提取码:u975