IEC104 协议 | 规约帧格式 / 规约调试

注:本文为 “ IEC104 协议” 相关文章合辑

未整理去重,如有内容异常请看原文。

图片清晰度限于引文原状。


从零开始理解 IEC104 协议之一 ——104 规约帧格式

洪城小电工 IP 属地:江西

2020.06.10 00:30:54

前言

本文根据相关标准、本司实际情况及个人调试经验编写,主要目的是针对 104 协议进行扫盲,共分为五大块。根据个人需求可选择相应段落进行阅读。

小推荐

1、仅需要了解报文含义,阅读文章的第一块内容即可;

2、简单故障排查,阅读文章的第一块和第四块内容即可;

3、稍复杂的故障排查,需要阅读文章的第一块、第三块及第四块内容;

4、希望对 104 协议的实施有一个较为全面的认识,可以通读全文;

5、希望对 104 协议有一个较为全面且准确认识,可以通读全文并参考相关标准。

电力系统通信个人感觉还是较为复杂的,硬件不断更迭,软件也在不断更新。针对复杂故障一定要做到理论结合实际,多与厂家技术支持人员及研发人员沟通,切不可抱着扫盲文章和国家标准死扣字眼,更不可凭空想象,脱离理论。

参考标准如下

1、IEC60870-05-104 传输规约(国际电工委员会制定)

2、广东电网 DL/T634.5104-2002 实施细则

3、国家电网 DL/T634.5104-2009 实施细则

4、南方电网 DL/T634-2002 远动协议实施细则

另本人调试经历不长,理论水平也比较浅薄,更未参与过相关软硬件的开发工作,因此文章中不可避免的会出现错误、纰漏。欢迎大家进行批评指正。

一、104 规约帧格式

IEC104 协议的帧格式有三种(I 帧、U 帧、S 帧),基本格式如下图所示:

在这里插入图片描述

⑴ I 帧

编号的信息传输格式(I 帧),用于传输应用数据,捎带确认对方的发送。根据类型标识(TYP)不同,报文形式各有差异。总体格式为基本格式中的68H+APDU 长度 + ① + ② 。

I 帧中的**控制域 1 与控制域 2 为发送序号,控制域 3 与控制域 4 为接收序号。**其格式图如下所示:

在这里插入图片描述

从上图中可以看出控制域中含有发送序号和接收序号,但控制域 1 与控制域 3 的最低位固定为 0(即控制域 1、2 组成的字节与控制域 3、4 组成的字节,其十进制形式固定以偶数递增)。所以控制域 1 及控制域 3 的最低位不用于构成序号。

综上在计算序号时,要先转换成十进制数值,再除以 2。且需要注意的是低位字节在前,高位字节在后,所以计算时要先做颠倒。在 104 规约中是通用规则。详细原因会在二、基础知识中解释。

发送序号与接收序号是用于防止报文在传送过程中出现丢失或重复传送。发送方每发送一个 I 格式报文,其发送序号应加 1,接收方每接收到一个与其接收序号相等的 I 格式报文后,其接收序号应加 1,需要注意的是,每次重新建立 TCP 连接后,调度主站和子站 RTU 的接收序号和发送序号都应清零。

综上,在双方开始数据传送后,接收方若收到一个 I 格式报文,应判断此 I 格式报文的发送序号是否等于自己的接收序号。若相等则应将自己的接收序号加 1,若此 I 格式报文的发送序号大于自己的接收序号,这说明发送方发送的一些报文出现了丢失,若此 I 格式报文的发送序号小于自己的接收序号,这意味着发送方出现了重复传送。

当报文接收方收到发送方的 I 格式报文后,如果没有 I 格式报文需要发送给对方,可以向对方发送 S 格式报文以对所接收的报文进行确认。I 格式和 S 格式报文的接收序号表明了发送该报文的一方对已接收的 I 格式报文(一个或多个)的确认。发送方会将一个或几个报文保存到一个缓冲区里直到它将自己的发送序号作为一个接收序号收回,这个接收序号小于发送序号时有效。这样就可以删除缓冲区里正确传送过的报文。如果是很长的数据传输只在一个方向进行,就得在另一个方向发送 S 格式报文,在缓冲区溢出或超时前认可报文。

若发送方发送的某一 I 格式报文后长时间无法在对方的接收序号中得到确认,这就意味着报文发生了丢失。

当出现上述情况时,通常意味着 TCP 连接出现了问题,发送方或接收方应关闭现在的 TCP 连接然后再重新建立新的 TCP 连接,并再新的 TCP 连接上重新开始会话过程。

把下面两张图看懂,对 I 帧中收发序号应该有了一个简单的认识。首先对途中的变量做一下解释。

V(S)为发送状态变量,V(R)为接收状态变量,ACK 为当前已经正确收到的所有 I 格式 APDU 的最新序号。I (a,b) 为信息格式 APDU,a 为发送序号,b 为接收序号。

正常情况下的 I 帧:

在这里插入图片描述
出现报文丢失的 I 帧:

在这里插入图片描述
下面是类型标识,它定义了后续信息对象的结构、类型和格式。如下表所示:
在这里插入图片描述
上图中黄色标记为常见类型标识符。这边主要讲一下单点与双点的区别,以遥信为例,单点就是用一位标识一个遥信量,比如开关位置,只采集一个常开的辅助接点,值为 1 表示合位,0 表示分位;而双点需要采集常开合常闭两个辅助接点位置,,当常开点值为 1 并且常闭点值为 0,即 10,则认为开关在合位;当常开点值 = 0 并且常闭点值为 1,即 01,认为开关在分位;当两个位置值都为 1,或两个值都为 0,则认为开关位置不能确定。遥控也是一样的道理。

这里还有几个概念需要单独提出来说下:

①短时标与 CP56Time2a 时标(长时标)

短时标与 CP56Time2a 时标(长时标)的结构,如下图所示:

在这里插入图片描述
其中 IV 为有效位,RES 为保留位。

②归一化值、标度化值、短浮点数

归一化值(NVA),值的范围为 [-1,1]。归一化,即是将大于 1 的数映射到 1 以内的空间,通常就是用实际值除以额定值,即得到归一化的小数。具体表示法可以有 F13 或 F16 位的。占 2 个字节。

在电力行业中,通常是将数值归一到满码值。满码值是通信双方约定的一个值,它会影响数值的误差。一般来说,所内监控后台满码值为 4095 或 2047,地调满码值为 4095,中调满码值为 32767(通常会要求 P、Q、I 按 1 倍额定值对应 15000 的码值的关系转换后上送;母线电压、频率则按 1.2 倍额定值对应 15000 的码值的关系转换后上送)。

举个例子:110kV 线路的 CT 变比为 1200/5,电流采样裕度为 1.2,满码值为 4095,则电流真实值为 1200,其归一化值为多少?归一化值 00d3 的真实值是多少?

第一问:

电流遥测量的最大实际值 = 1.2*1200=1440A;

电流真实值 1200 的归一化码值 =(满码值 * 真实值)/ 最大实际值 = 3412.5;

又归一化值只能表示为整数,其归一化值为 0D54H。

第二问:

归一化值 00d3 的码值 = 211;

电流真实值 =(归一化码值 / 满码值)* 最大实际值≈74.2A

拓展:

南瑞科技后台只需要把握住以下三个参数,其遥测值就能正常显示。

第一,标度系数;标度系数等于一次额定值 / 二次额定值;

举例:PT 变比为 220kV/100,CT 变比为 1200/5,4~20mA 的变送器对应 - 20~100 度,求把电压标度系数,电流标度系数,功率(Kw)标度系数,频率标度系数,功率因素标度系数,温度标度系数。

电压标度系数 = 220/100=2.2;电流标度系数 = 1200/5=240;功率标度系数 = 2.2*240=528;频率标度系数 = 功率因素标度系数 = 1;

温度标度系数 = 输入最大值与输入 0 之间的温度差值。

设其特性曲线为 y=kx+b,通过 4mA 对应 - 20 度,20mA 对应 100 度,列方程组可以解出 b=-50;

那么温度标度系数 = 100-(-50)=150。

第二、参比因子;参比因子等于满码值 /(二次额定值 * 1.2)

已知,CT 二次值为 5A,PT 二次值为 100V,满码值为 4095,求电流参比因子、电压参比因子、功率参比因子。

电流参比因子 = 4095/(51.2)=682.5;电压参比因子 = 4095/120=34.125;功率参比因子 = 4095/(6120*1.732)=3.284。

另外频率参比因子等于满码值 /(最大码值对应的频率与最小码值对应的频率之差);温度参比因子为 2047;功率因素参比因子为 1000。

第三、基值

其意义为传输最小码值所对应的物理量,也就是码值为 0 对应的物理量。电压、电流、功率、功率因素基值都为 0,频率基值为 50Hz,温度的基值就是上面所提到的 b。

标度化值(SVA),值的范围为 [-32768,~32767],即带符号整数。占2个字节。它的真实值就是标度值 * 小数点的位数,量程和小数点位置是固定的参数。

例如电流 76A,电压 7.6kV,其传输的标度化值都为 004CH,但其小数点的参数不同,电流的小数点为 1;电压的小数点为 0.1。

注意:归一化值与标度化值都是两个字节。高字节的最高位为符号位, 0 表示正数,1 表示负数。15 位数据位,正数是原码,负数是补码。

下面举一个负数为例:设归一化值 FA,求其对应的十进制数是多少?

补码的求法:符号位不变,求反码;然后反码最低位加 1,即为补码。

FA=1111 1010;其反码为 1000 0101;

其补码为 1000 0110=- 1 ∗ 2 7 + 1 ∗ 2 2 + 1 ∗ 2 1 = − 128 + 4 + 2 = − 122 1*2^7+1*2^2+1*2^1=-128+4+2=-122 127+122+121=128+4+2=122

短浮点数(R32-IEEE STD 754),即计算机内浮点数的表示法,占4字节。其格式如下图所示:

在这里插入图片描述

IEEE754 标准在表示浮点数时,每个浮点数均由三部分组成:符号位 S、指数部分 E 和尾数部分 M。浮点数有以下两种基本格式:

第一种,单精度格式 (32 位),除去符号位 1 位后,E 占 8 位,M 占 23 位;第二种,双精度格式 (64 位),E 占 11 位,M 占 52 位。

这里的短浮点数即是 32 位的单精度格式。

数符 S,1 位,决定了短浮点数的正负,0 正 1 负;

指数 E,共计 8 位,以 2 为底,在这里称为阶码,为了表示指数的正负,阶码部分采用移码表示,移码值为 127。对于规格化浮点数而言,阶码值即从 1~254 变为 - 126~+127,计算公式 —— 阶码 = 阶码真值 + 127;

尾数 M,共计 24 位,约定小数点左边隐含有一位 1,这样实际上使尾数的有效位数为 24 位,即尾数真值形如 1. M。

还是举几个例子:

第一问,如何将 10 进制数 + 178.125 化为短浮点数?

⒈正数的符号位为 0;

⒉将 178 转成二进制数,(178)D=(1011 0010)B;

⒊将 0.125 转成二进制数,(0.125)D=(0.001)B;

⒋合并计算结果,得到(178.125)D=(1011 0010.001)B;

⒌对上述二进制数进行规格化处理,如下:(1011 0010.001)D=1.0110010001* 2 7 2^7 27,隐含小数点及其左边的 1,化为原码,并扩展为 23 位,得到:0110 0100 0100 0000 0000 000;

⒍求阶码。上述规格化数得指数为 7,根据计算公式,阶码 = 7+127=134,化为二进制,得到 1000 0110。

⒎汇总上述结果可得:

0100 0011 0011 0010 0010 0000 00000000

化为 16 进制可得:43 32 20 00H

第二问:如何将浮点数 C1 C9 00 00H 转成十进制数?

⒈将十六进制化为二进制:C1C90000H=1100 0001 1100 1001 0000 0000 0000 0000B**。**

⒉计算阶码真值,阶码真值 = 阶码 - 127。即 1000 0011 -0111 1111=100,即十进制的 4。

⒊将上述二进制数规格化,得 1.100 1001* 2 4 2^4 24

⒋将上述结果进行非规格化,得 11001.001。

⒌转化为十进制数,并加上符号位。

首先进行转化(11001.001)B=(25.125)D,

随后加上符号位,可得最后结果为 - 25.125。

③品质描述词

用于描述遥测、遥信、遥脉值的传输质量,分为遥信品质描述词和遥测(遥脉)品质描述词。遥脉中也有描述品质的信息,不过它和顺序号集成在一起,我们在遥脉的报文会对其加以分析。

品质描述词结构如下图所示:
在这里插入图片描述
其中:

IV 为有效标志位 (0 有效,1 无效),若值被正确采集就是有效,在采集功能确认了信息源的反常状态(例如:装置的启动过程中或者一些配置错误),那么值就是无效的。信息对象的值在这些条件下没有被定义。标上无效用以提醒使用者,此值不正确而不能使用。

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

SB 为取代标志位(0 未被取代,1 被取代),当信息对象的值由值班员 (调度员) 输入(即人工置数)或者由当地自动原因(模拟遥信)所提供时,即为被取代。如人工置数情况下。

BL 为封锁标志位(0 未被封锁,1 封锁),信息对象的值为传输而被封锁,值保持封锁前被采集的状态。封锁和解锁可以由当地联锁机构或当地自动原因启动。

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

SPI 为遥信状态值。单点遥信,0 分 1 合;双点遥信,1 开 2 合,0 和 3 为中间状态。

类型标识符讲完了,然后是可变结构限定词,其结构如下所示:

在这里插入图片描述
当可变结构限定词最高位为 1 表示连续,其对应 n 个信息对象中,第一个信息对象中含有信息体地址 (3 个字节) 表示此帧报文中的信息从这个地址开始,第二个信息对象中不再包含信息体地址,第二个信息对象地址是在第一信息对象中的信息体地址递增。

当可变结构限定词最高位为 0 表示不连续,每个信息对象中都包含信息体地址。

接下来是传送原因,共计 2 个字节。但传送原因实际上只是占两个字节中的 6 位。其完整结构如下图所示:

在这里插入图片描述其中 T 代表试验位(0 未试验,1 试验),它说明了应用服务数据单元是在测试条件下所产生的,被用于测试传输和设备,但不控制过程。工程中很少使用。

P/N 位用以对由启动应用功能所请求的激活以肯定或者否定确认。P=0 表示肯定确认,P=1 表示否定确认。在工程上,主要用于表示遥控选择成功或失败。

传送原因详表如下图所示:

在这里插入图片描述

针对上表中的部分内容进行一个说明:

第一、周期、循环(01H)与背景扫描(02H)光看标准的话会感觉他们两个差不多,我这里仅从实际应用上来讲述它们的区别。

周期、循环(01H)适用于传输变化很慢的数据,例如水位、油温等,这类数据定时主动上送,并且不再响应总召唤过程中传送。而背景扫描(02H)则是从站周期性主动将响应总召唤过程中传送的数据上送,使得主站和从站数据库保持一致。背景扫描数据传送时可被中断,当同时又背景扫描数据和实时数据时,优先传送实时数据。

第二、什么样的情况算是突发(03H)呢?有两种情况:1、当前的背景扫描发现该点的模拟量数据与前一次模拟量数据传输值的差值超出越死区传输设定值。即前后两次的模拟量数据差值不超出死区设定值,但与上次传输数据的累计差值超出死区设定值也立即作为突发数据向主站传输。2、当前的背景扫描发现该点的状态量数据与前一次状态量数据不一致,即发生了状态变位。

第三、对于分组召唤,新版标准已对分组内容不做约定,但一般设计时仍以标准作为参考。

上述结构中还有源发地址,他用来表明来自哪个主站的召唤,一般情况下不适用。规定源发地址不使用时,应置零。

传送原因讲完了,我们接着来看ASDU 公共地址和信息对象地址。

首先 ASDU 地址为 2 个字节,一般作为站地址,在低版本远动程序中,一般高字节固定为 0,1~254 表示站地址,255 表示全局地址。新远动程序则可支持 1~65534 为站地址,而 65535 为全局地址。

全局地址用于再一个特定系统中在所有站在同一时刻同时启动同一个应用功能,一般只用于召唤、电度召唤、时钟同步、复位进程。

控制站将舍弃那些公共地址未定义的 ASDU。如果该地址设置与主站不一致,会出现遥测、遥信能正常刷新,但是无法上送初始状态,无法遥控的现象。

说明:

1、部分厂家,会将 ASDU 公共地址的高字节定义为扇区,低字节定义为装置地址,总召唤将按扇区号进行。

然后是信息对象地址,三个字节表示,最高字节一般置零,最多能够表达 65535 个信息。如果某些应用服务数据单元中信息对象地址是无关的,它就设置为零。同类信息对象地址必须连续。主站和对应厂站两侧的地址分配必须一致。

同样控制站将舍弃那些信息对象地址具有未定义值的 ASDU。且一个 ASDU 中的首个信息体必须具有信息地址。

通俗来说,信息对象地址即通讯过程中的点号,104 规约均对点号范围做了规定,常见问题就是遥测、遥控的起始点号与主站不一致。而且主站提供的点表一般都是从 0 或 1 开始的顺序号,我们需要确认 0 或 1 对应的实际起始信息体地址。

关于上述内容再注意下面两张表格即可,下面这些内容都可以通过配置.ini 文件 ——iec104 规约配置表。

在这里插入图片描述
目前常用的是 02 版的,故一个 104 通道,遥测最多可配 16384 个,遥测最多可配 4096 个,遥控最多可配 256 个,遥脉最多可配 512 个。

在这里插入图片描述

上述配置要根据主站来定,有的主站可能设置为 1,1,2,与主站一致即可,一般主站默认设置为 2,2,3。

下面就是信息体元素了,我们会举各种不同的报文来详细说明以下内容:

首先我们先介绍一下双传输,信息体元素可以用同一个信息对象地址来构成不同的 ASDU,即带时标或者不带时标的单点信息。

在信息点的单个状态改变的情况下,具有同样信息对象地址的信息对象可以传输两次,一次不带时标,一次带时标。不带时标的信息对象通常尽可能地优先传输,对于控制站能尽快地反映过程控制是非常有用的。带时标的信息对象传输优先级较低,事后用以对事件系列校核。所有信息对象以传送原因 3 (突发) 传送两次,这种模式就是 “双传输”。这种模式必须由固定的站与特定参数加以定义。

对于没有指明支持双传输的所有应用服务数据单元类型,单个状态改变将仅引起单个信息对象的传输。

有了上面的基础知识,我们现在来看报文吧。

Ⅰ 、遥信(数字量输入 DI)

1、单点遥信(01)

Send:68(启动符)12(APDU 长度)02 c7(发送序号)ce ca(接收序号)01(单点遥信)02(可变结构限定词)03

00(传送原因:突发)01 00(ASDU 公共地址)49 01 00(信息对象地址)01(信息体元素)4a 01 00(信息对象地址)00(信息体元素) 2020/03/30 22:36:59::443(c306L 时标) TaskId=1(任务 ID) LinkId=85(链路 ID)NodeId=0 (节点 ID)

说明:

查点表可知,213 开关位置分位的 ISCS 点号为 328,213 开关位置合位的 ISCS 点号为 329,104 规约 2002 版的基地址为 0001H,根据报文构成规则,可得 213 开关位置分位的信息体地址为 01 49H,在报文中低位在前,高位在后,显示为 49 01 00H。而 213 开关位置合位的信息体地址为 01 4aH,显示为 4a 01 00H。

2、双点遥信(03)

68(启动符)0e(APDU 长度)18 00(发送序号)06 00(接收序号)03(双点遥信)01(可变结构限定词)03

00(传送原因:突发)01 00 (ASDU 公共地址)06 00 00(信息对象地址)01(信息体元素)

3、带 CP56Time2a 时标的单点遥信(1e)

Send:68(启动符)15(APDU 长度)f6 c6(发送序号)cc ca(接收序号)1e(带 CP56Time2a 时标的单点遥信) 01(可变限定结构词) 03 00(传送原因:突发) 01 00 (ASDU 公共地址)49

01 00(信息对象地址) 01 (信息体元素)bf e0 (毫秒)24(分) 16(时) 1e(日期) 03(月) 14(年) 2020/03/30 22:36:58::693 TaskId=1 LinkId=85NodeId=0 ()

说明:

信息对象地址为 49 01 00,说明了 SOE 与单点遥信的信息体地址是一致的,在 ASDU 除时标的部分,除了类型标识与单点遥信不一致,其他并无差别。

这里着重讲一下时标,现今常用时标为 CP56Time2a 时标。bf e0H 是毫秒信息,根据报文构成规则,将 e0 bfH 化为 10 进制后得 57535 毫秒,即 57 秒 535 毫秒;24H 是分钟信息,即 36 分;16H 是小时信息,即 22 时;1e 是日期信息,即 30 日;03 是月份信息,即 3 月;14 是年分信息,即 20 年。

4、带 CP56Time2a 时标的双点遥信(1f)

