|
[摘 要]與設備通信的驅動程序是世紀星組態軟件的重要組成部分,本文主要講述組件技術在開發世紀星驅動程序時的應用。
1、引言
zaigongkongruanjianzhong,shujudecaijihexiafazhijieyingxiangxitongdexingneng,yinciduiyuruhegoujiayigegaoxiaohelideruanjianxitongzaigongkongjieyizhibeiguangfanguanzhu。zaizutairuanjianzhong,yibankefenweiliangbufen:人ren機ji接jie口kou和he數shu據ju采cai集ji模mo塊kuai。其qi中zhong是shi用yong戶hu和he現xian場chang設she備bei進jin行xing通tong信xin的de接jie口kou,要yao做zuo到dao直zhi觀guan易yi用yong以yi便bian於yu用yong戶hu對dui生sheng產chan情qing況kuang的de了le解jie和he操cao作zuo,而er要yao以yi數shu據ju采cai集ji模mo塊kuai作zuo為wei支zhi撐cheng,可ke見jian數shu據ju采cai集ji模mo塊kuai在zai工gong控kong軟ruan件jian中zhong的de重zhong要yao性xing。為wei了le適shi應ying各ge種zhong不bu同tong的de設she備bei,世shi紀ji星xing的de驅qu動dong程cheng序xu采cai用yong了le組zu件jian技ji術shu,使shi數shu據ju采cai集ji模mo塊kuai具ju有you高gao性xing能neng、高可靠性、靈活、便於升級等重要特性。
2 COM組件技術
COM--Component Object Model即(ji)組(zu)件(jian)對(dui)象(xiang)模(mo)型(xing),它(ta)是(shi)微(wei)軟(ruan)提(ti)出(chu)的(de)一(yi)套(tao)開(kai)發(fa)軟(ruan)件(jian)的(de)方(fang)法(fa)與(yu)規(gui)範(fan)。組(zu)件(jian)實(shi)際(ji)上(shang)是(shi)一(yi)些(xie)小(xiao)的(de)二(er)進(jin)製(zhi)可(ke)執(zhi)行(xing)程(cheng)序(xu),它(ta)們(men)可(ke)以(yi)給(gei)應(ying)用(yong)程(cheng)序(xu),操(cao)作(zuo)係(xi)統(tong)以(yi)及(ji)其(qi)他(ta)組(zu)件(jian)提(ti)供(gong)服(fu)務(wu),能(neng)夠(gou)跨(kua)越(yue)鏈(lian)接(jie)庫(ku)、應用程序、係統軟件甚至網絡軟件,多個COM對dui象xiang甚shen至zhi可ke以yi聯lian接jie起qi來lai形xing成cheng應ying用yong程cheng序xu或huo組zu件jian係xi統tong。組zu件jian式shi程cheng序xu設she計ji方fang法fa能neng像xiang搭da積ji木mu一yi樣yang開kai發fa大da而er複fu雜za的de軟ruan件jian係xi統tong,並bing且qie可ke以yi利li用yong以yi往wang開kai發fa的de組zu件jian資zi源yuan而er不bu必bi進jin行xing二er次ci開kai發fa。COM組件對象模型)是一個與操作平台 無關的、分布的、麵向對象的機製,其本質特性是COM對象的接口與實現的分離。基於<的組件開發具有以下幾點優勢:
第di一yi,從cong用yong戶hu的de角jiao度du考kao慮lv,用yong戶hu一yi般ban希xi望wang能neng夠gou定ding製zhi所suo用yong的de應ying用yong程cheng序xu,而er組zu件jian技ji術shu從cong本ben質zhi上shang講jiang就jiu是shi可ke被bei定ding製zhi的de,因yin而er用yong戶hu可ke以yi用yong更geng能neng滿man足zu他ta們men需xu要yao的de某mou個ge組zu件jian來lai替ti換huan原yuan來lai的de那na個ge。
第(di)二(er),由(you)於(yu)組(zu)件(jian)是(shi)相(xiang)對(dui)應(ying)用(yong)程(cheng)序(xu)獨(du)立(li)的(de)部(bu)件(jian),我(wo)們(men)可(ke)以(yi)在(zai)不(bu)同(tong)的(de)程(cheng)序(xu)中(zhong)使(shi)用(yong)同(tong)一(yi)個(ge)組(zu)件(jian)而(er)不(bu)會(hui)產(chan)生(sheng)任(ren)何(he)問(wen)題(ti),軟(ruan)件(jian)的(de)可(ke)重(zhong)用(yong)性(xing)將(jiang)大(da)大(da)的(de)得(de)到(dao)增(zeng)強(qiang)。
第di三san,隨sui著zhe網wang絡luo應ying用yong的de普pu及ji,分fen布bu式shi網wang絡luo應ying用yong程cheng序xu在zai軟ruan件jian市shi場chang上shang變bian得de越yue來lai越yue重zhong要yao。組zu件jian價jia構gou可ke以yi使shi得de開kai發fa這zhe類lei應ying用yong程cheng序xu的de過guo程cheng得de以yi簡jian化hua。
disi,zujianshikaifabianyuruanjianxitongdeshengji,dangmoubufengongnengxuyaoshengjishi,kaifarenyuanzhixuxiugaixiangyingzujianjike,eryonghuzhixutihuanyuanlaidezujian,zhejiushideruanjianshengjizhishitihuanyixiezujianeryi。
第五,組件式開發便於軟件開發的分工協作,每個組件各自完成所需功能,隻需在進行開發前協商好接口即可。
世紀星數據采集模塊
數據采集模塊是世紀星軟件係統的後台服務程序,負責從現場設備采集數據並將數據提供給HMI,而HMI產生的控製信號又通過數據采集模塊傳輸給設備,這樣就達到了用戶與設備的相互對話。其信息流如圖1所示:

