IEC104 协议 | 帧格式 / 调试(篇 3)

注:本文为 “ IEC104 协议” 相关合辑。
未整理去重,如有内容异常请看原文。
图片清晰度限于引文原状。


电力 101/104 规约中遥测量类型转换

milletluo 于 2017-04-11 20:17:31 发布

引言

DL/T 634.5101-2002 与 DL/T 634.5104-2009 标准规定遥测量可采用归一化值(NVA)、标度化值(SVA)及短浮点数(R32-IEEE STD 754)三种标识类型。本文基于共用体(union)数据类型,给出字节序列与上述三种类型相互转换的规范化实现。

方法

定义 4 字节共用体,各成员共享同一存储空间,依时段承载不同数据类型。

typedef unsigned char BYTE;
typedef unsigned long DWORD;

typedef union {               // 4 bytes
    bool               bBool; // 1 byte
    BYTE               byBuf[4];
    short              nInt;  // 16-bit signed
    unsigned short     snInt; // 16-bit unsigned
    long               l;     // 32-bit signed
    DWORD              dw;    // 32-bit unsigned
    float              f;     // 32-bit IEEE 754
} EXC_DataType;

归一化值(NVA)

NVA 占 2 字节,含 1 位符号位与 15 位数据位。正数为原码,负数为补码,数值区间 [ − 1 , 1 − 2 − 15 ] [-1, 1-2^{-15}] [1,1215]

位序D7D6D5D4D3D2D1D0
高字节 2 − 8 2^{-8} 28 2 − 9 2^{-9} 29 2 − 10 2^{-10} 210 2 − 11 2^{-11} 211 2 − 12 2^{-12} 212 2 − 13 2^{-13} 213 2 − 14 2^{-14} 214 2 − 15 2^{-15} 215
低字节S 2 − 1 2^{-1} 21 2 − 2 2^{-2} 22 2 − 3 2^{-3} 23 2 − 4 2^{-4} 24 2 − 5 2^{-5} 25 2 − 6 2^{-6} 26 2 − 7 2^{-7} 27
float Bytes2Float_NVA(const QByteArray &bytes)
{
    EXC_DataType u;
    u.dw = 0;
    u.byBuf[0] = bytes[0]; // LSB
    u.byBuf[1] = bytes[1]; // MSB

    if (u.snInt & 0x8000) { // 负数
        u.snInt ^= 0xFFFF;
        u.snInt += 1;
        u.snInt |= 0x8000;   // 恢复符号位
    }
    return static_cast<float>(static_cast<short>(u.snInt)) / 32768.0f;
}

标度化值(SVA)

SVA 占 2 字节,格式与 NVA 相同,但不经归一化,直接以 16 位补码整数解释,区间 [ − 32768 , 32767 ] [-32768, 32767] [32768,32767]

float Bytes2Float_SVA(const QByteArray &bytes)
{
    EXC_DataType u;
    u.dw = 0;
    u.byBuf[0] = bytes[0];
    u.byBuf[1] = bytes[1];
    return static_cast<float>(static_cast<short>(u.snInt));
}

短浮点数(R32-IEEE STD 754)

短浮点数占 4 字节,符合 IEEE 754 单精度格式:

位域符号 S(1 bit)指数 E(8 bit)尾数 F(23 bit)
字节321–0

C/C++ 中 float 类型即采用该格式,可直接通过共用体完成字节序到浮点数的映射。

float Bytes2Float_IEEE754(const QByteArray &bytes)
{
    EXC_DataType u;
    u.dw = 0;
    u.byBuf[0] = bytes[0];
    u.byBuf[1] = bytes[1];
    u.byBuf[2] = bytes[2];
    u.byBuf[3] = bytes[3];
    return u.f;
}

结语

上述共用体方案在不依赖外部库的前提下,实现了 DL/T 634.5101/104 规约中三种遥测量类型的精确转换,可直接嵌入终端或主站软件。


电力系统 104 规约帧报文解析

黎陌 MLing 已于 2022-03-30 16:12:36 修改

一、简介

1.1 电力系统常见概念

电力系统远动 (power system telemechanics):为电力系统调度服务的远距离监测、控制技术,即管理和监控分布甚广的众多厂、所、站和设备、元器件的运行工况的一种技术手段。

一般来说,电力系统远动终端 RTU (Remote Terminal Unit) 具有 “四遥” 等功能。“四遥” 主要指的是遥测、遥控、遥调、遥信四种。其实从 “遥” 字面意思上我们也可以看到这注定是一个远程远距离的操控了。

  1. 遥测:远程测量。采集并传送运行参数,包括各种电气量(线路上的电压、电流、功率等量值) 和负荷潮流等。

  2. 遥控:远程控制。接受并执行遥控命令,主要是分合闸,对远程的一些开关控制设备进行远程控制。

  3. 遥信:远程信号。采集并传送各种保护告警和开关量信息。

  4. 遥调:远程调节。接受并执行遥调命令,对远程的控制量设备进行远程调试,如调节发电机输出功率。

ps:

一遥:遥信

二遥:遥信和遥测

三遥:遥信、遥测和遥控

1.2 104 规约使用场景

电力系统中常见的设备分为调度端(控制站、主站、客户机), 服务端(被控站、子站,典型设备包含 TTU、RTU 等),两者之间通过 104 规约来进行数据通信与传输。其传输层实际上使用的是 TCP 协议进行数据的传输。固定端口号为 2404。

服务端不主动发起请求,一直处于侦听状态,当侦听到来自客户机的连接请求后,则接受此请求,由此建立一个 TCP 链接。控制站(即调度系统)作为客户机,被控站(即站端 RTU)作为服务器。

即实际的代码操作为:

主站按照: Socket ()->Connect () 的顺序进行

RTU(服务器)端按: Socket ()->Bind ()->Listen ()->Accept () 的顺序进行。

二、IEC104 协议结构

传输接口 (用户到 TCP) 是一个面向流的接口,它没有为 DLT 634.5101 中的 ASDU 定义任何启动或者停止机制。为了检出 ASDU 的启动和结束,每个 APCI 包括下列的定界元素:一个启动字符,ASDU 的长度的规范,以及控制域,见图 4。可传送一个完整的 APDU (或者出于控制目的,仅有 APCI 域,见图 5)。

APDU:应用协议数据单元

APCI:应用协议控制单元

ASDU:应用服务数据单元

1

帧报文的格式如下所示:

2

2.1. APCI

2.1.1 启动字符

默认固定为 68H,意思就是只要是 IEC104 协议就是以 68H 开头;

2.1.2 APDU 的长度问题

起始一个 apdu 的总长度不会超过 255 个字节;

在协议中的第二个字节会记录本 apdu 的长度,但是这个记录的长度数是除开前面两个字节之外的长读数,比如下面有个单点信息的 apdu 协议报文:

68 31 02 00 02 00 01 A4 14 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

其中第二个字节 31H 就是长度转为 10 进制为 49 个字节,你可以数下后面肯定是 49 个字节,如果不是就不是一个 apdu 协议;

2.1.3 控制域

控制域主要是有两个功能:

  1. 报文的类型(I 帧报文、U 帧报文或者 S 帧报文)
  2. 收发报文的个数

104 规约帧报文分为三大类 ( I 帧、S 帧、U 帧):

2.1.3.1 I 帧报文

I 帧是信息帧,作用是用于传输具体的通信数据的,长度必大于 6 个字节。

2

  • I 帧报文格式规定控制域 1 和控制域 3 的最低位为 0;

  • 其他部分用于发送序列号和接收序列号的计数;

比如:发送计数为 TxCounter 接收计数为 RxCounter

控制域 1 = TxCounter & 0xFE

