简介

IEC 60870-5-104 是由国际电工委员会(IEC)制定的电力系统远动通信标准,它将 IEC 60870-5-101 协议的应用服务数据单元(ASDU)通过 TCP/IP 网络进行传输,提供了可靠的 SCADA(监控与数据采集)通信方案。

通信接口

接口标准:以太网

默认端口:2404,由IANA(互联网数字分配授权)定义和确认。

通信方式:平衡模式,主站端为Client,子站端为Server。

帧结构

APCI = Application Protocol Control Information,规约控制信息。

ASDU = Application Service Data Unit,服务数据单元。

APDU = Application Protocol Data Unit,规约数据单元。

可变帧

byte/bit 76543210
0 起始字节 (0x68) APCI APDU
1 长度 L = 4 字节控制域 + ASDU 字节数
2 控制域
3
4
5
6 类型标识 ASDU
7 SQ 信息体数量
8 T P/N 传送原因 (COT)
9 源地址 (OA)
10 ASDU 地址
11
12 第一个信息体的地址
13
14
15 第一个信息体数据 (长度依据类型标识)
... 后续若干个信息体。如果SQ=1,那么后续的信息体不需要带地址;如果SQ=0,则后续的每一个信息体都需要带上地址
...
...
n-1
n

固定帧

byte/bit 76543210
0 起始字节 (0x68) APCI
1 长度 L = 4
2 控制域
3
4
5

控制域

控制域的格式定义了三种类型的报文帧。

I帧

用于 编号的信息传输,即实际业务数据传输。

控制字段中包含 发送序号 N(S) 和 接收序号 N(R),是双向确认机制:携带 ASDU,同时承载 ACK 信息。

byte/bit 76543210
0 发送序号 LSB 0
1 发送序号 MSB
2 接收序号 LSB 0
3 接收序号 MSB

说明1:控制域的第一个字节的第一位比特位=0定义了I帧格式,I帧的APDU包含一个ASDU。

说明2:I格式的报文主要包括总召命令,总召确认,总召结束,全遥测,全遥信,变化遥测,变化遥信,SOE,遥控选择,遥控选择确认,遥控执行,遥控执行确认,遥控撤销,遥控撤销确认等,下文将逐一解析。

S帧

用于 编号确认,不携带 ASDU 业务数据,仅用于确认接收到的 I 帧。

控制字段只有接收序号 N(R),无需发送序号,常用于当没有 ASDU 发出时,用于主动确认 。

byte/bit 76543210
0 0 1
1 0
2 接收序号 LSB 0
3 接收序号 MSB

说明1:控制域的第一个字节的第一位比特=1,并且第二位比特=0定义了S帧格式,S帧格式的APDU只包含APCI。

说明2:S格式报文用来确认主动上送的SOE、变化遥信、变化遥测等。

U帧

属于 无编号控制帧,不包含序号信息,用于 链路层控制,如建立连接、停止连接、检测链路。

包括三种控制操作:

STARTDT(激活数据传输)

STOPDT(停止数据传输)

TESTFR(链路测试)

byte/bit 76543210
0 测试链路 停止数据传输 启动数据传输 1 1
确认生效 确认生效 确认生效
1 0
2 0
3 0

说明1:控制域的第一个字节的第一位比特=1并且第二位比特=1定义了U帧格式,U帧格式的APDU也只包括APCI。

说明2:U帧主要用来启动、测试链路。在同一时刻,TESTFR,STOPDT,STARTDT中只有一个功能可以被激活。

常用类型标识

遥测

ASDU9(0x09) —— 带品质描述的归一化测量值,每个遥测值占3个字节。

ASDU11(0x0B) —— 带品质描述的标度化测量值,每个遥测值占3个字节

ASDU13(0x0D) —— 带品质描述的浮点值,每个遥测值占5个字节

遥信

ASDU1(0x01) —— 不带时标的单点遥信,每个遥信占1个字节

