技術(shù)頻道

      COM組件技術(shù)在世紀(jì)星驅(qū)動(dòng)開(kāi)發(fā)中的應(yīng)用

      [摘 要]與設(shè)備通信的驅(qū)動(dòng)程序是世紀(jì)星組態(tài)軟件的重要組成部分,本文主要講述COM組件技術(shù)在開(kāi)發(fā)世紀(jì)星驅(qū)動(dòng)程序時(shí)的應(yīng)用。

      1 引言

      在工控軟件中,數(shù)據(jù)的采集和下發(fā)直接影響系統(tǒng)的性能,因此對(duì)于如何構(gòu)架一個(gè)高效合理的軟件系統(tǒng)在工控界一直被廣泛關(guān)注。在組態(tài)軟件中,一般可分為兩部分:HMI人機(jī)接口和數(shù)據(jù)采集模塊。其中HMI是用戶(hù)和現(xiàn)場(chǎng)設(shè)備進(jìn)行通信的接口,HMI要做到直觀易用以便于用戶(hù)對(duì)生產(chǎn)情況的了解和操作,而HMI要以數(shù)據(jù)采集模塊作為支撐,可見(jiàn)數(shù)據(jù)采集模塊在工控軟件中的重要性。為了適應(yīng)各種不同的設(shè)備,世紀(jì)星的驅(qū)動(dòng)程序采用了組件技術(shù),使數(shù)據(jù)采集模塊具有高性能、高可靠性、靈活、便于升級(jí)等重要特性。

      2 COM組件技術(shù)

      COM--Component Object Model,即組件對(duì)象模型,它是微軟提出的一套開(kāi)發(fā)軟件的方法與規(guī)范。組件實(shí)際上是一些小的二進(jìn)制可執(zhí)行程序,它們可以給應(yīng)用程序,操作系統(tǒng),以及其他組件提供服務(wù),能夠跨越鏈接庫(kù)、應(yīng)用程序、系統(tǒng)軟件甚至網(wǎng)絡(luò)軟件,多個(gè)COM對(duì)象甚至可以聯(lián)接起來(lái)形成應(yīng)用程序或組件系統(tǒng)。組件式程序設(shè)計(jì)方法能像搭積木一樣開(kāi)發(fā)大而復(fù)雜的軟件系統(tǒng),并且可以利用以往開(kāi)發(fā)的組件資源而不必進(jìn)行二次開(kāi)發(fā)。COM(組件對(duì)象模型)是一個(gè)與操作平臺(tái) 無(wú)關(guān)的、分布的、面向?qū)ο蟮臋C(jī)制,其本質(zhì)特性是COM對(duì)象的接口與實(shí)現(xiàn)的分離。基于COM的組件開(kāi)發(fā)具有以下幾點(diǎn)優(yōu)勢(shì):

      第一,從用戶(hù)的角度考慮,用戶(hù)一般希望能夠定制所用的應(yīng)用程序,而組件技術(shù)從本質(zhì)上講就是可被定制的,因而用戶(hù)可以用更能滿(mǎn)足他們需要的某個(gè)組件來(lái)替換原來(lái)的那個(gè)。

      第二,由于組件是相對(duì)應(yīng)用程序獨(dú)立的部件,我們可以在不同的程序中使用同一個(gè)組件而不會(huì)產(chǎn)生任何問(wèn)題,軟件的可重用性將大大的得到增強(qiáng)。

      第三,隨著網(wǎng)絡(luò)應(yīng)用的普及,分布式網(wǎng)絡(luò)應(yīng)用程序在軟件市場(chǎng)上變得越來(lái)越重要。組件價(jià)構(gòu)可以使得開(kāi)發(fā)這類(lèi)應(yīng)用程序的過(guò)程得以簡(jiǎn)化。

      第四,組件式開(kāi)發(fā)便于軟件系統(tǒng)的升級(jí),當(dāng)某部分功能需要升級(jí)時(shí),開(kāi)發(fā)人員只需修改相應(yīng)組件即可,而用戶(hù)只需替換原來(lái)的組件,這就使得軟件升級(jí)只是替換一些組件而已。

      第五,組件式開(kāi)發(fā)便于軟件開(kāi)發(fā)的分工協(xié)作,每個(gè)組件各自完成所需功能,只需在進(jìn)行開(kāi)發(fā)前協(xié)商好接口即可。

      3 世紀(jì)星數(shù)據(jù)采集模塊

      數(shù)據(jù)采集模塊是世紀(jì)星軟件系統(tǒng)的后臺(tái)服務(wù)程序,負(fù)責(zé)從現(xiàn)場(chǎng)設(shè)備采集數(shù)據(jù)并將數(shù)據(jù)提供給HMI,而HMI產(chǎn)生的控制信號(hào)又通過(guò)數(shù)據(jù)采集模塊傳輸給設(shè)備,這樣就達(dá)到了用戶(hù)與設(shè)備的相互對(duì)話。其信息流如圖1所示:

      世紀(jì)長(zhǎng)秋 世紀(jì)星組態(tài)軟件

      1

      在數(shù)據(jù)采集模塊中,基本上由兩部分組成,一部分是和設(shè)備相對(duì)應(yīng)的驅(qū)動(dòng)程序,該程序既是一個(gè)COM組件,另有一個(gè)控制程序DataComm負(fù)責(zé)調(diào)用驅(qū)動(dòng)程序以及和其他模塊通信。在上位機(jī)和下位機(jī)或其他一些板卡進(jìn)行通信時(shí)大致有以下幾種方式:串口,TCP/IP,計(jì)算機(jī)PCI卡,數(shù)據(jù)采集模塊通過(guò)一個(gè)統(tǒng)一的接口訪問(wèn)不同的設(shè)備,設(shè)備驅(qū)動(dòng)文件只需完成該接口功能即可,這樣在與新設(shè)備通信時(shí)DataComm不必修改,只要開(kāi)發(fā)出與該設(shè)備通信的驅(qū)動(dòng)組件就能完成上位機(jī)與設(shè)備之間的通信,DataComm與驅(qū)動(dòng)程序之間的關(guān)系如圖2所示:

      世紀(jì)長(zhǎng)秋 世紀(jì)星組態(tài)軟件

      2

      4 設(shè)備驅(qū)動(dòng)的接口設(shè)計(jì)與實(shí)現(xiàn)

      每個(gè)COM組件都至少有一個(gè)IUnknown接口或繼承IUnknown的子接口,IUnknown接口負(fù)責(zé)查詢(xún)?cè)摻M件的其他接口和維護(hù)引用計(jì)數(shù),引用計(jì)數(shù)與組件對(duì)象持久性相關(guān),本文不詳細(xì)闡述。前面說(shuō)訪問(wèn)設(shè)備使用統(tǒng)一的接口,那么該接口應(yīng)該具有所有操作設(shè)備通用的功能,如初始化和關(guān)閉設(shè)備,讀寫(xiě)數(shù)據(jù)等。在C++中使用抽象基類(lèi)作為接口,其部分定義如下:

      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;

      …… ……

      };

      該接口的實(shí)現(xiàn)是在COM組件中,因?yàn)樵O(shè)備不同,所以實(shí)現(xiàn)也有所不同,但同類(lèi)設(shè)備也有一些相同之處,比如智能儀表大多都是通過(guò)串口進(jìn)行通信,而對(duì)串口的參數(shù)設(shè)置是這類(lèi)設(shè)備的共同之處,為此我們定義一個(gè)類(lèi)CDevicepublic IdeviceAccess,這個(gè)類(lèi)完成初始化等基本的功能,而讀寫(xiě)數(shù)據(jù)ReadDataWriteData都進(jìn)行空實(shí)現(xiàn),讓所有相關(guān)設(shè)備以CDevice為基類(lèi)然后重寫(xiě)ReadDataWriteData即可。世紀(jì)星的驅(qū)動(dòng)組件是使用MFC開(kāi)發(fā)的,MFC是通過(guò)嵌套類(lèi)實(shí)現(xiàn)COM功能,在世紀(jì)星中我們以繼承CDevice的類(lèi)作為嵌套類(lèi),這個(gè)嵌套類(lèi)完成一些具體功能,它所在的類(lèi)我們成為外部類(lèi),外部類(lèi)提供一個(gè)全局唯一的CLSIDDataComm通過(guò)CLSID定位組件,然后使用之前定義的接口完成與設(shè)備的通信,通過(guò)圖3描述如下:

      世紀(jì)長(zhǎng)秋 世紀(jì)星組態(tài)軟件

      3

      5 小結(jié)

      數(shù)據(jù)采集模塊的性能是影響工控軟件的一個(gè)重要因素,高效穩(wěn)定的數(shù)據(jù)通信服務(wù)是工控軟件或許更大發(fā)展的基本保證。世紀(jì)星使用COM技術(shù)實(shí)現(xiàn)數(shù)據(jù)通信既方便了開(kāi)發(fā)人員對(duì)新設(shè)備驅(qū)動(dòng)的開(kāi)發(fā),又便于用戶(hù)對(duì)驅(qū)動(dòng)的升級(jí),同時(shí)增強(qiáng)了世紀(jì)星本身的可擴(kuò)展性。

      文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。

      主站蜘蛛池模板: 国产免费一区二区三区免费视频| 日本精品3d动漫一区二区| 亚洲制服丝袜一区二区三区| 国精产品一区一区三区| 熟女少妇精品一区二区| 国产无线乱码一区二三区| 性色av一区二区三区夜夜嗨 | 免费一区二区无码视频在线播放| 国产精品一区二区在线观看| 免费国产在线精品一区| 日本道免费精品一区二区| 99精品国产一区二区三区不卡| 中文字幕无线码一区二区| 国产伦精品一区三区视频| 久久久久成人精品一区二区| 一区一区三区产品乱码| 亚洲福利精品一区二区三区| 国产一区二区电影| 亚洲国产成人精品久久久国产成人一区二区三区综| 日本精品一区二区三本中文| 久久人妻内射无码一区三区| 五十路熟女人妻一区二区 | 亚洲一区AV无码少妇电影☆| 亚洲va乱码一区二区三区| 亚洲国产精品一区二区第一页免| 日韩精品无码一区二区三区| 一区二区三区亚洲视频| 麻豆AV天堂一区二区香蕉| 国产成人久久精品一区二区三区| 成人久久精品一区二区三区| 国产激情з∠视频一区二区| 国产91一区二区在线播放不卡 | 3d动漫精品啪啪一区二区免费 | 色久综合网精品一区二区| 中文字幕在线观看一区二区三区| 国产成人av一区二区三区不卡| 亚洲综合一区二区精品久久| 无码国产精品一区二区免费16 | 国产精品一区二区久久精品涩爱| 国产激情无码一区二区app| 人妻少妇一区二区三区|