控制域 2 = (TxCounter >8) & 0xFF

控制域 3 = RxCounter & 0xFE

控制域 4 = (RxCounter >8) & 0xFF

2.1.3.2 S 帧报文

S 帧是用于确认接收的 I 帧,即当接收到 I 帧后需要返回一个 S 帧,长度等于 6 个字节。

3

  • S 帧报文格式规定控制域 1 的第 0 位为 1,第 1 位为 0 和控制域第 0 位为 0;

  • S 帧报文的发送序列号都为 0

  • S 帧只用于 APCI 中(意思就是 S 帧的 apdu 报文只会有 apci 不会存在 asdu),不能用于传输信息,只用给对方信息的确认,比如子站发送 8 条报文,结束后主站就会给子站发送一个确认帧(S 帧),告诉子站我收到了 8 条报文。

比如:接收计数为 RxCounter

控制域 1 = 0x01

控制域 2 = 0x00

控制域 3 = RxCounter & 0xFE

控制域 4 = (RxCounter >8) & 0xFF

2.1.3.3 U 帧报文

U 帧是控制帧,用于控制启动 / 停止子站进行数据传输,或测试 TCP 链路连接,长度等于 6 个字节。

4

  • I 帧报文格式规定控制域 1 和控制域 3 的最低位为 0;

  • 其他部分用于发送序列号和接收序列号的计数;

  • U 帧只用于控制,并且只存在 APCI 中(意思就是 U 帧的 apdu 报文只会有 apci 不会存在 asdu);

  • 测试、停止和开启在一个 U 帧报文中只可能存在其中的一种;

(1) 如果用于【开启】则:

a. 激活第 2 位为 1 第 3 位 0,如下表所示

5

b. 激活确认第 2 为 0 第 3 位 1,如下表所示

6

U 帧启动主要是用于 主站连接子站时,主站给子站发送一个 U 帧启动报文,如下:

主站发送:68 04 07 00 00 00

子站回复:68 04 0B 00 00 00

(2) 如果用【停止】则:

a. 激活第 4 位为 1 第 5 位 0,如下表所示

7

b. 激活确认第 4 为 0 第 5 位 1,如下表所示

8

U 帧停止如下:

主站发送:68 04 13 00 00 00

子站回复:68 04 23 00 00 00

(3) 如果用【测试】则:

a. 激活第 6 位为 1 第 7 位 0,如下表所示

9

b. 激活确认第 6 为 0 第 7 位 1,如下表所示

10

比如:子站发送 U 帧测试(激活),主站收到测试 U 帧就会回复一个 U 帧(确认)

子站发送:68 04 43 00 00 00

主站发送:68 04 83 00 00 00

Tips:测试 U 帧一般用于子站判断主站是否还在连接子站,主站判断子站是否还在运行,保证数据传输的畅通性.

2.2 ASDU

2.2.1 类型标识

类型标识:占一个字节,标识出后面的信息体的数据类型

Tips:一个 apdu 中信息体中的所有数据的类型都是一致的,并且数据类型在类型标识这个位置标识;

类型的分类:

2.2.1.1 监视方向的用户类型

  • 标度化值:类似 INT16

  • 归一值:(转换比较复杂,参考网上的一个公式)取值范围,通常将大于 1 的数映射到 1 以内的空间,通常就是用实际值除以额定值,即得到归一化的小数(只要双方约定好,什么形式的转化无所谓)

  • 短浮点值:类似 float

标度化值和归一化值占 2 个字节,短浮点数占 4 个字节

Tips:一般为从站发送给主站

8

2.2.1.2 控制方向的用户类型

Tips:一般为主站发送给从站

9

2.2.1.3 监视方向的系统类型

10

Tips:

  • 当厂站(从站)短重新上电、初始化参数、重新分配缓存区等情况下,厂站需要给主站发送该类型,而主站收到该类型的 APDU 包,主站一般会做一次总召唤;

  • 从站发送给主站

2.2.1.4 控制方向的系统类型

11

Tips:一般为主站发送给从站

2.2.2 可变结构限定词

12

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

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

Tips:总召唤时,为了压缩信息传输时间 SQ=1;而在从站主动上传变化数据时,因为地址不连续,采用 SQ=0;

2.2.3 传送原因

占 2 个字节
13

  • T = 0 未试验 ; T = 1 试验 (一般 T= 0)

  • P/N = 0 肯定 ; P/N = 1 否定 (正常为 P/N = 0;P/N = 1 说明该报文无效)

  • 源发地址:用来记录来时哪个主站的响应数据,一般写 0;

  • 传送原因:(下面提到的上行:[从站发送给主站 ]、下行:[主站发送给从站 ])

14

红色标记的是一些常用的;其中【6,7,8,9,10】在一些遥控,设定值时用的比较多

例如:从站发送一个 传送原因为 突发 的报文 ,则传送原因这个 2 个字节的情况如下:

突发 = 3

15

2.2.4 应用服务数据单元公共地址

占 2 个字节

16

  • 规定高位字节 0x00

  • 站地址: 1-254 为站地址;255 为全局地址;

2.2.5 信息体

2.2.5.1 连续信息传输型

2.2.5.1.1 带绝对时标(遥测)

17

  • 时标有三种,但是例外两种基本不用,暂不去说明

  • 其中只有类型为【21】的【归一化测量值】不带品质描述词

  • 说明:连续、带时标的 ASDU 数据部分结构如上表分为:

  • 地址编号:第一个信息体数据的地址(只会出现一次)

  • 重复信息体数据 + 品质描述词 (地址 = 第一个地址按顺序 + 1 推算出来)

  • 最后以绝对时标结束

2.2.5.1.2 不带绝对时标(遥测)

18

  • 说明:连续、不带时标的 ASDU 数据部分结构如上表分为:

  • 地址编号:第一个信息体数据的地址(只会出现一次)

  • 重复信息体数据 + 品质描述词 (地址 = 第一个地址按顺序 + 1 推算出来)

2.2.5.1.3 带绝对时标(遥信)

19

  • 对于遥信,状态量和品质描述词 合在了一个字节中

2.2.5.1.4 不带绝对时标(遥信)

20

  • 对于遥信,状态量和品质描述词 合在了一个字节中

2.2.5.2 非连续信息传输型

2.2.5.1.1 带绝对时标(遥测)

21

  • 说明: 不连续、带时标的 ASDU 数据部分结构如上表分为:

  • 每一个信息体数据都会有一个地址编号

  • 绝对时标结尾

2.2.5.1.2 不带绝对时标(遥测)

22

  • 说明: 不连续、带时标的 ASDU 数据部分结构如上表分为:

  • 每一个信息体数据都会有一个地址编号

2.2.5.1.3 带绝对时标(遥信)

23

2.2.5.1.4 不带绝对时标(遥信)

24

2.2.5.3 品质描述词

分为 遥信品质描述词 和 遥测品质描述词:

2.2.5.3.1 遥信品质描述词

1. 单点信息品质描述词

25

  • BL : 封锁标志;BL=0 未被封锁;BL=1 封锁;

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

  • NT:刷新标志;NT=0 刷新成功;NT=1 刷新未成功;

  • IV:有效标志;IV = 0 状态有效;IV = 1 状态无效;

  • RES: 保留位

  • SPI:遥信状态值(0 = 开;1 = 合) 【具体的值,占一个 bit 位】

1 = 确定状态的开;

2 = 确定状态的合;

3 = 不确定状态或中间装填)【具体的值,占 2 个 bit 为必然有 4 个值】

2. 双点信息品质描述词

