<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > OPC簡(jiǎn)介及OPC DA 服務(wù)器的設計與實(shí)現

OPC簡(jiǎn)介及OPC DA 服務(wù)器的設計與實(shí)現

作者: 時(shí)間:2012-08-31 來(lái)源:網(wǎng)絡(luò ) 收藏

接口與對象:在各層次對象與接口的關(guān)系處理中,可以采用兩種方法:多繼承的方式,將Server/Group 對象繼承自每個(gè)標準規定的接口;或者采用聚合的方式,Server/Group 對象包含接口對象。本例采用的是第二種方式,該方式可以將使接口的編寫(xiě)相對獨立,以方便測試,并且有利于自動(dòng)化接口的可選擇。

本文引用地址:http://dyxdggzs.com/article/148479.htm

  使用 VC++編程,包含以下幾個(gè)主要的類(lèi):

  CServer:Server 對象的類(lèi),管理ICommon,IServer,IConnectionContainer等接口;

  COPCGroup:Group 對象的類(lèi),管理IOPCItemMgt,IOPCGroupStateMgt,IOPCSyncIO,IOPCAsyncIO,IConnectionContainer 等接口;

  其他接口類(lèi):每個(gè)接口還對應一個(gè)類(lèi)(如:CIOPCItemMgtImp 是IOPCItemMgt 的具體),該類(lèi)完成OPC 標準規定的對應接口的功能函數,類(lèi)的實(shí)例化對象將以聚合的方式接受Server 或Group 對象的管理;

  數據緩存區的構造:在 OPC 中,Cache 是重要的部分,存儲結構將直接影響數據訪(fǎng)問(wèn)的速度,它負責將從設備中讀取的數據先存放在數據緩存區,供同步或異步讀取。緩存區內存可以采用連續存儲,鏈式存儲和哈希存儲。其中,考慮到存取速度和方便管理,該選擇采用連續存儲的方式。該方式可以隨機存取數據,但存取數據的數量不宜過(guò)大,如果需要存取較大數量的數據項,則推薦采用哈希存儲方式。對于每個(gè)數據項,都包含有三個(gè)基本屬性:數值(Value),時(shí)間戳(Time Stamp)和數據品質(zhì)(Quality)。從數據源中訪(fǎng)問(wèn)到的數據項將按照線(xiàn)性方式存儲到連續的內存區域中;每次對緩存區的訪(fǎng)問(wèn)都需要進(jìn)行加鎖,以防止出現同時(shí)進(jìn)行讀操作和寫(xiě)操作。

  2.3 輪詢(xún)方式對數據源進(jìn)行訪(fǎng)問(wèn):

  由于服務(wù)器是單獨不斷從數據源讀取數據,因此可以采用單獨的線(xiàn)程,按時(shí)間輪詢(xún)的方式,每隔一段時(shí)間對數據源進(jìn)行訪(fǎng)問(wèn),這個(gè)時(shí)間也就成為服務(wù)器支持的最短數據訪(fǎng)問(wèn)時(shí)間。服務(wù)器的主要工作流程:

  (1) 每隔一段時(shí)間進(jìn)行輪詢(xún)操作;

  (2) 如果掃描時(shí)間到,訪(fǎng)問(wèn)數據源;否則,至(3);如果有訂閱請求,回調訂閱函數;

  (3) 如果有刷新請求,回調刷新函數;如果有異步讀數據請求,讀取數據并回調異步讀函數;如果有異步寫(xiě)請求,將數據寫(xiě)入外部設備;

  (4) 返回(1);

  服務(wù)器中該循環(huán)的主要功能,主要用來(lái)進(jìn)行異步數據存取,訂閱及刷新。而對于同步訪(fǎng)問(wèn)等操作,由于需要服務(wù)器立即存取數據然后返回結果,因此其實(shí)現并不在該主循環(huán)中,而是針對其接口單獨編寫(xiě)一個(gè)類(lèi),用來(lái)實(shí)現同步存取接口函數的功能。

  2.4 OPC 的數據訪(fǎng)問(wèn)方式

  OPC 對數據的訪(fǎng)問(wèn)主要分為以下幾種:同步讀,異步讀,訂閱和數據刷新;對數據源的操作又可以分為直接從設備讀取和從Cache 中讀取。這兩者的組合構成了對數據源的訪(fǎng)問(wèn)規則,OPC 標準對訪(fǎng)問(wèn)規則進(jìn)行了詳細的描述。在這幾種數據訪(fǎng)問(wèn)中,同步讀接口可以實(shí)現少量,快速的數據讀取,異步讀則是提交一個(gè)請求,然后返回,等服務(wù)器完成數據讀取后回調函數。與同步讀相比,異步讀更能提高OPC Client 的使用效率,防止OPC 服務(wù)器尚未訪(fǎng)問(wèn)到數據時(shí),造成客戶(hù)端的等待。訂閱異步讀大致相同,每當訪(fǎng)問(wèn)數據源后自動(dòng)將數據提交給客戶(hù)端。

  

