|
[摘 要]與設備通信的驅動程序是世紀星組態軟件的重要組成部分,本文主要講述組件技術在開發世紀星驅動程序時的應用。
1、引言
在zai工gong控kong軟ruan件jian中zhong,數shu據ju的de采cai集ji和he下xia發fa直zhi接jie影ying響xiang係xi統tong的de性xing能neng,因yin此ci對dui於yu如ru何he構gou架jia一yi個ge高gao效xiao合he理li的de軟ruan件jian係xi統tong在zai工gong控kong界jie一yi直zhi被bei廣guang泛fan關guan注zhu。在zai組zu態tai軟ruan件jian中zhong,一yi般ban可ke分fen為wei兩liang部bu分fen:renjijiekouheshujucaijimokuai。qizhongshiyonghuhexianchangshebeijinxingtongxindejiekou,yaozuodaozhiguanyiyongyibianyuyonghuduishengchanqingkuangdelejiehecaozuo,eryaoyishujucaijimokuaizuoweizhicheng,kejianshujucaijimokuaizaigongkongruanjianzhongdezhongyaoxing。weileshiyinggezhongbutongdeshebei,shijixingdequdongchengxucaiyonglezujianjishu,shishujucaijimokuaijuyougaoxingneng、高可靠性、靈活、便於升級等重要特性。
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技術實現數據通信既方便了開發人員對新設備驅動的開發,又便於用戶對驅動的升級,同時增強了世紀星本身的可擴展性。
|