陸玉軍,李 澄,陳 顥
(江蘇方天電力技術(shù)有限公司,江蘇南京211102)
當(dāng)前繼電保護(hù)裝置的軟件開發(fā)模式仍以傳統(tǒng)的開發(fā)模式為主,即根據(jù)一次設(shè)備保護(hù)實(shí)現(xiàn)功能要求而設(shè)計(jì)開發(fā),由于不同現(xiàn)場的差異,同一類設(shè)備的保護(hù)功能要求往往難以完全一樣。因此,需要根據(jù)實(shí)施現(xiàn)場不斷完善,這不僅導(dǎo)致開發(fā)的工作量大、代碼重用率低、裝置測試過程繁瑣,而且由于開發(fā)人員的后續(xù)修改補(bǔ)充,很容易在軟件中植入新的缺陷而難以發(fā)現(xiàn)。
組態(tài)軟件利用計(jì)算機(jī)軟件的各種資源,按特定需要進(jìn)行配置,能適應(yīng)各種現(xiàn)場需要,具有極大的靈活性,代碼重用率高,實(shí)施成本低,在集散控制系統(tǒng)(DCS)中作為監(jiān)控組態(tài)軟件得到了大量應(yīng)用,如Wonderware公司的InTouch:其地位日益重要,已成為自動(dòng)化領(lǐng)域的主流軟件[1]。目前組態(tài)軟件在國外的使用非常普遍,除了電廠自動(dòng)化領(lǐng)域外,在工控領(lǐng)域、科學(xué)研究、系統(tǒng)仿真計(jì)算領(lǐng)域、電子IP內(nèi)核設(shè)計(jì)、及各跨國大公司的設(shè)備中都大量使用,電力系統(tǒng)繼電保護(hù)領(lǐng)域國外廠家也推出可針對自身產(chǎn)品組態(tài)的工具軟件。國內(nèi)組態(tài)軟件主要集中在工控領(lǐng)域、電廠自動(dòng)化領(lǐng)域,比較著名的工控軟件有:昆侖動(dòng)態(tài)的MCGS、亞控科技的組態(tài)王。國內(nèi)繼電保護(hù)設(shè)備廠家則還沒有開發(fā)出成熟的組態(tài)軟件,在這方面雖然很多單位做了一些具體工作,但至今未見投入實(shí)際使用的工具軟件[2-5]。繼電保護(hù)邏輯組態(tài)軟件具備功能模塊圖形化顯示,便于現(xiàn)場人員學(xué)習(xí)掌握設(shè)備原理;現(xiàn)場可靈活組態(tài)易于滿足現(xiàn)場需求的變化;可實(shí)現(xiàn)運(yùn)行時(shí)內(nèi)部狀態(tài)監(jiān)視具有維護(hù)方便的特點(diǎn),有著良好的應(yīng)用前景。
Qt是由Trolltech公司開發(fā)的跨平臺(tái)C++的圖形用戶界面應(yīng)用程序開發(fā)框架,提供給應(yīng)用程序開發(fā)者建立藝術(shù)級(jí)的圖形用戶界面所需的所有功能。它是面向?qū)ο蟮目蚣?,易于擴(kuò)展,且允許組件編程,除優(yōu)良的跨平臺(tái)特性、豐富的應(yīng)用程序接口(API)和大量的開發(fā)文檔、XML的支持等特點(diǎn)外,在圖形組態(tài)程序開發(fā)方面還有如下的明顯優(yōu)勢[1,6]:
(1)項(xiàng)視圖體系。基于視圖(QGraphicsView)、場景(QGraphicsScene)、項(xiàng)(QGraphicsItem),Qt引入了全新的視圖體系,提供了一個(gè)基于項(xiàng)的高級(jí)接口,非常易于實(shí)現(xiàn)對項(xiàng)的操作和繪制、獨(dú)立變換、管理,這種視圖體系完全適用于組態(tài)軟件的圖形組態(tài)。
(2)獨(dú)特的事件響應(yīng)機(jī)制。信號(hào)槽(signal/slot)驅(qū)動(dòng)機(jī)制是其一項(xiàng)關(guān)鍵技術(shù),該方法取代了傳統(tǒng)圖形用戶界面(GUI)的回調(diào)函數(shù),實(shí)現(xiàn)了對象間的通信,該響應(yīng)機(jī)制在圖元對象操作中使用很方便。
(3)支持快速圖形界面程序開發(fā)?;赒t設(shè)計(jì)工具QtDesigner生成圖形用戶界面,可利用圖形界面生成工具快速生成應(yīng)用程序代碼,是一種快速開發(fā)應(yīng)用程序的方法。將代碼開發(fā)編譯所需工具以插件的形式集成在開發(fā)者熟悉的VS2008及以上版本的開發(fā)環(huán)境中,非常易于項(xiàng)目開發(fā)。
典型DCS控制組態(tài)軟件架構(gòu)如圖1所示,這類組態(tài)軟件一般分組態(tài)開發(fā)環(huán)境和運(yùn)行環(huán)境,開發(fā)環(huán)境實(shí)現(xiàn)監(jiān)控畫面組態(tài)、控制邏輯組態(tài)、控制設(shè)備組態(tài)及數(shù)據(jù)庫組態(tài),運(yùn)行環(huán)境實(shí)現(xiàn)組態(tài)工程運(yùn)行和監(jiān)視控制,實(shí)時(shí)數(shù)據(jù)信息顯示。
為繼電保護(hù)裝置保護(hù)邏輯組態(tài)而開發(fā)的設(shè)計(jì)工具,同樣具有開發(fā)環(huán)境和運(yùn)行環(huán)境,但開發(fā)環(huán)境在PC機(jī)上,運(yùn)行環(huán)境則在保護(hù)裝置內(nèi),是一種交叉環(huán)境的開發(fā)方式。裝置的組態(tài)邏輯由PC機(jī)開發(fā)編譯完成,然后再將目標(biāo)程序下裝至裝置內(nèi)運(yùn)行,組態(tài)軟件可支持裝置運(yùn)行時(shí)的監(jiān)控;為簡化設(shè)計(jì)和提高裝置運(yùn)行效率,組態(tài)軟件也可不實(shí)現(xiàn)監(jiān)控裝置運(yùn)行。文中將模塊開發(fā)和組態(tài)開發(fā)進(jìn)行了分離設(shè)計(jì),使組態(tài)軟件具有較好的擴(kuò)展性和人機(jī)交互特點(diǎn),結(jié)構(gòu)如圖2所示。組態(tài)軟件整體上分模塊開發(fā)和組態(tài)開發(fā)兩大部分。
圖1 組態(tài)軟件架構(gòu)
圖2 繼電保護(hù)邏輯組態(tài)軟件
(1)模塊開發(fā)。模塊是繼電保護(hù)設(shè)備邏輯功能分解的結(jié)果,設(shè)備實(shí)現(xiàn)則是將相應(yīng)的模塊重新組合。根據(jù)設(shè)備功能,模塊主要分為3種類型:內(nèi)部模塊(基本模塊、接口模塊、信號(hào)或數(shù)據(jù)輸出模塊)、用戶模塊(各種類型保護(hù)邏輯、控制功能模塊)、組合模塊(前兩者的任意組合,可簡化模塊組態(tài)界面)類型。模塊由用戶編寫符合接口規(guī)范的C++源碼文件或經(jīng)編譯后的源碼lib庫提供,模塊庫中的模塊載入調(diào)用則是由與庫關(guān)聯(lián)的接口文件實(shí)現(xiàn)。
(2)組態(tài)開發(fā)。在上圖的組態(tài)開發(fā)環(huán)境中,組態(tài)工具提供人機(jī)交互窗口時(shí),主要是實(shí)現(xiàn)3大功能。① 模塊編輯:根據(jù)需要實(shí)現(xiàn)的目標(biāo)裝置邏輯功能,導(dǎo)入用戶模塊到模塊管理區(qū),從模塊庫管理區(qū)中拖放模塊到組態(tài)窗口中,用導(dǎo)線連接模塊接口間的連線,及通過完成相應(yīng)的編輯操作實(shí)現(xiàn)邏輯組態(tài)。② 檢查與排序:檢查模塊間的連接狀態(tài)、接口數(shù)據(jù)類型的匹配、然后根據(jù)合法性檢查結(jié)果進(jìn)行模塊計(jì)算的先后次序排序,并輸出檢查失敗、類型匹配錯(cuò)誤、產(chǎn)生信號(hào)環(huán)路的錯(cuò)誤告警信息及圖形提示。③ 工程編譯:將檢查通過的組態(tài)工程根據(jù)模塊順序生成目標(biāo)源碼文件,并完成文件編譯生成可下裝到裝置的目標(biāo)代碼。工程編譯時(shí)給出相關(guān)的編譯錯(cuò)誤告警信息與提示。
在組態(tài)視圖中,構(gòu)成組態(tài)的基本圖元對象分為3種:導(dǎo)線(用連線表示,用于實(shí)現(xiàn)模塊間的連接),功能模塊(由各種形狀的圖元表示)、文本(標(biāo)識(shí)、解釋或提供數(shù)據(jù)顯示),上述模塊分別由項(xiàng)視圖體系中的QGraphicsLineItem、QGraphicsItem、QGraphicsTextItem類派生實(shí)現(xiàn)。每個(gè)圖元的正確顯示或響應(yīng)事件的操作則需重新實(shí)現(xiàn)基類中的繪制函數(shù)paint()、形狀函數(shù)shape()、碰撞檢測 boundingRect()。 每個(gè)圖元均有多個(gè)屬性以支持顯示、操作(如支持翻轉(zhuǎn)操作等)及動(dòng)畫響應(yīng)的函數(shù)。在保護(hù)組態(tài)圖中,模塊相當(dāng)于一個(gè)保護(hù)裝置的某個(gè)具體功能模塊,如低壓線路保護(hù)裝置的復(fù)壓方向過流保護(hù)可用一個(gè)模塊表示,導(dǎo)線相當(dāng)于功能模塊對應(yīng)輸入輸出間的信號(hào)傳導(dǎo)關(guān)系,文本為便于顯示或理解而添加的文字信息。
編輯操作主要是實(shí)現(xiàn)模塊圖元拖放、導(dǎo)線繪制、文本放置等基本操作要求。除上述操作外,還支持圖元添加、刪除、剪切、拷貝、移動(dòng)、修改屬性及撤銷/恢復(fù)等操作。
圖元移動(dòng),有帶橡皮線(rubberline)移動(dòng)或不帶橡皮線移動(dòng)操作,帶橡皮線功能避免了部分圖元移動(dòng)導(dǎo)致的連線中斷,實(shí)現(xiàn)了連線自動(dòng)跟隨模塊移動(dòng)變化。
事件響應(yīng)設(shè)計(jì)在圖形編輯中有鼠標(biāo)、按鍵、菜單響應(yīng)等操作。圖元選中在查找元件、故障定位圖元時(shí)顯得尤為重要,可幫助快速定位目標(biāo)。選中復(fù)制的圖元被粘貼前,可隨鼠標(biāo)移動(dòng)過程中概要顯示將要粘貼的圖元虛擬圖形,有助于粘貼時(shí)精確定位。hover事件可使鼠標(biāo)移入或移出圖元區(qū)域時(shí)發(fā)生相應(yīng)變化,為捕獲目標(biāo)點(diǎn)位提供清晰提示。
視圖智能顯示需更多的智能操作。視圖操作:為使圖元清晰可辨或顯示整體布局,對顯示的視圖區(qū)要求能夠自動(dòng)實(shí)現(xiàn)縮放,且縮放操作支持多樣化。視圖背景:良好的視圖背景有助于減輕組態(tài)編輯時(shí)的壓力并減少編輯錯(cuò)誤的概率,實(shí)現(xiàn)視圖背景切換也有必要??蜻x圖元:鼠標(biāo)劃定一個(gè)矩形框,在框內(nèi)的圖元均被置為選中狀態(tài)。邊界識(shí)別:圖元在拖放、繪線、移動(dòng)、粘貼等操作中能準(zhǔn)確識(shí)別圖形邊界,使得操作總能控制在邊界內(nèi)而不越界。
分頁顯示:由于視圖/場景顯示區(qū)域易受窗口大小限制,在單個(gè)視圖窗口中往往難以容納一個(gè)保護(hù)測控裝置的組態(tài)邏輯中所需的數(shù)量眾多的圖元,此時(shí)需要擴(kuò)展多個(gè)視圖,采用分頁模式顯示,在保護(hù)邏輯設(shè)計(jì)中可增減分頁。分頁的另一好處是可將相關(guān)性大的模塊集中在一個(gè)頁面中,以使保護(hù)邏輯組態(tài)更清晰。
工程管理:在組態(tài)工具軟件的組態(tài)環(huán)境中只容納一個(gè)裝置的組態(tài)工程將使得進(jìn)行操作或編輯查看變得非常繁瑣或無法實(shí)現(xiàn),需要可對多個(gè)組態(tài)工程進(jìn)行樹狀式管理,在繼電保護(hù)組態(tài)中,一個(gè)工程往往表示一種類型裝置,如一個(gè)工程表示低壓線路保護(hù)、另一個(gè)表示電容器保護(hù)。從方便設(shè)計(jì)角度看,采用一個(gè)相對獨(dú)立的MDI子窗體管理工程較為合適,多個(gè)工程通過用不同的子窗體分別管理,對子窗體的操作實(shí)際是對不同工程的操作。工程管理的結(jié)構(gòu)如圖3所示。
圖3 工程與視圖管理
圖形編輯完成后,需要對組態(tài)圖形進(jìn)行檢查校驗(yàn),最終以正確的模塊連接關(guān)系、確定模塊計(jì)算序列才能正確生成目標(biāo)源碼,完成編譯輸出可執(zhí)行目標(biāo)代碼。
檢查的規(guī)則應(yīng)能準(zhǔn)確查找出組態(tài)編輯中的疏漏或錯(cuò)誤,是保證正確的一種手段。該軟件主要根據(jù)保護(hù)功能模塊的特點(diǎn)而設(shè)計(jì)規(guī)則:所有模塊輸入必須連接、與模塊輸入相關(guān)的驅(qū)動(dòng)必須唯一、模塊輸入數(shù)據(jù)類型必須與驅(qū)動(dòng)信號(hào)一致等。
通過對網(wǎng)絡(luò)表的搜索處理,可獲得模塊連接關(guān)系,從而為模塊輸入檢查、數(shù)據(jù)類型校驗(yàn)、模塊排序、信號(hào)環(huán)路校驗(yàn)提供了支持。
在校驗(yàn)過程中執(zhí)行每一步均輸出校驗(yàn)信息,如前一步校驗(yàn)失敗,則停止后續(xù)步檢查校驗(yàn),并給出當(dāng)前步驟全部錯(cuò)誤信息且提供錯(cuò)誤的模塊或連線快速定位選中。校驗(yàn)結(jié)束,給出排序結(jié)果和信號(hào)環(huán)路提示,提醒組態(tài)人員及時(shí)處理環(huán)路計(jì)算問題。在編輯組態(tài)中在模塊間非常容易出現(xiàn)計(jì)算環(huán)路,而實(shí)際計(jì)算邏輯時(shí)均按順序執(zhí)行,這是組態(tài)圖所特有的現(xiàn)象,需進(jìn)行解環(huán)處理。
工程編譯是將組態(tài)邏輯生成的源代碼文件編譯為目標(biāo)代碼的過程。
生成源碼:根據(jù)排序的結(jié)果順序提取模塊的各自源代碼(或調(diào)用庫)函數(shù),并組織生成組態(tài)邏輯的源代碼文件。
編譯源碼:根據(jù)生成的源碼,通過調(diào)用裝置CPU的專用編譯工具,生成裝置的目標(biāo)代碼文件。
生成代碼文件和編譯源碼文件時(shí)每一步均給出錯(cuò)誤提示或編譯信息,提醒組態(tài)時(shí)注意編譯錯(cuò)誤或異常。
編譯后的目標(biāo)代碼,可以通過調(diào)試工具下載到裝置內(nèi)運(yùn)行,或組態(tài)工具軟件集成目標(biāo)文件下載功能,運(yùn)行目標(biāo)程序。
實(shí)際上,編譯后的代碼可能存在模塊前期調(diào)試中未發(fā)現(xiàn)的錯(cuò)誤、或由于代碼過大或計(jì)算過于復(fù)雜,導(dǎo)致裝置無法運(yùn)行,此時(shí)應(yīng)將組態(tài)后的代碼進(jìn)行充分調(diào)試,并給出裝置運(yùn)行代碼的編譯限制條件,確保組態(tài)工具能生成正確的可執(zhí)行目標(biāo)代碼。
文中組態(tài)工具調(diào)用的保護(hù)模塊是利用前期開發(fā)的模塊代碼并已經(jīng)過細(xì)致的調(diào)試,未經(jīng)調(diào)試的代碼模塊,應(yīng)在模塊開發(fā)階段完成調(diào)試。否則將導(dǎo)致組態(tài)邏輯不能正確運(yùn)行。
在組態(tài)環(huán)境中模塊不僅具有圖元操作的所有屬性,還具有可最終在裝置內(nèi)執(zhí)行的代碼和操作訪問的數(shù)據(jù),實(shí)際上是圖元、代碼、數(shù)據(jù)的綜合體。圖4為一低壓線路保護(hù)的復(fù)壓方向過流保護(hù)模塊的圖元、代碼及數(shù)據(jù)屬性。
圖4 模塊屬性
在編輯時(shí),模塊表現(xiàn)是具有相應(yīng)接口的圖元,輸入輸出分別對應(yīng)其執(zhí)行函數(shù)的輸入條件和輸出結(jié)果;在編譯時(shí)即相當(dāng)于對其輸入數(shù)據(jù)初始化關(guān)聯(lián),并將其輸出作為其他模塊的關(guān)聯(lián)輸入。而模塊定值等需與用戶交互的數(shù)據(jù)則對應(yīng)為裝置內(nèi)部數(shù)據(jù)庫數(shù)據(jù)的一部分。
所有類型的繼電保護(hù)裝置都由相關(guān)的計(jì)算、保護(hù)、測量、控制、錄波等功能組成,即按功能可分解為多種不同模塊與多個(gè)同樣模塊的組合,如在裝置內(nèi)實(shí)現(xiàn)特定保護(hù)功能則需為其設(shè)計(jì)一個(gè)與其功能相當(dāng)?shù)哪K。
根據(jù)前述分析,模塊開發(fā)要點(diǎn)為以下方面。
(1)功能模塊劃分。以低壓線路保護(hù)為例,可分解為:實(shí)現(xiàn)裝置接口的模塊(輸入輸出接口模塊)、采樣計(jì)算的模塊(FFT或DFT等算法模塊);針對實(shí)現(xiàn)繼電保護(hù)功能的模塊 (三段式相間過流保護(hù)、過流反時(shí)限保護(hù)、三段式零序過流保護(hù)、零流反時(shí)限保護(hù)、加速保護(hù)、三相一次重合閘等模塊);實(shí)現(xiàn)測量的模塊(頻率測量、功率計(jì)算、有效值、相角、諧波計(jì)算等模塊);實(shí)現(xiàn)控制的模塊(保護(hù)出口控制、開關(guān)遙控、軟壓板控制、直控等模塊);實(shí)現(xiàn)事件管理的模塊(告警事件報(bào)告、跳閘事件報(bào)告、變位事件報(bào)告等模塊);其他模塊(基本邏輯、基本運(yùn)算、數(shù)據(jù)或信號(hào)輸出、故障錄波、告警信息顯示等模塊)。
(2)代碼與數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)。模塊數(shù)據(jù)結(jié)構(gòu)方面,接口數(shù)據(jù)非常重要,應(yīng)涵蓋所有需要計(jì)算所用的輸入數(shù)據(jù),但也不宜簡單對待(如三相一次重合閘的閉鎖條件很多,將每個(gè)閉鎖條件均作為一個(gè)獨(dú)立輸入不合適),輸出接口數(shù)據(jù)應(yīng)以模塊需要輸出與其他模塊交互數(shù)據(jù)為基準(zhǔn),否則模塊接口顯得非常龐大,內(nèi)部定值數(shù)據(jù)、需要監(jiān)控的模塊信息數(shù)據(jù)等結(jié)構(gòu)的設(shè)計(jì),同時(shí)應(yīng)滿足組態(tài)編輯時(shí)對數(shù)據(jù)的操作要求。
為使設(shè)計(jì)的模塊能正確實(shí)現(xiàn)模塊功能,通常含有初始化函數(shù)、運(yùn)行函數(shù)、定值檢查函數(shù)。
初始化函數(shù):在編譯和運(yùn)行時(shí)均需對其數(shù)據(jù)進(jìn)行初始化,編譯時(shí)為輸入輸出數(shù)據(jù)建立正確的存儲(chǔ)地址、初次運(yùn)行時(shí)以便將模塊進(jìn)行正確的初始條件設(shè)置。
運(yùn)行函數(shù):在每次執(zhí)行時(shí),根據(jù)輸入條件執(zhí)行相應(yīng)的運(yùn)算得到模塊輸出,將模塊輸出傳至下一模塊,或做裝置的輸出數(shù)據(jù)。
定值函數(shù):執(zhí)行與定值相關(guān)的功能,如定值修改、定值范圍檢查等。
(3)圖元開發(fā)。為便于理解圖元的實(shí)現(xiàn)功能,要求圖元的界面顯示應(yīng)設(shè)計(jì)得與功能相符。如圖元模塊名和對象實(shí)例名應(yīng)便于理解、圖元引腳接線應(yīng)加以名稱描述、圖元引腳狀態(tài)與連接與否關(guān)聯(lián)、圖元形狀輪廓與功能相關(guān)等方面均需要詳細(xì)設(shè)計(jì)。
其他圖元屬性:如支持變換方向、調(diào)整比例,修改名稱、計(jì)算序號(hào)顯示,還有響應(yīng)選中、查找、快速定位等輔助功能。
相比較采用傳統(tǒng)方法開發(fā)的微機(jī)保護(hù)裝置存在程序升級(jí)不便、內(nèi)部邏輯不可見、監(jiān)視內(nèi)部狀態(tài)困難等不足,組態(tài)軟件則以圖形模塊清晰展現(xiàn)邏輯關(guān)系、通過重新組合模塊即可實(shí)現(xiàn)裝置升級(jí)工程應(yīng)用靈活、在設(shè)備運(yùn)行時(shí)又便于實(shí)現(xiàn)內(nèi)部狀態(tài)監(jiān)測顯示,優(yōu)勢顯而易見。采用組態(tài)方式開發(fā)使得二次設(shè)備的開發(fā)設(shè)計(jì)變成了模塊開發(fā),開發(fā)時(shí)僅需保證各模塊功能正確,即可達(dá)到整裝置測試沒有缺陷的可能,因此,測試成本顯著降,低、測試試驗(yàn)更容易。另外,多數(shù)現(xiàn)場升級(jí)的要求可通過已有模塊組合實(shí)現(xiàn),省去了大量反復(fù)開發(fā)測試和龐大軟件工程管理的麻煩。組態(tài)軟件更加具有可視性,使得差錯(cuò)或缺陷更加容易發(fā)現(xiàn)、處理缺陷的成本更低。采用組態(tài)軟件設(shè)計(jì)實(shí)現(xiàn)保護(hù)測控設(shè)備,可以達(dá)到“一次開發(fā),任意使用”效果,今后更多的二次設(shè)備廠家將會(huì)趨向于采用這一模式實(shí)現(xiàn)二次設(shè)備開發(fā)。
[1]李冬梅.基于Qt的組態(tài)軟件的設(shè)計(jì)與開發(fā)[D].大連:大連理工大學(xué),2012.
[2]魏 巍,余群兵,陳 剛.圖形化控制算法組態(tài)在微機(jī)保護(hù)中的應(yīng)用[J].江蘇電機(jī)工程,2005,24(3):28-30.
[3]李 孝.繼電保護(hù)通用邏輯開發(fā)平臺(tái)設(shè)計(jì)[D].南京:南京理工大學(xué),2007.
[4]李 健,王云杰,梅興虎,等.組態(tài)式開發(fā)平臺(tái)在微機(jī)保護(hù)開發(fā)中的應(yīng)用[J].浙江電力,2009,(1):25-27.
[5]胡紅兵,李麗君,韓民疇.繼電保護(hù)裝置自動(dòng)化測試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].江蘇電機(jī)工程,2013,32(2):25-27.
[6]閆鋒欣等譯.C++GUIQt4編程[M].2版.北京:電子工業(yè)出版社,2013:138-166.