ASDU3(0x03) —— 不带时标的双点遥信,每个遥信占1个字节

ASDU20(0x14) —— 具有状态变位检出的成组单点遥信,每个字节8个遥信

事件

ASDU30(0x1E) —— 带7个字节时标的单点遥信

ASDU31(0x1F) —— 带7个字节时标的双点遥信

遥控

ASDU45(0x2D)—— 单点遥控

ASDU46(0x2E)—— 双点遥控

常用传送原因

1 —— 周期,循环

2 —— 背景扫描

3 —— 突发

4 —— 初始化

5 —— 请求或被请求

6 —— 激活

7 —— 激活确认

8 —— 停止激活

9 —— 停止激活确认

10 —— 激活结束

20 —— 响应总召唤

通信要点

和连接有关的4个超时时间

T0: TCP连接建立的超时时间。即子站(TCP Server)端进入等待连接的状态后,若超过此时间,主站(TCP Client)还没有Connect()过来就主动退出等待连接的状态。规约推荐的缺省值为30s。

T1:子站(TCP Server)端启动U帧测试过程后等待主站(TCP Client)U帧测试应答的超时时间。若超过此时间还没有收到主站(TCP Server)端的U帧测试应答,就主动关闭TCP连接。规约推荐的缺省值为15s。

 T2:子站(TCP Server)端以突发的传送原因向主站(TCP Client)端上送了变化信息或以激活结束的传送原因向主站(TCP Client)端上送了总召唤/电度召唤结束后,等待主站(TCP Client)端回S帧的超时时间,若超过此时间还没有收到,就主动关闭TCP连接。规约推荐的缺省值为10s。

T3:当子站(TCP Server)端和主站(TCP Client)端之间没有实际的数据交换时,任何一端启动U帧测试过程的最大间隔时间。规约推荐的缺省值为20s。

所有超时值范围:1-255,单位秒。

未被确认的APDU最大数目K和最迟确认数目W

K表示某一特定时间内未被对方确认的连续编号的I格式APDU的最大个数。当未答复I格式APDU达到K个时,发送方停止传送;接收方在收到W个I格式APDU后应确认。K值范围:1到32767(215-1);w值范围:1到32767。规约推荐:W不会超过三分之二K,缺省值K=12,W=8

通信流程(主站视角)

首次握手

发送U帧→激活传输启动    : 68启动符04长度07控制域00  00  00

接收U帧→确认激活传输启动: 68启动符04长度0B控制域00  00  00

总召唤

初始化后定时发送总召唤,每次总召唤的间隔时间一般设为15分钟,不同主站系统设置不同。

发送I帧→总召唤:

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

接收I帧→总召唤确认(ASDU为发送帧的镜像,除传送原因不同):

68启动符0E长度00  00发送序号02  00接收序号,表示接收到了1条I帧64类型标示01可变结构限定词07  00传输原因01  00公共地址即RTU地址00 00 00信息体地址14同上

接收I帧→连续单点遥信(以类型标识1为例):

68启动符1A长度02  00发送序号02  00接收序号01类型标识,单点遥信84可变结构限定词,有4个遥信上送14  00传输原因,响应总召唤01  00公共地址即子站地址01 00 00信息体起始地址00遥信分01遥信合01遥信合00遥信合

接收I帧→离散双点遥信(以类型标识3为例):

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遥信分

接收I帧→遥测帧(以类型标识9为例) :

68启动符13长度06  00发送序号02  00接收序号09类型标示,带品质描述的遥测82可变结构限定词,有2个连续遥测上送14  00传输原因,响应总召唤01  00公共地址01 07 00信息体地址,从000701开始第0号遥测A1 10遥测值10A100品质描述89 15遥测值158900品质描述

接收I帧→结束总召唤帧 :

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

对时

发送I帧→对时命令 :

68启动符14长度02  00发送序号0A  00接收序号,表示主站已经确认接收到了5条I帧67类型标示01可变结构限定词06  00传输原因01  00公共地址00 00 00信息体地址01毫秒低位02毫秒高位03分钟0481日与星期0905

