COM組件技術(shù)在世紀(jì)星驅(qū)動開發(fā)中的應(yīng)用
摘 要:與設(shè)備通信的驅(qū)動程序是世紀(jì)星組態(tài)軟件的重要組成部分,本文主要講述COM組件技術(shù)在開發(fā)世紀(jì)星驅(qū)動程序時的應(yīng)用。
1 引言
在工控軟件中,數(shù)據(jù)的采集和下發(fā)直接影響系統(tǒng)的性能,因此對于如何構(gòu)架一個高效合理的軟件系統(tǒng)在工控界一直被廣泛關(guān)注。在組態(tài)軟件中,一般可分為兩部分:HMI人機接口和數(shù)據(jù)采集模塊。其中HMI是用戶和現(xiàn)場設(shè)備進(jìn)行通信的接口,HMI要做到直觀易用以便于用戶對生產(chǎn)情況的了解和操作,而HMI要以數(shù)據(jù)采集模塊作為支撐,可見數(shù)據(jù)采集模塊在工控軟件中的重要性。為了適應(yīng)各種不同的設(shè)備,世紀(jì)星的驅(qū)動程序采用了組件技術(shù),使數(shù)據(jù)采集模塊具有高性能、高可靠性、靈活、便于升級等重要特性。
2 COM組件技術(shù)
COM--Component Object Model,即組件對象模型,它是微軟提出的一套開發(fā)軟件的方法與規(guī)范。組件實際上是一些小的二進(jìn)制可執(zhí)行程序,它們可以給應(yīng)用程序,操作系統(tǒng),以及其他組件提供服務(wù),能夠跨越鏈接庫、應(yīng)用程序、系統(tǒng)軟件甚至網(wǎng)絡(luò)軟件,多個COM對象甚至可以聯(lián)接起來形成應(yīng)用程序或組件系統(tǒng)。組件式程序設(shè)計方法能像搭積木一樣開發(fā)大而復(fù)雜的軟件系統(tǒng),并且可以利用以往開發(fā)的組件資源而不必進(jìn)行二次開發(fā)。COM(組件對象模型)是一個與操作平臺 無關(guān)的、分布的、面向?qū)ο蟮臋C制,其本質(zhì)特性是COM對象的接口與實現(xiàn)的分離?;贑OM的組件開發(fā)具有以下幾點優(yōu)勢:
第一,從用戶的角度考慮,用戶一般希望能夠定制所用的應(yīng)用程序,而組件技術(shù)從本質(zhì)上講就是可被定制的,因而用戶可以用更能滿足他們需要的某個組件來替換原來的那個。
第二,由于組件是相對應(yīng)用程序獨立的部件,我們可以在不同的程序中使用同一個組件而不會產(chǎn)生任何問題,軟件的可重用性將大大的得到增強。
第三,隨著網(wǎng)絡(luò)應(yīng)用的普及,分布式網(wǎng)絡(luò)應(yīng)用程序在軟件市場上變得越來越重要。組件架構(gòu)可以使得開發(fā)這類應(yīng)用程序的過程得以簡化。
第四,組件式開發(fā)便于軟件系統(tǒng)的升級,當(dāng)某部分功能需要升級時,開發(fā)人員只需修改相應(yīng)組件即可,而用戶只需替換原來的組件,這就使得軟件升級只是替換一些組件而已。
第五,組件式開發(fā)便于軟件開發(fā)的分工協(xié)作,每個組件各自完成所需功能,只需在進(jìn)行開發(fā)前協(xié)商好接口即可。
3 世紀(jì)星數(shù)據(jù)采集模塊
數(shù)據(jù)采集模塊是世紀(jì)星軟件系統(tǒng)的后臺服務(wù)程序,負(fù)責(zé)從現(xiàn)場設(shè)備采集數(shù)據(jù)并將數(shù)據(jù)提供給HMI,而HMI產(chǎn)生的控制信號又通過數(shù)據(jù)采集模塊傳輸給設(shè)備,這樣就達(dá)到了用戶與設(shè)備的相互對話。其信息流如圖1所示:
圖1
在數(shù)據(jù)采集模塊中,基本上由兩部分組成,一部分是和設(shè)備相對應(yīng)的驅(qū)動程序,該程序既是一個COM組件,另有一個控制程序DataComm負(fù)責(zé)調(diào)用驅(qū)動程序以及和其他模塊通信。在上位機和下位機或其他一些板卡進(jìn)行通信時大致有以下幾種方式:串口,TCP/IP,計算機PCI卡,數(shù)據(jù)采集模塊通過一個統(tǒng)一的接口訪問不同的設(shè)備,設(shè)備驅(qū)動文件只需完成該接口功能即可,這樣在與新設(shè)備通信時DataComm不必修改,只要開發(fā)出與該設(shè)備通信的驅(qū)動組件就能完成上位機與設(shè)備之間的通信,DataComm與驅(qū)動程序之間的關(guān)系如圖2所示:
圖2
4 設(shè)備驅(qū)動的接口設(shè)計與實現(xiàn)
每個COM組件都至少有一個IUnknown接口或繼承IUnknown的子接口,IUnknown接口負(fù)責(zé)查詢該組件的其他接口和維護(hù)引用計數(shù),引用計數(shù)與組件對象持久性相關(guān),本文不詳細(xì)闡述。前面說訪問設(shè)備使用統(tǒng)一的接口,那么該接口應(yīng)該具有所有操作設(shè)備通用的功能,如初始化和關(guān)閉設(shè)備,讀寫數(shù)據(jù)等。在C++中使用抽象基類作為接口,其部分定義如下:
class IDeviceAccess : public IUnknown
{
public:
virtual HRESULT __stdcall QueryInterface(REFIID iid, void** ppvObj) = 0;
virtual ULONG __stdcall AddRef() = 0;
virtual ULONG __stdcall Release() = 0;
public:
virtual BOOL __stdcall UnInitialDevice( LPDEVADDR pDevAddr )=0;
virtual BOOL __stdcall InitialDevice( LPDEVINIDATA pInitDat )=0;
virtual BOOL __stdcall ReadData(…… )=0;
virtual BOOL __stdcall WriteData( …… )=0;
…… ……
};
該接口的實現(xiàn)是在COM組件中,因為設(shè)備不同,所以實現(xiàn)也有所不同,但同類設(shè)備也有一些相同之處,比如智能儀表大多都是通過串口進(jìn)行通信,而對串口的參數(shù)設(shè)置是這類設(shè)備的共同之處,為此我們定義一個類CDevice:public IdeviceAccess,這個類完成初始化等基本的功能,而讀寫數(shù)據(jù)ReadData和WriteData都進(jìn)行空實現(xiàn),讓所有相關(guān)設(shè)備以CDevice為基類然后重寫ReadData和WriteData即可。世紀(jì)星的驅(qū)動組件是使用MFC開發(fā)的,MFC是通過嵌套類實現(xiàn)COM功能,在世紀(jì)星中我們以繼承CDevice的類作為嵌套類,這個嵌套類完成一些具體功能,它所在的類我們成為外部類,外部類提供一個全局唯一的CLSID,DataComm通過CLSID定位組件,然后使用之前定義的接口完成與設(shè)備的通信,通過圖3描述如下:
圖3
提交
世紀(jì)星 V7.10網(wǎng)絡(luò)版組態(tài)軟件
世紀(jì)星 V7.10標(biāo)準(zhǔn)版組態(tài)軟件
世紀(jì)長秋“東北區(qū)新技術(shù)系列研討會”沈陽站火熱開幕
世紀(jì)星 V7.50組態(tài)軟件
世紀(jì)長秋“華中區(qū)新技術(shù)系列研討會”南京站圓滿落幕