周建新 董 超
(國電南瑞科技股份有限公司,江蘇 南京 210061)
增強(qiáng)型多叉樹遞歸法在計(jì)算遙信中的應(yīng)用
周建新 董 超
(國電南瑞科技股份有限公司,江蘇 南京 210061)
分析了當(dāng)前變電站采用的全遙信計(jì)算法的優(yōu)缺點(diǎn),提出了增強(qiáng)型多叉樹遞歸法,將其變化應(yīng)用到實(shí)際計(jì)算中,計(jì)算的同時(shí)時(shí)刻檢測失步,保證數(shù)據(jù)和現(xiàn)場運(yùn)行情況的完全一致,并將具體算法和具體變量用C語言實(shí)現(xiàn)。
增強(qiáng)型多叉樹遞歸法;計(jì)算遙信;變量
在變電站自動化系統(tǒng)中,遙信是一個(gè)最基本、最重要的信息元素。遠(yuǎn)動設(shè)備通過該信息的實(shí)時(shí)展現(xiàn),將變電站的運(yùn)行狀態(tài)及時(shí)反映到變電站當(dāng)?shù)睾笈_和調(diào)度自動化運(yùn)行主站。隨著大量智能化變電站的投運(yùn),變電站內(nèi)各種智能應(yīng)用急劇增加,如事故總合并、程序化控制和智能告警等,這些應(yīng)用均需要用到遙信合并功能,即或遙信;又比如對于很多高壓分相開關(guān),其位置的合并上送就是與遙信功能。
一些傳統(tǒng)的自動化系統(tǒng)常用全遙信計(jì)算法來進(jìn)行遙信的與或非計(jì)算。這種計(jì)算方法簡單,便于編程和理解,但其缺陷也是很明顯的:一是其產(chǎn)生的計(jì)算遙信的SOE時(shí)標(biāo)只能采用計(jì)算時(shí)的系統(tǒng)時(shí)標(biāo),不能判斷究竟是哪個(gè)信號觸發(fā)了該計(jì)算遙信,不利于后期的事故分析和排查;二是鑒于系統(tǒng)運(yùn)轉(zhuǎn)頻率有限,對于一些保護(hù)上送的瞬動信號,在一個(gè)全遙信掃描周期內(nèi),該信號變位又復(fù)歸了,這樣系統(tǒng)將不能檢索到該遙信變化,從而丟失計(jì)算遙信,影響調(diào)度的事故告警和判斷。
這樣的計(jì)算方法已不適合現(xiàn)在變電站的運(yùn)行需求,本文介紹的多叉樹遞歸法,就是使用參與運(yùn)算的源遙信的COS和SOE分別產(chǎn)生計(jì)算結(jié)果遙信的COS和SOE,其中SOE的時(shí)標(biāo)使用符合條件的源遙信的SOE時(shí)標(biāo),同時(shí)為糾正小概率信號丟失事件而導(dǎo)致的信號不同步問題,采用全遙信增補(bǔ)的增強(qiáng)型算法,這樣既保證了時(shí)標(biāo)的一致性和事件計(jì)算的及時(shí)性,也自動填補(bǔ)了各系統(tǒng)可能存在的漏洞。
2.1 算法實(shí)現(xiàn)
可假設(shè)結(jié)果遙信為根節(jié)點(diǎn),其子節(jié)點(diǎn)為一個(gè)個(gè)相互獨(dú)立的源遙信,記為一個(gè)數(shù)據(jù)集R={R1,R2,R3,…,Rn},其中n∈(1,N),Rn可為其他計(jì)算遙信的結(jié)果遙信的根節(jié)點(diǎn),其源遙信數(shù)據(jù)集為Rn={r1,r2,r3,…,rk},其中k∈(1,K)。節(jié)點(diǎn)之間的關(guān)聯(lián)邏輯就是需要計(jì)算的各種運(yùn)算邏輯。
具體到特定系統(tǒng),我們必須根據(jù)設(shè)定的參數(shù),對系統(tǒng)每個(gè)節(jié)點(diǎn)的每個(gè)遙信分別進(jìn)行標(biāo)識,確定其是否是參與計(jì)算的子節(jié)點(diǎn)。即對系統(tǒng)的每個(gè)信號都根據(jù)計(jì)算遙信參數(shù)表進(jìn)行參數(shù)標(biāo)識,記為andYxMark、notYxMark、orYxMark。也就是在后面的計(jì)算中,通過分別檢索這3個(gè)標(biāo)識來確定當(dāng)前遙信是否參與遙信計(jì)算。為便于迅速查找源信號狀態(tài)來判斷當(dāng)前計(jì)算遙信是否存在失步狀態(tài),也就是判斷當(dāng)前結(jié)果遙信狀態(tài)是否和源遙信狀態(tài)保持邏輯一致,并在失步時(shí)能及時(shí)補(bǔ)全信號,還要增設(shè)源遙信的COS和SOE狀態(tài)記錄變量:CosState、SoeState。針對每個(gè)結(jié)果遙信也必須設(shè)定如下變量:結(jié)果遙信的COS狀態(tài)tYxCosState,結(jié)果遙信的SOE狀態(tài)tYxSoeState,結(jié)果遙信的全數(shù)據(jù)狀態(tài)tYxState。
2.2 變量初始化
在系統(tǒng)初始化時(shí),必須對計(jì)算遙信的各個(gè)原始變量進(jìn)行初始化。由于系統(tǒng)采集全各個(gè)信號的狀態(tài)需要一定的時(shí)間,故需根據(jù)各自系統(tǒng)的特性,預(yù)留一定的空余時(shí)間,來躲避可能的中間態(tài)。系統(tǒng)穩(wěn)定運(yùn)行后,再進(jìn)行計(jì)算遙信的變量初始化,否則就會出現(xiàn)多余的中間態(tài)過程。在初始化時(shí),首先要將每個(gè)源遙信的CosState和SoeState根據(jù)實(shí)際的遙信狀態(tài)進(jìn)行賦初值,然后根據(jù)各自的計(jì)算邏輯計(jì)算每個(gè)結(jié)果遙信的初值。在對結(jié)果遙信賦值的同時(shí),也必須對結(jié)果遙信的tYxCosState、tYxSoeState這兩個(gè)變量賦相同的初值。
2.3 算法應(yīng)用
在實(shí)際運(yùn)行的系統(tǒng)中,只要在系統(tǒng)的COS和SOE入庫函數(shù)中增加一個(gè)鉤子函數(shù),便能將系統(tǒng)的所有COS和SOE拷貝一份到計(jì)算邏輯中,同時(shí)也能保證產(chǎn)生的結(jié)果遙信再作為源遙信參與其他計(jì)算遙信的計(jì)算,也就是遞歸調(diào)用。由于SOE和COS的計(jì)算邏輯一致,故下面以SOE為例進(jìn)行說明。
2.3.1 與邏輯
在接收到系統(tǒng)的一個(gè)SOE時(shí),通過判斷andYxMark中相關(guān)的位置,判斷該遙信是否參與與邏輯計(jì)算。取出SOE的狀態(tài),先賦值源遙信的SoeState態(tài),再根據(jù)源遙信的狀態(tài)不同,分別計(jì)算結(jié)果遙信的狀態(tài)。當(dāng)源遙信的SOE狀態(tài)為0時(shí),再判斷現(xiàn)階段結(jié)果遙信的tYxSoeState態(tài),如是合位,也就是狀態(tài)為1,則直接產(chǎn)生結(jié)果遙信的0態(tài)SOE,其SOE的時(shí)標(biāo)取該源遙信SOE的時(shí)標(biāo)并入庫,同時(shí)將結(jié)果遙信的tYxSoeState置0,如結(jié)果遙信的tYxSoeState已經(jīng)是0,說明已經(jīng)有其他源遙信狀態(tài)為0的遙信將該結(jié)果遙信置0了,則直接丟棄該源遙信的分位SOE;當(dāng)源遙信的SOE狀態(tài)為1時(shí),再判斷現(xiàn)階段結(jié)果遙信的tYxSoeState態(tài),如是分位,則檢索對應(yīng)結(jié)果遙信的所有源遙信的SoeState態(tài),如果其他所有源遙信的SoeState態(tài)都已經(jīng)是合位,則產(chǎn)生結(jié)果遙信的1態(tài)SOE,其SOE的時(shí)標(biāo)取該源遙信SOE的時(shí)標(biāo)并入庫,同時(shí)將結(jié)果遙信的tYxSoeState置1,否則直接丟棄源遙信的合位SOE。
2.3.2 或邏輯
和與邏輯一樣,在接收到系統(tǒng)的一個(gè)SOE時(shí),也是根據(jù)源遙信的狀態(tài)不同,分別計(jì)算結(jié)果遙信的狀態(tài)。當(dāng)源遙信的SOE狀態(tài)為1時(shí),再判斷現(xiàn)階段結(jié)果遙信的tYxSoeState態(tài),如是分位,也就是狀態(tài)為0,則直接產(chǎn)生結(jié)果遙信的1態(tài)SOE,其SOE的時(shí)標(biāo)取該源遙信SOE的時(shí)標(biāo)并入庫,同時(shí)將結(jié)果遙信的tYxSoeState置1,如結(jié)果遙信的tYxSoeState已經(jīng)是1,說明已經(jīng)有其他源遙信狀態(tài)為1的遙信將該結(jié)果遙信置1了,則直接丟棄該源遙信的合位SOE;當(dāng)源遙信的SOE狀態(tài)為0時(shí),再判斷現(xiàn)階段結(jié)果遙信的tYxSoeState態(tài),如是合位,則檢索對應(yīng)結(jié)果遙信的所有源遙信的SoeState態(tài),如果其他所有源遙信的SoeState態(tài)都已經(jīng)是分位,則產(chǎn)生結(jié)果遙信的0態(tài)SOE,其SOE的時(shí)標(biāo)取該源遙信SOE的時(shí)標(biāo)并入庫,同時(shí)將結(jié)果遙信的tYxSoeState置0,否則直接丟棄源遙信的分位SOE。
2.3.3 非邏輯
非邏輯計(jì)算則相對簡單,因其只是一對一的取反而已。在鉤子函數(shù)獲得一個(gè)COS或SOE時(shí),只需判斷結(jié)果遙信的tYxCosState或tYxSoeState,如其現(xiàn)在狀態(tài)與該源遙信的狀態(tài)相同,則直接產(chǎn)生結(jié)果遙信的COS或SOE,其時(shí)標(biāo)取源遙信的時(shí)標(biāo),狀態(tài)與源遙信的狀態(tài)相反。
2.3.4 失步判斷
在系統(tǒng)正常運(yùn)行時(shí),以上3種計(jì)算邏輯是可以根據(jù)各源遙信的變化來正確產(chǎn)生各結(jié)果遙信的,但具體到變電站實(shí)際運(yùn)行中,如果只有這些邏輯計(jì)算還是遠(yuǎn)遠(yuǎn)不夠的,很可能會出現(xiàn)系統(tǒng)計(jì)算邏輯失步的隱患。這是因?yàn)殡娏ο到y(tǒng)是個(gè)十分復(fù)雜的綜合體系,是由若干個(gè)子系統(tǒng)融合而來,任何一個(gè)環(huán)節(jié)的失誤,都會帶來致命的問題。對于本文的遙信計(jì)算邏輯而言,就是有可能會出現(xiàn)源遙信的COS或SOE的丟失,而源遙信的丟失必然會導(dǎo)致結(jié)果遙信的計(jì)算錯(cuò)誤。因此本文提出了這種增強(qiáng)型的多叉樹算法,在實(shí)際系統(tǒng)中增加系統(tǒng)全遙信的檢索比對,檢查是否有源遙信的變化數(shù)據(jù)的丟失,及時(shí)修正補(bǔ)充計(jì)算邏輯,最大限度地確保失步后在保證正確的情況下最短時(shí)間內(nèi)恢復(fù)同步計(jì)算。雖然與或非的計(jì)算邏輯不同,但全數(shù)據(jù)的比對的方法是一致的,本文只以與遙信的同步判斷為例進(jìn)行說明。
判斷是否失步還需要分結(jié)果遙信是否失步和源遙信是否失步。判斷結(jié)果遙信是否失步,先檢索該結(jié)果遙信對應(yīng)的源遙信的全遙信狀態(tài),只要有一個(gè)源遙信的狀態(tài)為0,則該結(jié)果遙信的理論狀態(tài)就應(yīng)該是0,否則就是1,將該狀態(tài)記錄為CalState。然后再獲取該結(jié)果遙信的實(shí)際狀態(tài),記為tYxState,將結(jié)果遙信的CalState、tYxState、tYxCosState、tYxSoeState相互對比,理論上這些都應(yīng)該保持在同一狀態(tài),否則記為失步標(biāo)識LostStateFlag,同時(shí)記下失步時(shí)間LostStateTime。判斷失步后,還必須等待一定的時(shí)間再采取同步措施。這是為給失步的遙信預(yù)留自動同步的時(shí)間,這主要是基于系統(tǒng)中會出現(xiàn)COS或SOE延時(shí)入庫的問題,以防我們強(qiáng)制同步后延時(shí)的COS或SOE又到達(dá)了,導(dǎo)致計(jì)算遙信不準(zhǔn)確或者再失步。在等待同步的時(shí)間內(nèi),必須實(shí)時(shí)檢測CalState、tYxState、tYxCosState、tYxSoeState這4個(gè)標(biāo)識,如同步了,則取消失步標(biāo)識LostStateFlag,中斷該判同步過程。如在規(guī)定時(shí)間內(nèi)沒有自動同步,則強(qiáng)制同步,取消失步標(biāo)識,將CalState的狀態(tài)強(qiáng)制同步給tYxState、tYxCosState、tYxSoeState,并更新數(shù)據(jù)庫中結(jié)果遙信的全遙信狀態(tài)。
源遙信失步判斷的方法原理和結(jié)果遙信判斷方法是一致的。先取得源遙信的全遙信狀態(tài),記為BitState,再和該源遙信的CosState、SoeState對比,只要出現(xiàn)不一致的現(xiàn)象,則記為源遙信失步LostStateFlag,同時(shí)記下失步時(shí)間。同樣地,在出現(xiàn)源遙信失步的情況下,在強(qiáng)制同步前,也必須有一定的延時(shí),來避免系統(tǒng)或網(wǎng)絡(luò)延時(shí)導(dǎo)致的異常。在等待同步的時(shí)間內(nèi),如果出現(xiàn)BitState、CosState、SoeState一致的情況,則取消失步標(biāo)識,中斷該判同步過程。如在規(guī)定時(shí)間內(nèi)沒有自動同步,則強(qiáng)制同步,將源遙信的全態(tài)BitState賦給CosState和SoeState,同時(shí)取消失步標(biāo)識。
這種變化數(shù)據(jù)產(chǎn)生計(jì)算遙信的變化數(shù)據(jù),全數(shù)據(jù)檢索同步的增強(qiáng)型多叉樹遞歸法在系統(tǒng)的計(jì)算遙信算法中,相較于一般的全遙信計(jì)算法,確保了在沒有變化數(shù)據(jù)丟失的情況下,計(jì)算遙信能確保及時(shí)準(zhǔn)確地反映到系統(tǒng)中,且SOE的時(shí)標(biāo)就是觸發(fā)該計(jì)算遙信的源遙信的時(shí)標(biāo),這對于智能告警和各種高級應(yīng)用是至關(guān)重要的。而且就算出現(xiàn)變化數(shù)據(jù)丟失導(dǎo)致系統(tǒng)計(jì)算邏輯失步的情況,該方法也能在可容忍時(shí)間內(nèi)恢復(fù)同步。該算法本身簡單合理,便于理解和編程實(shí)現(xiàn),對系統(tǒng)的軟硬件需求較低,且也可以在幾乎不改動系統(tǒng)程序架構(gòu)的情況下,順利地移植到任何老系統(tǒng)中。
[1]徐孝凱.數(shù)據(jù)結(jié)構(gòu)實(shí)用教程(C/C++描述)[M].清華大學(xué)出版社,2002
[2](美)埃利斯·霍羅維茨,(美)薩爾塔·薩尼,(美)狄尼斯·梅坦.用C++描述數(shù)據(jù)結(jié)構(gòu)[M].周維真,張海藩,譯.國防工業(yè)出版社,1997
[3]譚浩強(qiáng),劉炳文.C++程序設(shè)計(jì)教程[M].中國科學(xué)技術(shù)出版社,1996
2014-06-23
周建新(1975—),男,江蘇泰興人,工程師,研究方向:變電站自動化控制系統(tǒng)通信控制軟件研究開發(fā)。
董超(1986—),女,江蘇金壇人,助理工程師,研究方向:電力系統(tǒng)自動化研究開發(fā)。