鮑 坤 孫學(xué)華
(南京工業(yè)大學(xué)電子與信息工程學(xué)院,江蘇 南京 211816)
目前,工業(yè)控制中的各種儀器、儀表、地磅系統(tǒng)和裝車系統(tǒng)等都提供了計算機通信協(xié)議。但是,由于不同的廠商提供的協(xié)議不同,所以與這些設(shè)備和系統(tǒng)交換數(shù)據(jù)、編寫接口程序比較復(fù)雜。OPC技術(shù)能夠很好地解決這個難題[1]。
某企業(yè)環(huán)氧乙烷衍生精細化工生產(chǎn)采用霍尼韋爾的Experion PKS系統(tǒng)進行控制,其生產(chǎn)產(chǎn)品需要通過儲罐車進行運輸。涉及到運輸則需要使用另一個獨立的系統(tǒng)——裝車臺系統(tǒng)。裝車臺系統(tǒng)主要用來計量并記錄一些裝車信息,例如裝車時間、物料名稱、提料單位、預(yù)發(fā)量、實發(fā)量和累積量等信息,這些信息在發(fā)車時都會被打印出來。
為了確保安全,裝車臺需要遠離控制室,因此在裝車過程中,主控制室是監(jiān)控不到裝車臺系統(tǒng)信息的。但是由于生產(chǎn)監(jiān)控的需要,在監(jiān)控室內(nèi)也需要對裝車臺系統(tǒng)的一些信息進行監(jiān)控,所以就需要建立生產(chǎn)系統(tǒng)與裝車臺系統(tǒng)之間的數(shù)據(jù)傳輸通道。
實現(xiàn)生產(chǎn)系統(tǒng)與裝車臺系統(tǒng)之間的數(shù)據(jù)交互,首先需要分析了解裝車臺系統(tǒng)。通過與第三方廠家的溝通,了解到裝車臺系統(tǒng)的數(shù)據(jù)信息存儲在SQL數(shù)據(jù)庫中。因此,可以通過以太網(wǎng)遠程連接數(shù)據(jù)庫并對數(shù)據(jù)庫進行讀寫操作。如果在PKS生產(chǎn)系統(tǒng)中直接編程以遠程讀寫數(shù)據(jù)庫,會給生產(chǎn)系統(tǒng)帶來很大的負擔,這是因為PKS生產(chǎn)系統(tǒng)只支持VB、C等簡單的語言,所以不太方便在PKS生產(chǎn)系統(tǒng)中直接編程并遠程讀寫數(shù)據(jù)庫。
由于PKS控制系統(tǒng)支持先進的第三方接口OPC,通過OPC接口可以對生產(chǎn)系統(tǒng)中的數(shù)據(jù)進行讀寫操作,因此只需開發(fā)一個第三方程序??赏ㄟ^遠程連接數(shù)據(jù)庫來讀取數(shù)據(jù)庫中的數(shù)據(jù),再通過OPC接口將數(shù)據(jù)傳輸?shù)缴a(chǎn)系統(tǒng)中;也可以通過OPC接口讀取生產(chǎn)系統(tǒng)中的數(shù)據(jù),再將數(shù)據(jù)寫到裝車臺數(shù)據(jù)庫中,以此實現(xiàn)生產(chǎn)系統(tǒng)和裝車臺系統(tǒng)之間的數(shù)據(jù)交互。
第三方程序采用C#進行開發(fā),通過ADO.NET遠程連接數(shù)據(jù)庫并進行相應(yīng)的讀寫操作;利用OPC接口實現(xiàn)對生產(chǎn)系統(tǒng)中的數(shù)據(jù)進行操作。數(shù)據(jù)交互框圖如圖1所示。
圖1 數(shù)據(jù)交互圖Fig.1 Schematic of data interaction
在數(shù)據(jù)交互過程中,還需在裝車臺系統(tǒng)中增加裝車起始時的儲罐儲量以及裝車結(jié)束后的儲罐儲量。雖然裝車臺系統(tǒng)中有自己的計量系統(tǒng),可以計量出實際裝車量,但是卻不能測得儲罐現(xiàn)有的實際儲量;而且在裝車前后計量儲量也可起到一個參考作用。
技術(shù)作為控制領(lǐng)域中的第一接口標準,具有舉足輕重的地位,廣泛應(yīng)用在工業(yè)生產(chǎn)自動化主要生產(chǎn)裝置DCS(集散型控制系統(tǒng))中,使得原本復(fù)雜的通信過程變得統(tǒng)一化、標準化。
本系統(tǒng)設(shè)計了基于C#的OPC客戶端,實現(xiàn)了生產(chǎn)系統(tǒng)與裝車臺系統(tǒng)之間的數(shù)據(jù)交互。OPC的接口分為自動化接口(automation interface)和自定義接口(custom interface)[2],由于程序選用的開發(fā)語言是 C#,所以在此選用自動化接口。
使用C#進行客戶端程序的開發(fā),就必須了解服務(wù)器對象模型。OPC自動化服務(wù)器對象的組織為層次結(jié)構(gòu),自動化接口對象的分層結(jié)構(gòu)如圖2所示。
圖2 OPC自動化接口對象的分層結(jié)構(gòu)Fig.2 Hierarchic structure of the OPC automation interface objects
OPC服務(wù)器對象不僅包含服務(wù)器的信息,而且它也是組對象(Group)的容器。OPC組對象提供了OPC客戶程序用于組織數(shù)據(jù)的方法,客戶通過組對象進行讀寫操作[3]。當服務(wù)器緩沖區(qū)內(nèi)的數(shù)據(jù)發(fā)生變化時,OPC將向客戶發(fā)出通知,客戶得到通知后進行必要處理,而無需浪費大量時間進行查詢[4]。一般情況下,客戶和服務(wù)器的連接對應(yīng)一個組對象即可。OPC數(shù)據(jù)項(Item)是服務(wù)器端定義的對象,是OPC中最小的數(shù)據(jù)單位。每個組對象中,可以加入多個OPC數(shù)據(jù)項,每個OPC項指向設(shè)備的一個寄存器單元。OPC客戶對設(shè)備寄存器的操作是通過其數(shù)據(jù)項來完成的,通過OPC數(shù)據(jù)項,OPC規(guī)范隱藏了設(shè)備的特殊信息,也使OPC服務(wù)器的通用性大大增強[5]。OPC客戶端是通過OPC組對象進行操作的,OPC項并不提供對外接口,客戶不能直接對其進行操作。每個數(shù)據(jù)項包含3個成員變量:數(shù)據(jù)值、數(shù)據(jù)質(zhì)量和時間戳。一個OPC服務(wù)器最多有一個OPC瀏覽器對象,方便客戶程序瀏覽OPC服務(wù)器上的相關(guān)信息。
裝車臺系統(tǒng)提供了一個實時數(shù)據(jù)庫供訪問,在實時數(shù)據(jù)庫中加入了裝車前儲量和裝車后儲量兩個信息,以便將計量得到的儲罐儲量記錄到裝車臺系統(tǒng)中。裝車臺系統(tǒng)中部分數(shù)據(jù)信息表如表1所示。
表1 裝車臺數(shù)據(jù)信息Tab.1 Data information of loading platform
從表1中所示數(shù)據(jù)信息可以得知,可以通過ms_state(裝車狀態(tài))標志位來確定哪個裝車臺正在裝車。
C#開發(fā)自動化接口具有許多優(yōu)點,如自動初始化COM庫、自動釋放接口指針等,這些都不需要開發(fā)者自己動手操作。采用C#開發(fā)自動化接口,首先要建立一個服務(wù)器對象;接著根據(jù)OPC服務(wù)器的ProgID連接OPC服務(wù)器,實現(xiàn)從客戶端啟動OPC服務(wù)器;然后再按順序添加組、添加項;最后,就可以實現(xiàn)同步或者異步讀寫操作[6]。這些操作都是通過OPCGroup即組對象進行操作的。通信完畢后,客戶端退出時必須斷開與OPC服務(wù)器的連接,釋放接口與內(nèi)存。此處使用OPCdotNETLib.dll動態(tài)鏈接庫[7]。
以上為OPC客戶端訪問服務(wù)器的過程。在實際生產(chǎn)系統(tǒng)中,還需要考慮到裝車臺和罐容計量等因素。實際生產(chǎn)系統(tǒng)中有2個裝車臺,2個裝車臺的數(shù)據(jù)存放在同一個數(shù)據(jù)庫表中,因此在程序設(shè)計過程中需要判斷2個裝車臺的標志位。為確保裝車信息的實時性,不采用循環(huán)輪詢的方式來讀取裝車信息。當2個裝車臺的標志位處于裝車狀態(tài)時,采用并發(fā)的形式對其進行操作。單個裝車臺的程序設(shè)計流程圖如圖3所示。
圖3 程序流程圖Fig.3 Flowchart of the program
裝車臺的服務(wù)器名稱為ZCT/SQL,數(shù)據(jù)庫名稱為Zct_Database,裝車信息表的名稱為ms_state。連接裝車臺數(shù)據(jù)庫的部分程序代碼如下。
當裝車標志位為1后,連接控制系統(tǒng)的OPC服務(wù)器,讀寫控制系統(tǒng)的數(shù)據(jù)。程序代碼如下。
連接完OPC服務(wù)器并讀取到相關(guān)數(shù)據(jù)后,先要計量儲罐儲量,儲罐儲量的計量由一個函數(shù)完成,通過直接調(diào)用函數(shù)完成即可。將儲量結(jié)果存入數(shù)據(jù)庫,讀取數(shù)據(jù)庫,更新OPC項,判斷裝車標志位。如果標志為1,裝車進行中,則繼續(xù)更新數(shù)據(jù);否則裝車結(jié)束。再次調(diào)用儲量計量函數(shù),并將結(jié)果存入數(shù)據(jù)庫。最后斷開OPC服務(wù)器連接,程序跳轉(zhuǎn)至開頭,繼續(xù)循環(huán)。至此即實現(xiàn)了生產(chǎn)系統(tǒng)與裝車臺系統(tǒng)之間的數(shù)據(jù)交互功能。
本文主要闡述了如何實現(xiàn)生產(chǎn)系統(tǒng)與裝車臺系統(tǒng)之間的數(shù)據(jù)交互功能。由于PKS系統(tǒng)提供了OPC接口,裝車臺系統(tǒng)提供了數(shù)據(jù)庫,因此利用C#開發(fā)第三方程序,通過OPC接口與生產(chǎn)系統(tǒng)進行數(shù)據(jù)交互,通過ADO.NET與裝車臺數(shù)據(jù)庫進行數(shù)據(jù)交互,最終實現(xiàn)了兩個生產(chǎn)系統(tǒng)之間的數(shù)據(jù)交互。
[1]陳曦,李鵬.OPC服務(wù)器在SCADA系統(tǒng)中的應(yīng)用研究[J].機械設(shè)計與制造,2010(11):59 -61.
[2]李梁.基于OPC技術(shù)的自動化軟件的研究[D].成都:電子科技大學(xué),2000.
[3]王燕,王健.OPC接口技術(shù)在DCS數(shù)據(jù)交換中的應(yīng)用[J].微計算機信息,2010,26(11):48 -50.
[4]梅曉東,顏燁青.Visual C#網(wǎng)絡(luò)編程技術(shù)與實踐[M].北京:清華大學(xué)出版社,2008.
[5]羅剛.基于OPC技術(shù)的工業(yè)控制系統(tǒng)的研究與開發(fā)[D].南京:南京工業(yè)大學(xué),2005.
[6]王艷艷.大型石化企業(yè)OPC技術(shù)的研究與應(yīng)用[D].北京:北京化工大學(xué),2009.
[7]穆群英.動態(tài)連接庫(DLL)及其應(yīng)用[J].石油儀器,2001(3):49-51.