68(启动符)15(APDU 长度)1c 00(发送序号,2 个字节)06 00(接收序号,2 个字节)1f(带 CP56Time2a 时标的双点遥信)01(可变结构限定词)03 00(传送原因:突发)01 00(ASDU 公共地址)0A 00 00(信息对象地址)01(信息体元素)2f 40(毫秒)1c(分钟)10(时)7a(日期)0b(月)05(年)

说明:

提一点,单点和双点的区别在类型标识那段中说明过,忘记的可以回头看看。我们继续来看下时标。这里的时标意为 2005 年 11 月 26 日星期六 16 时 28 分 16 秒 431 毫秒。

可以看出,日期信息中的星期信息不是每个厂家都会进行定义,未定义时此段信息为 0。

Ⅱ 、遥控(数字量输出)

遥控分为直控和选控,直控实际上就是去掉选择命令,直接发执行命令。一般来说保护压板、保护复归为直控;测控压板、刀闸开关、分接头的升降停为选控。

选控的一般流程如下:主站下发选择命令→装置回选择确认报文→主站下发执行命令→装置回执行确认报文→完成结束报文。

直控的一般流程如下:主站下发执行命令→装置回执行确认报文→完成结束报文。

在整个遥控过程中,直到装置回执行确认前都可进行

而遥控命令的格式如下所示:

在这里插入图片描述
先讲共同部分,S/E 为选择 / 执行位,0 代表执行,1 代表选择;QU 代表遥控命令品质,0 代表被控站内部确定遥控输出方式,不由控制站选择,1 代表短脉冲方式输出,持续时间由被控站的系统参数决定,2 代表长脉冲方式输出,持续时间由被控站的系统参数决定,3 代表持续脉冲方式,其他值没有定义;

SCS 代表单点遥控命令状态,0 代表分 / 开,1 代表合 / 关;DCS 代表双点遥控命令状态,1 代表分 / 开,2 代表合关,0、3 代表不允许。

QU 一般为 0,那么单点遥控 —— 遥控选择分:0x80;遥控执行或遥控撤销分:0x00;遥控选择合:0x81;遥控选择或遥控撤销合:0x01;双点遥控 —— 遥控选择分:0x81;遥控执行或遥控撤销分:0x01;遥控选择合:0x82;遥控选择或遥控撤销合:0x02。

1、单点遥控(2d)

Recv:68(启动符)0e(APDU 长度)c6 cb(发送序号)c4 c6(接收序号)2d(单点遥控)01(可变结构限定词)06

00(传送原因:激活)01 00(ASDU 公共地址) 09 60 00(信息对象地址) 80(信息体元素) 2020/03/30 22:36:53::993TaskId=1 LinkId=85 NodeId=0 ()

Send:68(启动符)0e(APDU 长度)c6 c6(发送序号)c8 ca(接收序号)2d(单点遥控)01(可变结构限定词)07

00(传送原因:激活确认)01 00(ASDU 公共地址)09 60 00(信息对象地址) 80(信息体元素) 2020/03/30 22:36:54::055TaskId=1 LinkId=85 NodeId=0 ()

Recv:68(启动符)0e(APDU 长度)c8 cb(发送序号)e8 c6(接收序号)2d(单点遥控)01(可变结构限定词)06

00(传送原因:激活)01 00(ASDU 公共地址)09 60 00(信息对象地址) 00(信息体元素) 2020/03/30 22:36:57::143TaskId=1 LinkId=85 NodeId=0 ()

Send:68(启动符)0e(APDU 长度)e8 c6(发送序号)ca ca(接收序号)2d(单点遥控)01(可变结构限定词)07

00(传送原因:激活确认)01 00(ASDU 公共地址)09 60 00(信息对象地址) 00(信息体元素) 2020/03/30 22:36:57::144TaskId=1 LinkId=85 NodeId=0 ()

说明:

查点表可知,213 位置遥控的 ISCS 点号为 8, 104 规约 2002 版的基地址为 6001H,综上 213 位置遥控的信息体地址为 6009H,在报文中低位在前,高位在后,显示为 09 60。

上面的报文为正线遥控报文,可以看出采用的是选控模式,但并没有完成结束的报文,这点区别于一般规则,其余一致。

2、双点遥控(2e)

双点遥控以直控为示例:

R:68(启动符) 0e(APDU 长度) 50 3f(发送序号) 62 31(接收序号)2e(双点遥控) 01(可变限定结构词) 06 00(传送原因:激活) 01 24(ASDU 公共地址)33 60 00(信息对象地址)02(信息体元素)

S:68(启动符) 0e(APDU 长度) 18 3a(发送序号) 3a 3f (接收序号)2e(双点遥控) 01(可变限定结构词) 07 00(传送原因:激活确认) 01 24(ASDU 公共地址)33 60 00(信息对象地址)02(信息体元素)

S:68(启动符) 0e(APDU 长度) 1a 3a(发送序号) 3a 3f(接收序号) 2e(双点遥控) 01(可变限定结构词) 0a 00(传送原因:激活终止) 01 24(ASDU 公共地址) 33 60 00(信息对象地址)02(信息体元素)

当主站需要终止遥控时,会下发遥控撤销命令,其报文如下所示:

R:68(启动符)0e(APDU 长度)04 00(发送序号)18 00(接收序号)2e(双点遥控)01(可变结构限定词)08(传送原因:停止激活)01 00(ASDU 公共地址)05 0b

00(信息对象地址)02(信息体元素)

S:68(启动符)0e(APDU 长度)12 00 (发送序号)08 00(接收序号)2e(双点遥控)01(可变结构限定词)09

00(传送原因:停止激活确认)01 00(ASDU 公共地址)05 0b 00(信息对象地址)02(信息体元素)

3、步调节遥控(2f)

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

另步调节遥控命令与双点遥控命令形式上一致,在步调节遥控命令中 1 代表降档,2 代表升档。

这里以遥控选择失败的报文为示例:

R:68(启动符)0e(APDU 长度)12 05(发送序号)c8 4e(接收序号)2f(步调节遥控)01(可变限定结构词)06 00(传送原因:激活)01 1d(ASDU 公共地址)0b 60 00(信息对象地址)82(信息体元素)

S:68(启动符)0e(APDU 长度)90 4f(发送序号) 16 05(接收序号)2f(步调节遥控)01(可变限定结构词)47 00(传送原因:未知信息对象地址)01 1d(ASDU 公共地址)0b 60

00(信息对象地址)82(信息体元素)

S:68(启动符)0e(APDU 长度)92 4f(发送序号) 16 05(接收序号)2f(步调节遥控)01(可变限定结构词)0a 00(传送原因:激活终止)01 1d(ASDU 公共地址)0b 60

00(信息对象地址)82(信息体元素)

注:遥控选择时,如果遥控点号超范围或者遥控命令与类型标示符不符时,装置发送激活结束。

Ⅲ 、遥测(模拟量输入)

遥测的上送方式主要有定时主动上送(01H),响应总召唤上送(14H),越限上送(03H),而遥测值又分为归一化值、标度化值、短浮点数。各遥测报文。其报文主体结构未变,改变是传送原因及类型标识。

这里解释以下越限上送,又叫越死区上送。正常情况下电力系统中有些遥测量变化不大,在远动中重复传送没有意义,反而加重两端装置和信道的负担。因此,可为每一个遥测设置一个阈值,当遥测量变化不超过阈值时就不传送。

所以本文仅以总召唤(64H)形式来进行分析,其他形式类同,不再赘述。

在初始化后或主站发现通信中断后又恢复正常时,必须总召唤。正常过程中,主站采用定时总召唤,总召唤的周期可以预先根据通信网络流量而确定(每次总召唤的间隔时间一般设为 15 分钟)。当预估通信网络流量太大时,可以不采用定时(周期无穷大)总召唤,总召只在初始化后或者主站发现通信中断后又恢复正常时,才总召唤。

召唤品质描述词结构如下:
在这里插入图片描述
根据值的不同(这里的值是 10 进制,注意换算),其含义不一。0 代表不使用,1~19 为兼容定义保留,20 代表总召唤,21~36 分别代表 1~16 组召唤,37~63 为兼容定义保留,64~255 为专用范围保留。

总召唤报文如下所示:

Recv:68(启动符)0e(APDU 长度)a0 ca(发送序号)f4 66(接收序号)64(总召唤)01(可变限定结构词)06 00(传送原因:激活)01 00(ASDU 公共地址) 00 00 00(信息对象地址)14(召唤品质描述词) 2020/03/30 21:45:45::594TaskId=1 LinkId=85 NodeId=0 ()

说明:

此帧为召唤全数据激活帧。

Send:68(启动符)0e(APDU 长度)f4 66(发送序号)a2 ca(接收序号)64(总召唤)01(可变限定结构词)07 00(传送原因:激活确认)01 00(ASDU 公共地址)00 00 00(信息对象地址) 14(召唤品质描述词) 2020/03/30 21:45:45::594TaskId=1 LinkId=85 NodeId=0 ()

说明:

此帧为召唤全数据激活确认帧。

Send:68(启动符)85(APDU 长度)f6 66(发送序号)a2 ca(接收序号)01(单点遥信)f8(可变限定结构词)14 00(传送原因:响应总召唤)01 00(ASDU 公共地址)01 00 00(信息对象地址) 01(信息体元素)01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0101 01 01 01 01 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 01 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 2020/03/30 21:45:45::694 TaskId=1 LinkId=85NodeId=0 ()

注:

全遥信报文有很多条,只取一条进行说明。

说明:

此帧为遥信数据帧,分析可变限定结构词 f8H,可知其信息对象地址是以 00 00 01H 为起始地址的连续地址,ASDU 中共含 120 个单点遥信。例如,对照地铁大厦点表可得,此帧中第一个遥信代表控制权限为中心,第二个遥信代表 301P521 装置工况正常,以此类推,不再赘述。

Send:68(启动符)d5(APDU 长度)2e 67(发送序号)a2 ca(接收序号)0d(测量值,短浮点数)a8(可变限定结构词)14 00(传送原因:响应总召唤) 01 00(ASDU 公共地址) 01 40 00(信息对象地址) 00 c0 c9 44 00(信息体元素,前四个字节为遥测值,第五个字节为品质描述词)00 00 c6 42 00 00 00 00 00 00 00 00 b8 42 00 00 a0 cb 44 00 00 00 68 43 00 00a0 cb 44 00 00 00 64 43 00 00 80 cb 44 00 00 8a 7f 47 00 00 80 cb 44 00 00 7e7f 47 00 00 00 53 43 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b9 7f 4700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 3f 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 17 44 00 00 80 22 44 00 00c0 11 44 00 00 80 48 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 2020/03/30 21:45:48::744 TaskId=1 LinkId=85 NodeId=0 ()

注:

全遥测报文有很多条,只取一条进行说明。

说明:

此帧为遥测数据帧,分析可变限定结构词 a8H,可知其信息对象地址是以 00 40 01H 为起始地址的连续地址,ASDU 中共含 40 个测量值(短浮点数)。例如,对照地铁大厦点表可得,此帧中第一个遥测值为 201 母线电压,其值为 1614,品质正常;第二个遥测代表 201 进线电流,其值为 99,品质正常;以此类推,不再赘述。

Send:68(启动符) 0e(APDU 长度)5e 67(发送序号)a2 ca(接收序号)64(总召唤)01(可变限定结构词)0a 00(传送原因:激活终止)01 00(ASDU 公共地址)00 00 00(信息对象地址)14(召唤品质描述词) 2020/03/30 21:45:51::444TaskId=1 LinkId=85 NodeId=0 ()

Ⅳ 、遥调(模拟量输出)

遥调用于远程读取修改系统的定值,定值上传一般使用的是短浮点数形。同时,因为控制器一次最多传送 10 个定值,因此主站需要一次性读取多个点号的定值时,从站会分多次上送。

1、读取 (66H)

R:68 (启动符) 0d (APDU 长度) 00 00 (发送序号) 00 00 (接收序号) 66 (读) 01 (可变结构限定词) 05 00 (传送原因:请求) 01 00 (ASDU 公共地址) 0D 50 00 (信息对象地址)

S:68 (启动符) 10 (长度) 00 00 (发送序号) 02 00 (接收序号) 0b (测量值,标度化值) 01 (可变结构限定词) 0a 00 (传送原因:激活终止) 01 00 (ASDU 公共地址) 0D 50 00 (信息对象地址) 02 00 00 (信息体元素,前 2 个字节为定值内容,后一个字节为品质因数)

注:

若读取多个定值,只需改变下行报文中的可变结构限定词即可,一般为顺序读取。分次上送时,只有最后一帧报文的传送原因为 00 0aH,其余帧均为 00 50H。

2、设点(31H)

设点命令根据数形不同,指令各不相同。这里以 31H(标度化值)为例:

R:68 (启动符) 10 (APDU 长度) 02 00 (发送序号) 04 00 (接收序号) 31 (设点命令,标度化值) 01 (可变结构限定词) 06 00 (传送原因:激活) 01 00 (ASDU 公共地址) 0D 50 00 (信息对象地址) 02 00 00 (信息体元素,前 2 个字节为定值内容,后一个字节为品质因数)

S:68 (启动符) 10 (APDU 长度) 00 00 (发送序号) 02 00 (接收序号) 31 (设点命令,标度化值) 01 (可变结构限定词) 07 00 (传送原因:激活确认) 01 00 (APDU 公共地址) 0d 50 00 (信息对象地址) 02 00 00 (信息体元素,前 2 个字节为定值内容,后一个字节为品质因数)

注:

若设置多个定值,只需改变下行报文中的可变结构限定词即可,一般为顺序设置。

Ⅴ 、遥脉(电度量)

电度可以在对时之前发送。通过设置参数中” 全数据扫描间隔”,单位是分钟,一般是 15 分钟召唤一次电度,如果不需要召唤电度一定要将参数中的电度个数设为 0。

在遥脉报文中有两个参数(计数量品质描述词、计数量召唤限定词)需要注意,其结构如下:

在这里插入图片描述来看顺序记号,IV 为有效标志位(0 有效,1 无效),CA 为调整标志位(0 上次读数后未调整,1 上次读数后被调整),CY 为溢出标志位(0 无溢出,1 溢出),组内顺序号取值范围为 0~31,表示此帧内电度值的顺序。

接着是计数量召唤命令限定词 (QCC),FRZ 代表冻结命令词(0 意为读,无冻结或复位;1 意为计数量冻结不带复位,被冻结的值为累计量;2 意为计数量冻结带复位,被冻结的值为累计量,3 意为技术量复位)。RQT 代表请求限定词(0 未定义,1~4 代表电度分组召唤,5 代表电度总召唤,5~31 兼容定义保留,32~63 专用范围保留)

电度量在电能脉冲召唤命令(65H)下,按 “冻结→冻结返回→返回电度量” 的方式执行。其报文如下所示:

R:68(启动符)0e(APDU 长度)04 00(发送序号)0c 00(接收序号)65(电能脉冲召唤)01(可变结构限定词)06 00(传送原因:激活)01 00(ASDU 公共地址)00 00 00(信息对象地址)45(QCC)

S:68(启动符)0e(APDU 长度)0c 00(发送序号)04 00(接收序号)65(电能脉冲召唤)01(可变结构限定词)07 00(传送原因:激活确认)01 00(ASDU 公共地址)00 00 00(信息对象地址)45(QCC)

S:68(启动符)1a(APDU 长度)0e 00(发送序号)06 00(接收序号)0f(不带时标的遥脉值)02(可变结构限定词)05 00(传送原因:请求或被请求)01 00(ASDU 公共地址)01 64 00 (信息对象地址)00 00 00 00 00 00(信息体元素,前 4 个字节是遥脉值,第 5 个字节是顺序记号)02 64 00 00 00 00 01

S:68(启动符)0e(APDU 长度)14 00(发送序号)06 00(接收序号)65(电能脉冲召唤) 01(可变限定结构词)0a 00(传送原因:激活终止) 01 00(ASDU 公共地址)00 00 00(信息对象地址)45(QCC)

说明:

报文中其他内容都没什么好说的,主要说下计数量召唤命令限定词 (QCC),45H=0100 0101B,那么 FRZ=1,即代表计数量冻结不带复位,被冻结的值为累计量。RQT=5,即代表电度总召唤。

在本司现场仪表中,不采用冻结机制,所以其 QCC 为 05H,其 FRZ=0,即读,无冻结或复位。另由于本司调度后台不识别遥脉的品质因数,所以顺序记号中不再带有品质因数,纯用做顺序记号。

关于电度量冻结这里解释一下,为了统计全系统的电度量,要求在统一时间同时读取各厂站的电度量,所以需要对电度量进行冻结。一般来说,每一电度量都有两套计数器:主计数器和副计数器。任何时候主计数器的值都反映了所测时段的电能量。但发送到调度的电度量值总是副计数器的值。主计数器和副计数器的关系是:在收到统一读数的 “电度冻结” 命令后,副计数器的值就保持不变,等于收到 “电度冻结” 命令时主计数器的值;而在结束电度值上送会话后,副计数器又重新跟随主计数器,两者的值保持一致。

对于要求比较高的厂站,电度解冻需要通过下列两种方法解冻:1、调度下发命令被动解冻,2、厂站传送 3 次电度量后自行解冻。

一般整个遥脉传输过程为:冻结→冻结确认→读取→读取确认→传输遥脉→读取结束。

Ⅵ、对时

对时命令使用条件:1、网络中的最大延时不会超过 400ms;2、被控站的所要求的精度为 1S。综上,时钟同步命令一般不再 104 规约中应用。

若网络延时很大或者子站所要求的准确度很高(例如 1ms),则变电站综合自动化系统必须安装精确度很高的全球定位系统(GPS)。

若使用的话,时钟在系统初始化以后由控制站进行初始化同步,然后再以发送 APDU 定期同步,一般默认为 20min。其报文如下所示:

R:68(启动符)14(APDU 长度)02 00(发送序号)0a 00(接收序号)67(时钟同步)01(可变结构限定词)06 00(传送原因:激活成功)01 00(ASDU 公共地址)00 00 00(信息对象地址)01 (毫秒低位) 02 (毫秒高位) 03 (分钟) 04 (时) 81 (日与星期) 09 (月) 05 (年)

S:68(启动符)14(APDU 长度)0c 00(发送序号)04 00(接收序号)67(时钟同步)01(可变结构限定词)07 00(传送原因:激活确认)01 00(ASDU 公共地址)00 00 00(信息对象地址)01 (毫秒低位) 02 (毫秒高位) 03 (分钟) 04 (时) 81 (日与星期) 09 (月) 05 (年)

说明:

1、当子站需要接受主站的校时,收到校时报文后直接修正本地时间即可。由于网络路由延时的随机性,不像 101 规约会进行延时采集和传递。

Ⅶ、测试

测试过程用于检查从控制站到被控站及其返回的全部路径。测试命令是控制站发出 “测试命令” 报文。被控站发出 ASDU 的镜像报文,即 “测试确认” 报文。控制站比较已发出的 “测试命令” 报文和镜像报文,如果两个报文一致,则其测试结果是好的。其报文如下所示:

R:68(启动符)0f(APDU 长度)14 00(发送序号)28 00(接收序号)68(测试)01(可变限定结构词)06 00(传送原因:激活)02 00(ASDU 公共地址)00 00 00(信息对象地址)aa 55(固定测试字)

S:68(启动符)0f(APDU 长度)28 00(发送序号)16 00(接收序号)68 (测试)01(可变限定结构词)07 00(传送原因:激活确认)02 00(ASDU 公共地址)00 00 00(信息对象地址)aa 55(固定测试字)

说明:

1、固定测试字 (FBP),顾名思义,它是固定不变的,恒为 aa55H;

2、通常主站如果发现接收误码,可以发出测试命令,启动测试过程,计算通道的最新误码率,然后可以根据需要切换至备用通道或者重新启动链路建立过程。

Ⅷ、复位进程

104 协议在链路层和应用层 2 个层面提供复位功能。在实际应用中,难免会出现厂站端远动通信装置死机或数据不刷新的现象。当出现上述问题时,使用复位进程命令很可能能够临时解决上述问题,这对于无人值守的变电站有很大的意义。

如果主站发现发出的命令仅得到链路层的确认,那么从站的应用层一般已经出现异常。如果从站严格将链路层和应用层分层,并支持应用层的单独复位,那么主站就可以发送复位进程命令,从而通过复位快速解决从站的应用层故障异常。这种复位形式俗称软复位。

而在工程实践中,通常不支持软复位(应用层的单独复位),一般在接收到主站的复位进程命令后,会直接将整个通信程序重启。

其报文如下所示:

R:68(启动符)0e(APDU 长度)00 00(发送序号)0a 00(接收序号)69(复位进程)01(可变限定结构词)06 00(传送原因:激活)02 00(ASDU 公共地址)00 00 00(信息对象地址)00(QRP)

S:68(启动符)0e(APDU 长度)0c 00(发送序号)00 00(接收序号)69(复位进程)01(可变限定结构词)07 00(传送原因:激活确认)02 00(ASDU 公共地址)00 00 00(信息对象地址)00(QRP)

说明:

1、复位流程:复位进程命令下发→复位进程命令确认→四次挥手(子站发起)→三次握手(主站发起)→STARTDT 激活 → STARTDT 确认→“初始化结束” 报文。倒数二、三步为 U 帧,后文中会进行详述。

