注:本文为 “ 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,1−2−15]。
| 位序 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| 高字节 | 2 − 8 2^{-8} 2−8 | 2 − 9 2^{-9} 2−9 | 2 − 10 2^{-10} 2−10 | 2 − 11 2^{-11} 2−11 | 2 − 12 2^{-12} 2−12 | 2 − 13 2^{-13} 2−13 | 2 − 14 2^{-14} 2−14 | 2 − 15 2^{-15} 2−15 |
| 低字节 | S | 2 − 1 2^{-1} 2−1 | 2 − 2 2^{-2} 2−2 | 2 − 3 2^{-3} 2−3 | 2 − 4 2^{-4} 2−4 | 2 − 5 2^{-5} 2−5 | 2 − 6 2^{-6} 2−6 | 2 − 7 2^{-7} 2−7 |
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) |
|---|---|---|---|
| 字节 | 3 | 2 | 1–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) 具有 “四遥” 等功能。“四遥” 主要指的是遥测、遥控、遥调、遥信四种。其实从 “遥” 字面意思上我们也可以看到这注定是一个远程远距离的操控了。
-
遥测:远程测量。采集并传送运行参数,包括各种电气量(线路上的电压、电流、功率等量值) 和负荷潮流等。
-
遥控:远程控制。接受并执行遥控命令,主要是分合闸,对远程的一些开关控制设备进行远程控制。
-
遥信:远程信号。采集并传送各种保护告警和开关量信息。
-
遥调:远程调节。接受并执行遥调命令,对远程的控制量设备进行远程调试,如调节发电机输出功率。
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:应用服务数据单元

帧报文的格式如下所示:

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 控制域
控制域主要是有两个功能:
- 报文的类型(I 帧报文、U 帧报文或者 S 帧报文)
- 收发报文的个数
104 规约帧报文分为三大类 ( I 帧、S 帧、U 帧):
2.1.3.1 I 帧报文
I 帧是信息帧,作用是用于传输具体的通信数据的,长度必大于 6 个字节。

-
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 个字节。

-
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 个字节。

-
I 帧报文格式规定控制域 1 和控制域 3 的最低位为 0;
-
其他部分用于发送序列号和接收序列号的计数;
-
U 帧只用于控制,并且只存在 APCI 中(意思就是 U 帧的 apdu 报文只会有 apci 不会存在 asdu);
-
测试、停止和开启在一个 U 帧报文中只可能存在其中的一种;
(1) 如果用于【开启】则:
a. 激活第 2 位为 1 第 3 位 0,如下表所示

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

U 帧启动主要是用于 主站连接子站时,主站给子站发送一个 U 帧启动报文,如下:
主站发送:68 04 07 00 00 00
子站回复:68 04 0B 00 00 00
(2) 如果用【停止】则:
a. 激活第 4 位为 1 第 5 位 0,如下表所示

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

U 帧停止如下:
主站发送:68 04 13 00 00 00
子站回复:68 04 23 00 00 00
(3) 如果用【测试】则:
a. 激活第 6 位为 1 第 7 位 0,如下表所示

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

比如:子站发送 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:一般为从站发送给主站

2.2.1.2 控制方向的用户类型
Tips:一般为主站发送给从站

2.2.1.3 监视方向的系统类型

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

Tips:一般为主站发送给从站
2.2.2 可变结构限定词

-
SQ = 0 :信息对象的地址不连续(意思就是每个信息对象都会一个对象地址)
-
SQ = 1 : 信息对象的地址连续 (只有第一个信息对象有地址,其他对象的地址就是累加 1)
Tips:总召唤时,为了压缩信息传输时间 SQ=1;而在从站主动上传变化数据时,因为地址不连续,采用 SQ=0;
2.2.3 传送原因
占 2 个字节

-
T = 0 未试验 ; T = 1 试验 (一般 T= 0)
-
P/N = 0 肯定 ; P/N = 1 否定 (正常为 P/N = 0;P/N = 1 说明该报文无效)
-
源发地址:用来记录来时哪个主站的响应数据,一般写 0;
-
传送原因:(下面提到的上行:[从站发送给主站 ]、下行:[主站发送给从站 ])

