任偉建 江 聲 霍鳳財(cái) 姜淑環(huán) 楊 迪
(東北石油大學(xué)電氣信息工程學(xué)院1,黑龍江 大慶 163318;大慶油田有限責(zé)任公司第二采油廠2,黑龍江 大慶 163414)
?
OPC技術(shù)在油田分布式共享系統(tǒng)中的應(yīng)用
任偉建1江聲1霍鳳財(cái)1姜淑環(huán)2楊迪2
(東北石油大學(xué)電氣信息工程學(xué)院1,黑龍江 大慶163318;大慶油田有限責(zé)任公司第二采油廠2,黑龍江 大慶163414)
為了解決油田聯(lián)合站內(nèi)不同廠商監(jiān)控組態(tài)軟件之間的通信問(wèn)題,采用OPC接口技術(shù),設(shè)計(jì)了油田數(shù)據(jù)分布式共享系統(tǒng),實(shí)現(xiàn)了相互獨(dú)立的各聯(lián)合站數(shù)據(jù)采集系統(tǒng)之間的通信以及網(wǎng)絡(luò)客戶端油田聯(lián)合站數(shù)據(jù)的分布式共享。實(shí)際應(yīng)用表明,該系統(tǒng)能夠?qū)崟r(shí)獲取數(shù)據(jù)源的動(dòng)態(tài)數(shù)據(jù)和歷史數(shù)據(jù),捕捉控制過(guò)程中的各種報(bào)警和事件,具有一定的推廣價(jià)值。
油田聯(lián)合站數(shù)據(jù)共享OPC中間服務(wù)器Socket數(shù)據(jù)監(jiān)控組態(tài)軟件分布式動(dòng)態(tài)緩存
Dynamic cache
目前,隨著工業(yè)生產(chǎn)規(guī)模的不斷發(fā)展,在工業(yè)自動(dòng)化領(lǐng)域中,設(shè)備數(shù)據(jù)的采集監(jiān)控的重要性日益凸顯。在石油行業(yè),油田聯(lián)合站數(shù)量眾多,地域分布廣泛。由于生產(chǎn)數(shù)據(jù)的采集與監(jiān)控相互獨(dú)立,且在很大程度上依賴組態(tài)軟件,在應(yīng)用過(guò)程中產(chǎn)生了一系列問(wèn)題:用戶的訪問(wèn)數(shù)量受到限制,相互獨(dú)立系統(tǒng)結(jié)構(gòu)本身的封閉性會(huì)排斥與其他系統(tǒng)的資源充分共享[1]。
近年來(lái),在工業(yè)過(guò)程控制領(lǐng)域出現(xiàn)了用于過(guò)程控制的對(duì)象連接嵌入(object linking and embedding for process control,OPC)技術(shù)[2],它以O(shè)LE/COM、DCOM技術(shù)為基礎(chǔ),是在已經(jīng)存在的數(shù)據(jù)采集技術(shù)的基礎(chǔ)上提出的解決方案[3-4]。OPC技術(shù)支持分布式應(yīng)用和異構(gòu)環(huán)境下應(yīng)用程序之間的軟件無(wú)縫集成和互操作,使客戶軟件能夠訪問(wèn)任意數(shù)據(jù)源,為不同類型的服務(wù)器和客戶端搭建橋梁,確保數(shù)據(jù)源能夠提取數(shù)據(jù)并將其統(tǒng)一傳輸?shù)綉?yīng)用程序[5-6]。
本文以O(shè)PC技術(shù)為基礎(chǔ),闡述了油田數(shù)據(jù)分布式共享系統(tǒng)方案的構(gòu)建方法,重點(diǎn)討論了OPC客戶端在數(shù)據(jù)采集系統(tǒng)無(wú)縫集成中的實(shí)現(xiàn)過(guò)程,并介紹了分布式共享系統(tǒng)實(shí)現(xiàn)過(guò)程中所應(yīng)用的關(guān)鍵技術(shù)。
本文設(shè)計(jì)的基于OPC數(shù)據(jù)規(guī)范技術(shù)的油田數(shù)據(jù)分布式共享系統(tǒng)(以下簡(jiǎn)稱為油田數(shù)據(jù)分布式共享系統(tǒng)),主要包括五個(gè)部分:瀏覽器、Web服務(wù)器、OPC客戶端、OPC服務(wù)器以及底層設(shè)備,系統(tǒng)的整體架構(gòu)如圖1所示。Web服務(wù)器包括可視化展示網(wǎng)絡(luò)和互聯(lián)網(wǎng)信息服務(wù)(internet information service,IIS)這兩部分。

