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