红色标记的是一些常用的;其中【6,7,8,9,10】在一些遥控,设定值时用的比较多
例如:从站发送一个 传送原因为 突发 的报文 ,则传送原因这个 2 个字节的情况如下:
突发 = 3

2.2.4 应用服务数据单元公共地址
占 2 个字节

-
规定高位字节 0x00
-
站地址: 1-254 为站地址;255 为全局地址;
2.2.5 信息体
2.2.5.1 连续信息传输型
2.2.5.1.1 带绝对时标(遥测)

-
时标有三种,但是例外两种基本不用,暂不去说明
-
其中只有类型为【21】的【归一化测量值】不带品质描述词
-
说明:连续、带时标的 ASDU 数据部分结构如上表分为:
-
地址编号:第一个信息体数据的地址(只会出现一次)
-
重复信息体数据 + 品质描述词 (地址 = 第一个地址按顺序 + 1 推算出来)
-
最后以绝对时标结束
2.2.5.1.2 不带绝对时标(遥测)

-
说明:连续、不带时标的 ASDU 数据部分结构如上表分为:
-
地址编号:第一个信息体数据的地址(只会出现一次)
-
重复信息体数据 + 品质描述词 (地址 = 第一个地址按顺序 + 1 推算出来)
2.2.5.1.3 带绝对时标(遥信)

- 对于遥信,状态量和品质描述词 合在了一个字节中
2.2.5.1.4 不带绝对时标(遥信)

- 对于遥信,状态量和品质描述词 合在了一个字节中
2.2.5.2 非连续信息传输型
2.2.5.1.1 带绝对时标(遥测)

-
说明: 不连续、带时标的 ASDU 数据部分结构如上表分为:
-
每一个信息体数据都会有一个地址编号
-
绝对时标结尾
2.2.5.1.2 不带绝对时标(遥测)

-
说明: 不连续、带时标的 ASDU 数据部分结构如上表分为:
-
每一个信息体数据都会有一个地址编号
2.2.5.1.3 带绝对时标(遥信)

2.2.5.1.4 不带绝对时标(遥信)

2.2.5.3 品质描述词
分为 遥信品质描述词 和 遥测品质描述词:
2.2.5.3.1 遥信品质描述词
1. 单点信息品质描述词

-
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. 双点信息品质描述词

-
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 遥测品质描述词

-
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 绝对时标

-
IV : IV = 0 时标有效;IV=1 时标无效;
-
RES:保留位
2.2.5.5 遥控和设定值
2.2.5.5.1 单点遥控

单点遥控信息:

-
S/E = 0 遥控执行命令;S/E=1 遥控选择命令;
-
QU = 0 被控占内部确定遥控输出方式,不有控制站选择;
1 短脉冲方式输出
2 长脉冲方式输出
3 持续脉冲方式输出
其他值没有定义
-
RES :保留位
-
SCS : 设置值; 0 = 控开 ;1 = 控合
2.2.5.5.2 双点遥控

双点遥控信息:

-
S/E = 0 遥控执行命令;S/E=1 遥控选择命令;
-
QU = 0 被控占内部确定遥控输出方式,不有控制站选择;
1 短脉冲方式输出
2 长脉冲方式输出
3 持续脉冲方式输出
其他值没有定义
- DCS; 0 无效控制
1 控分
2 控合
3 无效控制
Tips:一个从站系统单点和双点只能存在一种
2.2.5.5.3 设定值(遥测)
- 除了类型编号: 136 存在多点设定外,其他都是单个信息体设置值

- QOS:设定命令限定词

S/E : 0 设定执行;1 设定选择;
设定命令限定词: 基本就是 0 ,因为其他并没有定义;
2.4 过程描述
-
建立 tcp 连接;
-
主站给从站发送启动帧;报文:68 04 07 00 00 00
-
从站收到启动帧,给主站发送启动确认帧;报文:68 04 0B 00 00 00
-
主站给从站发送总召唤;报文:68 0E 00 00 00 00 64 01 06 00 01 00 00 00 00 14
-
从站收到主站的总召唤命令,给主站发送总召唤确认;
报文:68 0E 00 00 02 00 64 01 07 00 01 00 00 00 00 14
-
从站上传遥信,遥测,电度等 I 帧信息帧,发送完毕从站发送总召唤结束帧;
-
主站收到从站发送的结束帧,会回复一个 S 帧的确认帧;
-
进入下一个周期(其中如何数据有变化,从站需要主动上报)
2.5 用到的参数解释