26

  • BL : 封锁标志;BL=0 未被封锁;BL=1 封锁;

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

  • NT:刷新标志;NT=0 刷新成功;NT=1 刷新未成功;

  • IV:有效标志;IV = 0 状态有效;IV = 1 状态无效;

  • RES: 保留位

  • SPI:遥信状态值(0 = 不确定状态或中间装填;

1 = 确定状态的开;

2 = 确定状态的合;

3 = 不确定状态或中间装填)【具体的值,占 2 个 bit 为必然有 4 个值】

2.2.5.3.2 遥测品质描述词

27

  • BL : 封锁标志;BL=0 未被封锁;BL=1 封锁;

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

  • NT:刷新标志;NT=0 刷新成功;NT=1 刷新未成功;

  • IV:有效标志;IV = 0 状态有效;IV = 1 状态无效; (tips: 如何无效说明该遥测数据无效)

  • RES: 保留位;

  • OV:溢出标志;OV=0 未溢出;OV=1 遥测超出量程,发生溢出

2.2.5.4 绝对时标

28

  • IV : IV = 0 时标有效;IV=1 时标无效;

  • RES:保留位

2.2.5.5 遥控和设定值

2.2.5.5.1 单点遥控

29

单点遥控信息:

30

  • S/E = 0 遥控执行命令;S/E=1 遥控选择命令;

  • QU = 0 被控占内部确定遥控输出方式,不有控制站选择;

1 短脉冲方式输出

2 长脉冲方式输出

3 持续脉冲方式输出

其他值没有定义

  • RES :保留位

  • SCS : 设置值; 0 = 控开 ;1 = 控合

2.2.5.5.2 双点遥控

31

双点遥控信息:

32

  • S/E = 0 遥控执行命令;S/E=1 遥控选择命令;

  • QU = 0 被控占内部确定遥控输出方式,不有控制站选择;

1 短脉冲方式输出

2 长脉冲方式输出

3 持续脉冲方式输出

其他值没有定义

  • DCS; 0 无效控制

1 控分

2 控合

3 无效控制

Tips:一个从站系统单点和双点只能存在一种

2.2.5.5.3 设定值(遥测)

  • 除了类型编号: 136 存在多点设定外,其他都是单个信息体设置值

33

  • QOS:设定命令限定词

31

S/E : 0 设定执行;1 设定选择;

设定命令限定词: 基本就是 0 ,因为其他并没有定义;

2.4 过程描述

  1. 建立 tcp 连接;

  2. 主站给从站发送启动帧;报文:68 04 07 00 00 00

  3. 从站收到启动帧,给主站发送启动确认帧;报文:68 04 0B 00 00 00

  4. 主站给从站发送总召唤;报文:68 0E 00 00 00 00 64 01 06 00 01 00 00 00 00 14

  5. 从站收到主站的总召唤命令,给主站发送总召唤确认;

报文:68 0E 00 00 02 00 64 01 07 00 01 00 00 00 00 14

  1. 从站上传遥信,遥测,电度等 I 帧信息帧,发送完毕从站发送总召唤结束帧;

  2. 主站收到从站发送的结束帧,会回复一个 S 帧的确认帧;

  3. 进入下一个周期(其中如何数据有变化,从站需要主动上报)

2.5 用到的参数解释

33

其中 t3>t1>t2

35

默认端口:2404;

// 超时机制
int t1_calc; // 用于计数
int t1;    //  发送或者测试 APDU 的超时
// 从站端启动 U 格式测试过程后等待 U 格式测试应答的超时时间 (超时处理:断开连接)
// 启动条件:发送 U 测试帧
// 关闭条件:接收 U 测试帧
int t2_calc; // 用于计数
int t2;    //  无数据报文 t2<t1 确认的超时
//	1)	以突发的传送原因向主站 (客户) 端上送了变化信息
//	2)	或以激活结束的传送原因向主站 (客户) 端上送了总召唤 / 电度召唤结束后
//	等待主站 (客户) 端回 S 格式的超时时间,若超过此时间还没有收到,就主动关闭 TCP 连接
//  处理完 I 格式帧后开始计时 (置 0),接收到 S 帧置 0
//  启动条件:发送完所有 I 帧
//  关闭条件:收到 S/I 帧
int t3_calc; // 用于计数
int t3;    //  长期闲置 t3>t1 状态下发送测试帧的超时
// T3: 当 RTU (服务器) 端和主站 (客户) 端之间没有实际的数据交换时,任何一端启动 U 格式测试过程的最大间隔时间 (超时处理:发送 U 测)
// 启动条件:建立连接
// 关闭条件:断开连接
int K;  // 发送序号和接收序号之间的最大差值   【发送方在发送 K 个 I 报文还未收到确认就应该关闭数据传送 默认值为 12;从站使用】
int W;  // 【接收方最迟收到 W 个 I 就必须要回复确认帧 默认值为 8;主站使用,这里不使用】
// W 不能够超过 K 的 2/3
QTimer*timer1;     // 发送或者测试 APDU 的计时器
QTimer*timer2;     // 无数据报文确认的计时器
QTimer*timer3;     // 发送测试帧的计时器

IEC104 规约调试

数据库练兵场 于 2018-08-18 09:51:37 发布

一、四遥信息体基地址范围

“可设置 104 调度规约” 有 1997 年和 2002 年两个版本,在流程上没有什么变化,02 版只是在 97 版上扩展了遥测、遥信等信息体基体址,区别如下:

img

二、一些报文字节数的设置

img

此配置要根据主站来定,有的主站可能设为 1,1,2,我们要改与主站一致。

三、以公共地址字节数=2,传输原因字节数=2,信息体地址字节数=3 为例对一些基本的报文分析

第一步:首次握手(U 帧)

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

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

第二步:总召唤(I 帧)

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

发送→总召唤 :

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

接收→S 帧 :

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

04 01 00 02 00

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

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

发送→S 帧 :

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

68 04 01 00 02 00

接收→YX 帧(以类型标识 1 为例) :

68(启动符)1A(长度)02 00(发送序号)02 00(接收序号)01(类型标示,单点遥信)04(可变结构限定词,有 4 个遥信上送)14 00(传输原因,响应总召唤)01 00(公共地址即 RTU 地址)03 00 00(信息体地址,第 3 号遥信)00(遥信分)

发送→S 帧 :

68 04 01 00 04 00

