韓萌萌 任帥男
摘 要:介紹了基于OPC技術的DCS數據獲取的原理和方法,結合實際敘述了上位機軟件DCS與OPC服務器之間的通信以及OPC服務器與OPC客戶端之間的通信,重點給出了關鍵程序示例。在OPC數據交換接口的基礎上,后續(xù)的上層應用系統(tǒng)的開發(fā)變得簡捷高效。
關鍵詞:OPC技術;數據獲?。籇CS
中圖分類號:TP273 文獻標識碼:A
隨著企業(yè)信息化建設的投資比例增大,許多企業(yè)為了實現不同生產裝置的DCS系統(tǒng)和數據采集接口之間的數據通訊,解決生產管理過程中的上層監(jiān)控與底層控制脫節(jié)的問題,提高企業(yè)生產效益,OPC技術應運而生。OPC作為軟件和硬件之間數據通信的橋梁,是一種標準。本文應用了OPC技術規(guī)范作用于DCS系統(tǒng)實現數據獲取的目的。
1 OPC技術
OPC(OLE for Process Control),是微軟公司以COM/DCOM技術為基礎,采用客戶端/服務器模式,開發(fā)出的應用于控制領域的一種工業(yè)標準。針對當前工業(yè)控制領域不同生產裝置互相通信的要求,OPC為其制定了完整的編程接口屬性和方法,這就為不同設備包括軟硬件之間的交互訪問提供了依據[1]。
OPC既可以應用于本地PC機,同時也支持網絡內不同應用程序間包括跨平臺應用程序間的通訊,實現了硬件設備與系統(tǒng)軟件之間實時通訊。該規(guī)范的基本思想是:由支持OPC接口的硬件廠商開發(fā)對應其硬件設備的OPC服務器,負責獲取硬件設備生產的數據并暫存;OPC客戶端,即支持OPC接口的系統(tǒng)軟件就可以通過連接OPC服務器來讀寫之前獲取到的數據。OPC連接模式如下圖所示。
OPC服務器支持兩種類型的數據訪問接口:自動化接口(Automation interface);定制接口(Custom interface)。兩種接口定義了OPC客戶端和OPC服務器之間進行通訊的方法。用戶可以自己編寫OPC客戶端程序,在客戶端程序中調用OPC服務器對象接口及對應的方法來訪問OPC服務器讀寫數據。
一個OPC數據訪問服務器中包含3類對象模型,OPC服務器(Server)、OPC組(Group)、OPC項(Item)。它們之間的聯(lián)系是Server對象維護有關服務器的信息并作為Group對象的容器,而Group對象維護有關其自身的信息,提供包容Item對象的機制,并管理Item對象[2-3]。
2 OPC客戶端程序的設計開發(fā)
這里采用了Java語言編寫的開源項目J-Interop和Utgard實現OPC客戶端[4]。
2.1 Utgard
Utgard屬于Openscada開源項目,基于J-Interop做的,純Java語言編寫,具有跨平臺的特點,用于和OPC Server進行通訊。Openscada可以很好的實現與OPC服務器的連接以及讀寫數據的功能,并且可以隨時獲取和修改OPC的Server和Item的屬性狀態(tài)信息等。而J-Intgard是純Java封裝的用于COM/DCOM通訊的開源項目。需要注意的是,在使用Utgard之前需要配置好服務器端的DCOM組件。
2.2 使用Utgard訪問OPC server
開發(fā)步驟及相應代碼大致為:
(1)導入關鍵jar包。
(2)編寫配置文件,設置連接服務器的主機用戶密碼等信息。
(3)遍歷當前所連接的服務器上所有支持OPC DA2.0規(guī)范的OPC服務器應用。
(4)創(chuàng)建ConnectionInformation類。
final ConnectionInformation ci = new ConnectionInformation();
ci.setHost(host);
ci.setClsid(serverList.getClsIdFromProgId ("Matrikon.OPC.Simulation"));
ci.setUser(user);
ci.setPassword(password);
其中通過Clsid的方式查找OPC Server更快,但如果事先不知道clsid,也可以通過ServerList類的getClsIdFromProgId方法來查詢相應OPC
Server名稱的Clsid。
(5)創(chuàng)建Server類并連接:ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
Server server = new Server(ci, exec);
server.connect();
(6)Utgard有兩種數據訪問方式——直接通過item的read/write方法或者使用AccessBase(讀取數據)。需要注意的是,不管采用哪一種方式,返回結果都是通過ItemState類來獲取,通過調用ItemState的getValue方法可以獲得訪問結果,返回結果是JIVarant類型的,里面包含了OPC訪問時的各種類型及處理方法。
按照上述方法步驟,使用Utgard連接至OPC服務器,然后使用Async20Access類隔時間段地進行異步讀取數據??蛻舳顺绦蛟赪indows下和Linux下均能成功連接OPC Server,并獲取到數據。
3 結語
本文給出了利用OPC技術實現DCS數據獲取的方法,基于Java語言成功開發(fā)出OPC客戶端并實現跨平臺連接OPC服務器。這一構建方法為工業(yè)領域上層應用系統(tǒng)的開發(fā)提供了一種有效途徑[5]。
參考文獻:
[1]胡強,趙英凱.OPC技術在DCS與工廠管理網數據通訊中的應用[J].工業(yè)儀表與自動化裝置,2002(03):25-28.
[2]王燕,王健.OPC接口技術在DCS數據交換中的應用[J].微計算機信息,2010,26(31):48-49+37.
[3]晏明軍.基于Java的OPC客戶端的實現[J].電子技術,2010,47(07):56-57.
[4]孫亮清.用Java實現OPC客戶端[J].上海船舶運輸科學研究所學報,2011,34(01):34-37.
[5]謝鵬華,牛昱光.DCS遠程監(jiān)控實驗教學系統(tǒng)的OPC技術實現方法[J].太原理工大學學報,2011,42(02):149-154.