2、QRP 为复位进程命令限定词。0 为未采用,1 为进程的总复位,2 为复位事件缓冲区等待处理的带时标的信息,3~127 为兼容范围保留,128~255 为专用范围保留。

Ⅸ、初始化结束

通讯双方,任何一方重新上电后都有初始化的过程,在通讯之前双方必须建立链接,只有链路完好后方可交换应用数据。链接的关闭释放可以由主站或从站提出,但链接的建立只能由主站发起。

主站和从站初始化过程分为以下三种情况:

1、主站的就地初始化

主站的就地初始化可以由电源的重启引起。在恢复通信时,由于所有数据均无效,因此所有数据均需立即重新召唤。

2、从站的就地初始化

从站的就地初始化可以由电源的重启引起。如果主站进行操作时,由于从站对主站报文的不确认,主站可以认为与从站的连接被中断了。

3、主站的远方初始化

从站的远方初始化可以由主站的 “复位进程命令” 报文来启动。从站必须用 “确认复位进程命令” 报文来响应。

如何对以上情况进行区分呢?那就是初始化原因(COI),其结构如下所示:

在这里插入图片描述

由上图可知,初始化原因包含了 7 位具体服务原因和 1 位当地参数改变标志。其中 D0~D6 为初始化原因,0 代表当地电源合上,1 代表当地手动复位,2 远方复位,当初始化原因为其他值时,是未定义的,可由主从站双方自由定义;D7 为参数标志,0 代表本次初始化没有改变当地参数,1 表示本次初始化改变了当地参数。

Ⅹ、其他

这部分集中了一些比较多变或自定义或目前未在本司采用的类型标识,仅作为了解。

继电保护装置事件(类型标识为 38)、继电保护装置成组启动事件(类型标识为 39)、继电保护装置成组输出电路信息(类型标识为 40)根据设备厂家及设备型号不同,存在差异,需结合厂家资料理解。

定值的读写除上文中提到形式,需要注意的是有厂家会使用自定义的类型标识。

参数下装(110~113)用于改变已定义的参数,例如死区值定义了模拟量数据被传输的阈值。它只能作为操作命令从主站发出,从站回复 “下装参数报文” 确认报文作为响应,之后主站下发参数激活指令。被下装的参数必须保存在永久存储器内,以确保从站在重新启动时,这些参数能正确加载。

文件传输这块,本司未涉及此块。这里仅做简要介绍,文件传输服务主要用于召唤终端的历史数据文件(如 SOE 事件记录、遥控操作记录、极值数据等)、录波文件等,文件传输过程分为召唤目录和文件传送过程,需要主站主动发起文件传输过程,文件传输宜采用 7z 压缩格式进行传输。接收方在收到以.7z 结尾的文件时,将该文件以压缩格式进行处理,其余情况均按照非压缩格式处理。

说明:

1、故障录波传输通常只采用配置文件(CFG)和数据文件(DAT)两个文件,其中配置文件采用 ACSII 格式,数据文件采用二进制格式。

2、故障录波应包含故障发生时刻前和故障发生时刻后的波形数据,故障前不应少于 4 个周波,故障后不应少于 8 个周波。录波点数为不少于 80 点 / 周波,录波数据应包含 A 相电压、B 相电压、C 相电压、零序电压、A 相电流、B 相电流、C 相电流、零序电流和遥信通道信息。

3、数据文件(DAT)包含记录中每个采样所有输入通道的值。数据文件包含一个顺序号和每次采样的时标。这些采样值除记录模拟输入数据外,也记录状态,即开 / 关信号的输入。

4、配置文件(CFG)用于正确地说明数据文件的格式。该文件诠释了数据文件所包含的信息,如通道信息(名称、单位、转换系数)、通道类型和数量、线路频率、采样速率等。

另外根据用户需求,也会增加一些功能,如远程软件升级、下发计划值曲线。这些都要结合地方标准或厂家资料进行分析。

说明:

1、计划值曲线是调度机构规定的电厂的出力计划,是电厂发电考核、发电电价结算的依据之一。电厂控制系统必须根据计划值曲线运行。

⑵U 帧

Ⅰ、报文格式

不编号的控制功能格式(U 帧),控制用报文,一共 6 种,如下图所示:

在这里插入图片描述

从上表可以看出,U 帧控制域的第 2、3、4 字节均固定为 00H,但字节 1 中包含了 TESTFR,STARTDT,STOPDT 三种功能,同时只能激活其中的一种功能。

Ⅱ 、通讯的建立

1、TCP 连接的建立

从站 RTU 作为服务器,在建立 TCP 连接前,应一直处于侦听状态并等待主站的连接请求,当 TCP 连接已经建立,则应持续地检测 TCP 连接的状态,以便 TCP 连接被关闭后能重新进入侦听状态(调用 SOCKET 的 LISTEN 函数)并初始化一些与 TCP 连接状态有关的程序变量。

主站作为客户机,在建立 TCP 连接前,应不断地向站端 RTU 发出连接请求(调用 SOCKET 的 CONNETCT 函数),一旦连接请求被接收,则应监测 TCP 连接的状态,以便 TCP 连接被关闭后重新发出连接请求。

说明:

①套接字(SOCKET)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。通俗来说,套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的 Socket 中,该 Socket 通过网络接口卡的传输介质将这段信息发送给另一台主机的 Socket 中,使这段信息能传送到其他程序中。因此,两个应用程序之间的数据传输要通过套接字来完成。套接字 SOCKET=(IP 地址:端口号)。

②每次 TCP 连接被建立后,主站和从站应将发送和接收序号清零,并且子站只有在收到了调度系统的 STARTDT 后,才能响应数据召唤及循环上送数据,但在收到 STARTDT 之前,子站对于遥控、设点等命令仍然响应。

2、数据传输的启动

当 TCP 连接建立后, 连接上的用户数据传输不会从被控站自动激活。 即,当一个连接建立时 STOPDT 处于缺省状态。在这种状态下,被控站并不通过这个连接发送任何数据,除了未编号的控制功能和对这些功能的确认。控制站必须通过这个连接发送 STARTDTact 指令来激活这个连接中的用户数据传输。被控站用 STARTDTcon 响应这个命令。如果 STARTDT 没有被确认,这个连接将被控制站关闭。这意味着站初始化之后, STARTDT 必须总是在来自被控站的任何用户数据传输(例如,一般的询问信息)开始前发送。任何被控站只有在发送 STARTDTcon 后才能发送待发用户数据。

当应用层的数据传输被成功激活之后,一般首先进行总召唤流程,随后进行对时流程(若有)。

3、数据传输启动流程图

在这里插入图片描述

Ⅲ 、通讯的中断(计划内)

1、常见的引起通讯中断的情况(TCP 连接中断)

a、主站和从站之间的 I 格式报文传送出现丢失、错序或者发送 U 帧得不到应答时,双方均可主动关闭 TCP 连接,然后进行重连。

b、主站系统重新启动后将与各个从站重新建立 TCP 连接。

c、从站 RTU 合上电源或由于自恢复而重新启动后,将重新连接。

d、 从站 RTU 收到主站的 “复位进程命令” 报文后,将关闭连接,然后重建连接。

2、数据传输的中断

当主站需要从一个有效连接切换到另一连接时,主站首先在有效连接上传送一个 STOPDTact 指令, 从站停止这个连接上的用户数据传输并返回一个 STOPDTcon 确认。挂起的传输报文可以在被控站收到 STOPDTact 生效指令和返回 STOPTDcon 确认的时刻之间发送。收到 STOPDTcon 确认后,控制站可以关闭这个连接。另一连接上,同样需要一个 STARTDT 来启动该连接上来自于从站的数据传送。其流程图如下所示:

在这里插入图片描述
3、TCP 连接的中断

TCP 连接中断采用四次挥手模式,这篇文章为讲解内容为应用层的 104 规约,所以不在拓展,有兴趣的自己查阅资料。

Ⅳ 、U 帧的测试帧

未激活但已建立的连接通过发送测试 APDU ( TESTFR = 激活) 并得到接收站发回的 TESTFR = 确认,在两个方向上进行周期性测试。

发送站和接收站在规定时间段内没有数据传输(超时)要启动测试过程。每接收一帧 I 帧、S 帧或 U 帧将重新触发定时器 t3.。

测试帧主从站都可以发送,一般由从站监视连接,但是如果主站发来测试帧,那从站就不监视连接了。

测试过程也可以在激活的连接上启动,这些连接缺乏活动性,但需要确保连通。

Ⅴ 、总结

首先通讯建立的过程中分为网络层的连接建立及应用层的连接建立,这点需要分清,其次网络层连接的中断可以直接进行,并不需要发 STPPDT 命令。

STARTDT/STOPDT 是一种控制站激活 / 解除激活监视方向的机制。 控制站即使没有收到激活确认,也可以发送命令或者设定值。发送和接收计数器继续运行,它们并不依赖于 STARTDT/ STOPDT 的使用。

另 104 协议中的几个定时器将在基础知识中讲解。

⑶S 帧

编号的监视功能格式(S 帧),用于无应用数据可传输时,确认对方的发送。其控制域格式如下:

在这里插入图片描述
从上表可以看出,S 帧的控制域 1 + 控制域 2 已经被固定为 0001H,即 S 帧不存在发送序号,只有接收序号。其报文如下所示:

R:68(启动符)04(APDU 长度)01 00 (控制域 1 + 控制域 2)2e 04(接收序号)

主站可按频率发送 S 帧,比如接收 8 帧 I 帧回答一帧 S 帧,也可以接收 1 帧 I 帧就应答 1 帧 S 帧。与 104 规约中的特定参数有关。这些参数下文的基础知识中会有介绍。

其流程图如下所示:

在这里插入图片描述
最后编辑于 :2020.06.10 00:34:50


从零开始理解 IEC104 协议之二 —— 基础知识

洪城小电工 IP 属地:江西

2020.06.10 00:42:53

104 协议是 101 协议的网络版,101 协议每次只能发送一个链路帧,而 104 协议可以连续发送多个链路帧,其传输效率明显高于 101 协议,而且具有 TCP/IP 的冲突检测和错误重传机制(这里重传是指断开重连重传),具有比 101 协议更高的可靠性和稳定性,另外对通信延时的限制更宽松。

IEC104 协议适用于厂站与调度主站间的以太网通讯(全双工高速),位于 OSI 体系中的应用层,其基本定义为端口号 2404,调度站为客户端,厂站端为服务器,平衡式传输,协议类型是滑动窗口协议。

说明:

1、平衡传输意为双方都可以发起信息传输。104 协议下,一旦链路建立成功,变化信息除了响应召唤应答还可以主动发送而无需等待查询。

2、对于基于 TCP 的应用程序来说存在两种工作模式,即服务器模式和客户机模式。它们之间的区别是:在建立 TCP 连接时,服务器从不发起连接请求,他一直处于侦听状态,当侦听到来自客户机的连接请求时,则接受此请求,由此建立一个 TCP 连接,服务器和客户机就可以通过这个虚拟的通讯链路进行数据收发。

3、协议类型有三种,问答式协议模式为一问一答,超时重传,其特点是安全稳定,效率低下。简单窗口协议模式为 N 问一答,超时重传 N 个报文,其特点是效率相对提高,但浪费了 A 的发送。滑动窗口协议模式为 A 发送报文的同时,B 发送确认帧进行确认;A 记录自己已经被确认的报文,向前滑动最大可发送窗口,B 记录有多少报文尚未确认,达到最大窗口或超时则发确认帧。A 未确认窗口通常为 B 未确认窗口的 1.5 倍。其特点是效率高。

⑴ 、小端模式

104 规约一般小端模式,即是指在内存的低地址中保存数据的低字节。大小端模式,并不由规约本身决定,而取决于 CPU 及操作系统。常见 x86 处理器(无论何种操作系统)都是小端模式,而 PPC 处理器则都是大端模式。

而 TCP/IP 协议中所定义的网络字节顺序采用大端模式排序,而一般的读写顺序为 —— 数据按地址由低到高的写入,由高到低写出。这样就造就了我们所看到的报文是低位字节在前,高位字节在后。

举个例子在 x86 系统下,通过 TCP/IP 协议,我们将 0x1234 从以 0x0000 开始的内存写出。其过程如下:

在 x86 系统中 0x0000 存储数据为 0x34,0x0001 存储数据为 0x12,即 0x1234;经过写出后,在网络上传输的字节顺序为 0x0000 存储数据为 0x12,0x0001 存储数据为 0x34,即 0x3412。

说明:

1、既然数据分高字节、低字节,说明只有数据格式是 2 字节以上的,才有大小端模式,比如 word、dword 等;而 byte 类型数据是不分大小端模式的。

⑵ 、重要参数

Ⅰ 、K 值和 W 值

104 规约规定了两个参数 K 和 W,其取值为 1 到 32767,其中 K 表示发送方在有 K 个 I 格式报文未得到对方的确认时,将停止数据发送;W 表示接收方最迟在接收 W 个 I 格式报文后应发出认可。104 规约规定 K 和 W 的默认值分别为 12 个 APDU 和 8 个 APDU,推荐关系式为 w<k*2/3。

在实际中,K 和 W 的具体取值可以根据 TCP 连接双方的数据通信量加以确定。对于从站 RTU 来说,每收到一个调度端的 I 格式报文都应立即响应,其 W 的取值实际上为 1,由于 RTU 端可以循环向主站发送遥信、遥测等信息,因此 K 的取值与其循环发送的定时周期有关,通常 12 到 20 个 APDU 就足够了;对于主站端,由于不停接收 RTU 数据,因此应及时地给以确认,通常 W 取小于 8 个 APDU 的值。

当未确认 I 格式 APDU 达到 K 个时,发送方停止发送。如果 t1 超时仍未收到确认,则重启链路。

Ⅱ 、超时定义

为了能对 TCP 连接进行检查和维护,104 规定了几个超时时间:t0、t1、t2、t3。它们的取值范围为 1~255s,准确度为 1s。

t0 规定了主站和从站建立一次 TCP 连接的最大允许时间,即主站端一直发出连接请求,在 t0 时间内得不到连接建立成功的状态下,要向应用层提示,说明无法建立连接,一般可设置进行多次连接,当每次连接都超过 t0 无法建立成功时都应给出提示。默认值 30s。

t1 规定发送一个 I 格式报文或 U 格式报文后,必须在 t1 的时间内得到接收方的认可,否则发送方认为 TCP 连接出现问题并应重新建立连接。这个过程是双向的,即对于厂站端和主站端当这个过程任一方发生时,两方的连接都需关闭,重新建立连接。默认值 15s。

t2 规定接收方在接收到 I 格式报文后,若经过 t2 时间未再发送新的 I 格式报文,则必须向发送方发送 S 格式帧对已经收到的 I 格式报文进行认可,显然 t2 必须小于 t1。默认值 10s。

t3 规定主站或从站每接收一个 I,S,U 报文将重新触发计时器 t3,若再 t3 内未能接收到任何报文,将向对方发送测试链路报文(U 帧)。发送测试帧后,若在 t1 时间内没有收到测试确认,则连接关闭,若达到 t3 时间,则再次发送测试链路报文(U 帧)。默认值 20s。

⑶ 、冗余机制

Ⅰ 、通道冗余

方式一 —— 链路冗余,应用共享

链路冗余:所有链路互为主备,备用通道仅仅测试链路维持连接,通道的主备用是动态可切换的。

手动切换模式:在当前激活的逻辑连接上人工发送 STOPDT-ACT 停止应用传输转为测试维护,然后再新的逻辑上人工发送 STARTDT-ACT 予以激活,作为主连接。

自动切换由主站判断进行。连接初始化时,主站按某种逻辑关系选择确定主、备通道,例如先建立链路的为主通道或者误码率低的为主通道或者响应快的为主通道或按自然顺序选择主通道。运行中的自动切换可以由主站根据目前主、备连接的通信情况而定。

应用共享:多个链路共用同一数据库,并且数据缓存的入栈出栈只针对当前主连接有效。

方式二 —— 链路冗余,应用冗余

链路冗余:与上文描述基本一致。

应用冗余:即不同的链路不再共享数据库,各链路完全独立运行。这种方式的关键点是数据同步机制,用来实现数据的完整性和一致性。

一般是将当前主连接中已经被主站确认的数据点号和数量,告知其他所有备用连接,并对备用连接中的应用数据进行实时整理,从而实现各链路数据库的内容动态一致。

综上,方式二的模式实现了链路和应用真正的独立冗余,但内存消耗较多,程序较为复杂,同步机制的实施也会一定程度上影响数据的完整性。方式一,虽然各链路未能真正的独立运行,但在数据完整性的方面有着高可靠性。且编程复杂性较低,问题较少。本司正线采用方式一。

Ⅱ 、双机冗余

1、冷备用

即当主机工作时,备机处于待命状态,当主机故障或数据链路断开时,切换至备机。

此方式的问题为:当主机与某个子系统数据链路断开无法连接时,将会使备机激活,接管主机全部的数据链路进行重新连接,初次连接建立时会产生大量网络传输。同时,在主机进行冗余切换而备机与子系统连接未完全建立时,数据交互将会暂停,无法取得子系统中最新的数据进行交互。

2、热备用

两台通信前置机 fep 同时处于工作状态,与所有子系统进行连接。两台通信前置机 fep 通过串口连接,把各条链路的重传次数、重要报文延迟时间等信息定义未每条链路的通信服务质量权重,然后进行质量仲裁选择数据存入实时库,当其中一台通信前置机 fep 故障或数据链路断开时,则只取未故障通信前置机 fep 中的数据进行交互。

同时也可以根据通信服务质量权重进行主备机的自动切换,这个过程从站(这时主备机通过串口传输通信服务质量权重)与主站均可发起。

此方式的问题为:两台通信前置机 fep 同时与所有子系统进行连接,数据量比较庞大时,将产生大量的网络带宽浪费(两台通信前置机 fep 均正常工作时,只取其中一台的数据),双通道进行数据交互时还有可能造成子系统压力较大从而造成数据接口不稳定。并且部分子系统由于其接口特殊性,如串口通信,同时仅能一方与其进行数据交互,两台通信前置机 fep 无法同时与此类子系统接口进行数据交互。

综上,可以看出冷备与热备各有优缺点,但上述内容只是基础知识,现在厂家针对这些问题在软件方面都做了大量优化,实际的技术细节以厂家资料为准。

本司主变电所采用双机冗余(热备用)+ 通道冗余(方式二)。


从零开始理解 IEC104 协议之三 —— 主要过程中的一些技术细节

洪城小电工 IP 属地:江西

2020.06.10 00:55:54

⑴、遥信

遥信数据格式一般为 —— 当总召唤时,使用不带时标的全遥信报文,而其它情况下一律只使用带时标的遥信报文。

当主站收到 SOE 信息后应能自动产生 COS 信息。

遥信报文常见问题如下:1、遥信报文丢失;2、遥信报文的前一帧报文丢失,导致序列号校验出错,主站丢弃此遥信报文,3 主站的确认报文丢失。

1、2 的处理方式为主站关闭通道重连,重连后执行初始化及总召唤过程,之后将从站中缓存的遥信数据重新上送,直到收到主站的 S 帧后才清除缓存数据。

发生 3 时,其流程为从站将继续发送剩下的数据,直到 K 值等于 12 后停止发送。此时等待 t1,t1 超时后,执行 1、2 的处理方式。

双点遥信采用同一状态点的分闸和合闸信息的组合表示该点状态,因此比单点格式具有更高的可靠性。但是如果对分闸和合闸状态的变化检测不完全同步就可能会出现短暂的中间状态,可以通过延迟采样来过滤掉中间状态。

⑵、遥控

这里主要分析选控的相关细节。

Ⅰ、遥控选择阶段(遥控返校)

遥控选择过程可被中断,遥控选择及选择确认报文间的间隔时间受到超时控制,最大不得超过 60s。

当从站处于遥控选择状态,不再接受任何遥控选择指令,返回否定确认。

只有处于初始状态才能进行遥控选择。当同一个遥控点号选择之后再次接收到选择命令应当认为指令错误并恢复到未选择之前的初始状态,重新等待新的遥控选择指令开始新的遥控流程。

遥控选择之后应该在规定的时间(默认 60s)内接收到遥控执行或者遥控撤销命令,如果超时未收到遥控执行或撤销命令则选择状态失效,恢复到未选择之前的初始状态。

Ⅱ、遥控执行阶段 / 遥控撤销阶段

遥控执行过程不可中断。执行及执行确认,撤销及撤销确认的报文间的间隔时间同样受到超时控制,默认时间同样为 60s。

只有选择成功状态才能进行遥控撤销或执行,遥控撤销或执行成功后恢复到初始状态。执行命令的确认代表是操作的启动,而非操作的结束。

Ⅲ、正常选控过程的总结

综上,同一点号只能执行一次遥控选择、撤销或执行操作。遥控选择和执行命令在以下情况才可重复发送:

1、选择命令已被执行,并发出了执行命令,且得到了该点的状态变位信息;

2、在任何时候发生了命令与命令确认间的超时;

3、发生了否定命令确认;

4、选择和执行命令已被终止;

下面谈下在工程实际中,往往会出现的情况:

在实际中,主站可以设置多任务同时执行,允许操作员同时进行同一装置多个点的遥控。在出现通道的延迟或者从站的命令处理较慢时,如果操作员在等不及的情况下可能在发出某点控制命令后,再次点击发送该点控制命令。这就造成短期内装置收到两个或更多的遥控命令,在 104 规约里对其处理方式做出了严格规定,上文中也有提到。而在实际中,很多厂家不会严格执行标准,比如 对旧命令做否定认可或者不对新的命令做任何应答。由于应答过程不完整,有可能还会存在一些互操作的麻烦,在实际工作中注意甄别。

在实际中,某些从站不能设置超时选择时间,这在通道不稳定的情况下是非常不安全的。例如主站某选择命令成功后发出执行命令,在网络或通道传输延迟的情况下,等该命令到达从站时,由于其传输时间已经超过了主站自身对该命令进程设置的超时时间而被主站取消,而从站却依然执行了该命令。这种执行的结果并不是主站所预期的,因此现场运行时很有可能造成一些危险。

Ⅳ、针对不可控点的遥控处理机制

这种情况在控制站与被控站的信息点表配置不匹配时可能会出现,那么被控站(装置)应该能对所控点的类型和状态进行判断,如果在装置上未配置该信息点或该地址不属于控制点,则应向控制站做相应的符合规定的应答,如 104 规约中规定可采用传输原因 COT=47(未知的信息对象地址) 或 COT=7(P/N 位=1,否定确认)。在测试中,有些厂家或者不应答,或者一律做肯定确认却不做任何实际处理,都是不恰当的。这样做的后果是让监控主站或调度站误以为传输通道出现问题而重发命令,或者干脆以为现场装置出了故障,最后造成不必要的麻烦。

⑶、遥测

遥测数据格式一般为 —— 总召唤不带时标且信息体地址需连续,越死区遥测则采用带长时标的格式。

也可采用循环数据的方式传输遥测,循环传输可被中断。

遥测传输总是传输最新的实时数据,越死区遥测也是一样。

当模拟量监测点设定为 4~20mA 输入后一旦出现该测点输入电流小于 4mA 时(变送器输出开路或辅助电源丢失),应保留前一次有效数据传输给控制站,并在其品质描述词中定义为数据无效和溢出。

如果遥测,如果采用归一化格式,需要进行工程值的转换,当测量回路参数发生变化时,就需要调整转换系数;如果采用标度化或短浮点数格式,则可以直接传送工程值,无需转换。

另外工程量大小,系统精度(小数点位数越多)可以影响遥测精度,另外如采用归一化值,增大满码值也有提升精度的效果。

⑷、遥脉

在通道故障情况下,从站应能根据事先预定的采集周期,在间隔每 1、5、15 分钟进行自动冻结遥脉值,并将时标和遥脉值一起存入缓存。由于涉及到电费结算,缓存需要保证存储一定时间的遥脉值。

⑸、事件

越死区值的遥测值传输按事件处理。事件发生时,优先传输遥信变位,后传输越死区变化遥测(其传输的永远是最新数据)。

从站需要一个缓存空间用于收集从站尚未来得及传输的事件。所有事件必须得到主站的确认(上送传送原因为突发的报文后,要收到主站 S 帧确认,才能够视为主站确认),否则将事件进行缓存,缓存遥信条数不超过 256 条,超出 256 条遥信则循环覆盖最早的遥信数据,待通信恢复正常后重新上送未被确认的事件,未被确认的事件应该在通信重新建立链路后重复上送,直到被确认才清除缓存遥信。如果终端掉电重启后则事件清空,无需再补充上送。

⑹ 、总召唤

总召唤(非初始化)可被中断,但总召唤(初始化)不可中断。

⑺ 、参数下装

对遥测对象进行死区值的设定,是主站与从站通信流量控制的有效途径,一般用参数下装的功能完成。

参数下装,可以作为操作员命令发向被控站。这些参数通过可行性检查后被立即激活并作为当前运行的有 效值。

参数下装报文,无论是肯定认可或否定确认,回答主站的确认报文总是指出当前运行的有效参数。

新参数在从站装置重启后依旧有效。

⑻ 、异常状态

1、数据传输溢出

其原因可能是主站发出命令过于频繁或从站报文处理速度过慢,尽管报文通过通道正确地被传输道了从站,但此帧报文仍无法被从站接收。

2、缓存溢出

从站应立即向主站发出一个单点遥信报文,用以告知主站。主站会立即向从站发出总召唤。

对于远动来说,缓存发生了溢出,必须删掉一个事件记录,无论是遥测、遥信还是遥脉,默认是删除最久的数据。

⑼ 、应用功能的优先级

高优先级不能阻塞低优先级事件的传输。

报文优先级如下:初始化结束 > 总召唤的应答数据(初始化)> 遥控命令的应答报文 > SOE > 总召唤的应答数据(非初始化)>COS > 时钟同步的应答报文 > 变化遥测 > 复位进程 > 文件召唤 > 文件传输 > 电能量召唤。

⑽ 、常见系统内部事件

1、通道故障

当主通道发生中断,主站会把主通道打上故障标记,同时按某种逻辑激活一条备用通道,如果备用通道未响应启动数据传输(U 帧),则同样打上故障标记,继续激活另一备用通道。

2、系统内部事件

常见的一般有这几类:事件缓存情况,系统 RAM 状况,当地显示子系统状态(工况),参数有效性检查,UPS 运行工况,遥控方式(远方 / 就地),电源工况。

⑾ 、对时

在应用 104 规约对时的情况下,往往会设置 t4,默认时间为 8s。

主站下发对时报文后,如果主站在 t4 时间内没有收到对时确认报文,不能将原对时报文重发,可以用最新主站时钟重新组装对时报文下发,这个过程不得超过 3 次。

有些情况下,会单纯运用时钟读取指令。时钟读取指令(类型标识 103,传送原因 5):主站主动查询从站本地时间信息,主站下行的读取时钟指令报文所携带的时间信息全部填 0 补齐,从站在收到主站的时钟读取命令后,以当前本地时间回复主站。

时标的格式有两种,7 字节的长时标和 3 字节的短时标。短时标只有分到毫秒的部分时间,必须加上主站的年到小时的时间部分,从而合成一个完整的时间,因此在跨点时刻短时标容易发生错误。

为了避免发生错误,通常采用长时标。若一定要采用短时标,也可以在 SOE 上送前,将时钟信息发送给主站(传送原因:突变),以便在时钟存在偏差的情况下,也能够对 SOE 时标做出正确的处理。

主站应能够同时处理以上 2 种时标格式的信息,并能正确处理从站主动通知整点跨越的情形,而从站则应 只使用一种时标格式。

⑿、其他注意事项

1、发送方在发送一个查询或控制指令(如时钟)时,不要求即将接收的数据一定为上一帧发送指令的回复数据,即当主站请求一个数据时,如果从站尚未准备后,从站可以先上送命令队列里的其它数据直至主动站所请求的数据准备完成,此情主动站不认为查询或控制指令执行失败。

2、在一个项目中,从站的数据库可能包含了未被定义的地址。如果从站的有关信息对应到未定义的地址,且在执行过程中把这组报文发送出去了,在主站将其视为错误,但控制站应能处理这种情况,将未定义地址信息作特殊处理,已保证其他报文的正常收发。

3、有些应用过程,从站可以返回结束 ASDU,以表示整个应用过程的结束,例如总召唤过程结束、遥控过程结束、电能量召唤过程结束等。不过这些都是可选项,不一定会有。

4、品质因数在实际工程往往不能得到完整的实施。有的主站对从站上送的信息的品质描述不加判断,造成数据分类和处理的缺陷;有的从站在调试状态或故障时,没有在相关遥测、遥信和事件等信息中用品质描述,造成现场状态不能如实反映到控制站,影响了系统监控的实时性和准确性。时标中的品质位很多情况下未被真实启用。这些情况需要根据工程实际情况进行斟酌判断。

⒀ 、典型网络架构及通讯流程

先看网络架构图如下,结合实际,自行理解:

在这里插入图片描述
说明:

远动 IP 最好要分配两个,在一个 IP 地址的情况下,双机在启动时会向网络上发 ARP 报文,由于双机有同样的 IP 地址,所以路由器在收到 ARP 报文后,只能建立一组 MAC 地址和 IP 地址的映射关系,这样就只能和一台远动进行通讯。而在备机切换时,并不能重发 ARP 报文,路由器无法更新映射关系,造成 IP 地址与 MAC 地址对应关系错误,无法进行连接。

若无法分配给从站两个 IP,只能修改程序,让备机切换时,也发送 ARP 报文,重新建立映射关系。

然后是通讯流程图,结合上文内容,自行理解:

在这里插入图片描述
又告一段落了,不过马上又要见了,哈哈!另外如果你看懂了之前的内容,那么上面这两张图你应该能够自己理解,当作一个小测试吧。


从零开始理解 IEC104 协议之四 —— 工程调试经验总结

洪城小电工 IP 属地:江西

2020.06.10 01:04:45

⑴ 、调试的一般流程

**1 、确定规约版本。**现今一般采用 02 版。

**2 、确定通讯参数。**主站 IP 地址(目的 IP 地址)、远动 IP 地址(源 IP 地址)及它们的子网掩码,网关地址。另源端口和目的端口都是 2404,这是 104 规约的唯一端口号。还有就是远动是 server 端,而调度是 client 端。

说明

注意在配置过程要尽量不要开输入法,配置文件中的字符仅支持半角模式(1 个字符 1 个字节),输入法默认的可能是全角模式(1 个字符 2 个字节)。同时,还需要注意空格的问题,不能多空也不要少空。记住,输入字符时要区分大小写。各类描述尽量少用汉字,避免引发未知错误。新手往往会在这里栽跟头。

**3 、配库。**根据点表、说明书、操作指导书等资料配库。

说明

这步说起来简单,但根据远动软硬件的不同,经常出现各种各样的问题。这里只说一下比较常见的一些较为简单的问题 ——

第一,遥测、遥控的起始点号与主站不一致。主站提供点表一般都是从 0 或 1 开始的顺序号,我们需要确认 0 或 1 对应的实际起始信息对象地址,不同类型报文的信息对象地址范围不能有交叉。

第二,如果出现遥脉值无法上送的情况,可能是因为计数量召唤限定词的冻结命令词为 0,部分主站不支 持。还有就是有些主站不能处理带时标的电度值。

第三,从站中各遥测的数据类型必须保持一致,不能混用。未选用的类型其个数必须设置为 0。

第四,SOE 一般为 7 字节时标,部分老站只支持 3 字节时标。

第五,数据上送类型,主从双方要配置一致。老调度站遥测一般为归一化值,遥信为单点遥信,遥控为单点遥控,SOE 采用短时标或长时标,按实际情况选择;新调度站,遥测一般为短浮点数,遥控和遥控均为单点,SOE 采用长时标。

第六,远动转发系数,在以南瑞科技远动为例,当采用短浮点数上送调度时,这种情况下,需要将测控采集到二次值转换为一次值,转发系数填写直接用后台的标度系数 / 参比因子;基数值填写后台的基础值。采用归一化值上送调度,系数都填 1,基础值都填 0。数据的系数处理就留给调度端进行,调度端的处理方法也是系数采用变电站后台的标度系数 / 参比因子,基值就是后台的基值。另转发系数需要在配置文件中将其使能,方才有效。

其实转发系数各种配置的目的只有一个,将库中的码值转换成调度需要的值。以南瑞科技为例,当短浮点数上送时,实际上是以一次值上送;而用归一化值上送时,实际上是以码值上送。

综上,上述设置只是一般情况,具体需要看调度那边到底需要的是一次值、二次值还是码值。如果数据出 现溢出的情况,还需另行调整。

另外需要注意的是装置上网的遥测值是二次值还是码值,一般来说是二次值,所以需要配置参比因子转换成码值入库。若装置上网的是码值,则可以直接入库。

**4 、远动入网。**网线一般采用一对一方式制作,连接网线将远动接入网络。一般来说,远动都是通过路由器与整个网络进行连接。

5 、检验网络连通性。

先让主站 ping 网关看能否 ping 通,能够 ping 通说明远传通道没有问题。然后让主站 ping 远动,能够 ping 通的话就说明远动和主站间的通道没有问题。

然后再从远动 ping 网关,再 ping 主站。互相 ping 通后,通信一般就没有问题了。这时应该能够看到远动与主站连接的 NET 口的灯会闪烁,表示收到了主站数据。部分型号远动会有收发指示灯,这就更好判断了。

如有双机,一定要做主备机切换试验。

说明

第一类,Ping 网关不通的常见情况如下 ——

第一,有些交换机或路由器的网卡不能自适应收发线序,需要用交叉网线;

第二,子网掩码设置错误;

第三,一般网关的网口是指定的,插错网口将无法 ping 通网关;

第四,网段与其他网卡冲突;

第五,网卡损坏,通过笔记本测试验证即可。

第二类,能 ping 通网关,却 ping 不通主站的常见情况如下 ——

第一,缺少 route 文件或 route 文件配置错误;

第二,路由器未正确设置(10M/100M,全双工 / 半双工),在 100M 全双工的情况一般可以 ping 通主站;

第三,某些操作系统对路由数存在限制,把路由 IP 设置改成网段格式即可;

第四,查看路由的日志,并检查路由器的软件版本是否正确。

第三类,能 ping 通主站,但主站无法建立 TCP 连接的常见情况如下 ——

第一,配置文件中 TCP 模式、端口号、远端 IP 设置不正确;

第二,IP 地址格式不对,如配置时,启动了输入法;

第三,相关进程未启动,这个一般要问研发。

第四,主站问题。将远动机网线插到笔记本,笔记本设置成远动机 IP,ping 通主站后,运行服务器端模拟工具,设置端口号,开始监听,如果收到主站连接,且显示的远端地址与之前调度提供一致,证明主站连接无误,继续检查远动相关配置。如果收不到连接,或者远端地址不一致,主站相关设置错误,主站检查自身设置。常见的有访问地址错误,自身地址错误,端口号错误等。一般修改完成后需要重启才能生效。

**6 、确认报文。**这时可以通过调试软件去看一下报文,到这步一般就没什么大问题了。

部分调度站要求会比较高,那么就要用到规约测试软件,通常会测试总召唤,对时,循环数据的主动上送,四遥,变化遥信(SOE),变化遥测,停止链路,启动链路。根据测试软件不一,使用步骤也略有区别。这个可以单独写一篇,这边就不再深入了。

⑵ 运行

运行中的问题,往往也是多种多样的。事后会发现很多问题原因很简单,排查过程确实历尽曲折。例如主站不下发遥控令,最后原因是发现有遥信点位不断上送;遥信的品质因数不正确,原因是有间隔在检修位或装置位于调试态;遥信误发,原因改造后点位数目超限;还有等等各种情况。所以这里只选一些最常见的情况进行分析。

1 、连接经常中断

Ⅰ 、通道质量差

① 线缆因素

104 协议的传输介质主要是光纤和网线。使用网线测试仪检测网线,使用光功率计及光源检测光纤。

② 网络架构及功能软件因素

SOE 的分辨率应小于 10ms,如能满足此项要求,则可采用 104 规约的对时功能,这也说明了网络通信良好。

通常使用 ping 指令进行初步判断。一般 ping5~10min 中,按 crtl-c 组合键中止。记录 ping 指令的返回内容中的最大 / 最小响应时间,其值除 2 便是该网络的最大、最小延时,它们的差值在 10ms 之内,则符合标准。

③大数据包不能通过

这种情况可以通过大数据包的 ping 命令进行测试,通过其返回内容判断针对大数据包的通信质量。

Window:ping IP 地址 -l300;Linux:ping IP 地址 -s300

Ⅱ、104 规约自身问题

到了这里就需要仔细分析报文,才能判断了。常见有以下几种情况:

1、双方发送和接收序号存在错误如丢失、错序,造成一方判断数据包丢失从而关闭连接。

2、双方没有正确使用 k、w 值。

3、t1 超时未确认,一方主动关闭连接。

2 、不能建立 TCP 连接

在确保 ping 指令正常的情况下,一般是服务端未在监听状态。通过以下操作来查看服务端是否处于监听状态:

服务端查看 2404 端口是否在 listening:nestat -an;

远程查看服务器的 2404 端口是否在 listening:telnet 192.168.1.100:2404

3 、通道正常但无数据收发

常见于远动重启或切机后,主站判断有问题,不发送 U 帧(启动数据传输)。一般拔掉网线可强制主站重连,如果还是不行,只能在主站侧进行处理。


从零开始理解 IEC104 协议之五 —— 数据安全

洪城小电工 IP 属地:江西

2020.06.10 01:48:42

本司未针对变电所综合自动化系统设置网络安全防护。但为了文章完整性会针对以往的经验进行简单介绍。

未进行安全防护的 104 协议数据是明文数据,有被旁路控制、拦截 / 篡改的风险,为抵御黑客、病毒、恶意代码等通过各种形式对系统发起的恶意破坏和攻击,各种网络信息安全防护设备孕育而出。总体原则是安全分区、网络专用、横向隔离、纵向认证。

⑴、安全分区

根据系统中业务的重要性和对一次系统的影响程度进行分区,所有系统都必须置于相应的安全区内;对实时控制系统等关键业务采用认证、加密等技术实施重点保护。

安全 Ⅰ 区:即控制区。电力生产的重要环节、安全防护的重点与核心;直接实现对一次系统运行的实时监控;纵向使用电力调度数据网络或专用通道。典型系统包括调度自动化系统,变电站自动化系统等。

安全 Ⅱ 区:即非控制区。所实现功能为电力生产的必要环节;在线运行,但不具备控制功能,使用电力调度数据网络,与控制区中的系统或功能模块联系紧密。典型系统包括调度员培训模拟系统,继电保护及故障录波信息管理系统,电能量计量系统等。

管理信息大区:是指生产控制大区以外的电力企业管理信息系统的集合。可细化为安全 Ⅲ 区(侧重于生产管理的系统,如调度生产管理系统、调度报表系统、雷电监测系统等)及安全 Ⅳ 区(纯管理的系统,如管理信息系统、办公自动化系统等)。

⑵、网络专用

I 、电力调度数据网与其他网络的物理隔离

电力调度数据网应当在专用通道上使用独立的网络设备组网,采用基于 SDH/PDH 上的不同通道、不同光波长、不同纤芯等方式,在物理层面上实现与电力企业其它数据网及外部公共信息网的安全隔离。

说明:

数字传输系统中,有两种数字传输系列,一种叫 “准同步数字系列”,简称 PDH;另一种叫 “同步数字系列”,简称 SDH。

SDH 的被复接的几个支路是在同一高稳定的时钟控制下,它们的数码率是严格相等的,即各支路的码位是同步的。这时可以将各支路码元直接进行时间压缩,移相后进行复接。

而 PDH 的被复接的几个支路不是在同一时钟控制下,各支路有自己的时钟,它们的数码率由于各自的时钟偏差不同而不会严格相等,即各支路码位是不同步的。这种情况下在复接之前必须调整各支路码速,使之达到严格相等。

两者的区别就在同步的程度上。笼统地说 SDH 的同步是完整的,精确的,而 PDH 的同步是不完整的,不精确的。

另 SDH 与 PDH 均以时分复用(TDM)为基础,就是将一个标准时长(1 秒)分成若干段小的时间段(8000),每一个小时间段(1/8000=125us)传输一路信号。

Ⅱ、实时子网和非实时子网的逻辑隔离

电力调度数据网划分为逻辑隔离的实时子网(数据实时性的要求为秒或毫秒级)和非实时子网(数据实时性的要求为分钟或小时级),分别连接控制区和非控制区。可采用 MPLS-VPN 技术、安全隧道技术、PVC 技术、静态路由等构成子网。

说明:

1 、MPLS-VPN 技术

MPLS-VPN 在大型企业和运营商内部运用的非常广泛,是 MPLS 技术与 VPN 的结合。

MPLS 技术

即多协议标签交换技术,是一种 IP 骨干网技术。MPLS 技术通过为 IP 报文增加标签信息,并且根据标签信息进行转发。标签被压入二层头部之后,三层头部之前,俗称 2.5 层 。

这种技术最初是为了提高转发速度而提出的。与传统 IP 路由方式相比,它在数据转发时,只在网络边缘分析 IP 报文头,而不用在每一跳都分析 IP 报文头,从而节约了处理时间。

其工作流程如下:

首先基于 CEF 技术(思科特快交换技术),将路由器表和 ARP 表转换为 FIB 表(转发信息数据库,包含目标 ip 地址及出接口信息)和 ADJ 表(邻居表,包含源目 MAC 地址)。

当控制层面使用路由协议传递路由条目后,路由器上使用 TDP/LDP(标签分发协议,LDP 为开放协议,TDP 为思科私有协议)为 FIB 表(转发信息数据库)中每一条存在的路由条目均分配一个标签号,装载于 LIB 表(标签信息数据库)中,同时传递给邻居,LIB 中还记录邻居传递到本地标签号;之后路由器基于本地的 FIB 和 LIB 表生成 LFIB(标签转发表),对应一个标签号的最佳路径。