接收→YX 帧(以类型标识 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(遥信分)

发送→S 帧 :

68 04 01 00 06 00

接收→YC 帧(以类型标识 9 为例) :

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

发送→S 帧 :

68 04 01 00 08 00

接收→结束总召唤帧 :

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

发送→S 帧 :

04 01 00 0A 00

第二步 : 发送对时报文 ( 通过设置 RTU 参数表中的 ” 对间间隔 ”, 单位是分钟 , 一般是 20 分钟 )

发送→对时命令 :

68(启动符)14(长度)02 00(发送序号)0A 00(接收序号)67(类型标示)01(可变结构限定词)06 00(传输原因)01 00(公共地址)00 00 00(信息体地址)01(毫秒低位)02(毫秒高位)03(分钟)04(时)81(日与星期)09(月)05(年)

接收→对时确认 :

68(启动符)14(长度)0C 00(发送序号)02 00(接收序号)67(类型标示)01(可变结构限定词)07 00(传输原因)01 00(公共地址)00 00 00(信息体地址) (毫秒低位)(毫秒高位)(分钟) 04(时)81(日与星期)09(月)05(年)

发送→S 帧 :

68 04 01 00 0E 00

第三步 : 电度总召唤 ( 如果没有电度此步骤可以省略且可以在对时之前以送 . 通过设置参数中 ” 全数据扫描间隔 ”, 单位是分钟一般是 15 分钟召唤一交 , 如果不需要召唤电度一定要将参数中的电度个数设为 0)

发送→召唤电度 :

68(启动符)0E(长度)04 00(发送序号)0E 00(接收序号)65(类型标示)01(可变结构限定词)06 00(传输原因)01 00(公共地址)00 00 00(信息体地址)45(QCC)

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

68(启动符)0E(长度)10 00(发送序号)06 00(接收序号)65(类型标示)01(可变结构限定词)07 00(传输原因)01 00(公共地址)00 00 00(信息体地址)45(QCC)

发送→S 帧 :

68 04 01 00 12 00

接收→电度数据 :

68(启动符)1A(长度)12 00(发送序号)06 00(接收序号)0F(类型标示)02(可变结构限定词,有两个电度量上送)05 00(传输原因)01 00(公共地址)01 0C 00(信息体地址,从 0X0C01 开始第 0 号电度)00 00 00 00(电度值)00(描述信息)02 0C 00(信息体地址,从 0X0C01 开始第 1 号电度)00 00 00 00(电度值)01(描述信息)

发送→S 帧 :

68 04 01 00 14 00

接收→结束总召唤帧 :

68(启动符)0E(长度)14 00(发送序号)06 00(接收序号)65(类型标示)01(可变结构限定词)0A 00(传输原因)01 00(公共地址)00 00 00(信息体地址)45(QCC)

发送→S 帧 :

04 01 00 16 00

第四步 : 如果 RTU 有变化数据主动上送

主动上送变位遥信 , 类型标识为 1 或 3

接收→变位遥信 :

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

发送→S 帧 :

68 04 01 00 18 00

接收→变位遥信 :

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

发送→S 帧 :

68 04 01 00 1a 00

主动上送 SOE, 类型标识为 0x1e 或 0x1f

接收→SOE :

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

发送→S 帧 :

68 04 01 00 1c 00

接收→SOE :

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

第四步 : 如果主站超过一定时间没有下发报文或 RTU 也没有上送任何报文则双方都可以按频率发送 U 帧 , 测试帧

发送→U 帧 :

68 04 43 00 00 00

接收→应答 :

68 04 83 00 00 00

第五步 : 遥控

发送→遥控预置 :

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

接收→遥控返校 :

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

发送→遥控执行 :

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

接收→执行确认 :

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

发送→遥控撤消 :

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

接收→撤消确认 :

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

补充说明:

  1. 报文中的长度指的是除启动字符与长度字节的所有字节。
  2. 注意长帧报文中的“发送序号”与“接收序号”具有抗报文丢失功能。
  3. 常用的类型标识:

遥测: 09———带品质描述的测量值,每个遥测值占 3 个字节

0a———带 3 个字节时标的且具有品质描述的测量值,每个遥测值占 6 个字节

0b———不带时标的标度化值,每个遥测值占 3 个字节

0c———带 3 个时标的标度化值,每个遥测值占 6 个字节

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

0e———带 3 个字节时标且具有品质描述的浮点值,每个遥测值占 8 个字节

15———不带品质描述的遥测值,每个遥测值占 2 个字节

遥信: 01———不带时标的单点遥信,每个遥信占 1 个字节

03———不带时标的双点遥信,每个遥信占 1 个字节

14———具有状态变位检出的成组单点遥信,每个字节 8 个遥信

SOE: 02———带 3 个字节短时标的单点遥信

04———带 3 个字节短时标的双点遥信

1e———带 7 个字节时标的单点遥信

04———带 7 个字节时标的双点遥信

KWH: 0f———不带时标的电能量,每个电能量占 5 个字节

10———带 3 个字节短时标的电能量,每个电能量占 8 个字节

25———带 7 个字节短时标的电能量,每个电能量占 12 个字节

其他:

2e———双点遥控

2f———双点遥调

64———召唤全数据

65———召唤全电度

67———时钟同步

2、常用的传送原因列表:

1———周期、循环

2———背景扫描

3———突发

4———初始化

5———请求或被请求

6———激活

7———激活确认

8———停止激活

9———停止激活确认

0a———激活结束

14———响应总召唤


详解 IEC104 规约【最详细版】

CH_Qing 已于 2024-11-19 13:15:29 修改

1. 基本概念

IEC60870-5-104 是一种电力自动化系统中常用的通信协议,使用 TCP/IP 协议作为底层通信协议,用于监视和控制电力系统中的各种设备,如变电站、发电机、开关等。

1.1 控制站(client)\受控制站(server)

IEC104 协议是基于 TCP 的应用层协议。其架构为 client/Server 模式。 TCP Server 负责和实际的硬件控制,数据采集,命令执行等功能,因此也叫受控制站/分站, IEC101 中还被叫做 Slave。TCP Client 负责远程控制,获取 server 采集的数据,配置 server 等,因此也叫控制站,IEC101 中还被叫做Master

在这里插入图片描述

1.2 链路层传输模式

IEC104 支持两种传输模式: 平衡传输模式, 和非平衡传输模式

  • 非平衡传输模式
    在该模式下,只有控制站(client)才能启动一次消息传输受控站(server) 只能响应控制站(client)的请求。在这种模式下,控制站(client)通过依次轮询 所控制的 受控站(server)来获取对应的业务数据。该种模式下,支持的传输服务类型如下表:
    在这里插入图片描述
  • 平衡传输模式
    当使用平衡模式传输时,每个站(client 和 server)都可以启动消息传输。该种模式下,支持的传输服务类型如下表:
服务描述
SEND/CONFIRM
SEND/NO REPLY这只能由具有多点对点配置中的广播地址的控制站启动

在 IEC104 协议中,平衡模式是最常用的。

1.3 数据对象 & 编址

Iec104 的数据对象 就是 信息对象,本文第三章有非常详细的描述,在此不必赘述。
IEC104 定义了数据链路层的地址和应用层级的地址。
链路地址(COT), 也叫传输原因,长度可以是, 0, 1 ,2 byte 的长度,后面会有详细描述。
ASDU 地址 (通用地址,COA):就是站点地址,区分位于那个站点。

1.4 基础的应用功能

1.4.1 数据采集

iec104 协议中,所有的数据都被缓存在受控站中(Server),因为数据产生的速度可能会比传输的速度更快。

  • 在非平衡传输的链路模式下,受控站(Server)总是等待控制站发送的数据 polling 请求,并给以回应。也就是常说的一问一答,不问不答模式。

  • 在平衡传输的链路模式下,受控站(Server)

    既可以回应 控制站 的各种请求, 也可以当数据产生变化时,或者周期性上报对象值时,主动将对应的数据传输给控制站(client)。

    现总结该模式下受控站(Server)的数据采集行为如下:

    • 当数据对像的值产生改变时,受控站(Server)主动上报其产生的数据;
    • 当周期性上报数据时,受控站(Server)主动上报其产生的数据;
    • 回应控制站(client) 的控制命令,如总召唤等;
    • 回应读请求;
1.4.2 事件采集

受控站(Server)的应用层级事件会自动发生。其在平衡传输模式和非平衡模式下采集方式和数据采集完全相同。

1.4.3 召唤(Interrogation)

英文翻译叫询问,官方翻译叫召唤。其实感觉询问更切近。
当一个控制站初始化后,或者控制站探测到相应信息有丢失,控制站(client) 就需要发送召唤命令去请求受控站(Server)发送其 【所有】过程变量 的实际值
控制站(client) 可以在仍何时候发送召唤命令,以同步受控站(Server)中的所有过程变量的值。召唤命令分为总召唤群组召唤,现详细描述如下:

  • 总召唤/general interrogation (GI)
    总召唤命令会请求受控站(Server)中所有群组的所有数据对象的值的更新给控制站。
  • 群组召唤
    在受控站(Server)端,数据对象可以通过配置 COT 的值为 20~36 来设定数据对象的召唤群组。20 代表总召唤,21~36 分别对应 INRO1~INRO16,分别对应 16 个召唤群组。控制站(client) 在召唤时,可以通过指定召唤群组,来让该召唤组中的数据对象值更新。
1.4.4 时钟同步

受控站(Server)和 控制站(client) 必须保证时钟同步,这样才能传输给控制站的数据和事件拥有保证精确的时标。
系统初始化完成后,控制站(client) 应该应当发送一次一次时钟同步指令, 此后,通过发送时钟同步命令(C_CS ACT)来周期性地重新同步时钟。

1.4.5 命令传输(遥控)

命令(也被称作遥控)是 控制站(client) 用来改变受控站(Server)操作设备的状态的 API。一个命令可以由操作员发起,也可以由控制台中的自动监控程序发起。命令(遥控)分为**直控命令(单步命令)*和*选控命令
命令传输有两种类型:

  • 直控命令(Single command)
    直控命令实际上就是去掉选择命令,直接发执行命令。一般来说保护压板、保护复归为直控;
    直控的一般流程如下: 主站下发执行命令→装置回执行确认报文。
  • 选控命令(Select and execute)
    和直控命令(Single command)相比,该命令包含两个执行过程
    • Select 阶段
      控制站发送一个该命令的 Select 的操作,受控站会检查该命令该命令是否正确,确认该命令是否已经有正确的执行操作。并把结论返回给控制站。
    • execute 阶段
      Select 返回预期时,执行命令。执行完成后, 装置回执行确认报文。
1.4.6 累计量传输

累计量是一个值在指定时间内的积分值。累计量的连续采集时间间隔和 Clock 是系统参数。有两种方法获取累计值的计数器信息:

  • Freeze-and-Read: 累计量采集
  • Clear-and-Read: 增量信息的采集
    控制站(client) 可以根据需要,使用计数器召唤命令(counter interrogation) 获取累计量计数器对象的值。累计量也可以被配成,当计数器冻结操作(counter freeze operations)发生时,主动上报其计数值。
1.4.7 协议和链路参数的更改

当协议和链路参数的值发生更改时,新值在提交后生效。

1.4.8 传输延迟的采集

时间校正值由传输延迟和内部设备延迟之和确定,传输延迟是可以通过参数化单独获取的值,或者通过控制站启动一个时间校准进程来实现的。

2. iec104 协议的帧结构

在这里插入图片描述

iec104 基于 TCP/IP 传输,是一个应用层协议, 其帧结构被称为 APDU,APDU 一般由 APCI 和 ASDU 组成。

2.1 APDU (Application Protocol Data Unit)

APDU 被称为应用协议数据单元,也就是一个 iec104 的协议帧的官方叫法。一个 APDU(也就是协议帧),可以只包含一个 APCI, 或者 一个 APCI + ASDU。

APDU = APCI 
or
APDU = APCI + ASDU

APDU 的最大长度为 255byte。

2.2 APCI (Application Protocol Control Information)

APCI(应用控制信息,类似于帧头),由一个 1byte 的起始字节 0x68 + 1 byte ADPU 的长度 + 4 个 1 byte 控制位域(CF)组成。详细如下图所示。
在这里插入图片描述
APCI 中第一个控制位域(CF1)的最低 2bit,确定了帧的格式,iec104 定义了 3 种格式的帧。其如下图所示:
在这里插入图片描述

  • I-format (information transfer format)

    , last bit of CF0 是 0

    • 它用于控制 RTU(server, slave) 和 类 SCADA(master, client)之间的信息传输,其位可变长度。

    • I-format 的数据帧(APDU)总是包含 ASDU。

    • I-format 的控制位域表明了消息的方向,其包含了两个 15bit 的序号数字,每个方向上,每个 APDU 的

    序号数字

    都会被

    有序的加 1

    。并且在 0~32767 之间循环。

    • 发送器在发送一个 iFrame 后,会将发送端的发送序号自动加 1,同时将该 iFrame 保存在发送缓冲区中, 直到它接受到一个 ADPU,该 APDU 中接收序号表明接收到发送端发送的对应发送序号&以下的 iFrame,这些 iFrame 会被从发送缓冲区移除。

    • 接受器接收到一个 iFrame 后,会将接收端的接收序号自动加 1,当接收序号到达设定的数量后,会给发送端回应一个 sFrame 的 Ack。如果在一定的时间内,接收端接收的 iFrame 未到达该设定的数量,接收端也会发送一个 sFrame 的 Ack。如果接收端在一定的时间内都处于 idle 状态,且存在没有回应的 iFrame, 接收端就会给其回应一个 sFrame 的 Ack。

    • TCP 连接建立后,发送/接收序号应当被置 0;

    • 发送/接收序号由 CF 位域由 LSB 和 MSB 构成,I-Format 的帧序号只有 15bit, 如下图所示:
      在这里插入图片描述

  • S-format (numbered supervisory functions), last bits of CF1 是 01

  • 一般作为一个/多个 iFrame 的 Ack , 固定 APDU 长度

  • S-format APDU 只有 APCI, 没有 ASDU。

  • 在 iFrame 只是单向情况下, S-format 的 APDUs 必须被发送出去,当相应的 iFrame 超时,溢出,或者到达 IFrame 接收的最大允许数量。

  • U-format (unnumbered control functions)

    , last bits of CF2 是 11

    • 被用于有序的控制功能, 固定 APDU 长度

    • U-format 的 APDU 只有一个 APCI,没有 ASDU。其功能包括 TESTFR
      (测试帧), STOPDT (停止数据传输) or STARTDT (开启数据传输,它们可以同时被激活。其 CF1 的二进制值,如下图所示:
      在这里插入图片描述

    • uFrame 用于 STARTDT(开启数据传输),STOPDT(关闭数据传输)和 TESTFR(测试帧)的激活&确认机制。

    • STARTDT 和 STOPDT 用于 client(master,也称控制站点)去控制 Server(Slave,也称被控制站点)去开启/关闭数据传输
      当连接建立时,用户数据传输是没有被使能的(默认是处于 STOPDT 状态的),在这种状态下,客户端通过这个连接是不能发送仍何用户数据的(uFrame 是可以发送的)。客户端必须发送一个**STARTDT 激活(STARTDT activate)指令去激活用户数据的传输,服务器端将会回应一个STARTDT 确认(STARTDT confirm)**消息。如果没有收到该确认消息,client 将会关闭此连接。

    只有 client 才可以发送 STARTDT 激活指令。当连接建立好后,client 才可以向 server 发送 STARTDT 激活指令,该指令只能被发送一次。激活后,该连接才可以在仍何时间发送仍何消息, 直到连接被 STOPDT 激活指令终止。

    • client & server 必须周期性地发送 TESTFR 帧,去检测所有连接的连接状态,和通信问题等.

    client & server 必须周期性地发送**TESTFR 激活(TESTFR activate)指令,对应的TESTFR 确认(TESTFR confirm)**帧必须被回应。

    在一定的时间内,连接没有数据传输时,client/server 就可以启动这个测试进程。

2.3 ASDU 格式

ASDU 包含两个主要的段:数据单元识别符(长度固定为 6Byte), 和数据段数据段由一个或者多个信息对象构成。数据单元识别符定义了数据的类型,提供数据标识的寻址,包含额外的信息,如传输原因等。 每一个 ASDU 可以传输最大 127 个信息对象。 ASDU 的结构如下:
在这里插入图片描述

2.3.1 数据单元识别符

数据单元识别符包含以下位域:

  1. Type identification (TypeID, 1 byte)

    • TypeID 的值,0 不可用,1~127 用于标准的 IEC101 协议定义。128~135 用于消息路由,135~255 为特殊使用。

    • 对于标准的 IEC101 协议,有 58 个类型被定义,其定义如下:

    在这里插入图片描述

    • 值的注意的是 TypeID 贯穿于整个 ASDU,如果有多个信息对象被包含在该 ASDU 中,这些信息对像就有相同的类型。
  2. SQ (Structure Qualifier) bit
    SQ 位域指定了信息对象&信息元素如何被编址。

    • SQ=0 (一系列的信息对象):

      单个/多个信息元素的寻址如下图所示。

      • 信息元素被信息对象地址,ASDU 可能由一个或者多个相同类型的信息对象组成,这个信息对象的长度被变码成二进制,并被定义在 Number of Objects 位域。
      • SQ=0 表示了一系列的信息对象,这些信息对象都自己的地址,数据单元识别符中用一个 7bit 的数据表示信息对象的个数。其如下图所示。因此它们可以装载多达 127 个信息对象。
    • SQ=1 (仅仅只有一个信息对象)

      编址一种信息对象的单个或者多个信息元素。

      • 一系列相同的信息对象(例如,相同格式的测量值)被通过 information object address 位域寻址。信息对象的地址就是第一个信息元素的地址。信息元素根据不同的偏移被寻址。这个信息元素的长度被变码成二进制,并被定义在 Number of Objects 位域。在这种情况,该 ASDU 只有一个信息对象,信息对象由一系列的信息元素组成。

      • 当 SQ=1 时,ASDU 只有一个信息对象, 这个对象包含了一系列的信息元素。仅仅只有一个信息对象地址,这个信息对象的地址就是第一个信息元素的地址。

        其如下图所示:

        在这里插入图片描述

  3. Number of objects/elements

    • 范围为 0~127
    • 0 表示没有包含信息对象
    • 1~127 表示信息对象/信息元素的个数
  4. T (test) bit
    只用于测试,不会控制处理器&更改系统状态

    • T=0 (非测试模式), T=1 (测试模式)
  5. P/N (positive/negative) bit
    积极/消极的激活确认。

    • 当使用控制命令时,这个位域是有意义的。该位域通常表示控制命令是否被成功执行。P=0 表示肯定确认,P=1 表示否定确认。 非控制命令,这个位域总是置 0。
  6. Cause of transmission (COT)

    • COT 用于控制通信种的消息路由,该消息路由会把 ASDU 路由到正确的程序&任务。控制方向的 ASDU 会相应的服务确认。
    • COT 是一个 6 位码, 它被用于描述目标栈点的信息。
    • 0 没有被定义, 1~47 用于标准定义。48-63 为特殊目的使用。
  7. Originator Address (ORG)

    • 这个是可选的,它为控制栈点提供了一种明确识别自己的方式。当系统中只有一个控制栈点时,是没有必要的。但多个控制栈点,或者一些栈点是双栈模式是,是有用的。在这种情况下,始发方地址可用于将命令确认引导回特定的控制站而不是整个系统
  8. ASDU Address Field (Common Address of ASDU, COA),

    • 该地址称为公共地址,是因为它与包含在 ASDU 内的所有对象相关联。其经常被解释为栈点地址。然而,它可以被构造为形成一个站点/扇区地址,其中各个站点由多个逻辑单元构成。
    • COA 总是一个或者两个字节的长度。
    • 全局地址也叫做广播地址,它会发送给所有的栈点。控制方向上的广播类 ASDU,必须要要被回应,回应是监控方向上的,且必须带上自己的栈点地址。
    • 0 不被用, 1~65534 被定义为站点地址。 65535 被定义为广播地址。
    • 当相同功能的应用被启动时,使用广播地址。它仅限于以下 ASDU:
      • TypeID=100 (询问命令): 在公共时间使用特定系统数据快照进行回复
      • TypeID=101 (反询问命令): 在公共时间冻结总计
      • TypeID=103 (时钟同步命令): 同步时钟到通用时间。
      • TypeID=105 (复位进程命令): 同时复位
2.3.2 信息对象

ASDU 在其结构中传输信息对象,每一个信息对象都被信息对象地址(IOA)编址。IOA 用以识别站点内定义的数据。IEC104 中,信息对象地址(IOA)的长度为 3byte。在控制方向上,该地址为目标地址,监控方向上,该地址为源地址。

  • 通常情况下,IOA 的地址范围被限制到最大 35535(2 byte)。在特殊情况下,IOA的第三个字节仅用于结构化信息对象地址的情况,以便在特定系统中定义明确的地址。
  • 如果 ASDU 的信息对象地址,没有被用,将被设置为
    0。

在一个 ASDU 中被传输的所有信息对象,都必须有相同的 ASDU Type。如果有多个不同类型的信息对象,它们必须被装载进不同的 ASDU 中传输。
在 IEC104 协议中,每一个 ASDU 类型,都有一对应的消息对象格式。
例如信息对象有哪些信息元素构成等。

  • 下图展示了一个单点没有时间的信息对象(ASDU
    type=1), 这个对象有两种格式:一个是 SQ=0 和另一个是 SQ=1。这个对象的合法 COT 是: 2 (background scan), 3 (spontaneous), 5 (requested), 11, 12 (feedback), 20 +G
    (interrogated by station interrogation)。

    在这里插入图片描述

  • 一些信息对象包含一些元素,例如,下图显示了信息对象类型 10(测量值,归一化的时间标签), 这个对象的 SQ 进为 0,包含了 3 个信息元素: 归一化值 NVA(3byte),质量描述符(1byte),和二进制的时间戳(3bytes)。其 COT 的合法值为 spontaneous (code 3) or requested (code 5)。

    在这里插入图片描述

2.3.3 信息元素

3. ASDU 类型&描述

对于每一种 ASDU 的类型,IEC104 都定义了对应的信息对象类型。 下面我们将分类描述

3.1 监视方向上的过程信息

类型标识描述引用信息对象格式合法的 COT
1单点信息M_SP_NA_1SIQ2,3,5,11,20,20+G
3双点信息M_DP_NA_1DIQ3,5,11,12
5步位置信息M_ST_NA_1VTI + QDS2,3,5,11,12,20,20+G
732 比特串M_BO_NA_1BSI + QDS2,3,5,11,12,20,20+G
9归一化测量值M_ME_NA_1NVA + QDS2,3,5,11,12,20,20+G
11标量化测量值M_ME_NB_1SVA + QDS2,3,5,11,12,20,20+G
13浮点型测量值M_ME_NC_1IEEE STD 754 + QDS2,3,5,11,12,20,20+G
15累计值M_IT_NA_1BCR2,37,37+G
20带状态检出的成组单点信息M_PS_NA_1SCD+QDS2,3,5,11,12,20,20+G
21不带品质描述的归一化测量值M_ME_ND_1NVA1,2,3,5,11,12,20,20+G
22~29为将来的兼容定义保留
30带时标 CP56Time2a 的单点信息M_SP_TB_1SIQ+ CP56Time2a3,5,11,12
31带时标 CP56Time2a 的双点信息M_DP_TB_1DIQ+ CP56Time2a3,5,11,12
32带时标 CP56Time2a 的步位置信息M_ST_TB_1VTI + QDS+ CP56Time2a2,3,5,11,12
33带时标 CP56Time2a 的 32 比特串M_BO_TB_1BSI + QDS+CP56Time2a3,5
34带时标 CP56Time2a 的归一化测量值M_ME_TD_1NVA + QDS+CP56Time2a3,5
35带时标 CP56Time2a 的标量化测量值M_ME_TE_1SVA + QDS+CP56Time2a3,5
36带时标 CP56Time2a 的浮点型测量值M_ME_TF_1IEEE STD 754 + QDS+CP56Time2a2,3,5,11,12,20,20+G
37带时标 CP56Time2a 的累计值M_IT_TB_1BCR+CP56Time2a3,37,37+G
38带时标 CP56Time2a 的继电器保护装置事件M_EP_TD_1QDP+CP16Time2a+CP56Time2a3
39带时标 CP56Time2a 的继电器保护装置成组启动事件M_EP_TE_1SEP + QDP+CP16Time2a+CP56Time2a3
40带时标 CP56Time2a 的继电器保护装置成组输出电路信息M_EP_TF_1OCI + QDP+CP16Time2a+CP56Time2a3

类型表示 1~15 中,单数是不带时标的信息元素,双数是带时标 CP24Time2a 的对应信息元素。其对象格式,是给不带时标的信息元素格式的基础上+CP24Time2a。
引用的命名格式如下:
M_ :监视方向的信息元素
_Nx:不带时标
_Tx: 带时标
_xA:type A: 有质量描述副的状态或归一化值
_xB:type B: 有质量描述副的标量值
_xC:type C: 有质量描述副的浮点值
_xD:type D: 没有有质量描述副的归一化值
信息对象格式描述了信息对象由那些信息元素组成。

3.2 控制方向上的过程信息

类型标识描述引用信息对象格式合法的 COT
45单命令C_SC_NA_1SCO6,7,8,9,10,44,45,46,47
46双命令C_DC_NA_1DCO6,7,8,9,10,44,45,46,47
47步调节命令C_RC_NA_1RCO6,7,8,9,10,44,45,46,47
48设点命令,归一化值C_SE_NA_1NVA + QOS6,7,8,9,10,44,45,46,47
49设点命令,标量值C_SE_NB_1SVA + QOS6,7,8,9,10,44,45,46,47
50设点命令,短浮点值C_SE_NC_1IEEE STD 754 +QOS6,7,8,9,10,44,45,46,47
5132 比特串C_BO_NA_1BSI6,7,8,9,10,44,45,46,47
52~57为将来的兼容定义保留
58带时标 CP56Time2a 的单命令C_SC_TA_1SCO+CP56Time2a6,7,8,9,10,44,45,46,47
59带时标 CP56Time2a 的双命令C_DC_TA_1DCO+CP56Time2a6,7,8,9,10,44,45,46,47
60带时标 CP56Time2a 的步调节命令C_RC_TA_1RCO+CP56Time2a6,7,8,9,10,44,45,46,47
61带时标 CP56Time2a 的设点命令,归一化值C_SE_TA_1NVA + QOS+CP56Time2a6,7,8,9,10,44,45,46,47
62带时标 CP56Time2a 的设点命令,标量值C_SE_TB_1SVA + QOS+CP56Time2a6,7,8,9,10,44,45,46,47
63带时标 CP56Time2a 的设点命令,短浮点值C_SE_TC_1IEEE STD 754 +QOS+CP56Time2a6,7,8,9,10,44,45,46,47
64带时标 CP56Time2a 的 32 比特串C_BO_TA_1BSI+CP56Time2a6,7,8,9,10,44,45,46,47
65~69为将来的兼容定义保留

引用的命名格式 C_ :控制方向的信息对象。
注意:控制方向的信息对象(也叫命令),必须要和对应类型的监视方向上的过程信息对象 产生 Map 才可以起作用,否则,命令无法起作用。

3.3 监视方向上的系统信息

类型标识描述引用信息对象格式合法的 COT
70初始化结束M_EI_NA_1COI4
71~99为将来的兼容定义保留

3.4 控制方向上的系统信息

类型标识描述引用信息对象格式合法的 COT
100总召唤命令C_IC_NA_1QOI6,7,8,9,10,44,45,46,47
101电能脉冲召唤命令C_CI_NA_1QCC6,7,8,9,10,44,45,46,47
102读命令C_RD_NA_15
103时钟同步命令C_CS_NA_1CP56Time2a3,6,7,44,45,46,47
104(IEC 101) Test commandC_TS_NB_1FBP6,7,44,45,46,47
105复位进程命令C_RP_NC_1QRP6,7,44,45,46,47
107带时标 CP56Time2a 的测试命令C_TS_TA_1
108~109为将来的兼容定义保留

3.5 控制方向上的参数

类型标识描述引用信息对象格式合法的 COT
110归一化测量值P_ME_NA_1NVA + QPM6,7,9,10,20,20+G,44,45,46,47
111标量化测量值P_ME_NB_1SVA + QPM6,7,20,20+G,44,45,46,47
112浮点测量值P_ME_NC_1IEEE STD 754 +QPM6,7,20,20+G,44,45,46,47
113参数激活P_AC_NA_1QPA6,7,8,9,44,45,46,47
114~119为将来的兼容定义保留

参数都是控制方向上的,和监控方向的对象相比,其值发生变化时,不会上报,只有总召唤时,可以上报给数据的值。

3.6 文件传输

类型标识描述引用信息对象格式合法的 COT
120文件已准备好F_FR_NA_1NOF + LOF + FRQ13
121节点已准备好F_SR_NA_1NOF + NOS + LOF +SRQ13
122召唤目录,选择文件,召唤文件,选择节F_SC_NA_1NOF + NOS + SCQ5,13
123最后的节,最后的段F_LS_NA_1NOF + NOS + LSQ +CHS13
124确认文件,确认节F_AF_NA_1NOF + NOS + AFQ13
125F_SG_NA_1NOF + NOS + LOS +segement13
126目录F_DR_TA_1NOF + LOF + SOF +CP56Time2a3,5
127日至查寻-请求存档文件F_SC_NB_1

4. 信息元素详解

信息元素是构成信息对象的基本单元,就像 OOP 中的变量一样,是构成 Object 的基础。

我们给出一个 IEC104 的信息元素列表:
监视方向的过程信息

元素类型描述长度(byte)使用的信息对象
SIQ有质量描述符的单点信息11, 2, 30
DIQ有质量描述符的双点信息13
BSI二进制状态信息47, 8, 33, 51
SCD状态更改探测420
QDS质量描述符15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 20, 32, 33, 34, 36
VTI具有瞬态指示值15, 6, 32
NVA归一化值29, 10, 21, 34, 48, 110
SVA标度值211, 12, 49, 111
IEEE STD 754短浮点数413, 14, 36, 50, 112
BCR二进制计数器读数515, 16, 37

保护

元素类型描述长度(byte)使用的信息对象
SEP保护设备的单个事件117, 38
SPE保护设备启动事件118, 39
OCI保护设备输出电路信息119, 40
QDP保护设备事件的质量描述符118, 19, 39, 40

命令

元素类型描述长度(byte)使用的信息对象
SCO单个命令145
DCO双命令146
RCO调节阶跃指令147

时间

元素类型描述长度(byte)使用的信息对象
CP56Time2a七字节二进制时间74, 6, 8, 10, 12, 14, 16, 17, 18, 19, 31,32, 33, 34, 36, 37, 38, 39, 40, 103, 126
CP24Time2a三字节二进制时间34, 5, 6, 8, 10, 12, 14, 16, 17, 18, 19, 31, 32, 33, 34, 36, 37, 38, 39, 40
CP16Time2a二字节二进制时间217, 18, 19, 38, 39, 40, 106

限定符

元素类型描述长度(byte)使用的信息对象
QOI讯问资格1100
QCC反询问命令限定符1101
QPM测量值参数限定符1110, 112
QPA参数激活的限定符1111, 113
QRP重置过程命令的限定符1105
QOC命令的限定符145, 46, 47, 48, 49, 50
QOS设定值命令的限定符148, 49, 50

文件传输

元素类型描述长度(byte)使用的信息对象
FRQ文件就绪限定符1120
SRQ节就绪限定符1121
SCQ选择并调用限定符1122
LSQ最后一节或段限定符1123
AFQ确认文件或节限定符1124
NOF文件名2120, 121, 122, 123, 124, 125, 126
NOS段命名2121, 122, 123, 124, 125
LOF文件/段的长度3120, 121
LOS分段长度1125
CHSChecksum1123
SOF文件状态1126

杂项

元素类型描述长度(byte)使用的信息对象
COI初始化原因170
FBP固定测试位模式,两个八位字节1104

4.1 SIQ 的数据格式

bit7bit6bit5bit4bit3bit2bit1bit0
IVNTSBBL000SPI
  • IV:VALID (0) / INVALID (1)。数据值是否有效,当采集系统识别到异常的情况(如更新设备丢失或无法运行),将这个位域标为 1。该情况下信息对象的值,不会被定义。这个位为 1 表示信息对象的值是不正确的,不能被用。
  • NT: TOPICAL (0) / NOT TOPICAL (1) NT 为刷新标志位,若最近的刷新成功则值就称为当前值,若一个指定的时间间隔内刷新不成功或者其值不可用,值就称为非当前值。设备处于调试态或装置通讯中断都有可能造成非当前值。
  • SB:NOT SUBSTITUTED (0) / SUBSTITUTED (1) SB 为取代标志位,当信息对象的值由值班员 (调度员) 输入(即人工置数)或者由当地自动原因(模拟遥信)所提供时,即为被取代。如人工置数情况下。这意味着该值不是从正常测量中得出的。
  • BL:NOT BLOCKED (0) / BLOCKED (1) BL 为封锁标志位,信息对象的值为传输而被封锁,值保持封锁前被采集的状态。封锁和解锁可以由当地联锁机构或当地自动原因启动。
  • SPI: OFF (0) / ON (1) SPI 为遥信状态值。单点遥信,0 分 1 合;双点遥信,1 开 2 合,0 和 3 为中间状态。

4.2 DIQ 的数据格式

bit7bit6bit5bit4bit3bit2bit1~bit0
IVNTSBBL00DPI
  • DPI: Double Point Information SPI 为遥信状态值。双点遥信,1=OFF, 2=ON,0 和 3 为不确定中间状态。

4.3 BSI 的数据格式

32 位宽度的数据,可以认为为 uint32。

4.4 SCD 的数据格式

 **32 位宽度的数据,可以认为为 uint32。**

4.5 QDS 的数据格式

bit7bit6bit5bit4bit3bit2bit1bit0
IVNTSBBL000OV
  • OV: NO OVERFLOW (0) / OVERFLOW (1) OV 为溢出标志位,信息对象的值超出了预先定义值的范围 (主要适用模拟量值)。仅在遥测品质结构词中出现。

4.6 VTI 的数据格式

bit7bit6~bit0
是否处于瞬变状态比他 6 为符号位,取值范围为 <-64…63>

4.7 NVA 的数据格式

16 位的标量值,可以认为 int16,转化为归一值需要除以 32768。
归一化值(NVA),值的范围为[-1,1]。归一化,即是将大于 1 的数映射到 1 以内的空间,通常就是用实际值除以额定值,即得到归一化的小数。具体表示法可以有 F13 或 F16 位的。占 2 个字节。
在电力行业中,通常是将数值归一到满码值。满码值是通信双方约定的一个值,它会影响数值的误差。一般来说,所内监控后台满码值为 4095 或 2047,地调满码值为 4095,中调满码值为 32767(通常会要求 P、Q、I 按 1 倍额定值对应 15000 的码值的关系转换后上送;母线电压、频率则按 1.2 倍额定值对应 15000 的码值的关系转换后上送)。

4.8 SVA 的数据格式

16 位的标量值,可以认为 int16

4.9 IEEE STD 754 的数据格式

32 位,可以认为 float32

4.10 BCR 的数据格式

bit39bit38bit37bit36~bit32bit31~bit0
IV: 无效CA:计数量被调整CY:是否有进位顺序号 SQ计数器读数

4.11 SEP 的数据格式

bit7~bit6bit5bit4bit3bit2bit1bit0
预留SRD:反向保护启动SIE:接地电流保护启动SL3:C 相保护启动SL2:B 相保护启动SL1:A 相保护启动GS:总启动

4.12 OCI 的数据格式

bit7~bit4bit3bit2bit1bit0
预留CL3:C 相保护命令输出至输出电路CL2:B 相保护命令输出至输出电路CL1:A 相保护命令输出至输出电路GC:总命令输出至输出电路

4.13 QDP 的数据格式

bit7bit6bit5bit4bit3bit2bit1~bit0
IVNTSBBLEI0事件 0~3
  • EI:Elapsed time invalid (EI) 这与保护设备的事件一起使用。该位值位时,表示时间间隔值(elapsed time )无效,这意味这这个时间间隔值(elapsed time )应该不能被使用,且需要忽略。

4.14 SCO 的数据格式

bit7bit6~bit2bit1bit0
S/E 为选择/执行位, 0 代表执行,1 代表选择0: 无另外的定义
1:短脉冲持续时间 (断路器),持续时间由被控站内的系统参数所确定
2:长脉冲持续时间,持续时间由被控站内的系统参数所确定
3:持续输出
0SCS
0:分/开,
1:合/关

4.15 DCO 的数据格式

bit7bit6~bit2bit1~bit0
S/E 为选择/执行位, 0 代表执行,1 代表选择0: 无另外的定义
1:短脉冲持续时间 (断路器),持续时间由被控站内的系统参数所确定
2:长脉冲持续时间,持续时间由被控站内的系统参数所确定
3:持续输出
DCS:
1 代表分/开,
2 代表合关,
0、3 代表不允许

4.16 RCO 的数据格式

bit7bit6~bit2bit1~bit0
同于 DCO同于 DCO步进命令:
1:下一步为降档,
2: 下一步升档,其他不允许

常用来进行调节分接头遥控,不是所有厂家都支持此命令,部分厂家将调节分接头遥控统一至单/双点遥控中。

4.17 CP56Time2a/CP24Time2a/CP16Time2a 的数据格式

字节序号描述
byte0Milliseconds(D7–D0)
byte1Milliseconds(D15–D8)
byte2IV(D7) 预留 (D6) Minutes(D5–D0)
byte3SU(D7) 预留 (D6-D5) Hours(D4–D0) SU = 夏令时,0 = 标准时间, 1 = 夏令时
byte4DayOfWeek(D7–D5) DayOfMonth(D4–D0)
byte5预留 (D7–D4) Months(D3–D0)
byte6预留 (D7) Year(D6–D0)

4.18. QOI 的数据格式

# TODO

4.19 QCC 的数据格式

# TODO

4.22 QOC 的数据格式

和 SCO & DCO & RCO 完全一致。

4.23 QOS 的数据格式

bit7bit6~bit0
同于 DCO0: 默认
1-63: 预留为标准定义
64-127:特殊使用

其他和文件传输相关的信息元素不再提及。

本文参考文献如下:
1. 《Description and analysis of IEC 104 Protocol》
2. 《运动设备及系统第 5-104 部分:传输规约-采用标准传输协议集的 IEC 60870-5-101 网络访问》 国家电网 DL/T634.5104-2009 实施细则
3. 《SSC600 IEC 60870-5-104 COMMUNICATION PROTOCOL MANUAL》
4. 《Grid Automation REC615 and RER615 IEC 60870-5-101/104 Communication Protocol Manual》
5. 《REX640 IEC 60870-5-104 Communication Protocol Manual》
6. 《IEC-60870-5-104 Master Communication Protocol》



via:

-------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值