圖1 系統(tǒng)整體架構(gòu)圖Fig.1 Overall system architecture
本系統(tǒng)是基于.NET平臺(tái)開(kāi)發(fā)的,采用的開(kāi)發(fā)工具為Visual Studio 2010,使用C#編程語(yǔ)言。系統(tǒng)采用的關(guān)鍵技術(shù)如下。
2.1OPC中間數(shù)據(jù)服務(wù)技術(shù)
傳統(tǒng)的油田數(shù)據(jù)采集系統(tǒng)雖然實(shí)現(xiàn)了數(shù)據(jù)的采集和顯示,但是系統(tǒng)在很大程度上仍依賴組態(tài)軟件。不同廠家的組態(tài)軟件各自獨(dú)立,很難實(shí)現(xiàn)數(shù)據(jù)的共享。本文采用OPC中間數(shù)據(jù)服務(wù)技術(shù)突破了這種局限,拓展了生產(chǎn)數(shù)據(jù)的應(yīng)用范圍。
通過(guò)引入OPC規(guī)范,建立通信規(guī)則框架信息庫(kù)并采用有效的實(shí)時(shí)處理策略,設(shè)計(jì)、開(kāi)發(fā)了具有較強(qiáng)通用性和面向過(guò)程數(shù)據(jù)通信的OPC客戶端。OPC規(guī)范包括OPC服務(wù)器和OPC客戶端兩部分。從功能上看,OPC服務(wù)器作為數(shù)據(jù)源,它本身?yè)碛袛?shù)據(jù),或可從各種設(shè)備、系統(tǒng)、控制器得到數(shù)據(jù);OPC客戶端則可在應(yīng)用的過(guò)程中采集OPC服務(wù)器數(shù)據(jù)。
2.1.1OPC服務(wù)器
OPC服務(wù)器的構(gòu)建一般有兩種方式:①開(kāi)發(fā)人員按照要求自定義創(chuàng)建;②各OPC服務(wù)器廠商包括組態(tài)軟件提供的模塊化的OPC Server。本文以紫金橋監(jiān)控組態(tài)軟件的RealInfo OpcServer 2.0作為OPC服務(wù)器,獲取油田聯(lián)合站數(shù)據(jù),并向中間服務(wù)器(OPC客戶端)提供數(shù)據(jù)。OPC服務(wù)器分為服務(wù)器 (server) 、組(group) 、數(shù)據(jù)項(xiàng) (item)[7]這三層,三者之間的關(guān)系如圖2所示。

