曾水根,劉 瀏,劉萬斌,丁俊健
(國電南京自動化股份有限公司,南京210032)
新一代保護軟件開發(fā)平臺系統(tǒng)(以下簡稱系統(tǒng))是一個面向保護類產(chǎn)品PC機端工具軟件快速二次開發(fā)的基礎(chǔ)開發(fā)平臺,使用Visual C++2010(以下簡稱為VC++2010)進行開發(fā)。
之所以選定VC++2010作為開發(fā)語言,是因為VC++2010為所有的VC++開發(fā)人員做了貼心而又周全的考慮。具體表現(xiàn)在其Ribbion界面可視化的設(shè)計、更加人性化的使用、提升了的安全可靠性、更加容易發(fā)布與部署簡潔等特點[1],并且VC++2010對C++新標(biāo)準(zhǔn)C++0x全面支持。
系統(tǒng)大量采用.NET成熟的組件技術(shù),降低二次開發(fā)及維護成本與風(fēng)險,提供統(tǒng)一的語言、數(shù)據(jù)庫、配置、通信、公共功能、日志、權(quán)限角色等公共模塊,并可根據(jù)二次開發(fā)需求隨意組裝、刪減模塊,快速開發(fā)出滿足實際工程應(yīng)用需求的應(yīng)用軟件。
系統(tǒng)功能模塊使用Visual Studio2010.NET作為主要開發(fā)工具,綜合應(yīng)用VC++2010的CLI、MFC、COM等技術(shù)實現(xiàn)封裝和系統(tǒng)之間的跨進程通信,并利用Win32API技術(shù)實現(xiàn)和Windows系統(tǒng)間的交互[2]。
系統(tǒng)由多語言功能模塊、數(shù)據(jù)庫功能模塊、串口通信功能模塊、以太網(wǎng)通信功能模塊、公共類功能模塊、公用重寫控件功能模塊、權(quán)限角色功能模塊和事件日志功能模塊共八大功能模塊組成。各功能模塊項目開發(fā)為VC++2010的CLR類庫項目。
系統(tǒng)項目開發(fā)過程中采用SVN進行多人同步開發(fā)的源代碼管理,為避免不同模塊間的名稱命名沖突,充分運用標(biāo)準(zhǔn)C++引入的關(guān)鍵字namespace(命名空間/名字空間/名稱空間/名域),每個功能模塊擁有獨一無二的命名空間名稱。各功能模塊命名空間名稱原則上要反應(yīng)出模塊功能。為了省去每次調(diào)用模塊成員都要添加“命名空間名::成員名”的麻煩,使用標(biāo)準(zhǔn) C++的using編譯指令(“using namespace命名空間名稱”)來簡化對命名空間中的成員的使用;同時,使用using聲明來簡化對命名空間中的名稱的使用。
系統(tǒng)的串口、以太網(wǎng)通信功能模塊以國電南自以太網(wǎng)103規(guī)約為實施標(biāo)準(zhǔn)。
總體功能框架如圖1。
圖1 新一代保護軟件開發(fā)平臺系統(tǒng)框架圖
名稱定義原則上要基本體現(xiàn)類型和意義。如以“CLR”開頭的名稱代表命名空間名稱,以“l(fā)bl”開頭的名稱表示標(biāo)簽(Label)類型的名稱,表示用戶名有關(guān)的名稱應(yīng)該包含“username”字符,表示密碼有關(guān)的名稱應(yīng)該包含“pass”字符等。
為方便二次開發(fā)人員快速的讀懂程序,命名空間命名采用有名的命名空間命名法則,C++標(biāo)準(zhǔn)文檔中的有名命名空間語句如下:
named-namespace-definition:
namespace identifier{namespace-body}[3]
簡單描述為:
namespace命名空間名{
聲明序列[可選]
}
命名空間名稱從字面上要基本反映出模塊的功能。如多語言功能模塊命名空間名稱為“CLRDllMLanguage”,其中“CLRDll”前綴表示類型為 VC++的 CLR 類庫項目,“MLanguage”為“Multi Language”的簡寫,從字面上即體現(xiàn)出該模塊功能和多語言有關(guān)。
各功能模塊主要類的名稱與命名空間名稱差別僅在于前1-6個字符,這1-6個字符反應(yīng)出功能模塊類型。如CLR類型類庫項目功能模塊命名空間名前綴以字符“CLRDll”開始,而類以字符“C”開始。后面的字符基本相同,從字面上體現(xiàn)功能。如多語言功能模塊的命名空間名稱為“CLRMLanguage”,其主要類名為“CMLanguage”,從字面上很容易理解分別為多語言功能模塊命名空間名稱和多語言功能模塊主要實現(xiàn)類的名稱。
命名空間中的名稱均使用有意義的名稱,通過名稱基本能反映出具體的類型和用途。
(1)對于控件類型的變量,前3個字符一般為控件類型名的縮寫,后面的字符反應(yīng)變量的作用。如“mnuAlltrip”表示這是個菜單項的名稱,和跳閘功能有關(guān)。
(2)對于類的實例變量,變量名即為類名去掉前綴“C”(如果有)后余下部分的小寫。如“commonfunc”為“CCommonFunc”類的實例。
(3)一般變量命名采用駱駝命名法規(guī)則,即混合使用大小寫字母,第一個單詞以小寫字母開始,第二個單詞的首字母大寫或每一個單詞的首字母都采用大寫字母。如username,myFirstName。
各模塊對應(yīng)命名空間名稱如表1。
(1)多語言功能模塊
適應(yīng)軟件項目國際化的需要,實現(xiàn)多語言切換功能。
(2)數(shù)據(jù)庫功能模塊
根據(jù)系統(tǒng)設(shè)置中選擇的數(shù)據(jù)庫類型和位置提供相應(yīng)的數(shù)據(jù)連接支持,以實現(xiàn)數(shù)據(jù)的提取、添加、修改及刪除和統(tǒng)計等操作。
(3)串口通信功能模塊
實現(xiàn)串口通信控件及相關(guān)功能的封裝,二次開發(fā)人員只需創(chuàng)建該模塊實例即可直接進行串口通信相應(yīng)的設(shè)置、數(shù)據(jù)發(fā)送及接收等,而不用每次重復(fù)繁瑣的串口控件創(chuàng)建與管理。
(4)以太網(wǎng)通信功能模塊
實現(xiàn)以太網(wǎng)通信控件及相關(guān)功能的封裝,二次開發(fā)人員只要創(chuàng)建該模塊的實例即可實現(xiàn)以太網(wǎng)通信相應(yīng)的設(shè)置、數(shù)據(jù)發(fā)送和接收及網(wǎng)絡(luò)監(jiān)聽等功能。
(5)公共類功能模塊
將使用頻率較高的公用方法歸集到公共類功能模塊,方便維護或BUG查找及改進。
(6)公用重寫控件功能模塊
將使用頻率較高且需要進行個性化定制的系統(tǒng)控件集中于此模塊進行重寫實現(xiàn),以便根據(jù)實際情況需要對此類控件的限制條件統(tǒng)一進行調(diào)整。
(7)權(quán)限角色功能模塊
納入角色分級管理模式實現(xiàn)用戶權(quán)限的劃分。
(8)事件日志功能模塊
自動記錄用戶每次操作并分類存檔。
表1 新一代保護軟件開發(fā)平臺系統(tǒng)命名空間表
各模塊主要類如表2。
表2 新一代保護軟件開發(fā)平臺系統(tǒng)主要類表
各個模塊都要用到公共類功能模塊,以公共功能模塊為例介紹系統(tǒng)的模塊實踐和跨命名空間(這里其實就是跨模塊)標(biāo)識符的調(diào)用方法。
(1)COMSetT枚舉
串口數(shù)據(jù)參數(shù)數(shù)據(jù)結(jié)構(gòu)枚舉,包含串口一般設(shè)置項,枚舉項見圖2。
圖2 COMSetT枚舉(部分截圖)
(2)EvevtType枚舉
圖3 EvevtType枚舉(部分截圖)
列出事件/日志類型可能的列表,以便將事件按照所屬類型自動分類,枚舉項見圖3。
(3)IniFile類
實現(xiàn)文本配置文件的讀寫,內(nèi)含IniKey和IniSection兩個類,類視圖見圖4。
圖4 IniFile類視圖(部分截圖)
(4)ComFunc類
實現(xiàn)不同數(shù)據(jù)類型轉(zhuǎn)換功能,類視圖部分轉(zhuǎn)換方法見圖5。
(5)CCommonFunc類
公共功能模塊的主類,類視圖部分截圖見圖6。
圖5 ComFunc類視圖(部分截圖)
圖6 CCommonFunc類視圖(部分截圖)
(6)跨命名空間標(biāo)識符使用
為簡化代碼,使用其它命名空間的標(biāo)識符,可使用標(biāo)準(zhǔn)C++的using編譯指令來簡化對命名空間中的名稱的使用,加入了“using namespace命名空間名稱”后就可以直接使用該命名空間中的標(biāo)識符了。當(dāng)然還可以使用using聲明來簡化對其它命名空間中的名稱的使用[4]。
基于以上設(shè)計,研發(fā)了新一代保護軟件開發(fā)平臺系統(tǒng),并以此編寫了以DGT801系列的發(fā)變組保護裝置PC機端數(shù)據(jù)定義為目的的測試樣例對其進行了測試[5],測試結(jié)果見表3。
表3 新一代保護軟件開發(fā)平臺系統(tǒng)測試結(jié)果
基于保護類軟件系統(tǒng)功能復(fù)雜,且對數(shù)據(jù)傳輸穩(wěn)定性、精確性要求高的特性,筆者選定VC++2010作為系統(tǒng)的開發(fā)語言,測試結(jié)果表明此平臺系統(tǒng)完全符合保護產(chǎn)品PC機端軟件的二次開發(fā)需求。
通過搭建一個性能卓越、技術(shù)先進、安全可靠、易于擴展、便以進行快速二次開發(fā)的基礎(chǔ)平臺,為后期發(fā)變組保護軟件系統(tǒng)的升級換代及新產(chǎn)品開發(fā)提供了有效的技術(shù)支撐和保障。
[1]霍頓.Visual C++2010入門經(jīng)典.5版[M].北京:清華大學(xué)出版社,2010.
[2]李瑞生,李燕斌,周逢權(quán).智能變電站功能架構(gòu)及設(shè)計原則[J].電力系統(tǒng)保護與控制,2010,38(21):24-27
[3]ISO/IEC14882,INTERNATION STANDARD of Programming languages-C++[S].
[4]吳克力.C++面向?qū)ο蟪绦蛟O(shè)計 ——基于Visual C++2010[M].北京:清華大學(xué)出版社,2013.
[5]顏炯,王戟,陳火旺.基于模型的軟件測試綜述[J].計算機科學(xué),2004,31(2):184-187.