摘 要:本文詳細介紹了OPC的各種特性,和使用c#開發OPC Client的具體過程以及在實際工程中的應用。
關鍵詞:OPC c# DCOM
中圖分類號:TP3 文獻標識碼:A 文章編號:1672-3791(2013)01(b)-0033-02
1 OPC和C#概述
1.1 OPC概述
OPC(OLE for Process Control)是一種利用微軟的 COM/DCOM 技術來達成自動化控制的協議,根據 OPC Specification 的定義,OPC is "a standard mechanism for communicating to numerous data sources, either devices on the factory floor, or a database in a control room."
現代化企業中自動化程度越來越高,數據量也在成倍增長,為了能夠充分利用這些數據,發展出了ERP/MES等信息化系統,這些系統架構大體如圖1。
OPC協議做為一種通訊轉換協議,介于下層控制系統與上層軟件之間;它隱藏下層系統的不同,為上層的數據應用提供一個統一的接口,使得上層軟件在數據集成時,無需考慮下層控制系統的協議和實現方式,只要符合OPC客戶端的接口規范即可,這大大節省了上層軟件在數據集成方面的工作。
OPC發展至今已有1.0、2.0、3.0等幾個版本,在目前工業自動化中以2.0使用最為廣泛。
1.2 C#概述
C#(念法:C Sharp,音標[∫a:p])是微軟公司在2000年6月發布的一種新的編程語言,并在微軟職業開發者論壇(PDC)上登臺亮相。C#是微軟公司研究員Anders Hejlsberg的研究成果。C#看起來與Java有著驚人的相似;但是C#與Java也有著明顯的不同,它借鑒了Delphi的一個特點,與COM(組件對象模型)是直接集成的,而且它是微軟公司.NET windows網絡框架的主角。
C#旨在設計成為一種“簡單、現代、通用”,以及面向對象的程序設計語言。此種語言的實現,應提供對于以下軟件工程要素的支持:強類型檢查、數組維度檢查、未初始化的變量引用檢測、自動垃圾收集(Garbage Collection,指一種自動內存釋放技術)。軟件必須做到強大、持久,并具有較強的編程生產力。
C#適合為獨立和嵌入式的系統編寫程序,從使用復雜操作系統的大型系統到特定應用的小型系統均適用。
2 使用C#開發OPC Client
2.1 OPC工作原理
OPC技術是基于微軟的COM/DCOM技術的,COM是一種發展軟件組件的方法,所謂組件,是指一個可以提供給其它組件或程序服務的二進制可執行程序。每一個開發好的COM組件就像一塊積木,在開發應用程序時,你可以選擇合適的組件來組成你的應用程序,而不需要從頭開發所有的源代碼。為使用組件的功能,每個COM組件都提供了一系列的接口,使用者通過這些接口,傳遞相應的參數,即可實現相應的功能。
OPC基于COM技術,在OPC的規格中定義了使用所需要的接口;OPC客戶端通過這些接口,連接到OPC Server以采取數據。這就是OPC Server/Client的運行方式。(如圖2)
OPC Server透過一組一組的接口提供服務,在實際應用中,OPC Server共分為三層:分別是OPCServer,OPCGroup,和OPCItem。
OPCItem即對應自動化控制系統中的一個點,包括外部點或系統內部點,可以是模擬量也可以是開關量;OPCGroup是OPCItem的一個集合,這個集合中一般包含了同一類型的OPCItem;而OPCServer則是OPCGroup的集合,它包含一個或多個OPCGroup。
2.2 實現過程
首先,需要在c#中添加對OPC自動化接口OPCAutomation的引用,該文件是OPC基金會提供的OPC自動化接口標準文件。只有在引用該文件后,方可在c#中對OPC接口進行訪問。
在定義完這些對象后,下面就需要進行連接OPC Server了。要連接到OPC Server,需要首先查看要連接的OPC Server所在計算機的IP地址以及在該計算機上注冊的名稱;OPCServer注冊名稱的查看方法是在運行中輸入“DCOMCNFG”—“組件服務”—“計算機”—“我的電腦”—“DCOM配置”下查找,也可以通過OPCServer的供應商找到。例如西門子WinCC中的OPCServer的注冊名稱是OPCServer.WinCC;和利時MACSV系統的OPCServer的注冊名稱是Hollysys.MacsOPCSvr.1。
在明確了要連接的OPCServer的注冊名稱及所在的計算機的IP地址后,我們就可以使用。
當OPCServer端的Item的數值產生變化時,將會以Group1_DataChange()事件來通知Client,同時將發生變化的Item的個數、變化的數值、時間標簽、客戶端句柄等信息發回,用戶可在該事件中對變化的數值進行處理。
這是稱之為異步讀的方式,還有一種同步讀取數據的方式,如以下代碼所示: Group1.OPCItems.Item(i).Read(1, out Value, out Quality, out TimeStamp)
這句代碼就是以同步讀取方式的方式將Item(i)的值、數據質量和事件標簽從OPCServer端讀取出來。
2.3 DCOM配置
因為OPC是基于微軟的COM技術,如果OPC Server和Client不在同一個計算機時,就需要對Server和Client所在的兩臺計算機分別做DCOM設置,才能實現數據互通,否則Client將不能正常訪問到Server。
配置DCOM,依據系統的不同需要做不同的配置。但是通用的原則是在Server和Client所在的兩臺計算機上首先需要保證能夠互相訪問到共享文件夾,然后在各自的計算機上增加一個密碼不為空,并且用戶名和密碼都相同的用戶。另外需要在DCOM配置屬性中添加上everyone的訪問權限,以實現Client的連接。同時需要注意的是,如果已啟用防火墻軟件,則需要在所有的防火墻中添加例外,防止防火墻對OPC的阻塞。
3 結語
使用c#開發OPC Client相比其它工具而言,比較方便而且快捷,而且在穩定性和數據讀取的速度上,也有不小的優勢。我們開發的這個Client,通過在實際項目中的應用,已經完全證實了其可靠性,并且實現了一個Client同時讀取四個不同的OPCServer,總點數大概5000點的項目。
OPC依靠它自身的功能和簡便,使其迅速發展壯大,并占據了主流的位置,今后對于OPC的應用,將會越來越多,越來越普遍。