于波 彭亮 陳前程
摘要:針對(duì)工業(yè)控制領(lǐng)域中生產(chǎn)設(shè)備種類繁多,數(shù)據(jù)通信協(xié)議不一致,系統(tǒng)集成越發(fā)復(fù)雜,使得企業(yè)難以實(shí)現(xiàn)對(duì)生產(chǎn)數(shù)據(jù)采集等問(wèn)題,提出基于OPC技術(shù)的解決方案。鑒于現(xiàn)今企業(yè)上層應(yīng)用系統(tǒng)多為JavaEE架構(gòu),通過(guò)采用Java語(yǔ)言實(shí)現(xiàn)的Utgard開(kāi)源類庫(kù)與OPC通信技術(shù)來(lái)構(gòu)建數(shù)據(jù)采集系統(tǒng),這不僅降低企業(yè)成本,便于自動(dòng)化控制,同時(shí)也是一種新型工業(yè)數(shù)據(jù)采集方式,具有實(shí)際應(yīng)用價(jià)值。
關(guān)鍵詞:OPC;Java;Utgard;數(shù)據(jù)采集系統(tǒng);工業(yè)控制
中圖分類號(hào):TP311 ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)15-0116-03
Abstract: In the field of industrial control, there are many kinds of production equipment, inconsistent data communication protocols and more complex system integration, which make it difficult for enterprises to realize production data acquisition. A solution based on OPC technology is proposed. In view of the Java EE architecture of the upper application systems of enterprises nowadays, the data acquisition system is constructed by Utgard open source components and OPC communication technology implemented in Java language. This not only reduces the cost of enterprises and facilitates automatic control, but also is a new type of industrial data acquisition method, which has practical application value.
Key words: OPC; Java; Utgard; Data Acquisition System; Industrial Control
1 背景
傳統(tǒng)工控領(lǐng)域中,為了實(shí)現(xiàn)數(shù)據(jù)采集系統(tǒng),需要通過(guò)驅(qū)動(dòng)程序與現(xiàn)場(chǎng)設(shè)備進(jìn)行數(shù)據(jù)交換,但由于傳統(tǒng)的過(guò)程控制系統(tǒng)是一對(duì)一的系統(tǒng),任何一種上位監(jiān)控軟件或其他應(yīng)用軟件,在使用某種硬件設(shè)備時(shí)都需要開(kāi)發(fā)專用的驅(qū)動(dòng)程序。工作量繁重且不易于系統(tǒng)集成。使用OPC技術(shù)可以很好解決上述問(wèn)題。OPC提供通用的接口規(guī)范,用于各種過(guò)程控制設(shè)備之間的通訊,不論過(guò)程中采用何種應(yīng)用軟件和硬件設(shè)備。
由于上層管理軟件越來(lái)越多采用Java開(kāi)發(fā),為了更好地集成,本系統(tǒng)用Java實(shí)現(xiàn)。Java語(yǔ)言具有安全性、平臺(tái)獨(dú)立與可移植性、多線程、動(dòng)態(tài)性等特點(diǎn) 。利用這些特點(diǎn)可以方便高效編寫桌面應(yīng)用程序、Web應(yīng)用程序等。同時(shí)開(kāi)發(fā)過(guò)程中為了不依賴COM組件以及DLL等,保證平臺(tái)可移植性,使用純Java開(kāi)發(fā)的Utgard開(kāi)源類庫(kù)與OPC通信。
2 OPC技術(shù)
2.1 OPC基本結(jié)構(gòu)與通訊方式
OPC——OLE for Process Contrl,微軟公司制定的一套規(guī)范的接口協(xié)議,它是為了不同供應(yīng)廠商的設(shè)備和應(yīng)用程序之間的軟件接口標(biāo)準(zhǔn)化,使其間的數(shù)據(jù)交換更加簡(jiǎn)單化的目的而提出的。它基于OLE、COM、DCOM技術(shù),采用客戶端/服務(wù)器(Client/Server)結(jié)構(gòu),規(guī)定了OPC Client與OPC Server之間遵循的規(guī)范接口。服務(wù)端由控制設(shè)備的生產(chǎn)廠商將硬件設(shè)備驅(qū)動(dòng)程序和通信程序封裝成獨(dú)立的服務(wù)器,客戶端通過(guò)規(guī)范接口與服務(wù)端通信,在開(kāi)發(fā)客戶端時(shí)可以不包含任何通信接口,程序不必關(guān)心揮服務(wù)器的最佳性能,底層的硬件設(shè)備特性,也不必考慮軟硬件如何如通信,只要遵循數(shù)據(jù)接口協(xié)議,就能夠從服務(wù)器中取得數(shù)據(jù)。標(biāo)準(zhǔn)規(guī)訂了2種通信方式:同步通信方式和異步通信。OPC基本結(jié)構(gòu)如圖1所示。
2.2 OPC數(shù)據(jù)存儲(chǔ)格式
不同于傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的表存儲(chǔ), OPC存儲(chǔ)格式是樹形結(jié)構(gòu)。
服務(wù)端主機(jī)存有多個(gè)OPC Server,每個(gè)OPC Server存有多個(gè)item,item中存儲(chǔ)內(nèi)容就是當(dāng)前生產(chǎn)設(shè)備中需要采集與監(jiān)控的數(shù)據(jù)項(xiàng)。客戶端在獲取數(shù)據(jù)時(shí),需指明服務(wù)器主機(jī)名,具體Server以及需要獲取的item所在路徑。
客戶端除了Server,在其下面還有一個(gè)存儲(chǔ)層級(jí)Group,它分類存儲(chǔ)Server端的item,所以在獲取item時(shí)不僅可以一個(gè)個(gè)獲取,還可以通過(guò)批處理技術(shù),通過(guò)創(chuàng)建維護(hù)一個(gè)個(gè)Group,將需要獲取的多個(gè)item放到這些Group中,一次性獲取出來(lái),從而降低了每獲取一個(gè)item而創(chuàng)建一次連接所帶來(lái)的消耗問(wèn)題。
OPC數(shù)據(jù)存儲(chǔ)格式如圖2所示:
3 基于Java的OPC數(shù)據(jù)采集系統(tǒng)的實(shí)現(xiàn)
3.1 Kepware作為 OPC服務(wù)器
選取Kepware充當(dāng)OPC服務(wù)器,Kepware作為OPC服務(wù)器可以方便獲取PLC中的運(yùn)轉(zhuǎn)數(shù)據(jù)等信息,它的優(yōu)勢(shì)在于支持市場(chǎng)上絕大多數(shù)的PLC廠商,Kepware主要應(yīng)用領(lǐng)域有數(shù)據(jù)采集技術(shù),歷史數(shù)據(jù)訪問(wèn)技術(shù)以及遠(yuǎn)程數(shù)據(jù)訪問(wèn)技術(shù)等等。
3.2 使用Utgard開(kāi)源類庫(kù)與OPC服務(wù)器通訊
Utgard 是一個(gè)純Java開(kāi)發(fā)的開(kāi)源類庫(kù), 是OpenSCADA項(xiàng)目底下的子項(xiàng)目,具有跨平臺(tái)特性,全部基于DCOM實(shí)現(xiàn),利用Utgard庫(kù)文件,可以實(shí)現(xiàn)與OPC服務(wù)器進(jìn)行通訊。它支持在Windows及Linux操作系統(tǒng)上運(yùn)行,支持組查詢,同步,異步查詢,以及單點(diǎn)的發(fā)布訂閱模式。
3.3 MySQL數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)
選用MySQL作為持久化存儲(chǔ)系統(tǒng),它是一種關(guān)系型數(shù)據(jù)庫(kù),具有體積小、速度快、總體擁有成本低,同時(shí)開(kāi)源免費(fèi)等特點(diǎn)。使用MySQL存儲(chǔ)生產(chǎn)設(shè)備中采集過(guò)來(lái)的關(guān)鍵數(shù)據(jù)參數(shù),將這些數(shù)據(jù)采集存儲(chǔ)起來(lái),可以方便日后追溯。這些數(shù)據(jù)適用于各種類型的過(guò)程和生產(chǎn)控制,它可以追溯到產(chǎn)品的以下信息:哪個(gè)零件被安裝于成品中了?產(chǎn)品生產(chǎn)過(guò)程中,產(chǎn)生了哪些需要控制的關(guān)鍵參數(shù),是否都合格?以及對(duì)當(dāng)前制造過(guò)程的嚴(yán)密控制等等。
3.4 數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)
首先在本地操作系統(tǒng)環(huán)境好配置好DCOM,接著使用Utgard實(shí)現(xiàn)OPC數(shù)據(jù)采集系統(tǒng),在Eclipse項(xiàng)目工程中導(dǎo)入openscada.opc.dcom 和openscada.opc.lib 2 個(gè)庫(kù),其中openscada. opc. dcom 庫(kù)使用 J-Interop 實(shí)現(xiàn)了與 DCOM 的交互,openscada.opc.lib 庫(kù)實(shí)現(xiàn)了 OPC 接口程序,這些庫(kù)是用 Java 開(kāi)發(fā)。使用Utgard提供的API函數(shù),建立與OPC服務(wù)器的連接,讀取和寫入OPC服務(wù)器中的變量的參數(shù)值,將這些變量的值地傳遞給軟件系統(tǒng),進(jìn)而持久化存儲(chǔ)起來(lái),采集進(jìn)追溯系統(tǒng)。數(shù)據(jù)采集流程如圖3所示。
4 數(shù)據(jù)采集系統(tǒng)的軟件編程實(shí)現(xiàn)
OPC數(shù)據(jù)存取服務(wù)器由三個(gè)對(duì)象組成:服務(wù)器對(duì)象(Server)、組對(duì)象(Group)和項(xiàng)對(duì)象(Item)。通過(guò)與OPC Server建立連接后即可讀取數(shù)據(jù)或?qū)懭霐?shù)據(jù)。Utgard支持三種讀取數(shù)據(jù)方式,分別是同步查詢,異步查詢,發(fā)布訂閱模式查詢,支持一種寫入方式,同步寫入。以下是數(shù)據(jù)采集系統(tǒng)編程實(shí)現(xiàn)關(guān)鍵API展示:
4.1 與OPC Server建立連接
ConnectionInformation ci = newConnectionInformation();
ci.setHost(ipAddress); //OPC Server的主機(jī)地址
ci.setDomain("");
ci.setUser("opcUser");// DCOM配置中OPC用戶
ci.setPassword("123456");//OPC用戶密碼
ci.setClsid("7BC0CC8E-482C-47CA-ABDC-0FE7F9C6E729"); //Kepware軟件在注冊(cè)表的ID
Server server = new Server(ci, Executors.newSingleThreadScheduledExecutor());//啟動(dòng)服務(wù)
server.connect();
4.2 Item的同步查詢
Group group = server.addGroup();
Item item = group.addItem("Random.Real5");
System.out.println(“ItemName:” + item.getId() + “Value:" + item.read(false).getValue());
server.dispose();
4.3 Item的異步查詢
AccessBase access = new SyncAccess(server, PERIOD);
access.addItem("Random.Real5", new DataCallback() {
public void changed(Item item, ItemState itemstate) {
System.out.println("ItemName:"+item.getId()+"value:" + itemstate.getValue());
}
});
access.bind();
Thread.sleep(SLEEP);
access.unbind();
server.dispose();
4.4 Item的發(fā)布訂閱查詢
AccessBase access = new Async20Access(server, PERIOD, false);
access.addItem("Random.Real5", new DataCallback() {
private int count;
public void changed(Item item, ItemState itemstate) {
System.out.println("ItemName:"+item.getId()+"value:" + itemstate.getValue()); }
});
access.bind();
access.unbind();
server.dispose();
4.5 Item的同步寫入
Group group = server.addGroup();
Item item = group.addItem("Square Waves.Real4");
final Float[] integerData = new Float[] { 1202f, 1203f, 1204f };
final JIArray array = new JIArray(integerData, false);
final JIVariant value = new JIVariant(array);
item.write(value);
server.dispose();
5 結(jié)束語(yǔ)
隨著工業(yè)生產(chǎn)的快速發(fā)展,企業(yè)生產(chǎn)規(guī)模越發(fā)龐大,生產(chǎn)設(shè)備逐日增多,使用OPC技術(shù)可以有效簡(jiǎn)化生產(chǎn)過(guò)程控制中數(shù)據(jù)采集任務(wù)的簡(jiǎn)化。使用OPC技術(shù)可以使得現(xiàn)場(chǎng)控制設(shè)備與上層控制系統(tǒng)和生產(chǎn)管理軟件之間的通訊更加方便靈活。本系統(tǒng)采用Java語(yǔ)言開(kāi)發(fā),可以更好地與現(xiàn)今Java EE企業(yè)架構(gòu)系統(tǒng)集成,同時(shí)利用純Java編寫的Utgard開(kāi)源類庫(kù)與OPC服務(wù)器通信,具有平臺(tái)無(wú)關(guān)性,可移植性等優(yōu)點(diǎn),同時(shí)在穩(wěn)定性和擴(kuò)展性上都具有很大的操作性,這種新型的數(shù)據(jù)采集方式有很大的實(shí)際應(yīng)用場(chǎng)景。
參考文獻(xiàn):
[1] 王林. 基于SOA的生產(chǎn)運(yùn)行管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[M]. 北京: 電子工業(yè)出版社, 2015.
[2] 李堃弸. 測(cè)控領(lǐng)域中基于 VB的數(shù)據(jù)采集的設(shè)計(jì)與實(shí)現(xiàn)[J]. 微計(jì)算機(jī)信息,2005(1): 46-47.
[3] 盧宏, 汪金良, 曾青云. 基于OPC技術(shù)的WinCE實(shí)時(shí)數(shù)據(jù)采集[J].自動(dòng)化博覽, 2006(8): 58-60.
[4] 劉莉. 用VB編寫OPC客戶端程序的方法[J]. 工業(yè)控制計(jì)算機(jī),2005,18(5):5-6.
[5] 王俊萍. OPC技術(shù)在擴(kuò)展SCADA系統(tǒng)中的應(yīng)用[J]. 現(xiàn)代電子技術(shù),2005(10):42-44.
[6] 馬增良, 蘭斌. OPC數(shù)據(jù)訪問(wèn)服務(wù)器實(shí)現(xiàn)機(jī)制研究[J]. 計(jì)算機(jī)工程與應(yīng)用,2003, 39(21): 65-67.
【通聯(lián)編輯:謝媛媛】