OPC DA 服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
3 OPC DA 服務(wù)器與客戶端數(shù)據(jù)訪問的交互過程
OPC 客戶端對在進(jìn)行數(shù)據(jù)訪問時(shí),是以組為單位的,每個(gè)組中可以加入客戶端需要訪問的數(shù)據(jù)項(xiàng),具體的訪問交互過程如下:
(1) OPC DA 客戶端查找并訪問一個(gè)OPC DA 服務(wù)器,此時(shí)在OPC DA 服務(wù)器端,創(chuàng)建一個(gè)Server 對象,并返回一個(gè)接口指針;
(2) 客戶端由返回的指針找到接口IOPCServer,通過IOPCServer::AddGroup()函數(shù)添加一個(gè)Group;服務(wù)器端則生成一個(gè)Group 對象,返回一個(gè)該Group 對象的接口指針;
(3) 客戶端利用該指針查找IOPCItemMgt 接口,調(diào)用函數(shù)AddItem()在服務(wù)器添加一個(gè)或多個(gè)item 數(shù)據(jù)項(xiàng)item 對象,然后便可對該組對象中的數(shù)據(jù)項(xiàng)進(jìn)行存取等操作;
(4) 同步訪問:查找Group 對象的IOPCSyncIO 接口,直接調(diào)用Read(),Write()函數(shù);異步訪問:a)注冊,查找Group 對象的IConnnectionContianer 接口,找到一個(gè)支持OPCDataCallback 接口的連接點(diǎn)對象,客戶端生成IOPCDataCallback 對象并在連接點(diǎn)IConnectionPoint 上注冊;b)查找IAsyncIO 接口,客戶端調(diào)用該接口的Read,Write,Refresh等函數(shù),然后直接返回;c)完成數(shù)據(jù)存取后,服務(wù)器回調(diào)已經(jīng)注冊的IOPCDataCallback 接口的相關(guān)函數(shù),如OnDataChange 等,此時(shí)客戶端可以通過回調(diào)函數(shù)獲到返回的結(jié)果; (5) 清理現(xiàn)場,釋放接口指針并返回;
4 結(jié)束語
OPC 標(biāo)準(zhǔn)在硬件和軟件廠商之間建立了規(guī)范的聯(lián)系,其工控領(lǐng)域得到了廣泛的應(yīng)用,成為一個(gè)事實(shí)上的軟件總線。可適配的OPC DA 服務(wù)器則是將其上層進(jìn)行了封裝,對下層數(shù)據(jù)源存取進(jìn)行了接口抽象,將數(shù)據(jù)采集同具體的數(shù)據(jù)源分離,從而降低了數(shù)據(jù)訪問的耦合性。采用可適配模式的OPC DA 服務(wù)器,可以針對不同的數(shù)據(jù)采集模式,依照具體采集卡情況實(shí)現(xiàn)適配接口,從而縮短軟件整體開發(fā)的周期,提高實(shí)際應(yīng)用的速度。
評論