圖2 OPC服務(wù)器組織結(jié)構(gòu)關(guān)系圖Fig.2 Relationship of OPC server organization structure
OPC服務(wù)器支持兩種訪問(wèn)接口:自定義標(biāo)準(zhǔn)接口和OLE自動(dòng)化標(biāo)準(zhǔn)接口。自定義接口是一組COM接口,主要用于C++語(yǔ)言的應(yīng)用程序開(kāi)發(fā);自動(dòng)化接口是一組OLE接口,它提供了自動(dòng)配置和存取過(guò)程控制數(shù)據(jù)的接口,主要用于VB、Delphi、C#和其他基于腳本編程語(yǔ)言的應(yīng)用程序的開(kāi)發(fā)[8]。任何OPC服務(wù)器都必須提供自定義接口,但是自動(dòng)化接口是可選擇的。同其他主流OPC服務(wù)器一樣,RealInfo OPCServer 2.0提供了自動(dòng)化接口。
2.1.2OPC客戶端程序設(shè)計(jì)
OPC基金會(huì)的opcdaauto.dll動(dòng)態(tài)鏈接庫(kù)作為自動(dòng)化接口的組件,提供了用于訪問(wèn)OPC服務(wù)器的對(duì)象、屬性和方法。本文在引入此動(dòng)態(tài)鏈接庫(kù)的基礎(chǔ)上,以基于Visual C#語(yǔ)言的Windows Form開(kāi)發(fā)OPC客戶端作為系統(tǒng)的一部分,更易于實(shí)現(xiàn)其與整個(gè)軟件結(jié)合和升級(jí)。遵循OPC標(biāo)準(zhǔn)開(kāi)發(fā)的OPC客戶端能實(shí)現(xiàn)與眾多聯(lián)合站OPC服務(wù)器的互聯(lián)和數(shù)據(jù)采集,應(yīng)用方便。
應(yīng)用自動(dòng)化接口開(kāi)發(fā)OPC客戶端,首先要定義全局變量。本文分別定義服務(wù)器、組和數(shù)據(jù)項(xiàng)如下:
①OPCServer RealServer;
②OPCGroups RealGroups;
③OPCGroup RealGroup;
④OPCItems RealItems;
⑤OPCItem RealItem。
定義完成的全局變量可應(yīng)用于在窗體的任何方法和函數(shù)。需要強(qiáng)調(diào)的是,變量類型應(yīng)該指定為對(duì)象型。在本文中,采用子函數(shù)OPCServersList的方式來(lái)實(shí)現(xiàn)本地和遠(yuǎn)程服務(wù)器的搜尋,并將搜尋的OPCServer名稱以列表的方式提供給OPC客戶端, OPCServer對(duì)象會(huì)根據(jù)選中的遠(yuǎn)程O(píng)PC服務(wù)器的名稱和IP調(diào)用Connect函數(shù)來(lái)完成連接。只有當(dāng)OPCServer狀態(tài)為OPCRunning,即RealServer.ServerState== (int)OPCServerState.OPCRunning時(shí),才表示連接成功。在連接成功以后,需要建立OPC組,并添加OPC項(xiàng),以完成數(shù)據(jù)傳輸。
①添加OPC組。為客戶提供了一種組織數(shù)據(jù)的方法,每個(gè)組中都可以定義一個(gè)或多個(gè)OPC項(xiàng)[9]:RealGroup= RealServer.OPCGroups.Add(“group”)。添加組以后可自定義組的屬性,也可采用默認(rèn)設(shè)置。
②添加OPC 項(xiàng)。OPC項(xiàng)要在對(duì)服務(wù)器進(jìn)行訪問(wèn)前添加。由于本文訪問(wèn)的站庫(kù)點(diǎn)位數(shù)量比較多,如果采用逐個(gè)添加的方式會(huì)增加開(kāi)發(fā)的難度和操作的繁瑣度。本文通過(guò)XML文件的形式,動(dòng)態(tài)添加各聯(lián)合站需要監(jiān)控的點(diǎn)位,不僅解決了不斷添加OPC項(xiàng)的重復(fù)工作,而且當(dāng)OPC項(xiàng)需要變動(dòng)的時(shí)候,無(wú)需改動(dòng)程序即可按照用戶的需求進(jìn)行定制。
③異步讀取。采用異步讀取,將分布在不同網(wǎng)絡(luò)節(jié)點(diǎn)中的聯(lián)合站采集系統(tǒng)的實(shí)時(shí)數(shù)據(jù)庫(kù)中點(diǎn)位過(guò)程值集成到中間服務(wù)器;將歷史數(shù)據(jù)儲(chǔ)存在數(shù)據(jù)庫(kù)中,實(shí)時(shí)數(shù)據(jù)緩存在OPC客戶端所在微機(jī)的內(nèi)存中。每個(gè)標(biāo)簽的數(shù)據(jù)結(jié)構(gòu)包括三個(gè)成員變量,分別是數(shù)據(jù)值(value)、品質(zhì)(quality)和時(shí)間戳(time stamp)[10]。
2.2優(yōu)化動(dòng)態(tài)緩存與SOCKET通信技術(shù)
OPC客戶端實(shí)現(xiàn)了從OPC服務(wù)器提取數(shù)據(jù)。為簡(jiǎn)化流程,各種類型數(shù)據(jù)往往全部轉(zhuǎn)存入關(guān)系型數(shù)據(jù)庫(kù),這就導(dǎo)致了用戶訪問(wèn)動(dòng)態(tài)數(shù)據(jù)需要經(jīng)歷以下過(guò)程。首先,Web服務(wù)器會(huì)將用戶的不同請(qǐng)求分配給應(yīng)用軟件的不同模塊;其次,根據(jù)應(yīng)用軟件的運(yùn)算和處理,決定從數(shù)據(jù)庫(kù)中提取什么類型的數(shù)據(jù);最后,從數(shù)據(jù)庫(kù)中提取數(shù)據(jù),將數(shù)據(jù)按照定義的格式組合成需要的類型并顯示。因此,數(shù)據(jù)訪問(wèn)時(shí)間冗長(zhǎng),訪問(wèn)速度緩慢,增加了Web服務(wù)器的負(fù)載。所以,如何優(yōu)化訪問(wèn)速度、減輕服務(wù)器的負(fù)載成為設(shè)計(jì)關(guān)鍵。
本文為解決這種狀況,在用戶和Web服務(wù)器之間采用了一種優(yōu)化的Socket通信技術(shù)和動(dòng)態(tài)緩存技術(shù),能加快用戶訪問(wèn)的速度,以減少訪問(wèn)實(shí)時(shí)數(shù)據(jù)的延遲時(shí)間;同時(shí)在峰值負(fù)載下,該技術(shù)能緩解客戶端沖擊帶來(lái)的負(fù)載。
2.2.1優(yōu)化動(dòng)態(tài)緩存技術(shù)
動(dòng)態(tài)緩存的設(shè)計(jì)包括緩存內(nèi)容存放的過(guò)程和緩存對(duì)象配置文件的建立。傳統(tǒng)的內(nèi)存緩存往往存在資源冗余、資源管理雜亂以及效率低下等問(wèn)題。本文提出一種改進(jìn)型的動(dòng)態(tài)緩沖池技術(shù),可實(shí)現(xiàn)線程間的大數(shù)據(jù)量通信。通過(guò)為通信線程申請(qǐng)一整塊內(nèi)存空間來(lái)存放數(shù)據(jù),并在OPC客戶端建立可定制大小的對(duì)象數(shù)組,以預(yù)先讀取進(jìn)行緩存的方式,實(shí)現(xiàn)動(dòng)態(tài)內(nèi)容的緩存。這種方式在管理緩沖池的時(shí)候,可動(dòng)態(tài)地增減對(duì)象數(shù)組的數(shù)量和大小,使緩沖池所占用的內(nèi)存按需變動(dòng)。
從OPC服務(wù)器采集的實(shí)時(shí)數(shù)據(jù)會(huì)將每條記錄生成對(duì)象存放在動(dòng)態(tài)緩沖數(shù)組中,對(duì)象數(shù)組會(huì)根據(jù)記錄的長(zhǎng)短動(dòng)態(tài)地設(shè)定存儲(chǔ)大小,以避免內(nèi)存的浪費(fèi)。同時(shí),考慮到實(shí)時(shí)數(shù)據(jù)的頻繁更新,為確保用戶查看到最新數(shù)據(jù),本文設(shè)計(jì)了一種周期性觸發(fā)和事件觸發(fā)相結(jié)合的觸發(fā)策略。當(dāng)所采集對(duì)象的數(shù)據(jù)變化超過(guò)一定范圍時(shí),OPC服務(wù)器會(huì)觸發(fā)DataChange事件,對(duì)緩沖池進(jìn)行數(shù)據(jù)的更新。緩沖池作為一塊內(nèi)存空間,其大小不是無(wú)限制的。當(dāng)緩沖池中存儲(chǔ)的內(nèi)容超出所設(shè)定的范圍,緩沖池會(huì)自動(dòng)溢出過(guò)時(shí)記錄,保證了內(nèi)存的負(fù)載。
緩存對(duì)象配置文件采用可擴(kuò)展標(biāo)記語(yǔ)言XML存儲(chǔ)機(jī)制。XML作為新興的面向互聯(lián)網(wǎng)的標(biāo)記語(yǔ)言,定義了應(yīng)用程序間訪問(wèn)站庫(kù)點(diǎn)位數(shù)據(jù)的結(jié)構(gòu),并且這種結(jié)構(gòu)的描述不是基于二進(jìn)制,而是一種相對(duì)簡(jiǎn)單、能夠通過(guò)任意編輯器讀寫(xiě)的文本。基于這種機(jī)制,可以制定緩存對(duì)象數(shù)據(jù)的采集規(guī)范,并通過(guò)DOM或SAX接口同應(yīng)用程序相連,以限定動(dòng)態(tài)緩存的對(duì)象范圍。動(dòng)態(tài)緩存應(yīng)用流程圖如圖3所示。

