周建新 董 超
(国电南瑞科技股份有限公司,江苏 南京 210061)
增强型多叉树递归法在计算遥信中的应用
周建新 董 超
(国电南瑞科技股份有限公司,江苏 南京 210061)
分析了当前变电站采用的全遥信计算法的优缺点,提出了增强型多叉树递归法,将其变化应用到实际计算中,计算的同时时刻检测失步,保证数据和现场运行情况的完全一致,并将具体算法和具体变量用C语言实现。
增强型多叉树递归法;计算遥信;变量
在变电站自动化系统中,遥信是一个最基本、最重要的信息元素。远动设备通过该信息的实时展现,将变电站的运行状态及时反映到变电站当地后台和调度自动化运行主站。随着大量智能化变电站的投运,变电站内各种智能应用急剧增加,如事故总合并、程序化控制和智能告警等,这些应用均需要用到遥信合并功能,即或遥信;又比如对于很多高压分相开关,其位置的合并上送就是与遥信功能。
一些传统的自动化系统常用全遥信计算法来进行遥信的与或非计算。这种计算方法简单,便于编程和理解,但其缺陷也是很明显的:一是其产生的计算遥信的SOE时标只能采用计算时的系统时标,不能判断究竟是哪个信号触发了该计算遥信,不利于后期的事故分析和排查;二是鉴于系统运转频率有限,对于一些保护上送的瞬动信号,在一个全遥信扫描周期内,该信号变位又复归了,这样系统将不能检索到该遥信变化,从而丢失计算遥信,影响调度的事故告警和判断。
这样的计算方法已不适合现在变电站的运行需求,本文介绍的多叉树递归法,就是使用参与运算的源遥信的COS和SOE分别产生计算结果遥信的COS和SOE,其中SOE的时标使用符合条件的源遥信的SOE时标,同时为纠正小概率信号丢失事件而导致的信号不同步问题,采用全遥信增补的增强型算法,这样既保证了时标的一致性和事件计算的及时性,也自动填补了各系统可能存在的漏洞。
2.1 算法实现
可假设结果遥信为根节点,其子节点为一个个相互独立的源遥信,记为一个数据集R={R1,R2,R3,…,Rn},其中n∈(1,N),Rn可为其他计算遥信的结果遥信的根节点,其源遥信数据集为Rn={r1,r2,r3,…,rk},其中k∈(1,K)。节点之间的关联逻辑就是需要计算的各种运算逻辑。
具体到特定系统,我们必须根据设定的参数,对系统每个节点的每个遥信分别进行标识,确定其是否是参与计算的子节点。即对系统的每个信号都根据计算遥信参数表进行参数标识,记为andYxMark、notYxMark、orYxMark。也就是在后面的计算中,通过分别检索这3个标识来确定当前遥信是否参与遥信计算。为便于迅速查找源信号状态来判断当前计算遥信是否存在失步状态,也就是判断当前结果遥信状态是否和源遥信状态保持逻辑一致,并在失步时能及时补全信号,还要增设源遥信的COS和SOE状态记录变量:CosState、SoeState。针对每个结果遥信也必须设定如下变量:结果遥信的COS状态tYxCosState,结果遥信的SOE状态tYxSoeState,结果遥信的全数据状态tYxState。
2.2 变量初始化
在系统初始化时,必须对计算遥信的各个原始变量进行初始化。由于系统采集全各个信号的状态需要一定的时间,故需根据各自系统的特性,预留一定的空余时间,来躲避可能的中间态。系统稳定运行后,再进行计算遥信的变量初始化,否则就会出现多余的中间态过程。在初始化时,首先要将每个源遥信的CosState和SoeState根据实际的遥信状态进行赋初值,然后根据各自的计算逻辑计算每个结果遥信的初值。在对结果遥信赋值的同时,也必须对结果遥信的tYxCosState、tYxSoeState这两个变量赋相同的初值。
2.3 算法应用
在实际运行的系统中,只要在系统的COS和SOE入库函数中增加一个钩子函数,便能将系统的所有COS和SOE拷贝一份到计算逻辑中,同时也能保证产生的结果遥信再作为源遥信参与其他计算遥信的计算,也就是递归调用。由于SOE和COS的计算逻辑一致,故下面以SOE为例进行说明。
2.3.1 与逻辑
在接收到系统的一个SOE时,通过判断andYxMark中相关的位置,判断该遥信是否参与与逻辑计算。取出SOE的状态,先赋值源遥信的SoeState态,再根据源遥信的状态不同,分别计算结果遥信的状态。当源遥信的SOE状态为0时,再判断现阶段结果遥信的tYxSoeState态,如是合位,也就是状态为1,则直接产生结果遥信的0态SOE,其SOE的时标取该源遥信SOE的时标并入库,同时将结果遥信的tYxSoeState置0,如结果遥信的tYxSoeState已经是0,说明已经有其他源遥信状态为0的遥信将该结果遥信置0了,则直接丢弃该源遥信的分位SOE;当源遥信的SOE状态为1时,再判断现阶段结果遥信的tYxSoeState态,如是分位,则检索对应结果遥信的所有源遥信的SoeState态,如果其他所有源遥信的SoeState态都已经是合位,则产生结果遥信的1态SOE,其SOE的时标取该源遥信SOE的时标并入库,同时将结果遥信的tYxSoeState置1,否则直接丢弃源遥信的合位SOE。
2.3.2 或逻辑
和与逻辑一样,在接收到系统的一个SOE时,也是根据源遥信的状态不同,分别计算结果遥信的状态。当源遥信的SOE状态为1时,再判断现阶段结果遥信的tYxSoeState态,如是分位,也就是状态为0,则直接产生结果遥信的1态SOE,其SOE的时标取该源遥信SOE的时标并入库,同时将结果遥信的tYxSoeState置1,如结果遥信的tYxSoeState已经是1,说明已经有其他源遥信状态为1的遥信将该结果遥信置1了,则直接丢弃该源遥信的合位SOE;当源遥信的SOE状态为0时,再判断现阶段结果遥信的tYxSoeState态,如是合位,则检索对应结果遥信的所有源遥信的SoeState态,如果其他所有源遥信的SoeState态都已经是分位,则产生结果遥信的0态SOE,其SOE的时标取该源遥信SOE的时标并入库,同时将结果遥信的tYxSoeState置0,否则直接丢弃源遥信的分位SOE。
2.3.3 非逻辑
非逻辑计算则相对简单,因其只是一对一的取反而已。在钩子函数获得一个COS或SOE时,只需判断结果遥信的tYxCosState或tYxSoeState,如其现在状态与该源遥信的状态相同,则直接产生结果遥信的COS或SOE,其时标取源遥信的时标,状态与源遥信的状态相反。
2.3.4 失步判断
在系统正常运行时,以上3种计算逻辑是可以根据各源遥信的变化来正确产生各结果遥信的,但具体到变电站实际运行中,如果只有这些逻辑计算还是远远不够的,很可能会出现系统计算逻辑失步的隐患。这是因为电力系统是个十分复杂的综合体系,是由若干个子系统融合而来,任何一个环节的失误,都会带来致命的问题。对于本文的遥信计算逻辑而言,就是有可能会出现源遥信的COS或SOE的丢失,而源遥信的丢失必然会导致结果遥信的计算错误。因此本文提出了这种增强型的多叉树算法,在实际系统中增加系统全遥信的检索比对,检查是否有源遥信的变化数据的丢失,及时修正补充计算逻辑,最大限度地确保失步后在保证正确的情况下最短时间内恢复同步计算。虽然与或非的计算逻辑不同,但全数据的比对的方法是一致的,本文只以与遥信的同步判断为例进行说明。
判断是否失步还需要分结果遥信是否失步和源遥信是否失步。判断结果遥信是否失步,先检索该结果遥信对应的源遥信的全遥信状态,只要有一个源遥信的状态为0,则该结果遥信的理论状态就应该是0,否则就是1,将该状态记录为CalState。然后再获取该结果遥信的实际状态,记为tYxState,将结果遥信的CalState、tYxState、tYxCosState、tYxSoeState相互对比,理论上这些都应该保持在同一状态,否则记为失步标识LostStateFlag,同时记下失步时间LostStateTime。判断失步后,还必须等待一定的时间再采取同步措施。这是为给失步的遥信预留自动同步的时间,这主要是基于系统中会出现COS或SOE延时入库的问题,以防我们强制同步后延时的COS或SOE又到达了,导致计算遥信不准确或者再失步。在等待同步的时间内,必须实时检测CalState、tYxState、tYxCosState、tYxSoeState这4个标识,如同步了,则取消失步标识LostStateFlag,中断该判同步过程。如在规定时间内没有自动同步,则强制同步,取消失步标识,将CalState的状态强制同步给tYxState、tYxCosState、tYxSoeState,并更新数据库中结果遥信的全遥信状态。
源遥信失步判断的方法原理和结果遥信判断方法是一致的。先取得源遥信的全遥信状态,记为BitState,再和该源遥信的CosState、SoeState对比,只要出现不一致的现象,则记为源遥信失步LostStateFlag,同时记下失步时间。同样地,在出现源遥信失步的情况下,在强制同步前,也必须有一定的延时,来避免系统或网络延时导致的异常。在等待同步的时间内,如果出现BitState、CosState、SoeState一致的情况,则取消失步标识,中断该判同步过程。如在规定时间内没有自动同步,则强制同步,将源遥信的全态BitState赋给CosState和SoeState,同时取消失步标识。
这种变化数据产生计算遥信的变化数据,全数据检索同步的增强型多叉树递归法在系统的计算遥信算法中,相较于一般的全遥信计算法,确保了在没有变化数据丢失的情况下,计算遥信能确保及时准确地反映到系统中,且SOE的时标就是触发该计算遥信的源遥信的时标,这对于智能告警和各种高级应用是至关重要的。而且就算出现变化数据丢失导致系统计算逻辑失步的情况,该方法也能在可容忍时间内恢复同步。该算法本身简单合理,便于理解和编程实现,对系统的软硬件需求较低,且也可以在几乎不改动系统程序架构的情况下,顺利地移植到任何老系统中。
[1]徐孝凯.数据结构实用教程(C/C++描述)[M].清华大学出版社,2002
[2](美)埃利斯·霍罗维茨,(美)萨尔塔·萨尼,(美)狄尼斯·梅坦.用C++描述数据结构[M].周维真,张海藩,译.国防工业出版社,1997
[3]谭浩强,刘炳文.C++程序设计教程[M].中国科学技术出版社,1996
2014-06-23
周建新(1975—),男,江苏泰兴人,工程师,研究方向:变电站自动化控制系统通信控制软件研究开发。
董超(1986—),女,江苏金坛人,助理工程师,研究方向:电力系统自动化研究开发。