當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]OPC DA 服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)

  0 引言

  OPC 全稱OLE for Process CONtrol,它是由OPC 基金會(huì)制定的自動(dòng)化領(lǐng)域過程控制標(biāo)準(zhǔn)。

  實(shí)際上,OPC 代表一系列的標(biāo)準(zhǔn),包括OPC 數(shù)據(jù)訪問(OPC Data AccESS),OPC 報(bào)警與事件(Alarms & Events ),歷史數(shù)據(jù)訪問(OPC Historical Data Access),OPC XML-DA(1.0)等。目前,OPC 標(biāo)準(zhǔn)在現(xiàn)代工業(yè)控制領(lǐng)域,特別是在數(shù)據(jù)采集和軟實(shí)時(shí)控制方面已有很好的應(yīng)用。

  1 OPC 標(biāo)準(zhǔn)介紹

  在 OPC 標(biāo)準(zhǔn)制定之前,工業(yè)軟件制造商需要為不同的硬件開發(fā)各自獨(dú)立的驅(qū)動(dòng)接口。對(duì)于開發(fā)典型監(jiān)控程序軟件的技術(shù)人員來說,約有20%-30%的時(shí)間是用于編寫通訊驅(qū)動(dòng)程序。當(dāng)供應(yīng)商提供一個(gè)新的硬件時(shí),應(yīng)用軟件研發(fā)人員就不得不重新編寫一個(gè)新的程序。歡迎轉(zhuǎn)載,本文來自電子發(fā)燒友網(wǎng)(http://www.elecfans.com/)

  而OPC 標(biāo)準(zhǔn)的出現(xiàn)為此解決該問題提供了一個(gè)方案,它制定了一系列的數(shù)據(jù)存取,事件,報(bào)警等規(guī)范,使得當(dāng)有新的硬件出現(xiàn)時(shí),供應(yīng)商只需提供實(shí)現(xiàn)的OPC 標(biāo)準(zhǔn)接口,而上層應(yīng)用軟件則不需重新改寫。這樣,在系統(tǒng)與設(shè)備之間,車間現(xiàn)場(chǎng)與信息管理之間,甚至更遠(yuǎn)的距離上,都可以通過OPC 標(biāo)準(zhǔn)實(shí)現(xiàn)無縫通訊,而不必?fù)?dān)心設(shè)備升級(jí)帶來的不便和額外費(fèi)用。

  OPC 為不同的應(yīng)用制定了不同的標(biāo)準(zhǔn),OPC DA 是針對(duì)現(xiàn)場(chǎng)數(shù)據(jù)進(jìn)行存取的接口規(guī)范,該標(biāo)準(zhǔn)基于OLE / COM / DCOM / COM+技術(shù),采用Client / Server 模式。數(shù)據(jù)通過特定的采集卡或串口等,從現(xiàn)場(chǎng)設(shè)備中獲得,然后OPC DA 服務(wù)器將這些從數(shù)據(jù)源采集到的數(shù)據(jù),以O(shè)PC 標(biāo)準(zhǔn)接口形式提供給外部應(yīng)用程序,例如工控軟件,實(shí)時(shí)數(shù)據(jù)庫等。OPC 服務(wù)器可以通過本地或遠(yuǎn)程服務(wù)服務(wù)器兩種方式,為依照OPC 標(biāo)準(zhǔn)實(shí)現(xiàn)的客戶端提供服務(wù)。

  2 OPC DA 服務(wù)器的設(shè)計(jì)

  本文通過使用 VC++編程實(shí)現(xiàn)的一個(gè)OPC DA 服務(wù)器框架,來介紹OPC DA 服務(wù)器設(shè)計(jì)中需要解決的主要問題。在OPC 服務(wù)器的設(shè)計(jì)中,引入適配器模式,通過適配層將數(shù)據(jù)訪問同具體的數(shù)據(jù)源操作相分離,以便針對(duì)不同的數(shù)據(jù)來源時(shí),進(jìn)行快速的二次開發(fā)。實(shí)現(xiàn) OPC DA 服務(wù)器,需要依照OPC 基金會(huì)提供的OPC DA 標(biāo)準(zhǔn),將從數(shù)據(jù)源中采集數(shù)據(jù),以標(biāo)準(zhǔn)規(guī)定的接口形式提供給外部。其中,OPC 規(guī)范為OPC 服務(wù)器規(guī)定了兩套接口方式:定制接口(Custom interface)和自動(dòng)化接口(AutomATIon Interface)。其中,前者是OPC 服務(wù)器必須實(shí)現(xiàn)的接口,后者則是為方便VB 等腳本語言而提供,可以選擇性實(shí)現(xiàn)。

  2.1 OPC DA 服務(wù)器中的對(duì)象

  根據(jù) OPC 標(biāo)準(zhǔn),在OPC DA 服務(wù)器中,主要包含三個(gè)層次的對(duì)象:服務(wù)器對(duì)象(Server),組對(duì)象(Group)和數(shù)據(jù)項(xiàng)(Item)。其中,服務(wù)器對(duì)象與組對(duì)象是一對(duì)多的關(guān)系,一個(gè)Server 對(duì)象可以包含0 到多個(gè)Group 對(duì)象,而一個(gè)組對(duì)象中可以包含0 到多個(gè)數(shù)據(jù)項(xiàng)。OPC DA 標(biāo)準(zhǔn)對(duì)Server 和Group 對(duì)象需要實(shí)現(xiàn)的接口,進(jìn)行了詳細(xì)的規(guī)定說明。

  在 OPC DA 標(biāo)準(zhǔn)中,客戶端對(duì)服務(wù)器的數(shù)據(jù)存取是以Group 為單位的,每次將需要存取的數(shù)據(jù)項(xiàng)item 加入一個(gè)Group,然后對(duì)該Group 進(jìn)行整體讀寫操作。Group 對(duì)象通過標(biāo)準(zhǔn)定義的IOPCDataMgt 接口,對(duì)Item 進(jìn)行添加,刪除等相關(guān)的管理;而Server 對(duì)象則通過IOPCServer 接口對(duì)Group 對(duì)象進(jìn)行添加,刪除等管理。

  2.2 OPC DA 服務(wù)器的結(jié)構(gòu)

  開發(fā)一個(gè) OPC DA 服務(wù)器需要注意以下問題:服務(wù)器的運(yùn)行方式,各個(gè)接口與對(duì)象的相互關(guān)系,內(nèi)部數(shù)據(jù)的組織形式,對(duì)外部數(shù)據(jù)源的訪問等。在本實(shí)例中,OPC 數(shù)據(jù)存取服務(wù)器的框架結(jié)構(gòu)如下圖所示

  


 

  圖 1 OPC 服務(wù)器的結(jié)構(gòu)[!--empirenews.page--]

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

  服務(wù)器使用 VC++編程,包含以下幾個(gè)主要的類:

  COPCServer:Server 對(duì)象的類,管理IOPCCommon,IOPCServer,IConnectionContainer等接口;

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

  其他接口類:每個(gè)接口還對(duì)應(yīng)一個(gè)實(shí)現(xiàn)類(如:CIOPCItemMgtImp 是IOPCItemMgt 的具體實(shí)現(xiàn)),該類完成OPC 標(biāo)準(zhǔn)規(guī)定的對(duì)應(yīng)接口的功能函數(shù),類的實(shí)例化對(duì)象將以聚合的方式接受Server 或Group 對(duì)象的管理;

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

  2.3 輪詢方式對(duì)數(shù)據(jù)源進(jìn)行訪問:

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

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

  (2) 如果掃描時(shí)間到,訪問數(shù)據(jù)源;否則,至(3);如果有訂閱請(qǐng)求,回調(diào)訂閱函數(shù);

  (3) 如果有刷新請(qǐng)求,回調(diào)刷新函數(shù);如果有異步讀數(shù)據(jù)請(qǐng)求,讀取數(shù)據(jù)并回調(diào)異步讀函數(shù);如果有異步寫請(qǐng)求,將數(shù)據(jù)寫入外部設(shè)備;

  (4) 返回(1);

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

  2.4 OPC DA 的數(shù)據(jù)訪問方式

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

  

 

  圖 2 OPC 服務(wù)器中采用的可連接對(duì)象結(jié)構(gòu)模型

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

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

  2.5 基于適配器模式的數(shù)據(jù)采集

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

  

 

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

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

  3 OPC DA 服務(wù)器與客戶端數(shù)據(jù)訪問的交互過程

  OPC 客戶端對(duì)在進(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 對(duì)象,并返回一個(gè)接口指針;

  (2) 客戶端由返回的指針找到接口IOPCServer,通過IOPCServer::AddGroup()函數(shù)添加一個(gè)Group;服務(wù)器端則生成一個(gè)Group 對(duì)象,返回一個(gè)該Group 對(duì)象的接口指針;

  (3) 客戶端利用該指針查找IOPCItemMgt 接口,調(diào)用函數(shù)AddItem()在服務(wù)器添加一個(gè)或多個(gè)item 數(shù)據(jù)項(xiàng)item 對(duì)象,然后便可對(duì)該組對(duì)象中的數(shù)據(jù)項(xiàng)進(jìn)行存取等操作;

  (4) 同步訪問:查找Group 對(duì)象的IOPCSyncIO 接口,直接調(diào)用Read(),Write()函數(shù);異步訪問:a)注冊(cè),查找Group 對(duì)象的IConnnectionContianer 接口,找到一個(gè)支持OPCDataCallback 接口的連接點(diǎn)對(duì)象,客戶端生成IOPCDataCallback 對(duì)象并在連接點(diǎn)IConnectionPoint 上注冊(cè);b)查找IAsyncIO 接口,客戶端調(diào)用該接口的Read,Write,Refresh等函數(shù),然后直接返回;c)完成數(shù)據(jù)存取后,服務(wù)器回調(diào)已經(jīng)注冊(cè)的IOPCDataCallback 接口的相關(guān)函數(shù),如OnDataChange 等,此時(shí)客戶端可以通過回調(diào)函數(shù)獲到返回的結(jié)果;  (5) 清理現(xiàn)場(chǎng),釋放接口指針并返回;

  4 結(jié)束語

  OPC 標(biāo)準(zhǔn)在硬件和軟件廠商之間建立了規(guī)范的聯(lián)系,其工控領(lǐng)域得到了廣泛的應(yīng)用,成為一個(gè)事實(shí)上的軟件總線。可適配的OPC DA 服務(wù)器則是將其上層進(jìn)行了封裝,對(duì)下層數(shù)據(jù)源存取進(jìn)行了接口抽象,將數(shù)據(jù)采集同具體的數(shù)據(jù)源分離,從而降低了數(shù)據(jù)訪問的耦合性。采用可適配模式的OPC DA 服務(wù)器,可以針對(duì)不同的數(shù)據(jù)采集模式,依照具體采集卡情況實(shí)現(xiàn)適配接口,從而縮短軟件整體開發(fā)的周期,提高實(shí)際應(yīng)用的速度。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