趙海源,王麗芳,蔣澤軍
(西北工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,陜西 西安 710129)
隨著計(jì)算機(jī)在各個(gè)領(lǐng)域的廣泛應(yīng)用,種類繁多的控制設(shè)備和過程監(jiān)控裝置使得傳統(tǒng)的測控軟件已無法滿足用戶的各種需求。開發(fā)傳統(tǒng)的測控軟件時(shí),當(dāng)被控對(duì)象一旦有變動(dòng),就必須修改其控制系統(tǒng)的源程序,導(dǎo)致其開發(fā)周期長;已開發(fā)成功的測控軟件又由于每個(gè)控制項(xiàng)目的不同而使其重復(fù)使用率很低,導(dǎo)致它的價(jià)格非常昂貴;在修改測控軟件的源程序時(shí),倘若原來的編程人員因工作變動(dòng)而離去時(shí),則必須同其他人員或新手進(jìn)行源程序的修改,因而更是相當(dāng)困難?;跇?gòu)件[1]技術(shù)的測控軟件開發(fā)平臺(tái)的出現(xiàn)為解決上述實(shí)際工程問題提供了一種嶄新的方法,因?yàn)樗軌蚝芎玫亟鉀Q傳統(tǒng)測控軟件存在的種種問題,使用戶能根據(jù)自己的控制對(duì)象和控制目的的任意組態(tài)[2](Configuration),完成最終的自動(dòng)化控制工程。具體地說,測控軟件開發(fā)平臺(tái)是為測控軟件開發(fā)、調(diào)試和運(yùn)行提供的集成環(huán)境;利用該平臺(tái)可靈活配置硬件測試資源,以可視化的方式配置測試流程,并加載硬件接口的驅(qū)動(dòng)程序從而自動(dòng)生成測控軟件。
隨著近幾年Internet的飛速發(fā)展,使軟件應(yīng)用置身于更加廣闊的環(huán)境中,從而對(duì)應(yīng)用軟件的跨語言、跨平臺(tái)和互操作性提出了更高的要求。在這種情況下,傳統(tǒng)的面向?qū)ο骩3]思想難以適應(yīng)現(xiàn)代的分布式軟件應(yīng)用[4],組件化思想應(yīng)運(yùn)而生。組件化思想使得設(shè)計(jì)人員在軟件設(shè)計(jì)過程中更傾向于將功能從主程序中剝離出來,封裝在獨(dú)立的模塊中。
組件化設(shè)計(jì)的基本思想是將單獨(dú)的、龐大而復(fù)雜的應(yīng)用程序劃分成多個(gè)模塊,但這里每一個(gè)模塊不再是一個(gè)簡單的代碼集,而是一個(gè)自給自足的組件,每個(gè)組件保持一定的功能獨(dú)立性,在協(xié)同工作時(shí),通過相互之間的接口完成實(shí)際的任務(wù);這些組件可以單獨(dú)開發(fā),單獨(dú)編譯,甚至單獨(dú)調(diào)試和測試,當(dāng)所有的組件開發(fā)完成后,把它們組合在一起就得到了完整的應(yīng)用系統(tǒng)。當(dāng)系統(tǒng)的軟硬件環(huán)境發(fā)生變化或者用戶的需求有所更改時(shí),并不需要對(duì)所有的組件進(jìn)行修改,而只需對(duì)受影響的組件進(jìn)行修改,然后重新組合得到新的升級(jí)軟件測控軟件開發(fā)平臺(tái)基于組件化思想,發(fā)布訂閱機(jī)制、虛擬共享內(nèi)存等技術(shù),開發(fā)人員只需要關(guān)注測控邏輯的開發(fā),而不用過多地關(guān)注程序語言本身相關(guān)的知識(shí)和技術(shù),即使是對(duì)程序設(shè)計(jì)了解較少的工程人員,也可以快速地將測控領(lǐng)域的知識(shí)和技術(shù)應(yīng)用在測控軟件的開發(fā)中,并在短時(shí)間內(nèi)形成軟件產(chǎn)品。測控軟件通用開發(fā)平臺(tái)能通過可視化的流程設(shè)計(jì),構(gòu)建出與之相適應(yīng)的測控軟件源碼、工程文件和安裝文件。基于組件化思想的“測控軟件通用開發(fā)平臺(tái)”是標(biāo)準(zhǔn)化和規(guī)?;耐ㄓ脺y控開發(fā)軟件,利用該平臺(tái)中的標(biāo)準(zhǔn)功能組件可以實(shí)現(xiàn)組件管理、測控軟件的組裝、雙視圖界面的效果模擬、硬件資源管理、二次開發(fā)(平臺(tái)的擴(kuò)展、測控軟件的升級(jí))、ActiveX和COM封裝與集成等功能。
測控軟件通用開發(fā)平臺(tái)基于組件化設(shè)計(jì)思想,平臺(tái)具有通用性和擴(kuò)展性。測控軟件通用開發(fā)平臺(tái)的框架主要實(shí)現(xiàn)測控軟件的開發(fā),以及平臺(tái)的管理功能。為了支持平臺(tái)的擴(kuò)展性,實(shí)現(xiàn)了平臺(tái)的擴(kuò)展機(jī)制,包括組件的擴(kuò)展和組件的調(diào)試。測控軟件通用開發(fā)平臺(tái)的框架與擴(kuò)展圖如圖1所示。
圖1 開發(fā)平臺(tái)的框架與擴(kuò)展Fig.1 Framework of the development platform and extend
測控軟件通用開發(fā)平臺(tái)的任務(wù)是實(shí)現(xiàn)測控軟件的開發(fā),主要通過組態(tài)設(shè)計(jì)和系統(tǒng)發(fā)布功能完成。組態(tài)設(shè)計(jì)包含使用平臺(tái)拖放式組件在雙視圖界面中對(duì)測控軟件流程進(jìn)行設(shè)計(jì)。系統(tǒng)發(fā)布通過所完成的組態(tài)設(shè)計(jì),實(shí)現(xiàn)組件的順序組裝,生成VC工程并進(jìn)行打包,系統(tǒng)發(fā)布預(yù)留了編輯腳本的接口,提供開發(fā)人員編輯腳本控制測控軟件的功能。
測控軟件通用開發(fā)平臺(tái)的管理功能包含安全管理、日志管理、組件管理及資源管理。通過對(duì)平臺(tái)的管理為平臺(tái)對(duì)測控軟件開發(fā)提供支持。測控軟件通用開發(fā)平臺(tái)具有可擴(kuò)展性,通過提供組件開發(fā)向?qū)У墓δ?,為平臺(tái)提供ActiveX組件和COM組件的擴(kuò)展,將非平臺(tái)原有組件封裝成平臺(tái)自身的組件,并且擴(kuò)展組件時(shí),通過組件調(diào)試保證組件擴(kuò)展的可用性。測控軟件通用開發(fā)平臺(tái)啟動(dòng)平臺(tái)框架,動(dòng)態(tài)加載軟件平臺(tái)下的所有組件。當(dāng)測控軟件開發(fā)人員對(duì)平臺(tái)進(jìn)行操作時(shí),軟件平臺(tái)框架根據(jù)操作的信息實(shí)例化不同的組件對(duì)操作進(jìn)行相應(yīng),其時(shí)序圖如圖2所示。
圖2 時(shí)序圖Fig.2 Timing diagram
軟件平臺(tái)的框架是一個(gè)通用的可獨(dú)立運(yùn)行的程序,定義了軟件平臺(tái)的接口規(guī)范,可自動(dòng)加載符合軟件平臺(tái)接口規(guī)范的組件,是整個(gè)軟件平臺(tái)的基礎(chǔ)和主干,其主要作用有:
1)負(fù)責(zé)啟動(dòng)整個(gè)軟件平臺(tái)和注冊組件:軟件平臺(tái)啟動(dòng)后初始化窗體界面和組件管理器(ComponenetManager),掃描組件目錄,完成組件的注冊,并保存組件信息;
2)負(fù)責(zé)管理組件:完成組件接口的初始化,加載和卸載組件,并處理軟件平臺(tái)異常;
3)負(fù)責(zé)向外界提供使用組件功能的界面(如菜單、工具欄等),通過規(guī)范接口調(diào)用工廠類組件實(shí)例化功能組件。工廠類組件是框架實(shí)例化功能組件的入口,為框架提供功能組件的相關(guān)信息,并根據(jù)需要實(shí)例化相應(yīng)的功能組件。
軟件平臺(tái)框架為組件的實(shí)現(xiàn)和擴(kuò)展提供了一系列基礎(chǔ)接口,并制定組件的開發(fā)規(guī)范,簡化了后期組件的開發(fā)和擴(kuò)展。軟件平臺(tái)框架和組件接口間的類關(guān)系如圖3所示。組件可分為顯示類組件和不可顯示類組件:不可顯示類組件主要包括管理和控制軟件平臺(tái)的組件;顯示類組件具有界面視圖,主要包括窗口管理類組件、雙視圖類組件、界面視圖類組件、組態(tài)視圖類組件。開發(fā)組件時(shí),開發(fā)人員根據(jù)組件的特性,繼承相應(yīng)的基礎(chǔ)接口。例如具有雙視圖的組件繼承Doubleview Component接口,具有界面視圖的組件繼承Face Plate Component接口,具有組態(tài)視圖的組件繼承Link View Component接口。開發(fā)人員無需關(guān)心平臺(tái)底層的特性,只需繼承相應(yīng)接口類,結(jié)合組件的特定需求即可開發(fā)符合軟件平臺(tái)接口規(guī)范的組件。按照軟件平臺(tái)框架所定義的接口規(guī)范進(jìn)行組件的開發(fā),封裝組件的功能,提高組件的開發(fā)效率。
圖3 靜態(tài)類圖Fig.3 Static class diagram
軟件平臺(tái)中的組件是針對(duì)測控領(lǐng)域開發(fā)的一系列相關(guān)功能的集合體,組件本身具有良好的擴(kuò)展性和復(fù)用性。組件包含一個(gè)工廠[5]類組件以及一個(gè)或多個(gè)功能組件,通常被封裝在同一個(gè)動(dòng)態(tài)鏈接庫中。軟件平臺(tái)啟動(dòng)時(shí)自動(dòng)掃描組件目錄,并將可用組件注冊到框架中。組件的工廠類組件為組件提供與框架交互的接口,是組件實(shí)例化的入口。組件的結(jié)構(gòu)圖如4所示。
圖4 組件結(jié)構(gòu)圖Fig.4 Diagram of component structure
基礎(chǔ)組件與功能組件的劃分:
軟件平臺(tái)中的組件包括基礎(chǔ)組件和功能組件。基礎(chǔ)組件在軟件平臺(tái)啟動(dòng)時(shí)由框架自動(dòng)加載,僅實(shí)例化一次,初始化軟件的界面和基本功能;基礎(chǔ)組件包括Editpanel組件、生成/打包組件、硬件管理組件、日志記錄組件。功能組件輔助軟件平臺(tái)實(shí)現(xiàn)開發(fā)測控軟件流程中所需的具體功能,軟件平臺(tái)不會(huì)自動(dòng)加載功能組件,需開發(fā)人員在使用組件時(shí)可將其實(shí)例化,并可實(shí)例化多次;功能組件包括分
級(jí)組件、調(diào)試組件、流程控制組件、分布式通信組件、算法組件、腳本組件、數(shù)據(jù)存儲(chǔ)組件、顯示組件、加密解密組件。
功能組件是組件內(nèi)部實(shí)現(xiàn)的具有單一功能的程序,由工廠類組件接口實(shí)例化,并由軟件平臺(tái)框架調(diào)用。啟動(dòng)軟件平臺(tái)后,自動(dòng)掃描組件目錄,調(diào)用LoadPlugIn接口加載組件。組件中的工廠類組件實(shí)例化后,調(diào)用Register接口將功能組件注冊在組件注冊表中。
軟件平臺(tái)中的組件間通信包括數(shù)據(jù)交換和消息[6]傳遞兩部分。
1)數(shù)據(jù)交換
組件間的數(shù)據(jù)交換采用端口機(jī)制實(shí)現(xiàn)。端口定義了數(shù)據(jù)流的信息,包括端口號(hào)、端口在組件圖示內(nèi)的位置、端口傳輸數(shù)據(jù)類型、端口輸入輸出類型、端口接收或發(fā)送的數(shù)據(jù)值。開發(fā)人員可通過擴(kuò)展和自定義端口的數(shù)據(jù)類型完成批量數(shù)據(jù)的傳輸。軟件平臺(tái)使用強(qiáng)類型轉(zhuǎn)換機(jī)制,開發(fā)人員進(jìn)行組態(tài)時(shí),需保證接收端口的輸入數(shù)據(jù)類型與發(fā)送端口的輸出數(shù)據(jù)類型匹配,否則無法在端口間連線完成組件間通信。軟件平臺(tái)在組態(tài)設(shè)計(jì)階段完成端口匹配的工作,避免了開發(fā)人員因疏忽出現(xiàn)的錯(cuò)誤,簡化了組態(tài)的設(shè)計(jì)和調(diào)試,提高了組態(tài)運(yùn)行時(shí)的穩(wěn)定性。
2)消息傳遞
軟件平臺(tái)采用消息捕獲機(jī)制和發(fā)布-訂閱機(jī)制[7]共同完成組件間消息的傳遞。組件捕獲軟件平臺(tái)發(fā)布的所有消息,并對(duì)訂閱的消息做出相應(yīng)處理,同時(shí)繼續(xù)向下分發(fā)其它消息。組件間采用notify接口與report接口共同實(shí)現(xiàn)消息的發(fā)布-訂閱機(jī)制,對(duì)發(fā)布訂閱機(jī)制的描述如圖5所示。軟件平臺(tái)根據(jù)對(duì)消息的解析結(jié)果,將組件B和組件C注冊到組件A上,一個(gè)組件可注冊到多個(gè)組件上,實(shí)現(xiàn)消息的傳遞與控制。
軟件平臺(tái)根據(jù)對(duì)消息的解析,調(diào)用attach函數(shù)將組件B和組件C加入到組件A的notify鏈表中,并將組件A加入到組件B及組件C的report鏈表中。軟件平臺(tái)采用雙向記錄方式,使用report鏈表記錄組件注冊的對(duì)象,使用notify鏈表記錄注冊到該組件之上的其它組件,共同實(shí)現(xiàn)組件的注冊過程。
圖5 平臺(tái)通信機(jī)制Fig.5 Platform communication mechanism
組件觸發(fā)事件時(shí),將事件封裝為XML格式的消息,查詢r(jià)eport和notify鏈表,將變化的事件發(fā)布到鏈表上的所有組件,軟件平臺(tái)默認(rèn)組件接受所有類型的事件。
測控軟件開發(fā)平臺(tái)采用組件化的設(shè)計(jì)思想。使用組件化編程思想提高了組件的復(fù)用率,縮短了開發(fā)周期,降低了開發(fā)成本,提高了開發(fā)效率。組件化的設(shè)計(jì)思想使得測控軟件開發(fā)平臺(tái)的通用性、可移植性、可擴(kuò)展性和開發(fā)效率均得到有效提高,使得測控軟件通用開發(fā)平臺(tái)具有可靠性和易用性,并具有二次開發(fā)功能。
[1]張強(qiáng),周榮輝.com和.net構(gòu)件模型[J].教育信息化,2006(3):36-38.
ZHANG Qiang,ZHOU Rong-Hui.com and.net component model[J].Education information,2006(3):36-38.
[2]YIN Fei,DING Wei-ming.Patterns research in the design of configuration software[J].Computer Measurement and Control,2005,13(3):298-300.
[3]Piccioni M,Oriol M,Meyer B,et al.An idebased, integrated solution to schema evolution of objected software[J].ASE,2009(5):650-654.
[4]金敏,周翔.高級(jí)軟件開發(fā)過程[M].北京:清華大學(xué)出版社,2005.
[5]Erich Gama,Richard Helm,Ralph Johnson,等.設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)[M].李英軍,馬曉星,蔡敏,等譯.機(jī)械工業(yè)出版社,2007.
[6]姚啟鵬.基于消息中間件應(yīng)用框架的研究[J].計(jì)算機(jī)與現(xiàn)代化,2006(135):84-87.
YAO Qi-Peng.Research on MOM’s application framwork[J].Jisuanji yu Xiandaihua,2006(135):84-87.
[7]Behnel S,F(xiàn)iege L,Muhl G.On quality of service and publish-subscribe.In:Proe.of the 26th IEEE Int’t Conf.on distributed computing systems workshops[J].Lisboa:IEEE,2006(137):20-25.