于波 彭亮 陳前程



摘要:針對工業控制領域中生產設備種類繁多,數據通信協議不一致,系統集成越發復雜,使得企業難以實現對生產數據采集等問題,提出基于OPC技術的解決方案。鑒于現今企業上層應用系統多為JavaEE架構,通過采用Java語言實現的Utgard開源類庫與OPC通信技術來構建數據采集系統,這不僅降低企業成本,便于自動化控制,同時也是一種新型工業數據采集方式,具有實際應用價值。
關鍵詞:OPC;Java;Utgard;數據采集系統;工業控制
中圖分類號:TP311 ? ? ? ? 文獻標識碼:A
文章編號: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 背景
傳統工控領域中,為了實現數據采集系統,需要通過驅動程序與現場設備進行數據交換,但由于傳統的過程控制系統是一對一的系統,任何一種上位監控軟件或其他應用軟件,在使用某種硬件設備時都需要開發專用的驅動程序。工作量繁重且不易于系統集成。使用OPC技術可以很好解決上述問題。OPC提供通用的接口規范,用于各種過程控制設備之間的通訊,不論過程中采用何種應用軟件和硬件設備。
由于上層管理軟件越來越多采用Java開發,為了更好地集成,本系統用Java實現。Java語言具有安全性、平臺獨立與可移植性、多線程、動態性等特點 。利用這些特點可以方便高效編寫桌面應用程序、Web應用程序等。同時開發過程中為了不依賴COM組件以及DLL等,保證平臺可移植性,使用純Java開發的Utgard開源類庫與OPC通信。
2 OPC技術
2.1 OPC基本結構與通訊方式
OPC——OLE for Process Contrl,微軟公司制定的一套規范的接口協議,它是為了不同供應廠商的設備和應用程序之間的軟件接口標準化,使其間的數據交換更加簡單化的目的而提出的。它基于OLE、COM、DCOM技術,采用客戶端/服務器(Client/Server)結構,規定了OPC Client與OPC Server之間遵循的規范接口。服務端由控制設備的生產廠商將硬件設備驅動程序和通信程序封裝成獨立的服務器,客戶端通過規范接口與服務端通信,在開發客戶端時可以不包含任何通信接口,程序不必關心揮服務器的最佳性能,底層的硬件設備特性,也不必考慮軟硬件如何如通信,只要遵循數據接口協議,就能夠從服務器中取得數據。標準規訂了2種通信方式:同步通信方式和異步通信。OPC基本結構如圖1所示。
2.2 OPC數據存儲格式
不同于傳統關系型數據庫的表存儲, OPC存儲格式是樹形結構。
服務端主機存有多個OPC Server,每個OPC Server存有多個item,item中存儲內容就是當前生產設備中需要采集與監控的數據項。客戶端在獲取數據時,需指明服務器主機名,具體Server以及需要獲取的item所在路徑。
客戶端除了Server,在其下面還有一個存儲層級Group,它分類存儲Server端的item,所以在獲取item時不僅可以一個個獲取,還可以通過批處理技術,通過創建維護一個個Group,將需要獲取的多個item放到這些Group中,一次性獲取出來,從而降低了每獲取一個item而創建一次連接所帶來的消耗問題。
OPC數據存儲格式如圖2所示:
3 基于Java的OPC數據采集系統的實現
3.1 Kepware作為 OPC服務器
選取Kepware充當OPC服務器,Kepware作為OPC服務器可以方便獲取PLC中的運轉數據等信息,它的優勢在于支持市場上絕大多數的PLC廠商,Kepware主要應用領域有數據采集技術,歷史數據訪問技術以及遠程數據訪問技術等等。
3.2 使用Utgard開源類庫與OPC服務器通訊
Utgard 是一個純Java開發的開源類庫, 是OpenSCADA項目底下的子項目,具有跨平臺特性,全部基于DCOM實現,利用Utgard庫文件,可以實現與OPC服務器進行通訊。它支持在Windows及Linux操作系統上運行,支持組查詢,同步,異步查詢,以及單點的發布訂閱模式。
3.3 MySQL數據庫存儲數據
選用MySQL作為持久化存儲系統,它是一種關系型數據庫,具有體積小、速度快、總體擁有成本低,同時開源免費等特點。使用MySQL存儲生產設備中采集過來的關鍵數據參數,將這些數據采集存儲起來,可以方便日后追溯。這些數據適用于各種類型的過程和生產控制,它可以追溯到產品的以下信息:哪個零件被安裝于成品中了?產品生產過程中,產生了哪些需要控制的關鍵參數,是否都合格?以及對當前制造過程的嚴密控制等等。
3.4 數據采集系統設計實現
首先在本地操作系統環境好配置好DCOM,接著使用Utgard實現OPC數據采集系統,在Eclipse項目工程中導入openscada.opc.dcom 和openscada.opc.lib 2 個庫,其中openscada. opc. dcom 庫使用 J-Interop 實現了與 DCOM 的交互,openscada.opc.lib 庫實現了 OPC 接口程序,這些庫是用 Java 開發。使用Utgard提供的API函數,建立與OPC服務器的連接,讀取和寫入OPC服務器中的變量的參數值,將這些變量的值地傳遞給軟件系統,進而持久化存儲起來,采集進追溯系統。數據采集流程如圖3所示。
4 數據采集系統的軟件編程實現
OPC數據存取服務器由三個對象組成:服務器對象(Server)、組對象(Group)和項對象(Item)。通過與OPC Server建立連接后即可讀取數據或寫入數據。Utgard支持三種讀取數據方式,分別是同步查詢,異步查詢,發布訂閱模式查詢,支持一種寫入方式,同步寫入。以下是數據采集系統編程實現關鍵API展示:
4.1 與OPC Server建立連接
ConnectionInformation ci = newConnectionInformation();
ci.setHost(ipAddress); //OPC Server的主機地址
ci.setDomain("");
ci.setUser("opcUser");// DCOM配置中OPC用戶
ci.setPassword("123456");//OPC用戶密碼
ci.setClsid("7BC0CC8E-482C-47CA-ABDC-0FE7F9C6E729"); //Kepware軟件在注冊表的ID
Server server = new Server(ci, Executors.newSingleThreadScheduledExecutor());//啟動服務
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的發布訂閱查詢
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 結束語
隨著工業生產的快速發展,企業生產規模越發龐大,生產設備逐日增多,使用OPC技術可以有效簡化生產過程控制中數據采集任務的簡化。使用OPC技術可以使得現場控制設備與上層控制系統和生產管理軟件之間的通訊更加方便靈活。本系統采用Java語言開發,可以更好地與現今Java EE企業架構系統集成,同時利用純Java編寫的Utgard開源類庫與OPC服務器通信,具有平臺無關性,可移植性等優點,同時在穩定性和擴展性上都具有很大的操作性,這種新型的數據采集方式有很大的實際應用場景。
參考文獻:
[1] 王林. 基于SOA的生產運行管理系統的設計與實現[M]. 北京: 電子工業出版社, 2015.
[2] 李堃弸. 測控領域中基于 VB的數據采集的設計與實現[J]. 微計算機信息,2005(1): 46-47.
[3] 盧宏, 汪金良, 曾青云. 基于OPC技術的WinCE實時數據采集[J].自動化博覽, 2006(8): 58-60.
[4] 劉莉. 用VB編寫OPC客戶端程序的方法[J]. 工業控制計算機,2005,18(5):5-6.
[5] 王俊萍. OPC技術在擴展SCADA系統中的應用[J]. 現代電子技術,2005(10):42-44.
[6] 馬增良, 蘭斌. OPC數據訪問服務器實現機制研究[J]. 計算機工程與應用,2003, 39(21): 65-67.
【通聯編輯:謝媛媛】