相关文章推荐
忧郁的海龟  ·  JS 实现 ...·  5 月前    · 
细心的骆驼  ·  Python学习—— ...·  1 年前    · 
追风的大熊猫  ·  linux - Gitlab CI 9.5 ...·  1 年前    · 

变电站双网冗余存在的问题及PRP解决方案

摘要: 国内在220kv及以上电压等级的变电站自动化系统中,一般要求网络采用双网星型拓扑。一直以来,如何解决双网运行时数据的不重复不丢失,没有形成统一的标准,由各个厂商自行解决。IEC62439-3 Parallel Redundancy Protocol(PRP) 协议自推出后很好的解决了星型网络冗余的问题,在全球已逐步被推广。国内对此标准也有介绍,但一直没有推广使用。本文重点分析当前双网拓扑运行方式存在的问题,以及PRP相应的解决方案。同时给出基于VxWorks操作系统的软件实现方案,确认可以仅用一个CPU来完成保护功能和PRP协议。PRP协议并不复杂,实现难度也不大,且非常完美的解决了当前变电站冗余网络存在的问题,应该尽快得到推广。

关键词: 双网冗余;星型拓扑;PRP;VxWorks

变电站自动化本质上是一套通过通信方式将测控装置,保护装置等设备的信息纵向上送至SCADA,横向进行联闭锁的系统。通信的可靠性对于系统的可靠性具有至关重要的作用。通信方式随着技术的演变也在不断进步,由早期的串口通信逐步衍化到目前主要采用的以太网方式。国电南自的PS6000系列是国内较早使用以太网进行通信的系统 ,它创新的将IEC103协议以太网化,随后国内主流厂商都开始在IEC103标准上做文章,开发出基于私有以太网103标准的产品 。但非常可惜的是由于IEC103标准一直没有形成标准的网络版本,所以国内各厂商的实现各不相同。

随着对通信可靠性要求的提高,对于220kV及以上的变电站,用户提出需要支持双网冗余设计。在电信领域,一般网络冗余会采用标准的快速生成树(RSTP)协议作为解决方案 。但这个协议适用于环网拓扑,而国内变电站自动化系统一般采用星型拓扑,基本的网络拓扑结构如下图所示:

Figure 1 双网星型拓扑示意图

在这个拓扑结构中的设备都配置了两个以太网口,每个网口都有一个IP地址,两个网络完全独立。这两个IP一般使用不同网络号,相同的主机号,例如网口A:172.20.100.1,网口B:172.21.100.1。但如何解决双网切换时,数据不丢失,不重复,一直没有特别好的解决方案。目前变电站自动化中使用网络传输的基本层级结构如下:

显而易见,冗余功能在越底层实现复杂度越低。国外的保护设备有在物理层实现冗余的方案,如SIEMENS公司的7SJ64系列,装置提供两个以太网口,当装置设置为“Line”模式时,一个网口工作,另一个网口处于备用状态。当监测到工作的网口异常时,自动切换到备用网口。但由于物理链路切换需要时间,所以无法做到无缝切换。同时还存在无法监视备用链路状态的问题,这会导致只有发生切换时,才能发现备用线路存在异常。 在数据链路层实现网络切换,显然是最为合理的解决方案。但由于常规的以太网帧无法标示出冗余报文,必须对以太网帧进行扩展,而这需要相关的国际组织进行标准的制定。而国内在PRP标准出台之前就有双网冗余的需求,所以当时就在网络传输的应用层或者用户应用层实现了冗余,并一直延续至今,成为国内主流的冗余解决方案 。由于国内的方案与PRP方案的重要差别是装置会配置两个独立的IP,所以称为双IP冗余方案。

1 双IP 冗余方案

由于在应用层实现冗余,所以不同的通信协议,不同的SCADA系统实现的方式各不相同。基本可分为双网冷备法,双网热备协议过滤法,双网热备数据库过滤法。

1.1 双网冷备法

两个网口同时仅建立一个TCP/IP连接,当连接中断后,切换到另一个网口。这种方式处理简单,但由于TCP连接中断往往需要很长时间才能判断出来,即使使用了Keepalive特性,一般也需要10多秒的时间,所以无法做到无缝切换。

1.2 双网热备协议过滤法

两个网口同时建立连接,装置在上行方向,仅在一个网口上送变位信息。在下行方向上,SCADA仅在一个网口上下发控制命令。在网口切换时,对于IEC 61850协议,通过EntryID,可以实现上行数据的不丢失不重复,但对于其他协议,如IEC 103等,会导致信息丢失。

在数字化变电站中,对于GOOSE通信的冗余方案在一些企业标准以及论文中都有提及。方案的基本原理都是一致的,即通过比较GOOSE报文中的StNum(状态号)和SqNum(顺序号)的大小关系来丢弃冗余报文。这个算法本身是不严谨的。比如为了丢弃重复报文,算法允许当前报文中顺序号小于上一帧报文,这与标准中定义顺序号字段的目的是相违背的,标准中希望通过这个字段来检测数据的连续性,当发生序号不连续时,装置应该记录下这种异常。

1.3 双网热备数据库过滤法