其中 t3>t1>t2

默认端口: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 版上扩展了遥测、遥信等信息体基体址,区别如下:

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

此配置要根据主站来定,有的主站可能设为 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(控合)
补充说明:
- 报文中的长度指的是除启动字符与长度字节的所有字节。
- 注意长帧报文中的“发送序号”与“接收序号”具有抗报文丢失功能。
- 常用的类型标识:
遥测: 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 返回预期时,执行命令。执行完成后, 装置回执行确认报文。
- 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 数据单元识别符
数据单元识别符包含以下位域:
-
Type identification (TypeID, 1 byte)
-
TypeID 的值,0 不可用,1~127 用于标准的 IEC101 协议定义。128~135 用于消息路由,135~255 为特殊使用。
-
对于标准的 IEC101 协议,有 58 个类型被定义,其定义如下:

- 值的注意的是 TypeID 贯穿于整个 ASDU,如果有多个信息对象被包含在该 ASDU 中,这些信息对像就有相同的类型。
-
-
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 只有一个信息对象, 这个对象包含了一系列的信息元素。仅仅只有一个信息对象地址,这个信息对象的地址就是第一个信息元素的地址。
其如下图所示:

-
-
-
Number of objects/elements
- 范围为 0~127
- 0 表示没有包含信息对象
- 1~127 表示信息对象/信息元素的个数
-
T (test) bit
只用于测试,不会控制处理器&更改系统状态- T=0 (非测试模式), T=1 (测试模式)
-
P/N (positive/negative) bit
积极/消极的激活确认。- 当使用控制命令时,这个位域是有意义的。该位域通常表示控制命令是否被成功执行。P=0 表示肯定确认,P=1 表示否定确认。 非控制命令,这个位域总是置 0。
-
Cause of transmission (COT)
- COT 用于控制通信种的消息路由,该消息路由会把 ASDU 路由到正确的程序&任务。控制方向的 ASDU 会相应的服务确认。
- COT 是一个 6 位码, 它被用于描述目标栈点的信息。
- 0 没有被定义, 1~47 用于标准定义。48-63 为特殊目的使用。
-
Originator Address (ORG)
- 这个是可选的,它为控制栈点提供了一种明确识别自己的方式。当系统中只有一个控制栈点时,是没有必要的。但多个控制栈点,或者一些栈点是双栈模式是,是有用的。在这种情况下,始发方地址可用于将命令确认引导回特定的控制站而不是整个系统
-
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_1 | SIQ | 2,3,5,11,20,20+G |
| 3 | 双点信息 | M_DP_NA_1 | DIQ | 3,5,11,12 |
| 5 | 步位置信息 | M_ST_NA_1 | VTI + QDS | 2,3,5,11,12,20,20+G |
| 7 | 32 比特串 | M_BO_NA_1 | BSI + QDS | 2,3,5,11,12,20,20+G |
| 9 | 归一化测量值 | M_ME_NA_1 | NVA + QDS | 2,3,5,11,12,20,20+G |
| 11 | 标量化测量值 | M_ME_NB_1 | SVA + QDS | 2,3,5,11,12,20,20+G |
| 13 | 浮点型测量值 | M_ME_NC_1 | IEEE STD 754 + QDS | 2,3,5,11,12,20,20+G |
| 15 | 累计值 | M_IT_NA_1 | BCR | 2,37,37+G |
| 20 | 带状态检出的成组单点信息 | M_PS_NA_1 | SCD+QDS | 2,3,5,11,12,20,20+G |
| 21 | 不带品质描述的归一化测量值 | M_ME_ND_1 | NVA | 1,2,3,5,11,12,20,20+G |
| 22~29 | 为将来的兼容定义保留 | |||
| 30 | 带时标 CP56Time2a 的单点信息 | M_SP_TB_1 | SIQ+ CP56Time2a | 3,5,11,12 |
| 31 | 带时标 CP56Time2a 的双点信息 | M_DP_TB_1 | DIQ+ CP56Time2a | 3,5,11,12 |
| 32 | 带时标 CP56Time2a 的步位置信息 | M_ST_TB_1 | VTI + QDS+ CP56Time2a | 2,3,5,11,12 |
| 33 | 带时标 CP56Time2a 的 32 比特串 | M_BO_TB_1 | BSI + QDS+CP56Time2a | 3,5 |
| 34 | 带时标 CP56Time2a 的归一化测量值 | M_ME_TD_1 | NVA + QDS+CP56Time2a | 3,5 |
| 35 | 带时标 CP56Time2a 的标量化测量值 | M_ME_TE_1 | SVA + QDS+CP56Time2a | 3,5 |
| 36 | 带时标 CP56Time2a 的浮点型测量值 | M_ME_TF_1 | IEEE STD 754 + QDS+CP56Time2a | 2,3,5,11,12,20,20+G |
| 37 | 带时标 CP56Time2a 的累计值 | M_IT_TB_1 | BCR+CP56Time2a | 3,37,37+G |
| 38 | 带时标 CP56Time2a 的继电器保护装置事件 | M_EP_TD_1 | QDP+CP16Time2a+CP56Time2a | 3 |
| 39 | 带时标 CP56Time2a 的继电器保护装置成组启动事件 | M_EP_TE_1 | SEP + QDP+CP16Time2a+CP56Time2a | 3 |
| 40 | 带时标 CP56Time2a 的继电器保护装置成组输出电路信息 | M_EP_TF_1 | OCI + QDP+CP16Time2a+CP56Time2a | 3 |
类型表示 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_1 | SCO | 6,7,8,9,10,44,45,46,47 |
| 46 | 双命令 | C_DC_NA_1 | DCO | 6,7,8,9,10,44,45,46,47 |
| 47 | 步调节命令 | C_RC_NA_1 | RCO | 6,7,8,9,10,44,45,46,47 |
| 48 | 设点命令,归一化值 | C_SE_NA_1 | NVA + QOS | 6,7,8,9,10,44,45,46,47 |
| 49 | 设点命令,标量值 | C_SE_NB_1 | SVA + QOS | 6,7,8,9,10,44,45,46,47 |
| 50 | 设点命令,短浮点值 | C_SE_NC_1 | IEEE STD 754 +QOS | 6,7,8,9,10,44,45,46,47 |
| 51 | 32 比特串 | C_BO_NA_1 | BSI | 6,7,8,9,10,44,45,46,47 |
| 52~57 | 为将来的兼容定义保留 | |||
| 58 | 带时标 CP56Time2a 的单命令 | C_SC_TA_1 | SCO+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
| 59 | 带时标 CP56Time2a 的双命令 | C_DC_TA_1 | DCO+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
| 60 | 带时标 CP56Time2a 的步调节命令 | C_RC_TA_1 | RCO+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
| 61 | 带时标 CP56Time2a 的设点命令,归一化值 | C_SE_TA_1 | NVA + QOS+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
| 62 | 带时标 CP56Time2a 的设点命令,标量值 | C_SE_TB_1 | SVA + QOS+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
| 63 | 带时标 CP56Time2a 的设点命令,短浮点值 | C_SE_TC_1 | IEEE STD 754 +QOS+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
| 64 | 带时标 CP56Time2a 的 32 比特串 | C_BO_TA_1 | BSI+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
| 65~69 | 为将来的兼容定义保留 |
引用的命名格式 C_ :控制方向的信息对象。
注意:控制方向的信息对象(也叫命令),必须要和对应类型的监视方向上的过程信息对象 产生 Map 才可以起作用,否则,命令无法起作用。
3.3 监视方向上的系统信息
| 类型标识 | 描述 | 引用 | 信息对象格式 | 合法的 COT |
|---|---|---|---|---|
| 70 | 初始化结束 | M_EI_NA_1 | COI | 4 |
| 71~99 | 为将来的兼容定义保留 |
3.4 控制方向上的系统信息
| 类型标识 | 描述 | 引用 | 信息对象格式 | 合法的 COT |
|---|---|---|---|---|
| 100 | 总召唤命令 | C_IC_NA_1 | QOI | 6,7,8,9,10,44,45,46,47 |
| 101 | 电能脉冲召唤命令 | C_CI_NA_1 | QCC | 6,7,8,9,10,44,45,46,47 |
| 102 | 读命令 | C_RD_NA_1 | 无 | 5 |
| 103 | 时钟同步命令 | C_CS_NA_1 | CP56Time2a | 3,6,7,44,45,46,47 |
| 104 | (IEC 101) Test command | C_TS_NB_1 | FBP | 6,7,44,45,46,47 |
| 105 | 复位进程命令 | C_RP_NC_1 | QRP | 6,7,44,45,46,47 |
| 107 | 带时标 CP56Time2a 的测试命令 | C_TS_TA_1 | ||
| 108~109 | 为将来的兼容定义保留 |
3.5 控制方向上的参数
| 类型标识 | 描述 | 引用 | 信息对象格式 | 合法的 COT |
|---|---|---|---|---|
| 110 | 归一化测量值 | P_ME_NA_1 | NVA + QPM | 6,7,9,10,20,20+G,44,45,46,47 |
| 111 | 标量化测量值 | P_ME_NB_1 | SVA + QPM | 6,7,20,20+G,44,45,46,47 |
| 112 | 浮点测量值 | P_ME_NC_1 | IEEE STD 754 +QPM | 6,7,20,20+G,44,45,46,47 |
| 113 | 参数激活 | P_AC_NA_1 | QPA | 6,7,8,9,44,45,46,47 |
| 114~119 | 为将来的兼容定义保留 |
参数都是控制方向上的,和监控方向的对象相比,其值发生变化时,不会上报,只有总召唤时,可以上报给数据的值。
3.6 文件传输
| 类型标识 | 描述 | 引用 | 信息对象格式 | 合法的 COT |
|---|---|---|---|---|
| 120 | 文件已准备好 | F_FR_NA_1 | NOF + LOF + FRQ | 13 |
| 121 | 节点已准备好 | F_SR_NA_1 | NOF + NOS + LOF +SRQ | 13 |
| 122 | 召唤目录,选择文件,召唤文件,选择节 | F_SC_NA_1 | NOF + NOS + SCQ | 5,13 |
| 123 | 最后的节,最后的段 | F_LS_NA_1 | NOF + NOS + LSQ +CHS | 13 |
| 124 | 确认文件,确认节 | F_AF_NA_1 | NOF + NOS + AFQ | 13 |
| 125 | 段 | F_SG_NA_1 | NOF + NOS + LOS +segement | 13 |
| 126 | 目录 | F_DR_TA_1 | NOF + LOF + SOF +CP56Time2a | 3,5 |
| 127 | 日至查寻-请求存档文件 | F_SC_NB_1 |
4. 信息元素详解
信息元素是构成信息对象的基本单元,就像 OOP 中的变量一样,是构成 Object 的基础。
我们给出一个 IEC104 的信息元素列表:
监视方向的过程信息
| 元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
|---|---|---|---|
| SIQ | 有质量描述符的单点信息 | 1 | 1, 2, 30 |
| DIQ | 有质量描述符的双点信息 | 1 | 3 |
| BSI | 二进制状态信息 | 4 | 7, 8, 33, 51 |
| SCD | 状态更改探测 | 4 | 20 |
| QDS | 质量描述符 | 1 | 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 20, 32, 33, 34, 36 |
| VTI | 具有瞬态指示值 | 1 | 5, 6, 32 |
| NVA | 归一化值 | 2 | 9, 10, 21, 34, 48, 110 |
| SVA | 标度值 | 2 | 11, 12, 49, 111 |
| IEEE STD 754 | 短浮点数 | 4 | 13, 14, 36, 50, 112 |
| BCR | 二进制计数器读数 | 5 | 15, 16, 37 |
保护
| 元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
|---|---|---|---|
| SEP | 保护设备的单个事件 | 1 | 17, 38 |
| SPE | 保护设备启动事件 | 1 | 18, 39 |
| OCI | 保护设备输出电路信息 | 1 | 19, 40 |
| QDP | 保护设备事件的质量描述符 | 1 | 18, 19, 39, 40 |
命令
| 元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
|---|---|---|---|
| SCO | 单个命令 | 1 | 45 |
| DCO | 双命令 | 1 | 46 |
| RCO | 调节阶跃指令 | 1 | 47 |
时间
| 元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
|---|---|---|---|
| CP56Time2a | 七字节二进制时间 | 7 | 4, 6, 8, 10, 12, 14, 16, 17, 18, 19, 31,32, 33, 34, 36, 37, 38, 39, 40, 103, 126 |
| CP24Time2a | 三字节二进制时间 | 3 | 4, 5, 6, 8, 10, 12, 14, 16, 17, 18, 19, 31, 32, 33, 34, 36, 37, 38, 39, 40 |
| CP16Time2a | 二字节二进制时间 | 2 | 17, 18, 19, 38, 39, 40, 106 |
限定符
| 元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
|---|---|---|---|
| QOI | 讯问资格 | 1 | 100 |
| QCC | 反询问命令限定符 | 1 | 101 |
| QPM | 测量值参数限定符 | 1 | 110, 112 |
| QPA | 参数激活的限定符 | 1 | 111, 113 |
| QRP | 重置过程命令的限定符 | 1 | 105 |
| QOC | 命令的限定符 | 1 | 45, 46, 47, 48, 49, 50 |
| QOS | 设定值命令的限定符 | 1 | 48, 49, 50 |
文件传输
| 元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
|---|---|---|---|
| FRQ | 文件就绪限定符 | 1 | 120 |
| SRQ | 节就绪限定符 | 1 | 121 |
| SCQ | 选择并调用限定符 | 1 | 122 |
| LSQ | 最后一节或段限定符 | 1 | 123 |
| AFQ | 确认文件或节限定符 | 1 | 124 |
| NOF | 文件名 | 2 | 120, 121, 122, 123, 124, 125, 126 |
| NOS | 段命名 | 2 | 121, 122, 123, 124, 125 |
| LOF | 文件/段的长度 | 3 | 120, 121 |
| LOS | 分段长度 | 1 | 125 |
| CHS | Checksum | 1 | 123 |
| SOF | 文件状态 | 1 | 126 |
杂项
| 元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
|---|---|---|---|
| COI | 初始化原因 | 1 | 70 |
| FBP | 固定测试位模式,两个八位字节 | 1 | 104 |
4.1 SIQ 的数据格式
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
|---|---|---|---|---|---|---|---|
| IV | NT | SB | BL | 0 | 0 | 0 | SPI |
- 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 的数据格式
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1~bit0 |
|---|---|---|---|---|---|---|
| IV | NT | SB | BL | 0 | 0 | DPI |
- DPI: Double Point Information SPI 为遥信状态值。双点遥信,1=OFF, 2=ON,0 和 3 为不确定中间状态。
4.3 BSI 的数据格式
32 位宽度的数据,可以认为为 uint32。
4.4 SCD 的数据格式
**32 位宽度的数据,可以认为为 uint32。**
4.5 QDS 的数据格式
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
|---|---|---|---|---|---|---|---|
| IV | NT | SB | BL | 0 | 0 | 0 | OV |
- OV: NO OVERFLOW (0) / OVERFLOW (1) OV 为溢出标志位,信息对象的值超出了预先定义值的范围 (主要适用模拟量值)。仅在遥测品质结构词中出现。
4.6 VTI 的数据格式
| bit7 | bit6~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 的数据格式
| bit39 | bit38 | bit37 | bit36~bit32 | bit31~bit0 |
|---|---|---|---|---|
| IV: 无效 | CA:计数量被调整 | CY:是否有进位 | 顺序号 SQ | 计数器读数 |
4.11 SEP 的数据格式
| bit7~bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
|---|---|---|---|---|---|---|
| 预留 | SRD:反向保护启动 | SIE:接地电流保护启动 | SL3:C 相保护启动 | SL2:B 相保护启动 | SL1:A 相保护启动 | GS:总启动 |
4.12 OCI 的数据格式
| bit7~bit4 | bit3 | bit2 | bit1 | bit0 |
|---|---|---|---|---|
| 预留 | CL3:C 相保护命令输出至输出电路 | CL2:B 相保护命令输出至输出电路 | CL1:A 相保护命令输出至输出电路 | GC:总命令输出至输出电路 |
4.13 QDP 的数据格式
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1~bit0 |
|---|---|---|---|---|---|---|
| IV | NT | SB | BL | EI | 0 | 事件 0~3 |
- EI:Elapsed time invalid (EI) 这与保护设备的事件一起使用。该位值位时,表示时间间隔值(elapsed time )无效,这意味这这个时间间隔值(elapsed time )应该不能被使用,且需要忽略。
4.14 SCO 的数据格式
| bit7 | bit6~bit2 | bit1 | bit0 |
|---|---|---|---|
| S/E 为选择/执行位, 0 代表执行,1 代表选择 | 0: 无另外的定义 1:短脉冲持续时间 (断路器),持续时间由被控站内的系统参数所确定 2:长脉冲持续时间,持续时间由被控站内的系统参数所确定 3:持续输出 | 0 | SCS 0:分/开, 1:合/关 |
4.15 DCO 的数据格式
| bit7 | bit6~bit2 | bit1~bit0 |
|---|---|---|
| S/E 为选择/执行位, 0 代表执行,1 代表选择 | 0: 无另外的定义 1:短脉冲持续时间 (断路器),持续时间由被控站内的系统参数所确定 2:长脉冲持续时间,持续时间由被控站内的系统参数所确定 3:持续输出 | DCS: 1 代表分/开, 2 代表合关, 0、3 代表不允许 |
4.16 RCO 的数据格式
| bit7 | bit6~bit2 | bit1~bit0 |
|---|---|---|
| 同于 DCO | 同于 DCO | 步进命令: 1:下一步为降档, 2: 下一步升档,其他不允许 |
常用来进行调节分接头遥控,不是所有厂家都支持此命令,部分厂家将调节分接头遥控统一至单/双点遥控中。
4.17 CP56Time2a/CP24Time2a/CP16Time2a 的数据格式
| 字节序号 | 描述 |
|---|---|
| byte0 | Milliseconds(D7–D0) |
| byte1 | Milliseconds(D15–D8) |
| byte2 | IV(D7) 预留 (D6) Minutes(D5–D0) |
| byte3 | SU(D7) 预留 (D6-D5) Hours(D4–D0) SU = 夏令时,0 = 标准时间, 1 = 夏令时 |
| byte4 | DayOfWeek(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 的数据格式
| bit7 | bit6~bit0 |
|---|---|
| 同于 DCO | 0: 默认 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》
- IEC104 协议 | 帧格式 / 调试(篇 1)-优快云博客
https://blog.youkuaiyun.com/u013669912/article/details/144622175 - IEC104 协议 | 帧格式 / 调试(篇 2)-优快云博客
https://blog.youkuaiyun.com/u013669912/article/details/155851436
via:
-
电力 101/104 规约中遥测量类型转换_104 遥测类型-优快云 博客
https://blog.youkuaiyun.com/lm409/article/details/70098126 -
电力系统 104 规约帧报文解析 <_104 报文解析-优快云 博客>
https://blog.youkuaiyun.com/weixin_44462773/article/details/123569280 -
详解 IEC104 规约【最详细版】_104 协议-优快云 博客 CH_Qing 已于 2024-11-19 13:15:29 修改
https://blog.youkuaiyun.com/changqing1990/article/details/134327980
-------
-
104 规约详解
https://blog.youkuaiyun.com/wojiuguowei/article/details/79413142 -
IEC104 规约调试
https://blog.youkuaiyun.com/weixin_40449300/article/details/81805782-
IEC104 规约详细解读 (一) 协议结构
https://blog.youkuaiyun.com/lin819747263/article/details/112602951 -
从零开始理解 IEC104 协议之一 ——104 规约帧格式
https://www.jianshu.com/p/772582a9db11
-
-
IEC104 协议与示例解析以及模拟工具的使用_iec104 协议详解-优快云 博客
https://blog.youkuaiyun.com/qq_53221728/article/details/143267474 -
IEC104 规约(一)协议结构阐述
https://www.cnblogs.com/yking/p/17620510.html -
IEC104 规约(二)协议报文解析 - 卷毛七号 - 博客园
https://www.cnblogs.com/yking/p/17622619.html
1472

被折叠的 条评论
为什么被折叠?