圖3 動(dòng)態(tài)緩存應(yīng)用流程圖Fig.3 Application process of dynamic cache
2.2.2優(yōu)化Socket多線程技術(shù)
Socket是應(yīng)用程序與網(wǎng)絡(luò)之間的標(biāo)準(zhǔn)接口,主要分為三類:流式套接字、數(shù)據(jù)報(bào)套接字和原始數(shù)據(jù)報(bào)套接字。其中,流式套接字作為一種面向連接的套接字,針對(duì)面向連接的TCP服務(wù)應(yīng)用[11],適用于局域網(wǎng)內(nèi)的大數(shù)據(jù)傳輸,且傳輸穩(wěn)定性強(qiáng)。
本文基于.NET平臺(tái)開(kāi)發(fā)油田OPC分布式共享可視化展示網(wǎng)站,并將網(wǎng)站通過(guò)IIS發(fā)布在與中間服務(wù)器同一節(jié)點(diǎn)的Web服務(wù)器上,為用戶查看生產(chǎn)數(shù)據(jù)提供Web支持。當(dāng)用戶向Web服務(wù)器發(fā)送請(qǐng)求時(shí),采用Socket通信技術(shù)建立連接。首先,在連接雙方即Web服務(wù)器和客戶端分別建立套接字;其次,建立套接字以后的Web服務(wù)器與客戶端經(jīng)過(guò)“三次握手”實(shí)現(xiàn)連接。因?yàn)槁?lián)合站庫(kù)點(diǎn)位相互獨(dú)立,它們的變化不具有同步性,所以用戶瀏覽器頁(yè)面所監(jiān)控的站庫(kù)點(diǎn)位數(shù)據(jù)如果采用易于實(shí)現(xiàn)的全局刷新的方式建立Socket通信是沒(méi)有意義的。Socket通信流程圖如圖4所示。