OPC 服務(wù)器中采用的可連接對象結構模型 www.elecfans.com

  圖 2 OPC 服務(wù)器中采用的可連接對象結構模型

  在 OPC 2.0 和OPC DA3.0 中的異步通訊機制中,使用到了連接點(diǎn)容器/連接點(diǎn)接口[1],取代了原來(lái)OPC DA1.0 中的直接注冊/回調的模式。能夠更靈活的支持多個(gè)連接點(diǎn)和連接。在可連接對象模式中,每個(gè)可連接對象可以包含多個(gè)連接點(diǎn),每個(gè)連接點(diǎn)支持一種回調接口;每個(gè)連接點(diǎn)上可以連接多個(gè)客戶(hù)端;回調接口由客戶(hù)端實(shí)現,可連接對象通過(guò)回調函數于客戶(hù)端進(jìn)行交互。

  在 OPC DA 服務(wù)器中,可連接對象包括Server 對象和Group 對象兩種,Server 對象只支持一個(gè)IOPCShutdown 回調接口,而異步數據交換等重要的功能位于Group 對象中。在OPC 組對象中,包含一個(gè)連接點(diǎn)對象,該對象支持IOPCDataCallback 回調接口,連接點(diǎn)可以連接多個(gè)客戶(hù)端,當異步訪(fǎng)問(wèn)完成時(shí),服務(wù)器同過(guò)可連接對象通過(guò)調用標準規定的回調函數,通知每個(gè)已經(jīng)注冊的客戶(hù)端。

  2.5 基于適配器模式的數據采集

  OPC DA 服務(wù)器的最重要功能,就是從外部設備讀取數據。由于數據源的多樣性,可以是磁盤(pán)映射的數據文件,串口或者是專(zhuān)門(mén)的數據采集卡。為了一個(gè)通用的架構,便于以后升級或訪(fǎng)問(wèn)其他不同類(lèi)型的數據源。一個(gè)可行的解決方法就是,添加一個(gè)適配層,相應的數據訪(fǎng)問(wèn)接口,對有不同數據格式的采集,寫(xiě)入等操作,都從該接口繼承,從而針對不同的數據采集方式完成相應的功能。這樣,使服務(wù)器在整體不需改變的情況下,能夠適應多種數據源的情況。其大致的結構如下圖所示

  

使用適配器模式的IOPCItem 接口 www.elecfans.com

  圖 3 使用適配器模式的IOPCItem 接口

  IOPCItem 接口:該接口定義了對外部數據進(jìn)行訪(fǎng)問(wèn)的虛函數,包括讀取(ReadValue),和寫(xiě)入(WriteValue)函數;在進(jìn)行二次開(kāi)發(fā)時(shí),需針對不同的數據源需要具體實(shí)現。當一個(gè)組對象掃描該組成員項,進(jìn)行數據訪(fǎng)問(wèn)時(shí),它將直接調用IOPCItem 接口。該接口是一個(gè)虛基類(lèi),其具體實(shí)現與外部數據源有關(guān);對于將要訪(fǎng)問(wèn)的外部設備,其存取數據的格式和驅動(dòng)可能不同;IOPCItem 接口對此并不作具體規定,只是定義了虛函數,用來(lái)讀取和寫(xiě)入數據;其具體的編碼實(shí)現需要由OPC DA 服務(wù)器將要訪(fǎng)問(wèn)的外部設備決定。這樣,將數據訪(fǎng)問(wèn)同具體的數據源分開(kāi),減少了耦合,使同一服務(wù)器架構可以滿(mǎn)足多種業(yè)務(wù)需求。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>