|
[摘 要]與設備通信的驅動程序是世紀星組態軟件的重要組成部分,本文主要講述組件技術在開發世紀星驅動程序時的應用。
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):人(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 Modeljizujianduixiangmoxing,tashiweiruantichudeyitaokaifaruanjiandefangfayuguifan。zujianshijishangshiyixiexiaodeerjinzhikezhixingchengxu,tamenkeyigeiyingyongchengxu,caozuoxitongyijiqitazujiantigongfuwu,nenggoukuayuelianjieku、應用程序、係統軟件甚至網絡軟件,多個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。
第di四si,組zu件jian式shi開kai發fa便bian於yu軟ruan件jian係xi統tong的de升sheng級ji,當dang某mou部bu分fen功gong能neng需xu要yao升sheng級ji時shi,開kai發fa人ren員yuan隻zhi需xu修xiu改gai相xiang應ying組zu件jian即ji可ke,而er用yong戶hu隻zhi需xu替ti換huan原yuan來lai的de組zu件jian,這zhe就jiu使shi得de軟ruan件jian升sheng級ji隻zhi是shi替ti換huan一yi些xie組zu件jian而er已yi。
第五,組件式開發便於軟件開發的分工協作,每個組件各自完成所需功能,隻需在進行開發前協商好接口即可。
世紀星數據采集模塊
數據采集模塊是世紀星軟件係統的後台服務程序,負責從現場設備采集數據並將數據提供給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;
…… ……
};
該接口的實現是在COM組(zu)件(jian)中(zhong),因(yin)為(wei)設(she)備(bei)不(bu)同(tong),所(suo)以(yi)實(shi)現(xian)也(ye)有(you)所(suo)不(bu)同(tong),但(dan)同(tong)類(lei)設(she)備(bei)也(ye)有(you)一(yi)些(xie)相(xiang)同(tong)之(zhi)處(chu),比(bi)如(ru)智(zhi)能(neng)儀(yi)表(biao)大(da)多(duo)都(dou)是(shi)通(tong)過(guo)串(chuan)口(kou)進(jin)行(xing)通(tong)信(xin),而(er)對(dui)串(chuan)口(kou)的(de)參(can)數(shu)設(she)置(zhi)是(shi)這(zhe)類(lei)設(she)備(bei)的(de)共(gong)同(tong)之(zhi)處(chu),為(wei)此(ci)我(wo)們(men)定(ding)義(yi)一(yi)個(ge)類(lei)CDevice:public IdeviceAccess,這個類完成初始化等基本的功能,而讀寫數據ReadData和WriteData都進行空實現,讓所有相關設備以CDevice為基類然後重寫ReadData和WriteData即可。世紀星的驅動組件是使用MFC開發的,MFC是通過嵌套類實現COM功能,在世紀星中我們以繼承CDevice的類作為嵌套類,這個嵌套類完成一些具體功能,它所在的類我們成為外部類,外部類提供一個全局唯一的CLSID,DataComm通過CLSID定位組件,然後使用之前定義的接口完成與設備的通信,通過圖3描述如下:

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