范志夫,曹宏純,湯振華
(國網江西省電力公司計量中心,江西南昌 330096)
省級計量中心承擔著所轄電能計量設備和電能信息采集終端檢定、檢測工作。而檢定環境對于檢定結果的準確性有著至關重要的影響,檢定報告中環境溫濕度也是必須標明的。根據省級計量中心的建設要求,必須配備大型中央空調及排風系統。以江西省電力公司計量中心為例,該空調系統采用SIMATIC WINCC開發編寫,在自身控制主機界面上能夠顯示實時溫濕度等參數。但生產調度平臺及自動化檢定線系統卻無法直接從此取得需要的溫濕度參數。本文介紹一種基于OPC協議,能夠讀取WINCC數據存儲區溫濕度數據的方法,并在此基礎上開發相應的接口函數,以提供數據給第三方實時調用。
SIMATIC?WinCC?基于Windows平臺,能為工業領域提供完備的監控與數據采集(SCADA)功能,涵蓋單用戶系統直到支持冗余服務器和遠程Web客戶機解決方案的多用戶系統。WinCC是跨公司垂直集成交換信息的基礎,它采用了工廠智能,可以實現更大程度的生產過程的透明性。WinCC不僅包含開放的編程接口,還包含大量已經開發了的WinCC選件和WinCC附加件,用于給用戶提供各種功能的擴展。隨著自設備級直至企業級工廠智能應用的整合,西門子工業自動化與驅動技術集團(IA&DT)可以提供一種完美、靈活的“一站式”解決方案。SIMATIC WinCC工廠智能選件有效、智能地利用數據,并實時地生成關鍵信息,從而可以改善公司的決策過程。該過程能進一步降低工廠成本、防止原料浪費,更好地利用生產設施,確保更高的管理效率和管理有效性。SIMATICWinCC工廠智能選件實現了監控級和制造執行系統級的連接,從而可以高效地進行生產數據的采集、歸檔、壓縮、分析和發布工作,使生產過程具有更大的透明性。
OPC全稱是Object Linking and Embedding(OLE)for Process Control,它的出現為基于Windows的應用程序和現場過程控制應用建立了橋梁。在過去,為了存取現場設備的數據信息,每一個應用軟件開發商都需要編寫專用的接口函數。由于現場設備的種類繁多,且產品的不斷升級,往往給用戶和軟件開發商帶來了巨大的工作負擔。通常這樣也不能滿足工作的實際需要,系統集成商和開發商急切需要一種具有高效性、可靠性、開放性、可互操作性的即插即用的設備驅動程序。OPC以OLE/COM/DCOM技術為基礎,采用客戶/服務器模式,為工業自動化軟件面向對象的開發提供了統一的標準,這個標準定義了應用Microsoft操作系統在基于PC的客戶機之間交換自動化實時數據的方法,用這項標準后,硬件開發商將取代軟件開發商為自己的硬件產品開發統一的OPC接口程序,而軟件開發者可免除開發驅動程序的工作,充分發揮自己的特長,把更多的精力投入到其核心產品的開發上。
OPC讀數據有3種方式:同步、異步、訂閱。
同步通訊時,OPC客戶程序向OPC服務器進行請求時,OPC客戶程序必須等到OPC服務器對應的響應全部完成以后才能返回,在此期間OPC客戶程序一直處于等待狀態,若進行讀操作,那么必須等待OPC服務器響應后才返回(如圖1所示)。因此在同步通訊時,如果有大量數據進行操作或者有很多OPC客戶程序對OPC服務器進行讀操作,必然造成OPC客戶程序的阻塞現象。因此同步通訊適用于OPC客戶程序較少,數據量較小時的場合。

圖1 OPC同步方式讀數據
異步通訊時,OPC客戶程序對服務器進行請求時,OPC客戶程序請求后立刻返回,不用等待OPC服務器的響應,可以進行其它操作。OPC服務器完成響應后再通知OPC客戶程序,如進行讀操作,OPC客戶程序通知OPC服務器后離開返回,不等待OPC服務器的讀完成,而OPC服務器完成讀后,會自動的通知OPC客戶程序,把讀結果傳送給OPC客戶程序(如圖2所示)。因此相對于同步通訊,異步通訊的效率更高。
訂閱方式時,OPC客戶程序對服務器進行請求時,OPC客戶程序操作后立刻返回,不用等待OPC服務器的操作,可以進行其它操作,OPC服務器的Group組在組內有數據發生改變時,自動根據更新周期刷新相應的客戶端數據,如圖3所示,客戶端只向OPC服務發送一次請求,之后不再對服務器請求。

圖2 OPC異步方式讀數據