两个网口同时建立连接,装置在上行方向,两个网口都上送变位信息。当SCADA收到两条信息后,通过对比信息点的序号,以及发生的时间,过滤掉其中一条信息,不写入数据库。在下行方向上,SCADA仅在一个网口上下发控制命令。这种实现方式的优势在于协议无关性,无论IEC103或者IEC61850等网络协议都可以做到数据的不重复不丢失。但它基于的前提条件是:同一条信息不可能在同一时刻发生两次。而且SCADA在做数据对比查找时,会涉及到搜索深度,如果深度比较深,需要消耗大量的CPU资源去对比,如果深度比较浅,可能出现重复数据。

综上所述,无论采用何种方式,对于双IP冗余方案,都无法完美的实现网络切换时数据的不重复,不丢失的要求。同时在使用时有诸多局限性,比如不能解决间隔层装置间相互通信时的数据冗余。同时由于没有统一的标准,各制造商的实现方案各不相同,最终导致在现场应用时,当网络发生切换,经常出现数据丢失或重复的情况。

2 PRP 冗余方案

2.1 PRP 协议介绍

2008年,国际电工协会发布了IEC 62439—高可用性自动化网络协议标准。其中,IEC 62439-3发布的并行冗余协议(Parallel Redundancy Protocol, PRP)以并行方式,从理论上实现了零自愈时间和零丢包率的无缝切换效果。

PRP协议适用于星型拓扑的双网冗余,完美支持国内变电站自动化当前主流的网络拓扑结构。由于它与HSR在一个标准体系中,所以常常被联系在一起。其实两个协议的应用场景完全不同,实现方式差异很大。所以完全可以独立开发其中的某个冗余协议,而不需要同时支持。对于HSR协议,目前一般推荐使用FPGA去实现,使用CPU无法满足实时性的要求。而对于PRP协议,完全可以使用CPU来实现,不需要额外的FPGA。这样对于一些有成本压力的保护装置,完全可以用一个CPU完成保护功能和PRP协议。后文中会介绍使用MPC8313实现PRP协议的案例。

PRP协议中一般要求装置每2秒发送一个SUPERVISION 报文,这个报文主要便于做链路状态的监视,可以监视出各个节点的链路状态。这个功能对SCADA非常有用,可以及时发现各个节点的通信状态。

PRP协议中定义了两种模式:Duplicate-Discard-Mode和Duplicate-Accept-Mode。装置一般来说只要支持Duplicate-Discard-Mode即可,Duplicate-Accept-Mode 主要是用来做测试用。并无实际的使用场景。

2.2 PRP 软件实现方案

要实现PRP协议,在硬件上,装置必须支持两个独立的MAC。目前主流的CPU一般都有两个及以上的MAC,所以主要的工作在软件实现上。提出在应用层实现PRP协议,这个方案违背了PRP协议规定的层次,标准定义如下:

Figure 2 PRP网络拓扑和节点结构

从图中的层次结构中可以看出,PRP协议是实现在数据链路层的。它用两个DANP节点描述了PRP的主要工作原理:在发送方向将上层的数据拷贝一份,分别发往两个网口;在接收方向,两个网口分别收到数据后,由LRE (Link Redundancy Entity) 实现过滤,最终仅一份数据被发送给上层。

从图中可以看出,PRP协议的实现相对来说并不复杂,发送方向仅需要把数据拷贝一份后发往不同的网口即可。接收方向上,首先通过MAC地址搜索到相应的节点,然后对比报文中序列号与之前存储的序列号,如果能找到,说明是重复报文,丢弃。否则是新的报文,提交给上层。基本的数据结构定义如下:

typedef struct

UINT32 nSeqNumber; //! store the seq number

UINT32 nEntryForgotTime; //! 400ms

}tEntry;

typedef struct

BOOL bUsed;

UINT16 nIndex;

UINT8 nMacAdr[6];

tEntry sEntry[20]; //! The entry of the history

}tNodesTable;

static tNodesTable m_NodesTable[100];

考虑到性能,一般在搜索时,会采用一些搜索算法,比如HASH等,论文中详细描述了一种丢弃算法。在变电站的应用环境里,由于保护装置需要互相通信的节点有限,所以搜索循环的次数也有限。所以不建议使用太复杂的搜索算法,从测试的效果看,仅用最简单的循环搜索,对系统的性能影响也不大。

2.3 基于VxWorks 的实现

Vxworks 是风河公司开发的一款嵌入式实时操作系统,目前很多保护产品都是基于此操作系统提供的TCP/IP协议栈来实现相关的以太网通信协议。

Vxworks定义了一套MUX接口层,用来实现协议于硬件的分离,基本的定义如下:

Figure 3 MUX 与 OSI网络模型

从图中可以看出MUX与PRP的层次正好重合,所以可以使用这个层次的接口来实现PRP协议。在发送方向,可以修改muxSend()函数,将数据发送到两个网口上。在接收方向上,通过muxBind(),将两个网口注册一个接收回调函数。在回调函数内通过上文提到的过滤算法,将冗余报文过滤掉。

PRP协议需要在正常的以太网帧的尾部额外增加6个字节,如Figure 1所示。由于标准的以太网帧长为1518,Vxworks协议栈中,当数据到达MUX层时,最大的长度就是1518。如果在muxSend函数中再增加6个字节会导致超过以太网帧长限制,这样会导致部分交换机或者设备会无法转发或接收以太网帧。需要将宏定义ETHER_MAX_LEN 从1518改为1512,那么上层数据到达MUX层时,最大长度是1512,从而满足以太网帧长的要求。

Figure 4 RCT的以太网帧