圖1
在數據采集模塊中,基本上由兩部分組成,一部分是和設備相對應的驅動程序,該程序既是一個COM組件,另有一個控製程序DataComm負責調用驅動程序以及和其他模塊通信。在上位機和下位機或其他一些板卡進行通信時大致有以下幾種方式:串口,TCP/IP,計算機PCI卡,數據采集模塊通過一個統一的接口訪問不同的設備,設備驅動文件隻需完成該接口功能即可,這樣在與新設備通信時DataComm不必修改,隻要開發出與該設備通信的驅動組件就能完成上位機與設備之間的通信,DataComm與驅動程序之間的關係如圖2所示:

圖2
4 設備驅動的接口設計與實現
每個COM組件都至少有一個IUnknown接口或繼承IUnknown的子接口,IUnknown接jie口kou負fu責ze查zha詢xun該gai組zu件jian的de其qi他ta接jie口kou和he維wei護hu引yin用yong計ji數shu,引yin用yong計ji數shu與yu組zu件jian對dui象xiang持chi久jiu性xing相xiang關guan,本ben文wen不bu詳xiang細xi闡chan述shu。前qian麵mian說shuo訪fang問wen設she備bei使shi用yong統tong一yi的de接jie口kou,那na麼me該gai接jie口kou應ying該gai具ju有you所suo有you操cao作zuo設she備bei通tong用yong的de功gong能neng,如ru初chu始shi化hua和he關guan閉bi設she備bei,讀du寫xie數shu據ju等deng。在zaiC++中使用抽象基類作為接口,其部分定義如下:
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;
…… ……
};
該接口的實現是在COMzujianzhong,yinweishebeibutong,suoyishixianyeyousuobutong,dantongleishebeiyeyouyixiexiangtongzhichu,biruzhinengyibiaodaduodoushitongguochuankoujinxingtongxin,erduichuankoudecanshushezhishizheleishebeidegongtongzhichu,weiciwomendingyiyigeleiCDevice:public IdeviceAccess,這個類完成初始化等基本的功能,而讀寫數據ReadData和WriteData都進行空實現,讓所有相關設備以CDevice為基類然後重寫ReadData和WriteData即可。世紀星的驅動組件是使用MFC開發的,MFC是通過嵌套類實現COM功能,在世紀星中我們以繼承CDevice的類作為嵌套類,這個嵌套類完成一些具體功能,它所在的類我們成為外部類,外部類提供一個全局唯一的CLSID,DataComm通過CLSID定位組件,然後使用之前定義的接口完成與設備的通信,通過圖3描述如下:

圖3
5 小結 數據采集模塊的性能是影響工控軟件的一個重要因素,高效穩定的數據通信服務是工控軟件或許更大發展的基本保證。世紀星使用COM技術實現數據通信既方便了開發人員對新設備驅動的開發,又便於用戶對驅動的升級,同時增強了世紀星本身的可擴展性。
|