第一跳路由器负责标签的压入,中间路由器基于标签号转发流量,最后一跳路由器负责标签的弹出。

随着 ASIC 技术的发展,路由查找速度已经不是阻碍网络发展的瓶颈。这使得 MPLS 在提高转发速度方面不再具备明显的优势,但其与二层网络转发有很好的兼容性,仍旧得到广泛的应用。

VPN 技术

VPN 属于远程访问技术,简单地说就是利用公用网络架设专用网络。

VPN 通过操作系统的接口直接虚拟出一张网卡,后续整个操作系统的网络通讯都将通过这张虚拟的网卡进行收发。这和任何一个代理的实现思路都差不多,应用层并不知道网卡是虚拟的,这样 VPN 虚拟网卡将以中间人的身份对数据进行加工,从而实现各种效果。具体来说,VPN 是通过编写一套网卡驱动并注册到操作系统实现的虚拟网卡,这样数据只要经过网卡收发就可以进行拦截处理。

通常情况下,VPN 服务器采取双网卡结构,外网卡使用公网 IP 接入 Internet。我们来看看其工作流程:

网络一 (假定为公网 internet) 的终端 A 访问网络二 (假定为公司内网) 的终端 B,其发出的访问数据包的目标地址为终端 B 的内部 IP 地址。

网络一的 VPN 虚拟网卡在接收到终端 A 发出的访问数据包时对其目标地址进行检查,如果目标地址属于网络二的地址,则将该数据包进行封装,封装的方式根据所采用的 VPN 技术不同而不同,同时 VPN 虚拟网卡会构造一个新 VPN 数据包,并将封装后的原数据包作为 VPN 数据包的负载,VPN 数据包的目标地址为网络二的 VPN 服务器的外部地址。

网络一的 VPN 虚拟网卡将 VPN 数据包发送到 Internet,由于 VPN 数据包的目标地址是网络二的 VPN 服务器的外部地址,所以该数据包将被 Internet 中的路由正确地发送到网络二的 VPN 服务器。

网络二的 VPN 服务器对接收到的数据包进行检查,如果发现该数据包是从网络一的 VPN 虚拟网卡发出的,即可判定该数据包为 VPN 数据包,并对该数据包进行解包处理。解包的过程主要是先将 VPN 数据包的包头剥离,再将数据包反向处理还原成原始的数据包。

网络二的 VPN 服务器将还原后的原始数据包发送至目标终端 B,由于原始数据包的目标地址是终端 B 的 IP,所以该数据包能够被正确地发送到终端 B。在终端 B 看来,它收到的数据包就和从终端 A 直接发过来的一样。

从终端 B 返回终端 A 的数据包处理过程和上述过程一样,这样两个网络内的终端就可以相互通讯了。

由于 VPN 虚拟网卡可以对数据进行加工,可以结合下面提到的安全隧道技术对数据加密,也可以和防火墙结合到一起使用。

而 MPLS-VPN 技术实现了跨地域、安全、高速、可靠的数据、语音、图像多业务通信,并结合差别服务、流量工程等相关技术,将公众网可靠的性能、良好的扩展性、丰富的功能与专用网的安全、灵活、高效结合在一起,为用户提供高质量的服务。

2 、安全隧道技术

安全隧道技术提供三个功能:第一是把一个协议封装在另一个协议中,这样不同的协议就能够在同一个 IP 基础设施上进行传输;第二是通过公共的寻址基础设施传输私有寻址的报文,这点其实就类似于 VPN;第三是提供数据的完整性和机密性。

综上来看,安全隧道技术的核心就是协议封装和数据加密。这里主要介绍一下数据加密。

对称加密

加密数据与解密数据使用相同的密钥,这种加密方法称为对称加密。

其特点为:①将原始数据进行切块,逐个进行加密。②加密与解密使用相同密钥,加密解密速度快。

其缺点为:①每一个通信的对象都有一把密钥,如果通信对象过多导致密钥过多。②密钥分发问题,如何保证密钥不被窃取。

非对称加密

加密数据与解密数据使用一组公共 / 私人密钥系统。公共密钥可以广泛的共享和透露,私钥自己保存。

其特点为:加密时使用一种密钥,解密时使用另一种密钥。

其缺点为:加密解密速度慢、时间长,不适用于对大数据进行加密解密。

hash 算法

它能把任意长度的数据、字符加密后得到一个固定长度的特征码。

其特点为:①加密后输出的特征码长度固定;②加密后的特征码只跟数据内容有关,与数据名称无关。③可以用作数据的指纹④得到数据的特征码无法算出原数据的内容。

其缺点为:①相同内容的文件加密后结果相同;②通常随数据一同发出,极易被窃取。

数字证书

数字证书是指在互联网通讯中标志通讯各方身份信息的一个数字认证,人们可以在网上用它来识别对方的身份。

数字证书往往含有以下内容:证书的发布机构、证书的有效期、公钥、证书所有者(Subject)、签名所使用的算法、指纹以及指纹算法。

数字证书的形成:

首先权威证书签发机构(CA),先用非对称加密算法产生一对公私钥。然后生成一个数字证书文件,里面的内容如上文所述,都是明文,简称内容 C。接着对其使用 hash 算法,得到数据指纹 P。然后用私钥对数据指纹 P 进行加密,得到签名信息 S。最后将 C、S 组成一个文件,这就是数字证书了。

数字证书的检验:

具备通信功能的应用程序(如 IE 等)会读取证书中的发布机构,然后会在操作系统中受信任的发布机构的证书中去寻找这个发布机构的证书(即根证书),如果找不到,那说明证书的发布机构存在问题,那么证书也就可能存在问题,程序会给出一个错误信息。

如果在系统中找到了证书发布机构的证书(根证书),那么应用程序就会从根证书中取出公钥,然后对证书里面的指纹和指纹算法用这个公钥进行解密,然后使用这个指纹算法计算证书的指纹,将这个计算的指纹与放在证书中的指纹对比,如果一致,说明证书肯定没有被修改过并且证书是由证书发布机构发布的,证书中的公钥肯定是证书所有机构的。

最后就可以放心的使用这个公钥和证书所有机构进行通信了。

综合运用

上述几种技术,如果单独使用任何一种对数据进行数据加密的话都是不安全的,往往都是各类技术混合使用,互补优缺点使数据的传输更加安全。其通信流程如下:

step1:“客户” 向服务端发送一个通信请求;

step2:“服务器” 向客户发送自己的数字证书。证书中有一个公钥用来加密信息,私钥由 “服务器” 持有;

step3:“客户” 收到 “服务器” 的证书后,它会去验证这个数字证书到底是不是 “服务器” 的,数字证书有没有什么问题,数字证书如果检查没有问题,就说明数字证书中的公钥确实是 “服务器” 的。检查数字证书后,“客户” 会发送一个随机的字符串给 “服务器” 用私钥去加密,服务器把加密的结果返回给 “客户”,“客户” 用公钥解密这个返回结果,如果解密结果与之前生成的随机字符串一致,那说明对方确实是私钥的持有者,或者说对方确实是 “服务器”。

step4: 验证 “服务器” 的身份后,“客户” 生成一个对称加密算法和密钥,用于后面的通信的加密和解密。这个对称加密算法和密钥,“客户” 会用公钥加密后发送给 “服务器”,别人截获了也没用,因为只有 “服务器” 手中有可以解密的私钥。这样,后面 “服务器” 和 “客户” 就都可以用对称加密算法来加密和解密通信内容了。

总结

安全隧道技术原理如上,实践中应用广泛 IPSEC 技术正是基于此,除了不可否认性、数据完整性、数据可靠性,还实现了反重播性。

不可否认即发送的不可否认,当发送方通过私钥产生的数字签名随消息一起发送时,接收方即可使用公钥进行验证。由于发送者拥有的私钥具有唯一性,所以只要通过验证发送对象便不能说自己没有发送,这就好比身份识别。

反重播性就好比接受手机的验证码,每个 IP 只能使用一次,这样可以有效的防止某些黑客进行破译信息。

数据完整性作用在于保护数据,避免被篡改。IPSEC 使用的函数为 Hash,即每个数据包产生一个加密检查和,接收方在打开 Packet 前必须进行检查和,如若不符立即丢弃。

数据可靠性指的是 IPSEC 的加密技术,作用同样是为了保护数据。

3 、PVC 技术

永久虚电路是指两台计算机通过面向连接网络的连接。PVC 能经受计算机的重新自举或电源的波动,从这个意义上说它是永久的,因为它是将路径放在路由表中,而不是建立物理连接。下文首先我们先介绍下虚电路(VC)。

虚电路 (VC) 的组成:

①源和目的主机之间的路径 (即一系列链路和路由器);

②VC 号,沿着该路径的每段链路一个号码;

③沿着该路径的每台路由器中的转发表表项。

虚电路(VC)的传输过程

虚电路网络如下图所示:

在这里插入图片描述
①虚电路的建立:发送方 A 发送含有地址信息的特定的控制信息块(如:呼叫分组),该信息块途经的每个中间结点根据当前的链路使用状况,分配链路,并建立输入和输出的链路映射表,所有中间结点分配的链路的串接形成虚电路(VC)。

②数据传输:发送方 A 发送的所有分组均沿着相同的 VC 传输,分组的发收顺序完全相同。

③虚电路的释放:数据传输完毕,采用特定的控制信息块(如:拆除分组),释放该虚电路。通信的双方都可发起释放虚电路的动作。有此过程的便是交换虚电路(SVC),无此过程的便是永久虚电路(PVC)。

采用虚电路传输的分组数据将在它的首部携带一个 VC 号。因为一条虚电路在每条链路上可能具有不同的 VC 号,所以每台中间路由器必须用一个新的 VC 号替代每个传输分组的 VC 号。 这个新的 VC 号从转发表中获得。转发表如下所示:

在这里插入图片描述

我们再回看网络图:

首先主机 A 请求该网络在它自己与主机 B 之间创建一条虚电路。 同时假定该网络为该虚电路选择路径 A-R1-R2-B,并为这条路径上的这 3 条链路分配 VC 号 12、22 和 32。在这种情况下,当这条虚电路中的分组离开主机 A 时,该分组首部中的 VC 字段的值是 12;当它离开 R1 时该值是 22,而当它离开 R2 时该值是 32。

现在我们对虚电路应该有了一个初步的认识,来看看它的优缺点吧。

虚电路的优点

①数据传输分组无需建立完整的地址信息,对数据量较大的通信传输效率高,分组传输时延固定且较小。

②在正常情况下,分组到达目的结点时不会出现丢失、重复与乱序的现象。

③分组通过虚电路上的每个结点时,结点只需要做差错检测,而不需要做路径选择。

④通信子网中每个结点可以和任何结点建立多条虚电路连接。

虚电路的缺点

①需经历呼叫建立、数据传输和呼叫释放三个过程,对数据量较小的通信效率较低。

②如果虚电路中的某个结点或者线路出现故障,将导致虚电路传输失效,并且经过故障点的数据全部丢失。

虚电路的应用

适用于两端之间长时间的大批量数据传输数据交换。

说明:

计算机自举包括两个过程:加电自检和磁盘引导。①加电自检,当计算机上电时会进行加电自检,以断定它的所有元件都在正确地工作。如果某个元件有故障,显示器上酒会出现报警提示信息(如果显示器也不能正常工作,则以一串嘟嘟声来报警);②磁盘引导,查找装有操作系统的磁盘驱动器。从磁盘加载操作系统的原因有二:一是操作系统升级简单容易,二是使用户拥有选择操作系统的自由。

4 、静态路由技术

静态路由一种路由的方式,路由项由手动配置,而非动态决定。与动态路由不同,静态路由是固定的,不会改变,即使网络状况已经改变或是重新被组态。一般来说,静态路由是由网络管理员逐项加入路由表。其示意图如下:

在这里插入图片描述

我们可以看到网络,由两个路由器 R1 和 R2 组成(接口号和 IP 地址在图中给出),它们分别连接了各自的网络:R1 连接了子网 192.168.0.0/24,R2 连接了子网 192.168.2.0/24 。

在没有配置静态路由的情况下,这两个子网中的计算机 A、B 之间是不能通信的。从计算机 A 发往计算机 B 的 IP 包,在到达 R1 后,R1 不知道如何到达计算机 B 所在的网段 192.168.2.0/24(即 R1 上没有去往 192.168.2.0/24 的路由表),同样 R2 也不知道如何到达计算机 A 所在的网段 192.168.0.0/24,因此通信失败。

此时就需要管理员在 R1 和 R2 上分别配置静态路由来使计算机 A、B 成功通信。

第一步,在 R1 上执行添加静态路由的命令 ip route 192.168.2.0 255.255.255.0

192.168.1.1。它的意思是告诉 R1,如果有 IP 包想达到网段 192.168.2.0/24,那么请将此 IP 包发给 192.168.1.1(即和 R1 的 2 号端口相连的对端)。

第二步,也要在 R2 上执行添加静态路由的命令 ip route 192.168.0.0 255.255.255.0

192.168.1.2。它的意思是告诉 R2,如果有 IP 包想达到网段 192.168.0.0/24,那么请将此 IP 包发给 192.168.1.2(即和 R2 的 3 号端口相连的对端)。

通过上面的两段配置,从计算机 A 发往计算机 B 的 IP 包,能被 R1 通过 2 号端口转发给 R2,然后 R2 转发给计算机 B。同样地,从计算机 B 返回给计算机 A 的 IP 包,能被 R2 通过 3 号端口转发给 R1,然后 R1 转发给计算机 A,完成了一个完整的通讯过程。

静态路由技术优点

①它是最为原始的配置路由方式,纯手工,易管理。

②网络安全保密性高。动态路由因为需要路由器之间频繁地交换各自的路由表,而对路由表的分析可以揭示网络的拓扑结构和网络地址等信息。因此,网络出于安全方面的考虑也可以采用静态路由。

③不占用网络带宽,因为静态路由不会产生更新流量。

静态路由技术缺点

①人工配置,对人员有一定要求,且耗时较多。

②大型和复杂的网络环境通常不宜采用静态路由。一方面,网络管理员难以全面地了解整个网络的拓扑结构;另一方面,当网络的拓扑结构和链路状态发生变化时,路由器中的静态路由信息需要大范围地调整,这一工作的难度和复杂程度非常高。

③当网络发生变化或网络发生故障时,不能自动重选路由,很可能使路由失败。

5 、物理隔离

物理隔离指的是在物理上将内部网络与外部网络分离,使得内部网络无法通过任何直接或者是间接的方式与外部网络用户直接相连。通常采用以下三种技术手段:

①独立网络

即配置两个从用户到服务器的整个网络架构。内网、外网完全隔离。对用户侧来说,就是使用 2 台电脑一台连接外网,一台连接内网,完全独立。

②网络物理隔离卡

利用手动物理开关,使同一时刻仅有一组物理数据载体是生效的,另一组物理数据载体,绝对不可能被读写数据。

网线同一时刻也只能选择一条连通,选外网断开内网,选内网断开外网。并且一条网线仅对应一个数据载体,与另一条网线及数据载体是物理隔离的。

实现方式其实很简单,即同一时间只有一块数据载体(如硬盘)和与其相对应的那块网卡是得电,另一组网卡及数据载体(如硬盘)是失电。

其优点为能够实现两个网络的完全物理隔离;其缺点为操作较为麻烦,转换内外网需要关机然后重新开机并且内外网数据不能直接交换。

当然也可以通过技术手段实现双硬盘的数据交换,例如在网络上设置仅由管理员管理的公用硬盘或通过软盘进行双硬盘的数据交换。不过,这样就牺牲了部分的安全性。

其网络架构如下所示:
在这里插入图片描述
③网闸

网闸实现的是个安全的概念,与防火墙等网络安全设备不同的地方是他阻断通讯的连接,只完成数据的交换,没有业务的连接,攻击就没有了载体,如同网络的 “物理隔离”。网闸其实就是模拟人工数据倒换,利用中间数据倒换区,分时地与内外网连接,但一个时刻只与一个网络连接,保持 “物理的分离”,实现数据的倒换。这就象从前长江上的摆渡船,既没有 “物理的连接” 大桥,也实现了货物的交换。其架构图如下所示:

在这里插入图片描述

下面我们分块来了解它的工作原理:

内网处理单元:包括内网接口单元与内网数据缓冲区。接口部分负责与内网的连接,并终止内网用户的网络连接,对数据进行病毒检测、防火墙、入侵防护等安全检测后剥离出 “纯数据”,作好交换的准备,也完成来自内网对用户身份的确认,确保数据的安全通道;数据缓冲区是存放并调度剥离后的数据,负责与隔离交换单元的数据交换。

外网处理单元:与内网处理单元功能相同,但处理的是外网连接。

隔离与交换控制单元:是网闸隔离控制的摆渡控制,控制交换通道的开启与关闭。控制单元中包含一个数据交换区,就是数据交换中的摆渡船。对交换通道的控制的方式目前有两种技术,摆渡开关与通道控制。摆渡开关是电子倒换开关,让数据交换区与内外网在任意时刻的不同时连接,形成空间断口,实现物理隔离。通道方式是在内外网之间改变通讯模式,中断了内外网的直接连接,采用私密的通讯手段形成内外网的物理隔离。该单元中有一个数据交换区,作为交换数据的中转。

在内外网处理单元中,接口处理与数据缓冲之间的通道,称内部通道 1,缓冲区与交换区之间的通道,称内部通道 2。对内部通道的开关控制,就可以形成内外网的隔离。模型中的用中间的数据交换区摆渡数据,称为三区模型;摆渡时,交换区的总线分别与内、外网缓冲区连接,也就是内部通道 2 的控制,完成数据交换。

网闸的原则有两条:

单一服务:只完成数据文件的交换,只完成文件形式的数据交换。其他的服务一律关闭。

定向交换:在数据交换时指定接收人、发送人。

总结

以上三种方式是进行物理隔离的常用手段。特别注意的是下面两种情况:

一、基于一个硬盘的方案;二、使用了 2 个硬盘但能进行切换(通过键盘、软件、总线、内存这些方式)甚至直接数据互通。这都不属于严格意义上的物理隔离。

6 、逻辑隔离

逻辑隔离是一种通过软硬件的技术手段来保证两个网络之间不能直接进行数据交换的网络架构。需要注意的是,被隔离的两端仍然存在物理上数据通道连线,但通过技术手段保证被隔离的两端没有数据通道,这就是逻辑上隔离。

一般使用协议转换、数据格式剥离和数据流控制的方法,在两个逻辑隔离区域中传输数据,并且传输的方向是可控状态下的单向,不能再两个网络之间直接进行数据交换。

在内部网络对安全性要求不是特别高的情况下,可以采用逻辑隔离。

常见的软件逻辑隔离有:VLAN、虚拟路由、虚拟交换机、MPLS、防火墙、虚拟桌面等;常见的硬件逻辑隔离有:路由器、三层交换机、单硬盘隔离卡等。

①VLAN

VLAN,即虚拟局域网,是将一个物理的 LAN 在逻辑上划分成多个广播域的通信技术。VLAN 内的主机间可以直接通信,而 VLAN 间不能直接通信,从而将广播报文限制在一个 VLAN 内。

VLAN 的划分方式

一般将它划分为两大类,静态和动态。

静态 VLAN 也叫做基于端口的 VLAN。从意思也能理解,它是固定不变的,就是明确指定交换机各端口属于哪个 VLAN 的设定方法。

基于端口的 VLAN 这种方法的优点是 VLAN 成员的定义非常简单明确,直接针对交换机现有的端口设置 VLAN,能够很容易被运维人员理解。缺点是由于需要一个个端口地指定,因此当网络中的计算机数目超过一定数量后,设定操作就会变得烦杂无比。并且,计算机每次变更所连端口,都必须同时更改该端口所属 VLAN 的设定 —— 这显然静态 VLAN 不适合那些需要频繁改变拓扑结构的网络和大型网络。

动态 VLAN 则是根据每个端口所连的计算机,随时改变端口所属的 VLAN。这就可以避免上述的更改设定之类的操作。动态 VLAN 可以大致分为以下 3 类:①基于 MAC 地址的 VLAN

通过查询并记录端口所连计算机上网卡的 MAC 地址来决定端口的所属。假定有一个计算机 MAC 地址为 “A” 被交换机设定为属于 VLAN “1”,那么不论 MAC 地址为 “A” 这台计算机连在交换机哪个端口,该端口都会被划分到 VLAN1 中去。

②基于子网的 VLAN(Subnet Based VLAN)

通过所连计算机的 IP 地址,来决定端口所属 VLAN 的。不像基于 MAC 地址的 VLAN,即使计算机因为交换了网卡或是其他原因导致 MAC 地址改变,只要它的 IP 地址不变,就仍可以加入原先设定的 VLAN。

③基于用户的 VLAN(User Based VLAN)

根据交换机各端口所连的计算机上当前登录的用户,来决定该端口属于哪个 VLAN。这里的用户识别信息,一般是计算机操作系统登录的用户,比如可以是 Windows 域中使用的用户名。这些用户名信息,属于 OSI 第四层以上的信息。

VLAN 基本网络架构示意图如下所示:

在这里插入图片描述
动态 VLAN 只需将上图中右部表格中的端口项更换成 MAC 地址 / IP 地址 / 用户名即可。

汇聚链接(Trunk Link)

若需要实现跨越交换机间的 VLAN 或不同 VLAN 间的数据交换,这就是需要用到汇聚链接。它是能够转发多个不同 VLAN 的通信的端口。汇聚链路上流通的数据帧,都被附加了用于识别属于哪个 VLAN 的特殊信息。

跨越交换机间的 VLAN 网络架构图如下所示:

在这里插入图片描述

其通信过程如下:A 发送的数据帧从交换机 1 经过汇聚链路到达交换机 2 时,在数据帧上附加了表示属于红色 VLAN 的标记。

交换机 2 收到数据帧后,经过检查 VLAN 标识发现这个数据帧是属于红色 VLAN 的,因此去除标记后根据需要将复原的数据帧只转发给其他属于红色 VLAN 的端口。

转发,是指经过确认目标 MAC 地址并与 MAC 地址列表比对后只转发给目标 MAC 地址所连的端口。只有当数据帧是一个广播帧、多播帧或是目标不明的帧时,它才会被转发到所有属于红色 VLAN 的端口。

这里值得一提的是,图中出现了交换机的级连。交换机的级连一般遵循以下原则:应把级连口控制开关放在 MDI(级连口,有的用 Uplink 表示)上,同时用直通线相连。如果交换机没有专用级连口,或者无法使用级连口,必须使用 MDIX(普通)口级连,这时应采用交叉线序。

交换机的级连网线长度不应超过 100m,交换机的级连不应超过 4 级。因交叉线较少用到,故应做特别标记,以免日后误作直通线用,造成线路故障。

不同 VLAN 间的数据交换的网络架构如下图所示:
在这里插入图片描述

其通信过程如下:

⒈计算机 A 从通信目标的 IP 地址(192.168.2.1)得出 C 与本机不属于同一个网段。因此会向设定的默认网关(Default Gateway,GW)转发数据帧。在发送数据帧之前,需要先用 ARP 获取路由器的 MAC 地址。

⒉得到路由器的 MAC 地址 R 后,接下来就是按图中所示的步骤发送往 C 去的数据帧。①的数据帧中,目标 MAC 地址是路由器的地址 R、但内含的目标 IP 地址仍是最终要通信的对象 C 的地址。

⒊交换机在端口 1 上收到①的数据帧后,检索 MAC 地址列表中与端口 1 同属一个 VLAN 的表项。由于汇聚链路会被看作属于所有的 VLAN,因此这时交换机的端口 6 也属于被参照对象。这样交换机就知道往 MAC 地址 R 发送数据帧,需要经过端口 6 转发。

⒋从端口 6 发送数据帧时,由于它是汇聚链接,因此会被附加上 VLAN 识别信息。由于原先是来自红色 VLAN 的数据帧,因此如图中②所示,会被加上红色 VLAN 的识别信息后进入汇聚链路。路由器收到②的数据帧后,确认其 VLAN 识别信息,由于它是属于红色 VLAN 的数据帧,因此交由负责红色 VLAN 的子接口接收。

⒌接着,根据路由器内部的路由表,判断该向哪里中继。由于目标网络 192.168.2.0/24 是蓝色 VLAN,,且该网络通过子接口与路由器直连,因此只要从负责蓝色 VLAN 的子接口转发就可以了。这时,数据帧的目标 MAC 地址被改写成计算机 C 的目标地址;并且由于需要经过汇聚链路转发,因此被附加了属于蓝色 VLAN 的识别信息。这就是图中③的数据帧。

  1. 交换机收到③的数据帧后,根据 VLAN 标识信息从 MAC 地址列表中检索属于蓝色 VLAN 的表项。由于通信目标 —— 计算机 C 连接在端口 3 上、且端口 3 为普通的访问链接,因此交换机会将数据帧除去 VLAN 识别信息后(数据帧④)转发给端口 3,最终计算机 C 才能成功地收到这个数据帧。

综上,进行 VLAN 间通信时,即使通信双方都连接在同一台交换机上,也必须经过:发送方 —— 交换机 —— 路由器 —— 交换机 —— 接收方,这样一个流程。

②虚拟路由器 / 虚拟交换机

谈到虚拟,这本身就是一种软件功能。以最常见的虚拟机为例:在用户看来它们就像是真正的计算机,它具有实际的硬盘驱动器和内存。然而,在现实中,这些元素并没有真实存在。只是,虚拟操作系统环境 (通常是指 VMware vSphere、Citrix Xen Server 或者微软 Hyper-V) 向我们呈现了这些元素。

虚拟路由器(交换机)也是如此,它具有物理路由器(交换机)的所有组成部分,并且它们的工作方式也相同。但是,与虚拟机一样,虚拟路由器(交换机)并不是具有物理连接且真实存在的设备。

虚拟路由器(交换机)的优点在于功能多(SSR、过滤或拦截,数据加解密,流量控制,负载均衡等)且带负载能力强(支持海量链接数量),但数据交互和转发功能弱于物理实体(因为是经过 CPU 转发,无专用芯片)。

虚拟交换机+VLAN 也可以起到一定的隔离作用。但虚拟网络设备对网络管理人员要求很高,一般在电力系统中很难见到。而且不管怎么虚拟,都不能算作物理隔离。

③MPLS 隔离

多协议标签转换(MPLS)之前已经讲过了,使用标签而不是保存在路由表里的网络地址来转发数据包。结合上文理解,这边不再拓展。

可以看作是使用类似于虚电路(VC)的通道来数据进行数据的隔离。

④防火墙

防火墙是位于两个或多个网络之间执行访问控制的软件或硬件系统,他根据访问控制规则对进出的网络的数据流进行过滤,这样能够过滤掉一些攻击,以免其在目标计算机上被执行。它是一种网络安全产品,用于对网络进行安全访问限制,一般用在互联网的边缘,防止外部黑客的攻击。防火墙可以看成是带有安全功能的路由器,早期的防火墙就是在路由器的基础上加入了访问控制功能。

另外防火墙还可以关闭不使用的端口。而且它还能禁止特定端口的流出通信,封锁特洛伊木马。

防火墙也存在一些缺陷,

其一,在正常状况下,所有互联网的数据包软件都应经过防火墙的过滤,这将造成网络交通的瓶颈。这点也可以被黑客利用,黑客会寄出海量的数据包,让防火墙疲于过滤数据包,而使一些合法数据包软件亦无法正常进出防火墙。

其二,防火墙虽然可以过滤互联网的数据包,但却无法过滤内部网络的数据包。因此若有人从内部网络攻击时,防火墙也起不了作用。

其三,本身的操作系统亦可能因一些系统漏洞,使入侵者可以利用这些漏洞绕过防火墙。

综上,防火墙也只能算作逻辑隔离。

⑤虚拟桌面

利用虚拟化技术实现逻辑隔离。利用虚拟化技术,可以让用户在一台计算机上打开一个或多个虚拟桌面,每个虚拟桌面以及该计算机的真实操作系统之间都可以互相隔离,数据不能相互传输。不同的虚拟桌面以及真实系统连接到不同安全级别的网络这样就实现了内外的隔离。

但不同安全级别的网络之间依旧有着物理上的连接,逻辑上使得它们互相之间不能访问,通过指定的协议才能进行数据交换。这仍旧是明显的逻辑隔离。

⑥路由器

这一块我们先来看看交换机与路由器的区别吧。举个简单的例子,一台两块网卡的电脑,当软件配置成路由模式(转发依据为 IP 地址)就是三层路由器;当软件配置成桥接模式(转发依据为 MAC 地址)即是二层交换机。

那么桥接与路由到底有什么区别呢?第一点,分割广播域,控制流量。桥接无法控制广播在不同物理接口之间穿梭,而路由可以进行广播域的划分,从而对广播进行控制。第二点,不同类型的物理接口,不能桥接只能路由。路由器可以对二层封装进行替换,使它们能够互相识别。

综上,交换机只需要查看二层数据帧的头部即可决策转发地址,策略十分简单,可以直接通过硬件芯片实现相应功能,所以可以做到廉价高速,被大量应用在接入层。

而路由器由于需要处理跨网络的连接,必须在接收到完整的 IP 数据包后才能转发数据,路由协议又比较复杂,所以只能使用软件的方式实现相应的功能,要达到高性能只能付出更高的价格。

简而言之,路由器要最短路径送报文,交换机要快速转发提高吞吐量,即路由谋短,交换求快。

⑦三层交换机

上文中我们已经详细讲解了 VLAN 功能,当一个网络的计算机过多,不进行管理,会出现广播风暴,轻则数据丢失,重则整个网络瘫痪。这个时候就需要划分 VLAN,把计算机划分成多块区域进行管理。而不同 VLAN 之间计算通信,就需要路由器单臂路由来实现。对于小型的网络,单臂路由可以应付,但随着 VLAN 之间流量的不断增加,很可能导致路由器成为整个网络的瓶颈,出现掉包、或者通信堵塞。为了解决上述 VLAN 之间数据交换问题,三层交换机应运而生。

三层交换机通俗来说就是二层交换机 + 三层路由模块。那么三层交换机是等同路由器么?

它们还是有很明显的区别的。**三层交换机基于硬件转发,一次路由,多次交换。**基于硬件的转发没有运算 / 判断的过程,输入输出直通。所以转发速度极快,容量极大;一次路由,多次交换的实现形式是通过单独的路由引擎,但是路由引擎并非一直工作,而是在第一次通信的时候通过路由引擎查询路由表,建立转发表,之后的数据不再经过路由引擎,而是通过与二层类似的交换引擎进行转发。

但三层交换机的路由引擎较弱,相比路由器支持的路由协议有限且转发表有限,不适合复杂的多网络互联。因为并不是每一个包都会经过路由引擎,三层交换机的路由策略功能较弱。三层交换机更适合网络结构简单,交换数据量大的情景下使用(例如小型网络的汇聚层)。

而则是**路由器基于软件转发,一次路由,一次交换。**其实路由器的真正功能是计算路由。互联网的理念就是像渔网那样把所有节点互相连接起来,示意图如下:

在这里插入图片描述
像这样不管摧毁哪个节点或者切断哪个线路,数据都可以绕路到达另一个节点,从而达到几乎坚不可摧的目的。

这样其实从一个节点到另一个节点有很多种选择,哪种才是最优的呢?专门有一个数学分支来研究这个问题,称之为图论。而选择路径也有很多种策略,落实到现实世界就是各种路由协议。

如果网络结构不变,最短径路算好放在那就行了。但一旦网络发生变化,比如增加节点或者线路出现故障,那就要路由器来重新计算,这样的工作模式,使得路由器对每一个数据包都进行路由查询,占用了大量资源,所以寻路效率较低,但网络鲁棒性好,而且路由协议复杂,无法通过纯硬件芯片处理,造成大量数据转发时性能比不上三层交换机。因此路由器更适合复杂的多网络互联的核心交换区域。

⑧单硬盘隔离卡

单硬盘隔离卡在隔离的时候数据是放在同一个硬盘上,数据存储没有物理上的断开,虽然可以采用软件技术控制内外网的数据放于不同区域,但是数据还是有物理上的连接,所以不属于物理隔离。

⑶横向隔离

横向隔离是电力二次安全防护体系的横向防线,采用不同强度的安全设备隔离各安全区,特别是生产控制大区与管理信息大区。

电力专用横向单向安全隔离装置作为生产控制大区与管理信息大区之间的必备边界防护措施,是横向防护的关键设备,隔离强度应接近或达到物理隔离。生产控制大区内部的安全区之间应当采用具有访问控制功能的网络设备、防火墙或者相当功能的设施,实现逻辑隔离。

按照数据通信方向电力专用横向单向安全隔离装置分为正向型和反向型。

正向安全隔离装置用于生产控制大区到管理信息大区的非网络方式的单向数据传输。

反向安全隔离装置用于从管理信息大区到生产控制大区单向数据传输,是管理信息大区到生产控制大区的唯一数据传输途径。反向安全隔离装置集中接收管理信息大区发向生产控制大区的数据,进行签名验证、内容过滤、有效性检查等处理后,转发给生产控制大区内部的接收程序。

禁止 E-Mail、WEB、Telent、Rlogin、FTP 等安全风险高的通用网络服务和以 B/S 或 C/S 方式的数据库访问穿越专用横向单向安全隔离装置,仅允许纯数据的单向安全传输。

其网络架构图如下所示:

在这里插入图片描述
正向数据流程(主机 A/192.168.1.1→主机 B/192.168.2.1):

①变换 IP 目的地址,即将 B 机 IP 地址(192.168.2.1)转为其正向虚拟 IP 地址 (192.168.1.2)。

②主机 A 发 ARP 请求,谁有 192.168.1.2 的 MAC 地址,请告诉 192.168.1.1;正向隔离内网侧 ARP 应答,192.168.1.2 的 MAC 是 MAC3-1。

③主机 A 发送 IP 数据包至正向隔离装置内网侧。其数据帧内容如下:

在这里插入图片描述
④正向隔离装置接收 IP 数据包,并进行过滤。基于下列内容:源 MAC,源 IP,目的 IP,协议,源端口,目的端口。

⑤若不合法,丢弃;若合法重新填写 IP 及 MAC。其数据帧内容如下:

在这里插入图片描述
⑥正向隔离外网侧发送 IP 数据包至主机 B。

反向数据流程:

①安全区 Ⅲ 内的数据发送端首先对需发送的数据签名(即数据指纹)然后发给反向隔离装置;

②反向隔离装置接收数据后,进行签名验证,并对数据进行内容过滤、有效性检查等处理;

③将处理过的数据转发给安全区 Ⅰ/Ⅱ 内部的接收程序。

⑷纵向加密

纵向加密认证是电力二次系统安全防护体系的纵向防线。采用认证、加密、访问控制等技术措施实现数据的远方安全传输以及纵向边界的安全防护。

对于重点防护的调度中心、发电厂、变电站在生产控制大区与广域网的纵向连接处应当设置电力专用纵向加密认证装置或者加密网关及相应设施,实现双向身份认证、数据加密和访问控制。

电力系统整体网络架构

安全区 Ⅰ、Ⅱ 所连接的广域网为国家电力调度数据网 SPDnet。SPDnet 为安全区 Ⅰ、Ⅱ 分别提供二个逻辑隔离的 MPLS-VPN。安全区 Ⅲ 所连接的广域网为国家电力数据通信网 SPTnet,SPDnet 与 SPTnet 物理隔离。

纵向加密装置安装位置

安全区 Ⅰ、Ⅱ 接入 SPDnet 时,应配置纵向加密认证装置,实现远方通信的双向身份认证和数据加密。

⑸调度中心网络架构图

在这里插入图片描述
简单介绍一下上文中没有提及的设备及通讯方式:

PSTN

即公用电话交换网,它是一种以模拟技术为基础的电路交换网络。在众多的广域网互联技术中,通过 PSTN 进行互联所要求的通信费用最低,但其数据传输质量及传输速度也最差,同时 PSTN 的网络资源利用率也比较低。

通过 PSTN 可以实现拨号访问外网 / 内网,也可用于两个或多个局域网之间的网络互连。当两个主机或路由器设备需要通过 PSTN 连接时,在两端的网络接入侧(即用户回路侧)必须使用调制解调器(Modem)实现信号的模 / 数、数 / 模转换。其网络架构如下:

在这里插入图片描述
PSTN 可以看成是物理层的一个简单的延伸,没有向用户提供流量控制、差错控制等服务。而且由于 PSTN 是一种电路交换的方式,所以一条通路自建立直至释放,其全部带宽仅能被通路两端的设备使用,即使他们之间并没有任何数据需要传送。因此,这种电路交换的方式不能实现对网络带宽的充分利用。

专线

专线是接在服务商与用户之间架设专用线路,该线路只给用户使用,其他的用户不能连接或使用该线路或者在线路中开辟一条由某一用户独享的专用通道。

那么专线与普通网络有什么区别呢?首先专线的申请需要营业执照,其次专线保证出现故障 3 小时恢复。最典型的特征是专线的上下行速度一致且有固定 IP 地址(可以利用此地址开通网站或 FTP 服务器)

说明:

下面对常见的误区进行下解释:

①我们访问互联网的过程中存在这两种行为:一是上传数据,二是下载数据。上行宽带 (速度) 指的是上传的速度,而下行宽带 (速度) 指的是下载数据是的数度。

非专线网络,上行宽带 (速度) 和下行宽带 (速度) 是不对称的,一般是下行速度大于上行的速度。我们平时所使用的宽带说多 M,都是指的下行宽带,因为我们上网主要是从互联网上下载数据,而上传的数据量要少很多。

②宽带服务商对下行速度和 Windows 电脑上面下行速度的是单位不一样,Windows 电脑的单位是 KBbs, 而宽带运营上的单位是 Kbbs,1B=8b。例如你从宽带运营上那里办理了 10M 的宽带,10Mbps=10240Kbps/8=1280KBps, 所以你在电脑上下载数据是,你的最大的下载速度只有 1280KBps,也就是只有 1M/s 左右的样子。

安全 Web 服务

SSL(SecureSockets Layer)安全协议又叫 “安全套接层协议”。它是在网络传输层之上提供的一种基于 RSA 和对称加密算法的,用于浏览器和 Web 服务器之间的安全连接技术,用来提供两个应用之间通信的保密,可信和身份认证。它被视为 Internet 上 Web 浏览器和服务器的标准安全性措施。

非控制区的接入交换机应当支持 HTTPS 的纵向安全 WEB 服务,采用电力调度数字证书对浏览器客户端访问进行身份认证及加密传输。

这里就不深入了,也没能力深入。实际上打开一些支付网站会弹出数字证书的确认,这就是安全 web 一种表现形式。在 IE 浏览器右下角的一把小锁标识,也代表了是基于加密的安全访问。

IDS

即网络入侵检测系统,这个系统部署在生产控制大区。其安全策略的设置重在捕获网络异常行为、分析潜在威胁以及事后安全审计。其 IDS 探头主要部署在横向、纵向边界以及重要系统的关键应用网段。

好了,结合上文内容自行理解本节中的这张图,这样会使得自己对网络架构清晰不少。

⑹ 电力调度数字证书

电力调度数字证书分三类:

人员证书

当用户在访问系统、进行操作时对其身份进行认证所需要持有的证书;

程序证书

关键应用的模块、进程、服务器程序运行时需要持有的证书;

设备证书

网络设备、服务器主机等,在接入本地网络系统与其它实体通信过程中需要持有的证书;

在对纵向加密装置的调试过程中就会用到上述证书。使用管理工具导出证书请求,将其发给调度人员签发证书,一般需要 30 分钟。当取得设备证书和人员证书后才能开始配置。配置隧道及策略时,还需要用到程序证书。

写在最后