接收I帧→对时确认 :

68启动符14长度0C  00发送序号04  00接收序号,表示子站确认接收到了主站的2条I帧67类型标示01可变结构限定词07  00传输原因01  00公共地址00 00 00信息体地址**毫秒低位**毫秒高位**分钟0481日与星期0905

变位遥信

接收I帧→变位遥信 :

68启动符0E长度16  00发送序号06  00接收序号01类型标示,单点遥信01可变结构限定词,有1个变位遥信上送03  00传输原因,表突发事件01  00公共地址即RTU地址03 00 00信息体地址,第3号遥信00遥信分

接收I帧→变位遥信 :

68启动符0E长度18  00发送序号06  00接收序号03类型标示,双点遥信01可变结构限定词,有1个变位遥信上送03  00传输原因,表突发事件01  00公共地址即RTU地址06 00 00信息体地址,第6号遥信01遥信分

接收I帧→SOE :

68启动符15长度1a  00发送序号06  00接收序号1e类型标示,带时标的单点遥信01可变结构限定词,有1个SOE03  00传输原因,表突发事件01  00公共地址即RTU地址08 00 00信息体地址,第8号遥信00遥信分ad毫秒低位39毫秒高位1c分钟107a日与星期0b05

接收I帧→SOE :

68启动符15长度1c  00发送序号06  00接收序号1f类型标示,双点遥信01可变结构限定词,有1个SOE03  00传输原因,表突发事件01  00公共地址即RTU地址0a 00 00信息体地址,第10遥信01遥信分2f毫秒低位40毫秒高位1c分钟107a日与星期0b05

S帧确认

当主站没有I帧发送给子站,且子站发送的I帧已经到达最迟确认数目W时,主站需要向子站发送S帧以确认收到的I帧,否则当子站发送的I帧达到最大发送数目K时,主站还未下发I帧或S帧确认,子站将停止数据发送。

发送S帧→确认已收到的I帧:

68启动符04长度01  00控制域1e  00接收序号,表示主站已接收到15条I帧

测试连接

如果子站过了T3时间还未向主站发送任何报文,主站将发送链路测试帧,检测子站或链路是否处于工作状态。子站收到链路测试帧必须立即响应。

发送U帧→链路测试:

68启动符04长度43控制域00  00  00

接收U帧→测试应答确认 :

68启动符04长度83控制域00  00  00

遥控

遥控预置

发送I帧→遥控预置 :

68启动符0e长度06  00发送序号1e  00接收序号2e类型标识,表示双点遥控01可变结构限定词06  00传输原因01  00公共地址即RTU地址05 0b 00信息体地址,遥控点号82控合

接收I帧→遥控预置返校 :

68启动符0e长度1e  00发送序号08  00接收序号2e类型标示01可变结构限定词07  00传输原因01  00公共地址即RTU地址05 0b 00信息体地址,遥控点号82控合

遥控执行

发送I帧→遥控执行:

68启动符0e长度08  00发送序号20  00接收序号2e类型标示01可变结构限定词06  00传输原因01  00公共地址即RTU地址05 0b 00信息体地址,遥控点号02控合

接收I帧→执行确认 :

68启动符0e长度12  00发送序号08  00接收序号2e类型标示01可变结构限定词07  00传输原因01  00公共地址即RTU地址05 0b 00信息体地址,遥控点号02控合

遥控撤销

发送I帧→遥控撤消 :

68启动符0e长度08  00发送序号20  00接收序号2e类型标示01可变结构限定词08  00传输原因01  00公共地址即RTU地址05 0b 00信息体地址,遥控号02控合

接收I帧→撤消确认:

68启动符0e长度12  00发送序号08  00接收序号2e类型标示01可变结构限定词09  00传输原因01  00公共地址即RTU地址05 0b 00信息体地址,遥控号=0xb05-0xb01=402控合