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