圖3 OPC訂閱方式讀數據
總的來說,OPC技術的實現由2部分組成:OPC服務器和OPC客戶應用部分。OPC服務器收集現場設備的數據信息,然后通過標準的OPC接口傳送給OPC客戶端應用。OPC客戶端則通過標準的OPC接口接收數據信息。
OPC服務器通常支持2種類型的訪問接口,它們分別為不同的編程語言環境提供訪問機制,包括自動化接口標準(Automation Interface Standard)和自定義接口標準(Custom Interface Standard)。自動化接口通常是為基于腳本編程語言而定義的標準接口,可以使用VisualBasic、Delphi、PowerBuilder等編程語言開發OPC服務器的客戶應用。,而自定義接口適用于C和C++應用程序,它比自動化接口更高效,功能更強大。
一般地講,一個OPC數據訪問服務器由幾類對象組成(如圖4所示):服務器(Server)、組(Group)和項(Item)。OPC服務器對象包括有關服務器的信息而且作為一個容器為OPC組對象服務。OPC組對象包含了有關它自身的信息而且提供了邏輯上組織OPC項的機制。對于OPC客戶端提供了一種組織數據的方法。例如,在一個特殊的操作顯示或報告中組可以聲稱項數據能被讀和寫。可以在客戶端和組里面的項之間創建基于連接的例外,也可根據需要使之允許或禁止。OPC客戶端能配置OPC服務器提供給OPC客戶端的數據變化率。

圖4 OPC對象
計量中心中央空調系統自帶的軟件溫濕度顯示界面如圖5所示,各區域的溫濕度標有相應的數字,每個區域對應著相應的WINCC數據區的變量,因此,需開發接口函數讀取相應的數據區的內容,最終獲取溫濕度數據。
OPC接口開發的一般流程見圖6。

圖5 計量中心廠區空調系統溫濕度分布

圖6 OPC接口開發流程
由于獲取溫濕度的數據量較小,故采用同步讀數據的方式來實現,具體實現及關鍵代碼如下:
(1)首先需安裝并注冊相關的OPC自動化接口服務,并添加命名空間:(需要在項目中添加相應的引用)
using OPCAutomation;
(2)定義OPC相關變量
OPCServer KepServer;
OPCGroups KepGroups;
OPCGroup KepGroup;
OPCItems KepItems;
OPCItem KepItem;
(3)獲取服務器列表并選擇連接OPC服務器,此處服務器為WINCC
privatevoid connectServer()
{
strHostIP="192.168.1.40";//通過IP來獲取計算機名稱,可用在局域網內。
IPHostEntry ipHostEntry=Dns.GetHostByAddress(strHostIP);
strHostName=ipHostEntry.HostName.ToString();
//獲取本地計算機上的OPCServerName
KepServer=new OPCServer();
object serverList = KepServer.GetOPCServers(strHostName);
foreach(stringturn in(Array)serverList)
{
if(turn=="OPCServer.WinCC")
{
servername=turn;
}
}
KepServer.Connect(servername,strHostIP);
}
(4)設置OPC服務組相關屬性
privatevoid SetGroupProperty()
{
KepServer.OPCGroups.DefaultGroupIsActive =true;
KepServer.OPCGroups.DefaultGroupDeadband=0;
KepGroup.UpdateRate=1000;
KepGroup.IsActive=true;
KepGroup.IsSubscribed=true;
}
(5)編寫函數,通過OPC協議讀取WINCC數據區溫濕度數據。
privatestring Readvalue(stringname)
{
connectServer();
KepGroups=KepServer.OPCGroups;
KepGroup = KepGroups.Add("OPCDOTNETGROUP");
SetGroupProperty();
KepItems=KepGroup.OPCItems;
KepItem=KepItems.AddItem(name,0);
object ItemValues;object Qualities;object Time-Stamps;
//同步讀的臨時變量:值、質量、時間戳
KepItem.Read(1,out ItemValues,out Qualities,out TimeStamps);
stringmyvalue=(ItemValues).ToString();
return myvalue;
}
(6)封裝成可供第三方使用者調用的接口函數
public stringgetwenshidu(stringwsd)
{
return Readvalue(wsd);
}
通過IIS發布webservice函數,第三方系統可以直接按照約定調用該函數getwenshidu(string wsd)來返回需要的值,正常返回符合條件數據,錯誤則返回相應錯誤代碼。字符串參數wsd對應著各個區域相應的溫濕度變量名,經過測試,省級計量生產調度平臺及自動化檢定線都能正常的調用接口函數并取得相應的數據。
由于OPC協議的出現,軟件開發者無需了解硬件的實質和操作過程,只需遵循OPC標準進行開發,就能夠訪問OPC服務器中的數據,而C#可以根據需要將OPC客戶端方便地和其他應用程序集成在一起。在此介紹了一種基于OPC協議,采用C#進行開發并使用IIS發布的省級計量中心檢定區溫濕度接口函數開發過程。OPC技術結合.NET架構,能夠做到快速、高效的底層數據采集,安全、靈活的數據處理,便捷的信息發布,是一種非常普遍的解決方案。
[1]朱立軍,安娜,陳未如.基于Visual C#的OPC客戶端實現[J].現代電子技,2009(2):171-173.
[2]如何在C#中實現OPC數據訪問[Z].西門子幫助文檔,2009.
[3]楊傳穎,黃德先.基于Microsoft.NETFramework的OPC客戶端的研究與應用[J].微計算機信息,2006(06):1-3.
[4]蔡思文,祁耀斌.OPC客戶端設計及其在監控系統的應用[J].微計算機信息,2007,23(5):106-108.
[5]顧亮,饒豐,寇東升.OPC技術結合.NET架構在系統集成項目中的應用[J].制造業自動化,2006,28(07):74-77.
[6]胡艷菊.C#程序設計[M].北京:北京大學出版社,2012.