李源泉,朱 龍
(1.西安電子科技大學(xué),陜西西安710071;2.中國(guó)電子科技集團(tuán)第五十四研究所,河北石家莊050081;3.第二炮兵駐石家莊地區(qū)軍事代表室,河北石家莊050081)
目前國(guó)內(nèi)S頻段統(tǒng)一測(cè)控系統(tǒng)軟件大多采用VC6.0編譯環(huán)境,編輯控件等技術(shù)手段在監(jiān)控軟件中被大量使用。VC6.0編譯環(huán)境下的普通編輯控件由于不具備輸入信息的判斷功能,需要人工編碼設(shè)計(jì)實(shí)現(xiàn)。在不同的工程實(shí)施中,不僅增加軟件編碼工作量,實(shí)現(xiàn)方式無法統(tǒng)一,而且往往無法全面滿足設(shè)計(jì)要求。
通過對(duì)VC6.0編譯環(huán)境下的普通編輯控件進(jìn)行改進(jìn),使用類封裝的形式,數(shù)據(jù)處理的消息響應(yīng)處理機(jī)制,形成一種改進(jìn)的編輯控件。與普通控件相比,改進(jìn)后的編輯控件在不破壞已有功能的情況下,不僅增加了輸入信息的自動(dòng)判斷、異常處理功能,而且具備代碼、實(shí)現(xiàn)方式統(tǒng)一的優(yōu)點(diǎn)。因此改進(jìn)后的編輯控件可以為上述問題的解決提供一種有效技術(shù)手段。
編輯控件需要滿足外部調(diào)用靈活和功能管理相對(duì)集中的要求,因此在VC6.0編譯環(huán)境下,采用面向?qū)ο蟮脑O(shè)計(jì)方法,采用類封裝形式,是實(shí)現(xiàn)編輯控件全部功能的基本要求。
編輯控件不能破壞原有編輯控件的功能設(shè)計(jì),因此在VC6.0編譯環(huán)境下,改進(jìn)編輯控件應(yīng)充分繼承原有編輯控件類的特點(diǎn)與功能。
編輯控件的實(shí)現(xiàn)需要提供數(shù)據(jù)屬性指定(包括數(shù)據(jù)范圍和數(shù)據(jù)步進(jìn)等信息)功能、非法信息判斷功能和異常處理功能,因此將設(shè)計(jì)分為:初始化設(shè)計(jì);實(shí)時(shí)判斷設(shè)計(jì)和異常處理設(shè)計(jì)3個(gè)部分。
初始化設(shè)計(jì)需要考慮的要求主要是數(shù)據(jù)屬性指定靈活、擴(kuò)展方便,為非法信息判斷功能提高基本信息。
實(shí)時(shí)判斷設(shè)計(jì)的要點(diǎn)在于實(shí)現(xiàn)技術(shù)可靠,功能模塊劃分清晰,邏輯處理清晰,軟件編碼易于實(shí)現(xiàn)。
異常處理設(shè)計(jì)的要求是能夠滿足S頻段統(tǒng)一測(cè)控系統(tǒng)的基本特點(diǎn),尋求合適的統(tǒng)一處理機(jī)制,盡量滿足已有工程設(shè)計(jì)需求的同時(shí),具備一定的可擴(kuò)展性。
目前國(guó)內(nèi)S頻段統(tǒng)一測(cè)控系統(tǒng)監(jiān)控軟件所使用的編輯控件類型包括:整數(shù)型、浮點(diǎn)型和16進(jìn)制型3種。因此需要將編輯控件按照以上類型劃分,分別進(jìn)行設(shè)計(jì)開發(fā)。
整數(shù)型編輯控件的主要特點(diǎn)是需要指定數(shù)據(jù)可輸入最小值、可輸入最大值以及可輸入步進(jìn)。例如年份信息,要求最小輸入2000年;最大輸入2030年;步進(jìn)為4,表示從2000年開始,每間隔4年為一合法信息。
浮點(diǎn)型編輯控件的主要特點(diǎn)與整數(shù)型基本一致,需要增加可輸入精度屬性。例如在S頻段統(tǒng)一測(cè)控系統(tǒng)中常見的頻率參數(shù),其輸入范圍為2 025~2 200 MHz,步進(jìn)要求為 100 Hz、1 kHz兩檔,輸入精度也要求100 Hz、1 kHz兩檔。
16進(jìn)制型編輯控件目前的主要特點(diǎn)是需要指定數(shù)據(jù)輸入最大值。例如單字節(jié)編輯控件,按照16進(jìn)制數(shù)據(jù)輸入,其最大值不超過0x1F。
普通編輯控件由于無法指定輸入信息范圍、步進(jìn)和精度等屬性,是導(dǎo)致其無法提供非法信息自動(dòng)判斷的根本原因;在VC6.0編譯環(huán)境下尋求一種合適的初始化處理機(jī)制,能夠完成上述屬性的指定,是解決問題的前提條件。
因此該機(jī)制必須具備實(shí)現(xiàn)技術(shù)可靠、較強(qiáng)擴(kuò)展性的特點(diǎn),從而實(shí)現(xiàn)3種類型編輯控件的統(tǒng)一設(shè)計(jì);并且能夠根據(jù)不同的工程研制實(shí)際需求,達(dá)到易于擴(kuò)展、維護(hù)簡(jiǎn)單和編碼工作量小的總體要求。
普通編輯控件由于不提供輸入信息的實(shí)時(shí)判斷機(jī)制,是其不具備非法信息自動(dòng)判斷的重要原因。在VC6.0編譯環(huán)境下尋求一種合適的實(shí)時(shí)判斷機(jī)制,實(shí)現(xiàn)信息的動(dòng)態(tài)獲取、實(shí)時(shí)判斷,是解決問題的基本條件。
因此該機(jī)制在解決實(shí)時(shí)判斷問題的同時(shí),能夠提供一種相對(duì)通用的程序判決邏輯清晰,達(dá)到信息實(shí)時(shí)判斷的總體要求。
普通編輯控件由于不提供異常信息的處理機(jī)制,也是考慮改進(jìn)的重要原因;結(jié)合S頻段統(tǒng)一測(cè)控系統(tǒng)監(jiān)控軟件自身特點(diǎn),在VC6.0編譯環(huán)境下尋求一種易于實(shí)現(xiàn)的異常信息處理方式,確保異常信息的統(tǒng)一處理,是衡量改進(jìn)編輯控件好壞的重要指標(biāo)。
該方式在解決非法信息異常處理的同時(shí),還應(yīng)該綜合考慮目前S頻段統(tǒng)一測(cè)控系統(tǒng)的特點(diǎn),滿足異常處理方式統(tǒng)一的總體要求。
為解決編輯控件初始化問題,基于C++語言的構(gòu)造函數(shù)重載技術(shù)是一種可選方案。使用構(gòu)造函數(shù)的重載技術(shù),不僅能夠可靠解決編輯控件輸入范圍、輸入步進(jìn)的初始化處理問題,而且針對(duì)3種不同類型編輯控件,具有較強(qiáng)的擴(kuò)展性。
以下為整數(shù)型編輯控件構(gòu)造函數(shù)及其主要代碼。針對(duì)不同控件類型,例如浮點(diǎn)型,如果需要擴(kuò)展增加輸入精度屬性,可通過增加構(gòu)造函數(shù)輸入變量順利實(shí)現(xiàn)。
∥構(gòu)造函數(shù)重載
∥Min最小值Max最大值Step步進(jìn)
CLyqEditEx(int Min,int Max,int Step);
CLyqEditEx m_strYear;∥申明年信息編輯控件
m_strYear(2000,2030,4);
浮點(diǎn)型以及16進(jìn)制型編輯控件僅提供構(gòu)造函數(shù),由于其他技術(shù)與功能實(shí)現(xiàn)與整數(shù)型基本一致,不再重復(fù)描述。
∥浮點(diǎn)型編輯控件構(gòu)造函數(shù)重置
∥Min可輸入最小值Max可輸入最大值Step輸入值步進(jìn)Precision輸入值精度
CLyqEditEx_Double(double Min,double Max,double Step,double Precision);
∥16進(jìn)制型編輯控件構(gòu)造函數(shù)重置
∥Max可輸入最大值
CDzEditEx(DWORD Max).
為解決編輯控件的實(shí)時(shí)判斷問題,采用VC6.0編譯環(huán)境的消息響應(yīng)技術(shù)是一種可行方案。使用輸入過程中產(chǎn)生的消息響應(yīng)機(jī)制,可以動(dòng)態(tài)實(shí)時(shí)地進(jìn)行信息的獲取和判斷處理。
該方案的特點(diǎn)是通過輸入信息產(chǎn)生的消息驅(qū)動(dòng)實(shí)時(shí)判斷,因此能夠充分滿足編輯控件實(shí)時(shí)判斷要求。
以下為消息響應(yīng)技術(shù)的主要生成代碼。
∥消息的生成ON_CONTROL_REFLECT(EN_UPDATE,OnUpdate)
∥消息的處理
void CLyqEditEx::OnUpdate()
{
if(!JudgeParaNum(TRUE))∥輸入信息判斷
{
ResetPara(FALSE);∥異常處理
}
}
通過消息響應(yīng)技術(shù)只能解決輸入信息的實(shí)時(shí)響應(yīng)問題,并不能解決輸入信息的判斷問題。
在輸入消息到達(dá)后,需要針對(duì)輸入信息提供統(tǒng)一的判斷處理,完成輸入信息非法判斷;同時(shí)為保證統(tǒng)一設(shè)計(jì)以及維護(hù)方便,需要針對(duì)3種不同類型編輯控件提供統(tǒng)一的判決邏輯。
如上所述,函數(shù)JudgeParaNum完成輸入信息的非法判斷處理,必須包括以下幾個(gè)部分的處理邏輯:最新輸入信息的獲取處理;非法字符的基本判斷處理;長(zhǎng)度超限的判斷處理;長(zhǎng)度是否到達(dá)最小值的判斷;輸入信息范圍的判斷處理;輸入步進(jìn)的判斷處理和合法信息的記憶處理。需要說明的是,對(duì)于浮點(diǎn)型編輯控件還需要增加輸入精度的判斷處理。
最新輸入信息的獲取處理主要完成輸入信息的實(shí)時(shí)獲取操作。非法字符的基本判斷處理主要完成非法字符輸入的判斷,例如輸入信息包括了非阿拉伯?dāng)?shù)字的信息,應(yīng)立即識(shí)別為非法輸入。長(zhǎng)度超限的判斷處理主要完成數(shù)據(jù)輸入長(zhǎng)度的判斷,結(jié)合數(shù)據(jù)輸入范圍、數(shù)據(jù)步進(jìn)和精度等信息,應(yīng)自動(dòng)識(shí)別出可輸入信息的最小長(zhǎng)度以及最大長(zhǎng)度,在輸入信息超過最大輸入長(zhǎng)度后,應(yīng)立即識(shí)別為非法輸入。長(zhǎng)度是否到達(dá)最小值的判斷處理主要根據(jù)最新輸入信息是否達(dá)到最小輸入長(zhǎng)度,區(qū)別是否需要啟動(dòng)判決邏輯,防止因未輸入完畢導(dǎo)致誤判輸入信息非法。
輸入信息范圍的判斷處理主要根據(jù)構(gòu)造函數(shù)提供的輸入最小值以及最大值,判斷輸入信息是否超限。輸入步進(jìn)的判斷處理主要根據(jù)構(gòu)造函數(shù)提供的輸入步進(jìn),判斷輸入信息的步進(jìn)信息是否超限。對(duì)于浮點(diǎn)型編輯控件,輸入精度的判斷處理主要根據(jù)構(gòu)造函數(shù)提供的輸入精度,判斷輸入信息精度是否超限。據(jù)此形成的判決邏輯流程圖,將直接影響到編輯控件實(shí)時(shí)判斷功能的順利實(shí)現(xiàn)。以整數(shù)型編輯控件為例,判決邏輯流程圖如圖1所示。
圖1 判決邏輯流程
圖1中的判斷過程必須是順序處理的,其中第3步驟判斷長(zhǎng)度是否達(dá)到最小值的過程處理邏輯是:如果信息長(zhǎng)度未達(dá)到最小值,則直接結(jié)束判斷;如果信息長(zhǎng)度已經(jīng)達(dá)到最小值要求,則繼續(xù)后續(xù)判斷處理操作。
從圖1中的流程內(nèi)容看,每一個(gè)執(zhí)行步驟所完成的功能相對(duì)獨(dú)立,因此在實(shí)現(xiàn)過程中,每一個(gè)執(zhí)行步驟都可以封裝成獨(dú)立的函數(shù),便于代碼的調(diào)試以及維護(hù)。
從圖1中的流程執(zhí)行關(guān)系看,各個(gè)流程步驟之間的調(diào)用邏輯基本是線性的,互相之間的關(guān)系主要通過調(diào)度次序來體現(xiàn),因此,整個(gè)判決邏輯比較清晰,簡(jiǎn)單,在VC6.0編譯環(huán)境下編碼人員容易實(shí)現(xiàn)。
對(duì)于浮點(diǎn)型編輯控件,需要在圖1中的判斷步驟最后增加精度判斷邏輯;對(duì)于16進(jìn)制類型編輯控件,需要在圖1中的判斷步驟中刪除步進(jìn)判斷。
驗(yàn)證編輯控件的軟件環(huán)境可以采用Wondows系列操作系統(tǒng),開發(fā)平臺(tái)選用VC6.0編譯環(huán)境,使用到的工具軟件包括Office 2003以及代碼統(tǒng)計(jì)工具。
硬件設(shè)備采用目前市場(chǎng)上主流臺(tái)式機(jī)配置即可,基本硬件配置主要要求如下:
Dell臺(tái)式機(jī)的CPU為2.79 MHz,內(nèi)存1 GB以上,主板為INTEL 945芯片組。
此外,為了保證編輯控件能夠正常使用,完成了仿真測(cè)試軟件的開發(fā)工作。在該仿真測(cè)試軟件中,可以分別使用改進(jìn)的編輯控件和普通編輯控件,配合完成相關(guān)性能測(cè)試工作。
為了得到最詳細(xì)的原始素材,采用程序檢查法完成系統(tǒng)性能指標(biāo)的測(cè)試和驗(yàn)證。即在仿真測(cè)試軟件的關(guān)鍵點(diǎn)設(shè)置程序測(cè)試節(jié)點(diǎn),記錄測(cè)試數(shù)據(jù)信息,盡可能地獲取接近實(shí)際情況的測(cè)試數(shù)據(jù)。
編輯控件系統(tǒng)性能中的處理時(shí)間為關(guān)鍵指標(biāo)。因此,需要在仿真測(cè)試軟件中采集調(diào)用開始以及結(jié)束時(shí)間,獲取調(diào)用處理所花費(fèi)的時(shí)間,然后采取多組測(cè)試,使用求數(shù)學(xué)平均值方法完成原始數(shù)據(jù)的記錄和整理工作。
編輯控件的外部調(diào)用次數(shù)也是重要指標(biāo),因此,需要針對(duì)仿真測(cè)試軟件的外部調(diào)用次數(shù)進(jìn)行統(tǒng)計(jì)。該工作比較簡(jiǎn)單,采用常規(guī)的代碼統(tǒng)計(jì)分析工具,針對(duì)特定代碼進(jìn)行處理即可實(shí)現(xiàn)。
考慮到S頻段統(tǒng)一測(cè)控系統(tǒng)監(jiān)控軟件的自身特點(diǎn),在一個(gè)相對(duì)獨(dú)立的調(diào)用編輯控件界面中,其處理數(shù)量一般都在10個(gè)以上,因此在仿真測(cè)試軟件設(shè)計(jì)中,編輯控件的使用數(shù)量不能過低,系統(tǒng)仿真過程中分別采用了10個(gè)、20個(gè)、50個(gè)一共3檔進(jìn)行測(cè)試。
在Dell臺(tái)式機(jī)進(jìn)行的系統(tǒng)仿真測(cè)試,主要集中在20次、50次兩檔上。其中20次一檔一共仿真10組,50次一檔一共仿真5組。以20次一檔為例,其仿真結(jié)果如表1所示。
表1 普通控件與改進(jìn)控件性能比對(duì)
從表1中可以看出,在程序人工編碼方面,普通控件由于需要完成額外的非法判斷處理,與改進(jìn)控件有很大差距,同時(shí)還未實(shí)現(xiàn)異常處理功能;在系統(tǒng)執(zhí)行效率性能以及外部調(diào)用次數(shù)方面,普通控件與改進(jìn)控件略有差別,改進(jìn)控件在執(zhí)行時(shí)間上有增加現(xiàn)象,但隨著計(jì)算機(jī)性能的不斷提高,該執(zhí)行效率的輕微下降是可以接受的。
根據(jù)以上分析,由于普通控件與改進(jìn)控件在執(zhí)行效率和外部調(diào)用性能方面沒有本質(zhì)上的差別,但是在編碼行數(shù)方面,改進(jìn)后的控件比普通控件有明顯改善,如果再考慮到改進(jìn)控件所新具備的自動(dòng)判斷和異常處理功能,建議在VC6.0編譯環(huán)境下的編輯控件采用該設(shè)計(jì)。
在VC6.0編譯環(huán)境下進(jìn)行的編輯控件改進(jìn)設(shè)計(jì),特別適合在S頻段統(tǒng)一測(cè)控系統(tǒng)監(jiān)控軟件中使用,根據(jù)該系統(tǒng)的特點(diǎn)增加了輸入信息合法性的實(shí)時(shí)判斷、異常處理功能。與普通控件相比,不僅在執(zhí)行效率等方面沒有明顯的降低,而且該控件也具備便捷的代碼調(diào)試能力和高度的可靠性,已在多個(gè)S頻段統(tǒng)一測(cè)控系統(tǒng)軟件中使用,運(yùn)行非??煽?。
[1]孫 皓.Visual C++范例大全[M].北京:機(jī)械工業(yè)出版社,2009.
[2]錢 能.C++程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2001.
[3]LIPPMAN S B.Essential C++[M](中文版).侯 捷,譯.武漢:華中科技大學(xué)出版社,2009.
[4]DEITEL H M,DEITEL P J.C++大學(xué)教程[M].北京:電子工業(yè)出版社,2009.
[5]LIPPMAN S B,LAJOIE J.C++Primer[M](中文版).北京:中國(guó)電力出版社,2001.
[6]KRUGLINSKI D J.Visual C++技術(shù)內(nèi)幕[M].北京:清華大學(xué)出版社,1997.
[7]楊正甫.面向?qū)ο蠓治雠c設(shè)計(jì)[M].北京:中國(guó)鐵道出版社,1997.