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