圖4 Socket通信流程圖Fig.4 Flowchart of socket communication
本文采用了一種異步的Java Script和XML(AJAX)異步刷新和定時(shí)器綜合應(yīng)用的方式,定時(shí)向Web服務(wù)器發(fā)出請(qǐng)求。Web服務(wù)器會(huì)在所建立的Socket連接的基礎(chǔ)上啟動(dòng)多個(gè)線程訪問(wèn)緩沖池,無(wú)需等待便可并發(fā)執(zhí)行數(shù)據(jù)采集任務(wù);同時(shí),在客戶端,采用JavaScript處理來(lái)自Web服務(wù)器的響應(yīng)。這使得在Web服務(wù)器和瀏覽器之間交換的數(shù)據(jù)大量減少,響應(yīng)更快。同時(shí),很多處理工作可以在發(fā)出請(qǐng)求的客戶端機(jī)器上完成,減少了Web服務(wù)器的處理時(shí)間。更重要的是,AJAX能在不刷新整個(gè)頁(yè)面的前提下維護(hù)數(shù)據(jù),這使得Web服務(wù)器能夠更為迅捷地回應(yīng)用戶動(dòng)作,避免了對(duì)未改變的數(shù)據(jù)的重復(fù)性操作。
本文通過(guò)分析聯(lián)合站工業(yè)生產(chǎn)基本流程,結(jié)合過(guò)程數(shù)據(jù)傳輸標(biāo)準(zhǔn)——OPC規(guī)范技術(shù),研究并開(kāi)發(fā)了暫存油田數(shù)據(jù)的中間服務(wù)器,實(shí)現(xiàn)了實(shí)時(shí)數(shù)據(jù)庫(kù)與中間服務(wù)器之間的無(wú)差別共享;油田OPC分布式共享可視化展示網(wǎng)站利用.NET服務(wù)器、優(yōu)化的動(dòng)態(tài)緩存和Socket數(shù)據(jù)通信等技術(shù),實(shí)現(xiàn)了現(xiàn)場(chǎng)數(shù)據(jù)的網(wǎng)絡(luò)客戶端展示。整套系統(tǒng)可實(shí)時(shí)、準(zhǔn)確地獲取最新的現(xiàn)場(chǎng)數(shù)據(jù),從而安全、可靠地對(duì)現(xiàn)場(chǎng)設(shè)備進(jìn)行控制。
[1] 潘大勝.分布式異構(gòu)資源庫(kù)共享機(jī)制研究[J].吉林師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,11(4):131-133.
[2] 蔡明章,李昊,甘洋,等.基于OPC-DA服務(wù)器的應(yīng)用研究與設(shè)計(jì)[J].云南大學(xué)學(xué)報(bào),2014,36(S1):12-16.
[3] 王大鵬,蘇孝國(guó),王濤.基于C#語(yǔ)言的工業(yè)計(jì)算機(jī)與57-1200的OPC通訊[J].自動(dòng)化與儀器儀表,2014,34(11):147-150.
[4] 鮑坤,孫學(xué)華.OPC在數(shù)據(jù)交互系統(tǒng)中的應(yīng)用[J].自動(dòng)化儀表,2012,33(10):17-19.
[5] 王杰,高昆侖,王萬(wàn)召.基于OPC通信技術(shù)的火電廠DCS后臺(tái)控制[J].電力自動(dòng)化設(shè)備,2013,33(4):142-144.
[6] 蘇磊,李茜,湯偉.OPC數(shù)據(jù)訪問(wèn)客戶端的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2010,36(11):80-82.
[7] 曹紅萍,江山,鄒玉兵,等.Net平臺(tái)的OPC DA客戶端開(kāi)發(fā)[J].自動(dòng)化儀表,2012,33(9):45-48.
[8] 顧亮,饒豐等,寇東升.OPC技術(shù)結(jié)合.NET架構(gòu)在系統(tǒng)集成項(xiàng)目中的應(yīng)用[J].制造業(yè)自動(dòng)化,2006,28(7):74-77.
[9] 戚中奎,林果園,孫統(tǒng)風(fēng).OPC數(shù)據(jù)訪問(wèn)服務(wù)器的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(4):1517-1520.
[10]趙春玲.NET平臺(tái)下開(kāi)發(fā)三層架構(gòu)WinForm應(yīng)用程序簡(jiǎn)介[J].信息技術(shù)與信息化,2010,4(9):33-35.
[11]歐軍,吳清秀,裴云,等.基于socket的網(wǎng)絡(luò)通信技術(shù)研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2011,11(7):19-21.
Application of the OPC Technology in Distributed Sharing System of Oilfield
In order to solve the communication issue between monitoring configuration software of different vendors in oilfield united station,the oilfield distributed data sharing system is designed by using OPC interfacing technology.The communication among data acquisition systems of mutually independent united stations and the distributed data sharing of oilfield stations in network clients are realized.Practical application shows that the system can acquire dynamic data and historical data of data sources in real time,capture all kinds of alarms and events in the process of control,and has a certain popularization value.
Oilfield united stationData sharingOPCIntermediate serverSocketData monitoringConfiguration softwareDistributed
任偉建(1963—),女,2006年畢業(yè)于大慶石油學(xué)院油氣儲(chǔ)運(yùn)工程專業(yè),獲博士學(xué)位,教授;主要從事復(fù)雜系統(tǒng)的建模與控制方向的研究。
TH86;TP274+.2
ADOI:10.16086/j.cnki.issn 1000-0380.201610002
國(guó)家自然科學(xué)基金資助項(xiàng)目(編號(hào):61374127);
黑龍江省博士后科研啟動(dòng)資金基金資助項(xiàng)目(編號(hào):LBH-Q12143)。
修改稿收到日期:2016-02-21。