如果能耐心看到这里,相信你对 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](https://i-blog.csdnimg.cn/blog_migrate/49727e40cf881a3ebce82dd1bcc90d95.png =900x)

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](https://i-blog.csdnimg.cn/blog_migrate/e0c835608229632ef37aa2a5086bca83.png =900x)

  • 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 协议详解


IEC 104 电力规约详细解读 (一) - 报文结构、报文分类、ASDU

张二狗和苗翠花已于 2024-04-23 08:08:13 修改

协议一般规则:

  • 平衡方式传输;也就是说每一个过程的会话,没有规定谁从头发起,双方均可

  • 一般情况下配电主站作为 TCP 的客户端,配电终端作为 TCP 的服务器

  • TCP 的默认端口号是 2404

一、报文结构

在这里插入图片描述

APCI 应用规约控制信息;ASDU 应用服务数据单元 (和 101 协议里定义一致);APDU 应用规约数据单元。

  • 启动字符 68H 定义了数据流中的起点

  • APDU 的长度域定义了 APDU 体的长度,它包括 APCI 的四个控制域八位位组和 ASDU。第一个被计数的八位位组是控制域的第一个八位位组,最后一个被计数的八位位组是 ASDU 的最后一个八位位组。ASDU 的最大长度限制在 249 以内,因为 APDU 域的最大长度是 253(APDU 最大值 = 255 减去启动和长度八位位组),控制域的长度是 4 个八位位组。

  • 控制域定义了确保报文不丢失和重复传送的控制信息(也就是发送序列号和接收序列号),报文传输启动 / 停止,以及传输连接的监视等。控制域的计数器机制是根据 ITU-T X.25 标准中推荐的 2.3.2.2.1 至 2.3.2.2.5 来定义的

二、报文分类(APCI)

2.1 S 格式 (Numbered supervisory functions, 编号的监视功能格式)

在这里插入图片描述

S 帧格式报文不用来传送信息,只用来确认对方的发送序列号。比如,双方可以按频率发送,比如接收 8 帧 I 帧回答一帧 S 帧,也可以要求接收 1 帧 I 帧就应答 1 帧 S 帧,当然也可以不要求(S 帧内容示例参考例 1)。因为 S 帧回复确认的序列号在 byte3、byte4 两个字节,并且 byte3 的 bit1 位置固定是 0,所以在使用 S 帧回复确认时,只需在接收报文的发送序列号 + 2 就可以(参考例 2)。


举例 1:68 04 01 00 0A 00 (接收序列号 = 5)举例 2:RECV:  68 FA 6C 67 84 00 0D 1E 03 00 01 00 E8 ... 省略 ...6C 67 低前高后转换成 0x676C 再右移一位就是 0x33B6 最终发送序列号 10 进制也就是 13238SEND:  68 04 01 00 6E 67接受序列号 = 接收报文的发送序列号 + 1 = 13239 = 0x33B7 左移一位 0x676E再低前高后转换 就是 6E 67综上得出其实就是在接收来的报文的发送序列号的 byte1 的 bit2 位置上 + 1,也就成了对应 10 进制上 + 2

2.2 U 格式 (Unnumbered control function, 不编号的控制功能格式)

在这里插入图片描述

在同一时刻,TESTFR, STOPDT 或 STARTDT 中只有一个功能可以被激活。所以 U 帧格式的控制欲第一个字节就只有 6 种情况,分别是 0x83(TESTER 确认)、0x43(TESTER 命令)、0x23(STOPDT 确认)、0x13(STOPDT 命令)、0x0B(START 确认)、0x07(START 命令)

举例:68  04  07  00  00  00	 START 命令

U 帧和 S 帧是没有 ASDU 的,所以这两种类型的报文长度也就是 6 字节

2.3 I 格式 (Information Transmit Format, 编号的信息传输格式)

在这里插入图片描述

遥信、遥测、遥控、遥调、总召、对时等都需要使用 I 格式传送。

举例:后面几篇文章详细说

三、I 格式帧的 ASDU

ASDU(应用服务数据单元),协议原文格式最好去 101 协议去看看,会比较详细。104 和 101 是一样的

在这里插入图片描述

  • 类型标识符(1 byte)。解析来区分属于哪个过程。比如 0x01 单点遥信、0x0D 段浮点遥测

  • 可变结构限定词(1byte)。bit0-bit6 :信息对象的个数 bit7: SQ 信息对象地址是否连续,1 代表连续,也就是信息对象 2 的地址就是信息对象 1 的地址 + 1,信息对象 2 无需再给出它的地址;0 代表不连续,每个信息对象都必须给出自己的地址

  • 传送原因(2byte)。

  • ASDU 公共地址。一般是一个变电站一个地址

  • 信息对象

  • 信息对象地址。也就是点表对应的点位,遥测信息也就是测量点标号

  • 信息元素集。对应的值,按照不同的类型标识去解析

  • 时标。CP56Time2a 格式 7byte

  • 限定词。按照报文类型确定有无限定词。总召唤限定词、复位进行限定词、初始化原因、品质描述词、设置命令限定词

在这里插入图片描述


IEC 104 电力规约详细解读 (二) - 总召唤

张二狗和苗翠花 已于 2024-04-23 08:09:51 修改

1 功能简述

总召唤功能是在初始化以后进行,或者是定期进行总召唤,以刷新主站的数据库。总召唤时请求子站传送所有的过程的变量实际值。定期进行总召唤的周期的是一个系统参数,可以是 15 分钟或者更长的时间。

总召唤的内容包括子站的遥信、遥测等信息。这些信息一般在上报的时候会用 SQ=1 的地址连续的报文进行上报,当然也可以不连续,视情况而定。

2 通信过程

  1. 先由主站向子站发送总召唤命令帧

  2. 子站收到后,如果否定,子站会送否定确认,传输结束;如果确认,则子站回送总召唤确认帧

  3. 子站连续地向主站传送数据。包括但不仅限于不带品质描述词的遥测帧、单点遥信帧、远动终端帧

  4. 子站信息传送完毕后,发送总召唤结束帧,总召唤过程结束

在这里插入图片描述

注意事项:

  1. 为了让通信双方同步实时数据库,由于中断原因引起的重建链路后的第一次总召唤过程不允许被打断

  2. 对于非中断原因(如手动总召唤)引起的总召唤回答可以被高优先级数据打断;回答总召唤应该使用 SQ=1 压缩格式传输

3 报文结构

在这里插入图片描述

4 报文实例解读

这一部分的实例是主站的视角去看,也就是说 SEND 就是主站发送子站接收;RECV 就是子站发送主站接收。

SEND: 68 0E 00 00 00 00 64 01 06 00 01 00 00 00 00 14

  • 启动字符:68H

  • APDU 长度:0EH 14 个字节

  • 控制域四个八位组:00 00 00 00 第一个字节的 bit0 为 0,第三个字节的 bit0 为 0,所以是 I 格式帧,发送序列号 0,接收序列号 0

  • 类型标识:64H CON<100>:= 总召唤命令

  • 可变结构限定词:01H SQ=0 地址不连续 信息元素个数 1, 单个

  • 传送原因:06 00 -0006H <Cause<6>:= 激活

  • ASDU 公共地址:01 00 =0001H 通常为 RTU 地址

  • 第一个信息元素的地址:00 00 00 =000000H

  • 第一个信息元素的值(召唤限定词):14H 固定 20

RECV: 68 0E 00 00 02 00 64 01 07 00 01 00 00 00 00 14

  • 启动字符:68H

  • APDU 长度:0EH 14 个字节

  • 控制域四个八位组:00 00 02 00 第一个字节的 bit0 为 0,第三个字节的 bit0 为 0,所以是 I 格式帧,发送序列号 0,接收序列号 1

  • 类型标识:64H CON<100>:= 总召唤命令

  • 可变结构限定词:01H SQ=0 地址不连续 信息元素个数 1, 单个

  • 传送原因:07 00 -0007H <Cause<7>:= 激活确认

  • ASDU 公共地址:01 00 =0001H 通常为 RTU 地址

  • 第一个信息元素的地址:00 00 00 =000000H

  • 第一个信息元素的值(召唤限定词):14H

RECV: 68 1A 02 00 02 00 03 04 14 00 01 00 01 00 00 01 02 00 00 02 03 00 00 01 04 00 00 02

  • 启动字符:68H

  • APDU 长度:1AH 26 个字节

  • 控制域四个八位组: 02 00 02 00 第一个字节的 bit0 为 0,第三个字节的 bit0 为 0,所以是 I 格式帧,发送序列号 1,接收序列号 1

  • 类型标识:03H CON<3>:= 双点遥信

  • 可变结构限定词:04H SQ=0 地址不连续 信息元素个数 4

  • 传送原因:14 00 -0014H <Cause<20>:= 响应站召唤

  • ASDU 公共地址:01 00 -0001H 通常为 RTU 地址

  • 第一个信息元素的地址:01 00 00 =000001H

  • 第一个信息元素的值:01H 分位

  • 第二个信息元素的地址:02 00 00 =000002H

  • 第二个信息元素的值:02H 合位

  • 第三个信息元素的地址:03 00 00 =000003H

  • 第三个信息元素的值:01H 分位

  • 第四个信息元素的地址:04 00 00 =000004H

  • 第四个信息元素的值:02H 合位

具体双点遥信的报文结构后面在遥信的章节详细说

RECV: 68 2A 04 00 02 00 0D 04 14 00 01 00 01 40 00 00 78 DB 3F 00 02 40 00 00 D8 90 42 00 03 40 00 00 F4 92 42 00 04 40 00 60 50 9A 3F 00

  • 启动字符:68H

  • APDU 长度:2AH 42 个字节

  • 控制域四个八位组: 04 00 02 00 第一个字节的 bit0 为 0,第三个字节的 bit0 为 0,所以是 I 格式帧,发送序列号 2,接收序列号 1

  • 类型标识:0DH CON<13>:= 测量值,短浮点数

  • 可变结构限定词:04H SQ=0 地址不连续 信息元素个数 4

  • 传送原因:14 00 -0014H <Cause<20>:= 响应站召唤

  • ASDU 公共地址:01 00 -0001H 通常为 RTU 地址

  • 第一个信息元素的地址:01 40 00 =004001H =16385 (在 2002 版的协议中规定遥测点位地址范围是 0x4001 ~ 0x5000)

  • 第一个信息元素的值:00 78 DB 3F //Float.intBitsToFloat(0x3fdb7800) =>1.715

  • 第一个信息元素的品质描述词:00H

  • 第二个信息元素的地址:02 40 00 =004002H

  • 第二个信息元素的值:00 D8 90 42 //Float.intBitsToFloat(0x4290d800) =>72.422

  • 第二个信息元素的品质描述词:00H

  • 第三个信息元素的地址:03 40 00 =004003H

  • 第三个信息元素的值:00 F4 92 42 //Float.intBitsToFloat(0x4292f400) =>73.477

  • 第三个信息元素的品质描述词:00H

  • 第四个信息元素的地址:04 40 00 =004004H

  • 第四个信息元素的值:60 50 9A 3F //Float.intBitsToFloat(0x3f9a5060) =>1.206

  • 第四个信息元素的品质描述词:00H

具体短浮点遥测的报文结构后面在遥侧的章节详细说

RECV: 68 0E 06 00 02 00 64 01 0A 00 01 00 00 00 00 14

  • 启动字符:68H

  • APDU 长度:0EH 14 个字节

  • 控制域四个八位组: 06 00 02 00 第一个字节的 bit0 为 0,第三个字节的 bit0 为 0,所以是 I 格式帧,发送序列号 3,接收序列号 1

  • 类型标识:64H CON<100>:= 总召唤命令

  • 可变结构限定词:01H SQ=0 地址不连续 信息元素个数 1 单个

  • 传送原因:0A 00 -000AH <Cause<10>:= 激活终止

  • ASDU 公共地址:01 00 -0001H 通常为 RTU 地址

  • 第一个信息元素的地址:00 00 00

  • 第一个信息元素的值(召唤限定词):14H 固定 20


IEC 104 电力规约详细解读 (三) - 遥信

张二狗和苗翠花已于 2024-04-23 08:11:38 修改

1. 功能简述

遥信,、即状态量,是为了将断路器、隔离开关、中央信号等位置信号上送到监控后台的信息。遥信信息包括:反应电网运行拓扑方式的位置信息。如断路器状态、隔离开关状态;反应一次二次设备工作状况的运行信息,如变压器本体冷却器全停,断路器弹簧未储能等;反应电网异常和一次二次设备异常的事故信息、预告信息等。如差动保护出口,切换继电器同时失磁等

硬遥信和软遥信

  • 硬遥信:测控装置端子排对应的遥信(即有电缆接线的),如断路器、隔离开关信号等。

  • 软遥信:除硬遥信之外的遥信,主要是一些保护事件,如过流段以及自动化嵌入的应用功能模块产生的运行信息。如五防闭锁提示信息等。

全遥信和变位遥信

  • 全遥信:如果没有遥信状态发生变化,测控装置每隔一定周期,定时向监控后台发送本站所有遥信状态信息

  • 变位遥信:当某遥信状态发生改变,测控装置立即向监控后台插入发送变位遥信的信息。后台收到变遥信报文后,与遥信历史库比较后发现不一致,于是提示该遥信状态发生改变

单点遥信、双点遥信

  • 单点遥信:就是用一位表示一个遥信量,比如断路器位置,只采用一个常开辅助接点,值为 1 或 0,用 1 表示合位,0 表示分位

  • 双点遥信:就是用两位表示一个遥信量,需采集动合 / 动断两个辅助接点位置。当动合点值等于 1,且动断点值等于 0,即值为 10,则认为断路器在合位;当动合点值等于 0,且动断点值等于 1,即值为 01,则认为断路器在分位;当两个位置都为 1 或都为 0,则都被认为位置不确定

在这里插入图片描述

2. 通信过程

在这里插入图片描述

3. 报文结构

遥信报文结构总结起来可以分为三种:

  • 信息对象序列(SQ=0),不带时标的单 / 双点信息遥信报文格式

  • 信息对象序列(SQ=0),带长时标的单 / 双点信息遥信报文格式

  • 单个信息中信息元素序列(SQ=1),不带时标的单 / 双点信息遥信报文格式

按照 DL/T 634.5104-2009 规定,带长时标的单 / 双点信息遥信报文并不存在信息元素序列(SQ=1)的情况

遥信报文的类型标识符 TI 分为 01H(单点信息)、03H(双点遥信); 传输原因 COT 分为 03H(突发)、05H(被请求)、14H(响应站召唤); 遥信对象的地址范围在 2022 版协议中规定为 1H~4000H

在这里插入图片描述

在这里插入图片描述

4. 报文实例解读

  • 例 1 SQ=0, 不带时标的单点遥信

    68 0E F8 AD 12 05 01 01 03 00 01 00 A6 01 00 01

  • 启动字符:68H

  • APDU 长度:0EH 14 个字节

  • 控制域四个八位组:F8 AD 12 05 第一个字节的 bit0 为 0,第三个字节的 bit0 为 0,所以是 I 格式帧,发送序列号 22268,接收序列号 649

  • 类型标识:01H CON<1>:= 单点信息

  • 可变结构限定词:01H SQ=0 地址不连续 信息元素个数 1, 单个

  • 传送原因:03 00 -0003H <Cause<3>:= 突发

  • ASDU 公共地址:01 00 =0001H 通常为 RTU 地址

  • 第一个信息元素的地址:A6 01 00 =0001A6H = 第 422 点

  • 第一个信息元素的值:01 合位

  • 例 2 SQ=0, 不带时标的双点遥信

    68 0E 04 00 02 00 03 01 03 00 01 00 01 00 00 02

  • 启动字符:68H

  • APDU 长度:0EH 14 个字节

  • 控制域四个八位组:04 00 02 00 第一个字节的 bit0 为 0,第三个字节的 bit0 为 0,所以是 I 格式帧;发送序列号 2,接收序列号 1

  • 类型标识:03H CON<3>:= 双点信息

  • 可变结构限定词:01H SQ=0 地址不连续 信息元素个数 1, 单个

  • 传送原因:03 00 -0003H <Cause<3>:= 突发

  • ASDU 公共地址:01 00 =0001H 通常为 RTU 地址

  • 第一个信息元素的地址:01 00 00 =000001H = 第 1 点

  • 第一个信息元素的值:02 合位

  • 例 3 SQ=1, 不带时标的双点遥信

    68 10 02 00 02 00 03 83 14 00 01 00 01 01 00 02 02 01

  • 启动字符:68H

  • APDU 长度:10H 16 个字节

  • 控制域四个八位组:02 00 02 00 第一个字节的 bit0 为 0,第三个字节的 bit0 为 0,所以是 I 格式帧;发送序列号 1,接收序列号 1

  • 类型标识:03H CON<3>:= 双点信息

  • 可变结构限定词:83H SQ=1 地址连续 信息元素个数 3

  • 传送原因:14 00 -0014H <Cause<20>:= 响应站召唤

  • ASDU 公共地址:01 00 =0001H 通常为 RTU 地址

  • 第一个信息元素的地址:01 01 00 =000101H = 第 257 点

  • 第一个信息元素的值:02 合位 第 257 点

  • 第二个信息元素的值:02 合位 第 258 点

  • 第三个信息元素的值:01 分位 第 259 点


IEC 104 电力规约详细解读 (四) - 遥测

张二狗和苗翠花已于 2024-04-23 08:12:46 修改

1. 功能简述

遥测,顾名思义就是测量值,由从站上报到主站,有标度化,归一化,短浮点三种类型,再根据是否带有品质描述、是否带试标划分为更细的类型。通常推荐使用短浮点数方式上送。遥测信息对象地址范围为 4001H~5000H.

2. 通信过程

在这里插入图片描述

3. 报文结构

在这里插入图片描述

  • 归一化值。2 字节,最高位 D15 为符号位 0 正数 1 负数;D14~D0 为数据位取值范围 0-32767

  • 短浮点数,4 字节,IEEE STD745 标准定义,不再赘述,如果你是用 Java 开发,可以直接调用 Float.intBitsToFloat(int)

  • 标度化值。

4. 报文实例解读

RECV: 68 12 0E 00 10 00 0D 01 03 00 01 00 02 40 00 00 78 DB 3F 00

  • 启动字符:68H

  • APDU 长度:12H 18 个字节

  • 控制域四个八位组:0E 00 10 00 第一个字节的 bit0 为 0,第三个字节的 bit0 为 0,所以是 I 格式帧,发送序列号 7,接收序列号 8

  • 类型标识:0DH CON<13>:= 带品质描述词的短浮点数

  • 可变结构限定词:01H SQ=0 地址不连续 信息元素个数 1, 单个

  • 传送原因:03 00 -0003H <Cause<3>:= 突发

  • ASDU 公共地址:01 00 =0001H 通常为 RTU 地址

  • 第一个信息元素的地址:02 40 00 =004002H = 第 16836 点

  • 第一个信息元素的值:00 78 DB 3F //Float.intBitsToFloat(0x3fdb7800) =>1.715

  • 第一个信息元素的品质描述词:00 未溢出 / 未被闭锁 / 未被取代 / 当前值 / 有效


IEC 104 电力规约详细解读 (五) - 遥控

张二狗和苗翠花已于 2024-07-17 11:47:35 修改

1. 功能简述

遥控命令用来实现对一个可操作设备状态的改变。在配电自动化中,包括单点命令和双点命令。通常,单点命令用于控制单点信息对象;双点命令用于控制双点信息对象。

2. 通信过程

主站下发遥控选择命令,子站进行遥控选择返校,若成功则回答遥控选择成功报文,若失败则回答失败报文。主站下发取消遥控命令或者遥控执行命令行。字站予以确认。子站皆以报文的镜像确认。

截屏 2024-04-22 18.36.52

3. 报文结构

截屏 2024-04-22 18.46.04

截屏 2024-04-22 18.52.56

4. 报文实例解读

SEND:68 0E 06 00 0A 00 2D 01 06 00 01 00 02 60 00 81

  • 启动字符:68H

  • APDU 长度:0EH 14 个字节

  • 控制域四个八位组:06 00 0A 00

  • 类型标识:2DH CON<45>:= 单点遥控

  • 可变结构限定词:01H SQ=0 地址不连续 信息元素个数 1, 单个

  • 传送原因:06 00 -0006H Cause<6>:= 激活

  • ASDU 公共地址:01 00 =0001H 通常为 RTU 地址

  • 第一个信息元素的地址:02 60 00 =006002H 点号 24578

  • 第一个信息元素的值:81H 遥控选择 控合

RECV:68 0E 0A 00 06 00 2D 01 07 00 01 00 02 60 00 81

  • 启动字符:68H

  • APDU 长度:0EH 14 个字节

  • 控制域四个八位组:0A 00 06 00

  • 类型标识:2DH CON<45>:= 单点遥控

  • 可变结构限定词:01H SQ=0 地址不连续 信息元素个数 1, 单个

  • 传送原因:07 00 -0007H Cause<7>:= 激活确认

  • ASDU 公共地址:01 00 =0001H 通常为 RTU 地址

  • 第一个信息元素的地址:02 60 00 =006002H 点号 24578

  • 第一个信息元素的值:81H 遥控选择 控合

SEND:68 0E 08 00 0C 00 2D 01 06 00 01 00 02 60 00 01

  • 启动字符:68H

  • APDU 长度:0EH 14 个字节

  • 控制域四个八位组:08 00 0C 00

  • 类型标识:2DH CON<45>:= 单点遥控

  • 可变结构限定词:01H SQ=0 地址不连续 信息元素个数 1, 单个

  • 传送原因:06 00 -0006H Cause<6>:= 激活

  • ASDU 公共地址:01 00 =0001H 通常为 RTU 地址

  • 第一个信息元素的地址:02 60 00 =006002H 点号 24578

  • 第一个信息元素的值:01H 遥控执行 控合

RECV:68 0E 0C 00 08 00 2D 01 07 00 01 00 02 60 00 01

  • 启动字符:68H

  • APDU 长度:0EH 14 个字节

  • 控制域四个八位组:08 00 0C 00

  • 类型标识:2DH CON<45>:= 单点遥控

  • 可变结构限定词:01H SQ=0 地址不连续 信息元素个数 1, 单个

  • 传送原因:07 00 -0006H Cause<7>:= 激活确认

  • ASDU 公共地址:01 00 =0001H 通常为 RTU 地址

  • 第一个信息元素的地址:02 60 00 =006002H 点号 24578

  • 第一个信息元素的值:01H 遥控执行 控合

RECV:68 0E 0E 00 08 00 2D 01 0A 00 01 00 02 60 00 01

  • 启动字符:68H

  • APDU 长度:0EH 14 个字节

  • 控制域四个八位组:0E 00 08 00

  • 类型标识:2DH CON<45>:= 单点遥控

  • 可变结构限定词:01H SQ=0 地址不连续 信息元素个数 1, 单个

  • 传送原因:0A 00 -000AH Cause<10>:= 激活结束

  • ASDU 公共地址:01 00 =0001H 通常为 RTU 地址

  • 第一个信息元素的地址:02 60 00 =006002H 点号 24578

  • 第一个信息元素的值:01H 遥控执行 控合


IEC 104 电力规约详细解读 (六) - Java 解析开发要点

张二狗和苗翠花已于 2024-04-22 19:38:52 修改

1. 前言

最近在研究广东电网的 101 与 104 规约,也就是 DL/T634.5101-2002 和 DL/T634.5104-2009。因为要做一个规约解析的软件(基于 Android 平台的),刚开始接触的也是一头雾水,因为没有接触过这方面的知识,所以就在网上搜索各种技术帖,大神经验什么的。

后来在网上找到了一个软件–IEC8705 (报文翻译工具).exe,这个可以解析一些 101(平衡式)的实例,效果图贴一下。

但有些还是解析不了,并且在网上也找不到他的源码,所以就很苦恼。也找到一些 C++ 的源码,但是由于技术有限,我看不懂。下面就和大家来看看我写的这个简单的 Java 语言的规约解析。先贴一下效果图(我就在控制台简单演示一下,没有做可视化界面)。

GitHub 地址:https://github.com/mujave/iec

2. Java 版效果图

3. 规约详细解释

先看一下我总结的关于规约解析的几个图

101 的规约总结

在这里插入图片描述

104 规约总结

在这里插入图片描述

具体的 104 协议解释也可以参考 https://blog.csdn.net/wojiuguowei/article/details/79413142

4. 名词解释

这里所说的名词解释,并不是对一些名词的定义的解释,因为这不是我的专业领域,下面我主要针对报文所代表的名词在代码里怎样解释(解析)说一下。

控制域(平衡式)

在这里插入图片描述

在报文解析中,我就是按照图里面的取值方法对对应的字节进行取值,然后进行逻辑判断,将结果加到解析结果里面,由于后四位所代表的平衡链路功能码在这里是固定的,所以可以采取枚举或者反射(常量) 的方式进行解析

地址域(以 104 的信息体地址为例)

在规约中地址才用的低前高后(低位在前高位在后)的规则

例如:68 10 08 00 02 00 09 01 03 00 01 00 01 40 00 2B 02 00(黄色部分为信息体地址)

在这里插入图片描述

所以 这个信息体的地址为 01 40 00 >0x004001=16385

时标 CP56Time2a

在这里插入图片描述

解析代码如下

/*** 时标CP56Time2a解析** @param b 时标CP56Time2a(长度为7 的int数组)* @return 解析结果*/public static String TimeScale(int b[]) {StringBuilder result = new StringBuilder();int year = b[6] & 0x7F;int month = b[5] & 0x0F;int day = b[4] & 0x1F;int week = (b[4] & 0xE0) / 32;int hour = b[3] & 0x1F;int minute = b[2] & 0x3F;int second = (b[1] << 8) + b[0];result.append("时标CP56Time2a:20");result.append(year).append("-");result.append(String.format("%02d", month)).append("-");result.append(String.format("%02d", day)).append(",");result.append(hour).append(":").append(minute).append(":");result.append(second / 1000 + "." + second % 1000).append("\n");return result.toString();}

遥测量的解析

在 101 的遥测中定义到有三种类型的值,分别是归一化值,标度值,短浮点数,具体的定义大家可以参考 “电力 101/104 规约中遥测量类型转换”,下面我说一下在 Java 中怎么解析这三种类型的值。直接上代码了。

public class Main {public static void main(String[] args) {Telemetry telemetry = new Telemetry();System.out.println(telemetry.Bytes2Float_NVA(0xa4, 0x6a));// 报文数据的为A4 6A(低位在前,高位在后) ,为0x6AA4System.out.println(telemetry.Bytes2Float_SVA(0xa4, 0x6a));// 报文数据的为A4 6A(低位在前,高位在后) ,为0x6AA4System.out.println(telemetry.Bytes2Float_IEEE754("3e0779a6"));//报文数据 A6 79 07 3E = 0x3e0779a6 = 0.1323(IEEE754 短浮点数)http://lostphp.com/hexconvert/}
}/**
* 遥测量解析
*
* @author zhangyu
*/public class Telemetry {/*** 归一化值*/public static float Bytes2Float_NVA(int low, int high) {float fVal;int nva = (high << 8) + low;// 符号位1位,0为正数,1为负数,后面的为补码表示,// 正数的补码和原码相同不需要转换。对于负数,先取反码再加1得到补码的补码,就是原码了。int symbol = (high & 0x80);//符号位:0表示正数,1表示负数if (symbol == 0x80)fVal = -1* (((nva ^ 0xffff) + 1) & 0x7fff);//  (nva ^ 0xffff) + 1 :补码的补码  ,取出后面的15位数据乘上-1得到值else fVal = nva;return fVal / 32767;//这里的32767值的是一个量纲,一般这个参数是主站和从站商定的}/*** 标度化值*/public static float Bytes2Float_SVA(int low, int high) {float fVal;int nva = (high << 8) + low;int symbol = (high & 0x80);//0表示正数,1表示负数if (symbol == 0x80)fVal = -1* (((nva ^ 0xffff) + 1) & 0x7fff);else fVal = nva;return fVal;}/*** 短浮点数** @param data 从低位到高位按顺序* @return*/public static float Bytes2Float_IEEE754(String data) {return Float.intBitsToFloat(Integer.valueOf(data, 16));}
}

对于短浮点数的计算,在 Java 的文档里有这样的说明。

在这里插入图片描述

还有一些 ASDU 里的信息体的解析过程代码,有点多,就不一一贴出来了

代码已经发布到 GitHub,需要的伙伴可以直接下载

5.104 规约解析遇到的一些难题

报文类型的区分

101 报文区分定长和变长两种,而 104 规约都是变长的报文。但是对于 104 来说,其控制域决定了 104 报文分别属于三种类型(I 帧 S 帧 U 帧)。所以在解析 104 到控制域的时候,是在解析 104 的第一个难题。我先说一下我自己的区分逻辑。

在这里插入图片描述

  • 我是用控制域的第一字节去和 3 做位运算(因为和 3 做位运算就可以得到第一字节的 D1/D0 两位),从上面的图中我们可以看到,结果如果是 1 的话就是 S 格式,如果是 3 的话就是 U 格式,其他 的结果就是 I 格式的报文。

  • 第二种方式是我在和一个网友交谈中得到的,他是运用奇数或者偶数来区分的,这里我列一个表格 ,这样的话如果第一个字节是偶数就是 I 帧,否则判断第三字节是 0 就是 U 帧。这样也可以区分报文的类型

但是我认为还是做位运算效率会更高,计算奇偶性还需要用到 % 这样的运算。

类型第一字节第二字节第三字节第四字节
S 帧奇(1)0
I 帧
U 帧000

位运算的运用

在解析规约的时候,我一般都是运用的位运算 (&),这样既可以提高程序的效率,也有助于理解。首先在规约的定义中有很多的一个字节中的不同位代表一个含义,这种时候就运用到了位运算,这样就可以直接将对应位的值提取出来,例如那可变结构限定词这个字节来举个例子。最高位的 D7 代表的是信息元素地址的连续性,其中 0 不连续 1 连续,所以我们只需要拿这个字节和 128 (0x80) 做位运算就可以得到 D7 这一位,如果结果是 10000000 就说明是 1 连续。这个地方更直观一点的判断方法就是 ((B&0x80)>>7)==1? 连续:不连续。

在这里插入图片描述

###时标的解析

在这里插入图片描述

首先时标这里一共有 7 个字节,下面对这几个字节的含义以及解析方法做一下解释:

  • 年 (byte 7): 这里只有后面的 7 位有效,但是第 8 位填充的是 0,所以这一个字节直接转换形成 int 就可以了。

  • 月 (byte 6): 同上

  • 小时 (byte 4): 同上

  • 分钟 (byte 3): 同上

  • 日 (byte 5 [bit 1~5]): 第五字节的后 5 位表示的是日,byte5 & 0x1F 就可以得到 (0x1F = 0001 1111), 例如第五字节是 87 (87 = 0x57 = 0101 0111),其中 010 指的是星期,10111 指的是 day。这里使用 87 & 0x1F 就可以得到 23。使用 87 & 0xE0 就可以得到 64,然后再用这个结果除以 32 就可以得到结果,如果说除以 32 不太理解的话,也可以用结果右移运算 64>>5 也可以得到结果 。

  • 毫秒 (byte 1 and byte 2): 这个地方首先是低前高后的问题 (这个为题不太明白的可以先翻一下下面的第四个问题),( byte 2 << 8 ) + byte 1 ,这个地方我用一个表格说明一下 (例如第一字节是 6E,第二字节是 2A)。

在这里插入图片描述

/**
* 时标CP56Time2a解析
*/
public static String TimeScale(int b[]) {String str = "";int year = b[6] & 0x7F;int month = b[5] & 0x0F;int day = b[4] & 0x1F;int week = (b[4] & 0xE0) / 32;// int week = (b[4] & 0xE0) >> 5;int hour = b[3] & 0x1F;int minute = b[2] & 0x3F;int second = (b[1] << 8) + b[0];str += "时标CP56Time2a:" + "20" + year + "-"+ String.format("%02d", month) + "-"+ String.format("%02d", day) + "," + hour + ":" + minute + ":"+ second / 1000 + "." + second % 1000;return str + "\n";
}/**
* 时间转16进制字符串
*/
public static String date2HStr(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);StringBuilder builder = new StringBuilder();String milliSecond = String.format("%04X", (calendar.get(Calendar.SECOND)* 1000) + calendar.get(Calendar.MILLISECOND));builder.append(milliSecond.substring(2, 4));builder.append(milliSecond.substring(0, 2));builder.append(String.format("%02X", calendar.get(Calendar.MINUTE) & 0x3F));builder.append(String.format("%02X", calendar.get(Calendar.HOUR_OF_DAY) & 0x1F));int week = calendar.get(Calendar.DAY_OF_WEEK);if (week == Calendar.SUNDAY)week = 7;else week--;builder.append(String.format("%02X", (week << 5) + (calendar.get(Calendar.DAY_OF_MONTH) & 0x1F)));builder.append(String.format("%02X", calendar.get(Calendar.MONTH) + 1));builder.append(String.format("%02X", calendar.get(Calendar.YEAR) - 2000));return builder.toString();}

低前高后的问题

这里讲一下低前高后的问题,拿这个 104 规约的信息对象地址举例。例如 34 12 00 这是原报文的字节,再具体解析的时候我们要把它转成 0x001234=4660,其实这里和上面的毫秒的解析方式一样。

在这里插入图片描述

其他链接

  • IEC104 规约详细解读 (一) 协议结构
    https://blog.csdn.net/lin819747263/article/details/112602951

  • 从零开始理解 IEC104 协议之一 ——104 规约帧格式

    https://www.jianshu.com/p/772582a9db11

  • IEC104 协议详解

    https://blog.csdn.net/chenyitao736866376/article/details/99120024


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———响应总召唤


via:

  • 从零开始理解 IEC104 协议之一 ——104 规约帧格式 - 简书
    https://www.jianshu.com/p/772582a9db11

  • 从零开始理解 IEC104 协议之二 —— 基础知识 - 简书
    https://www.jianshu.com/p/8a47871fd38c

  • 从零开始理解 IEC104 协议之三 —— 主要过程中的一些技术细节 - 简书
    https://www.jianshu.com/p/526d6a9931aa

  • 从零开始理解 IEC104 协议之四 —— 工程调试经验总结 - 简书
    https://www.jianshu.com/p/ff486c64cfb6

  • 从零开始理解 IEC104 协议之五 —— 数据安全 - 简书
    https://www.jianshu.com/p/f1478393e931

  • 电力系统104规约帧报文解析<_104报文解析-CSDN博客>
    https://blog.csdn.net/weixin_44462773/article/details/123569280

  • IEC 104电力规约详细解读(一) - 报文结构、报文分类、ASDU_104规约详细介绍及报文解析-CSDN博客
    https://blog.csdn.net/ZhangYu971014/article/details/135889376

  • IEC 104电力规约详细解读(二) - 总召唤_iec104总召唤报文-CSDN博客
    https://blog.csdn.net/ZhangYu971014/article/details/135983190

  • IEC 104电力规约详细解读(三) - 遥信_104xieyi 信息元素值-CSDN博客
    https://blog.csdn.net/ZhangYu971014/article/details/136072736

  • IEC 104电力规约详细解读(四) - 遥测_iec104规约标准 遥测-CSDN博客
    https://blog.csdn.net/ZhangYu971014/article/details/136994209

  • IEC 104电力规约详细解读(五) - 遥控_104遥控-CSDN博客
    https://blog.csdn.net/ZhangYu971014/article/details/138089077

  • IEC 104电力规约详细解读(六) - Java 解析开发要点
    https://blog.csdn.net/ZhangYu971014/article/details/79841555

---------------------------------------------------------------------------------------

  • IEC104协议详解
    https://blog.csdn.net/chenyitao736866376/article/details/99120024

  • 104规约详解
    https://blog.csdn.net/wojiuguowei/article/details/79413142

  • IEC104规约调试
    https://blog.csdn.net/weixin_40449300/article/details/81805782

  • IEC 60870-5-104 详细解读_张二狗和苗翠花的博客-CSDN博客
    https://blog.csdn.net/zhangyu971014/category_12562718.html

  • IEC104协议与示例解析以及模拟工具的使用_iec104协议详解-CSDN博客
    https://blog.csdn.net/qq_53221728/article/details/143267474

  • 详解IEC104 规约【最详细版】_104协议-CSDN博客
    https://blog.csdn.net/changqing1990/article/details/134327980

  • IEC104规约(一)协议结构阐述
    https://www.cnblogs.com/yking/p/17620510.html

  • IEC104规约(二)协议报文解析 - 卷毛七号 - 博客园
    https://www.cnblogs.com/yking/p/17622619.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPS如何快速将数字金额批量转换成中文大写金额,其实非常简单

大家好&#xff0c;我是小鱼。 在日常的工作中经常会遇到需要使用金额大写的情况&#xff0c;比如说签订业务合同时一般都会标注大写金额&#xff0c;这样是为了安全和防止串改。但是很多人也许不太熟悉金额大写的方法和习惯&#xff0c;其它没有关系&#xff0c;我们在用WPS制…

针对超大规模病理图像分析!华中科技大学提出医学图像分割模型,提高干燥综合征诊断准确性

口干、眼干、皮肤干&#xff0c;每天伴有不明原因的肌肉酸痛和全身乏力&#xff0c;如果以上症状你「中招」了&#xff0c;除了考虑冬季天气干燥外&#xff0c;还应该警惕一种常见却总是被我们忽视的疾病——干燥综合征 (Sjgren’s Syndrome, SS)。 干燥综合征是以外分泌腺高度…

本地部署 LLaMA-Factory

本地部署 LLaMA-Factory 1. 本地部署 LLaMA-Factory2. 下载模型3. 微调模型3-1. 下载数据集3-2. 配置参数3-3. 启动微调3-4. 模型评估3-5. 模型对话 1. 本地部署 LLaMA-Factory 下载代码&#xff0c; git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Facto…

[创业之路-199]:《华为战略管理法-DSTE实战体系》- 3 - 价值转移理论与利润区理论

目录 一、价值转移理论 1.1. 什么是价值&#xff1f; 1.2. 什么价值创造 &#xff08;1&#xff09;、定义 &#xff08;2&#xff09;、影响价值创造的因素 &#xff08;3&#xff09;、价值创造的三个过程 &#xff08;4&#xff09;、价值创造的实践 &#xff08;5&…

ASP.NET |日常开发中定时任务详解

ASP.NET &#xff5c;日常开发中定时任务详解 前言一、定时任务的概念与用途1.1 定义1.2 应用场景 二、在ASP.NET中实现定时任务的方式2.1 使用System.Timers.Timer2.2 使用Quartz.NET 三、定时任务的部署与管理3.1 部署考虑因素3.2 管理与监控 结束语优质源码分享 ASP.NET &am…

【unity】【游戏开发】Unity项目一运行就蓝屏报Watch Dog Timeout

【背景】 由于是蓝屏所以没法截屏&#xff0c;总之今天遇到了一开Unity&#xff0c;过一阵就蓝屏的情况&#xff0c;报Watch Dog Timeout。 【分析】 通过任务管理器查看&#xff0c;发现Unity占用率100%&#xff0c;再观察Unity内部&#xff0c;每次右下角出现一个Global I…

如何从 0 到 1 ,打造全新一代分布式数据架构

导读&#xff1a;本文从 DIKW&#xff08;数据、信息、知识、智慧&#xff09; 模型视角出发&#xff0c;探讨数字世界中数据的重要性问题。接着站在业务视角&#xff0c;讨论了在不断满足业务诉求&#xff08;特别是 AI 需求&#xff09;的过程中&#xff0c;数据系统是如何一…

java全栈day20--Web后端实战(Mybatis基础2)

一、Mybatis基础 1.1辅助配置 配置 SQL 提示。 默认在 mybatis 中编写 SQL 语句是不识别的。可以做如下配置&#xff1a; 现在就有sql提示了 新的问题 产生原因&#xff1a; Idea 和数据库没有建立连接&#xff0c;不识别表信息 解决方式&#xff1a;在 Idea 中配置 MySQL 数…

深度学习每周学习总结J9(Inception V3 算法实战与解析 - 天气识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结Inception V1 简介Inception V3 简介1. 设置GPU2. 导入数据及处理部分3. 划分数据集4. 模型构建部分5. 设置超参数&#xff1…

重温设计模式--中介者模式

中介者模式介绍 定义&#xff1a;中介者模式是一种行为设计模式&#xff0c;它通过引入一个中介者对象来封装一系列对象之间的交互。中介者使得各个对象之间不需要显式地相互引用&#xff0c;从而降低了它们之间的耦合度&#xff0c;并且可以更方便地对它们的交互进行管理和协调…

【开源库 | xlsxio】C/C++读写.xlsx文件,xlsxio 在 Linux(Ubuntu18.04)的编译、交叉编译

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 2024-12-20 …

NACA四位数字翼型

NACA四位数字翼型&#xff0c;以NACA 2412为例 第一位数字2 —相对弯度 第二位数字4 —相对弯度所有位置&#xff08;单位化后的&#xff09; 最末两位数字12 —相对厚度 所有NACA四位数字翼型的&#xff08;相对厚度所在的位置&#xff09;

DataX与DataX-Web安装与使用

DataX github地址&#xff1a;DataX/introduction.md at master alibaba/DataX GitHub 环境准备 Linux环境系统 JDK&#xff08;1.8及其以上版本&#xff0c;推荐1.8&#xff09; Python&#xff08;2或者3都可以&#xff09; Apache Maven 3.x&#xff08;源码编译安装…

电子应用设计方案69:智能护眼台灯系统设计

智能护眼台灯系统设计 一、引言 随着人们对眼睛健康的重视&#xff0c;智能护眼台灯成为了越来越多人的选择。本设计方案旨在打造一款功能丰富、护眼效果显著且智能便捷的台灯系统。 二、系统概述 1. 系统目标 - 提供无频闪、无蓝光危害的均匀柔和光线&#xff0c;保护眼睛。…

cesium 常见的 entity 列表

Cesium 是一个用于创建3D地球和地图的开源JavaScript库。它允许开发者在Web浏览器中展示地理空间数据,并且支持多种类型的空间实体(entities)。 Entities是Cesium中用于表示地面上或空中的对象的一种高层次、易于使用的接口。它们可以用来表示点、线、多边形、模型等,并且可…

在Visual Studio 2022中配置C++计算机视觉库Opencv

本文主要介绍下载OpenCV库以及在Visual Studio 2022中配置、编译C计算机视觉库OpenCv的方法 1.Opencv库安装 ​ 首先&#xff0c;我们需要安装OpenCV库&#xff0c;作为一个开源库&#xff0c;我们可以直接在其官网下载Releases - OpenCV&#xff0c;如果官网下载过慢&#x…

【Java基础面试题035】什么是Java泛型的上下界限定符?

回答重点 Java泛型的上下界限定符用于对泛型类型参数进行范围限制&#xff0c;主要有上界限定符和下届限定符。 1&#xff09;上界限定符 (? extends T)&#xff1a; 定义&#xff1a;通配符?的类型必须是T或者T的子类&#xff0c;保证集合元素一定是T或者T的子类作用&…

WPF+MVVM案例实战与特效(四十七)-实现一个路径绘图的自定义按钮控件

文章目录 1、案例效果2、创建自定义 PathButton 控件1、定义 PathButton 类2、设计样式与控件模板3、代码解释3、控件使用4、直接在 XAML 中绑定命令3、源代码获取4、总结1、案例效果 2、创建自定义 PathButton 控件 1、定义 PathButton 类 首先,我们需要创建一个新的类 Pat…

共模电感的工作原理

共模电感也称为共模扼流线圈&#xff0c;是一种抑制共模干扰的器件&#xff0c;它是由两个尺寸相同&#xff0c;匝数相同的线圈对称地绕制在同一个铁氧体环形磁芯上&#xff0c;形成的一个四端器件。当共模电流流过共模电感时&#xff0c;磁芯上的两个线圈产生的磁通相互叠加&a…

外连接转AntiJoin的应用场景与限制条件 | OceanBase SQL 查询改写系列

在《SQL 改写系列&#xff1a;外连接转内连接的常见场景与错误》一文中&#xff0c;我们了解到谓词条件可以过滤掉连接结果中的 null 情形的&#xff0c;将外连接转化为内连接的做法是可行的&#xff0c;正如图1中路径(a)所示。此时&#xff0c;敏锐的你或许会进一步思考&#…