朱立軍 安 娜 陳未如
摘 要:OPC是連接數據源(OPC服務器)和數據的使用者(OPC應用程序)之間的軟件接口標準。這里以C#為開發工具,按照OPC技術的規范標準,將OPC技術應用到虛擬儀器顯示組件中。具體實現了OPC客戶端數據訪問服務器的過程,接口步驟及其讀寫數據的方法,并根據OPC服務器提供的數據,最終在虛擬儀器顯示組件中生成了虛擬的正弦波、方波、鋸齒波、三角波等。
關鍵詞:OPC;OPC接口;OPC服務器;C#
中圖分類號:TP311.5文獻標識碼:B
文章編號:1004 373X(2009)02 171 03
Implementation of OPC Client Based on Visual C#
ZHU Lijun,AN Na,CHEN Weiru
(Shenyang Institute of Chemical Technology,Shenyang,110042,China)
Abstract:OPC is the software interface standard between data sources (OPC server) and data users (OPC application).Based on OPC technology standards, the virtual instrument is proposed and is applied to the virtual instrument display components by using C# language.The OPC client data access server process,the method of write and read data and interface steps are realized.According to the data provided by OPC server,finally,the waveform of sine,square,sawtooth,triangle are generated in the display components of virtual instrument.
Keywords:OPC;OPC iterface;OPC server;C#
0 引 言
隨著計算機技術和數字信號處理技術的發展,人們可以用計算機軟件替代傳統的硬件實現的一些功能,將計算機硬件和軟件有機的融合為一體,這就是所謂的虛擬儀器。近年來,世界各國的虛擬儀器公司開發了不少基于LabVIEW,Matlab,VC++,VB等虛擬儀器開發平臺軟件,當硬件操作的設備驅動改變時,軟件開發人員需要修改大量的驅動程序來連接此設備,因此使得虛擬儀器開發平臺開發難度大、通用性差。為此,提出了基于OPC技術的虛擬儀器,它是由硬件供應商和軟件開發商之間建立一套完整的“規則”,只要遵循這套規則,數據交互對兩者來說都是透明的,硬件供應商無需考慮應用程序的多種需求和傳輸協議,軟件開發商也無需了解硬件的實質和操作過程[1]。
1 OPC 技術
OPC(OLE Process Control )是OPC基金會組織倡導的工業控制和生產自動化領域中使用的硬件和軟件的接口標準,以便有效地在應用和過程控制設備之間讀寫數據,具體的功能實現要由開發商根據需要自主的進行研究與開發。換句話說OPC規范是一套公共的軟件標準,任何OPC開發人員所開發的OPC軟件都要符合這個標準。
OPC技術的特點可概括為如下3個方面:開放性(Openness)、產業性(Productivity)和“即插即用”的互聯性(Connectivity),因此可以說,“OPC= Openness+ Productivity+Connectivity”,這也是對OPC優點最概括的描述。因此OPC在短時間內取得了飛速的發展。
1.1 OPC服務器的組成
OPC標準采用C/S模式,OPC服務器負責向OPC客戶端不斷的提供數據。OPC服務器包括3類對象(Object) :服務器對象(Server) 、組對象(roup)和項對象(Item)。3類對象都包括一系列接口,關系如圖1所示。
OPC服務器對象維護有關服務器信息,并作為OPC組對象的包容器,它提供了對數據源進行讀/寫和通信的接口方法,可以動態地創建或釋放組對象。
OPC組對象由客戶端定義和維護,它維護有關其自身的信息,提供包容OPC項對象的機制,從邏輯上實現對OPC項的管理。
OPC項對象包含在OPC組中,可由客戶端定義和維護。項代表了與數據源的連接,所有的OPC項的操作都是通過包容此項的OPC組對象完成的。
1.2 OPC的接口方式
OPC服務器通常支持兩種類型的訪問接口:自定義接口(The OPC Custom Interfaces)和自動化接口(The OPC Automation Interfaces),它們分別為不同的編程語言環境提供訪問機制。
自定義接口是任何OPC服務器所必須實現的接口,它描述了OPC組件對象的接口和其實現的方法,適合C++語言設計,并可實現最佳運行性能的客戶應用程序。
自動化接口是可選接口(Optional Interface),它提供了自動配置和存取過程控制數據的接口,方便了Visual Basic,Delphi,C#及其他可以使用自動化服務器應用程序接口的高級商業軟件使用。自動化接口實際上是定制接口上的自動化封裝,OPC規范通過提供一套標準的自動化接口包裝器來實現這一功。
1.3 OPC通信方式
OPC規范規定了兩種通信方式:同步通信方式和異步通信方式。
同步通信時,OPC客戶程序對OPC服務器進行讀寫操作時,OPC客戶程序必須等到OPC服務器對應的操作全部完成以后才能返回,在此期間OPC客戶程序一直處于等待狀態。如果有大量數據進行操作或者有大量OPC客戶程序對OPC服務器進行讀寫操作,必然造成OPC客戶程序的阻塞現象。因此同步通信適用于OPC客戶較少,數據量較小時的場合。
異步通信時,OPC客戶程序對服務器進行讀寫操作時,OPC客戶程序操作后立刻返回,不用等待OPC服務器的操作,可以進行其他操作。當OPC服務器完成操作后再通知OPC客戶程序。因此,相對于同步通信和異步通信的效率更高,適用于多客戶訪問同一OPC服務器和大量數據的場合。
2 OPC客戶端程序的設計方法
(1) 安裝OPC自動化接口服務。
在.NET環境下,點擊“項目”子菜單下,“添加引用”,在彈出的對話框COM中選中“OPC DA Automation Wrapper2.02”項,點擊“確定”按鈕,這樣才能使用自動化接口的服務。
(2) 連接OPC服務器。
本例中使用的OPC服務器名為“ICONICS.Simulator OPCDA.2”。首先聲明變量,這樣才能觸發事件(DataChange)來獲取實時數據。
public OPCServerClass tOpcServer;
連接OPC服務器,生成一個OPC 服務器的實例
OPCServerClass.Connect("ICONICS.SimulatorOPCDA.2",obj1);
browse = OPCServerClass.CreateBrowser();//瀏覽服務器
連接不同的OPC 服務器只要改變其服務器名稱和OPC 服務器所在的計算機名稱即可。
(3) 添加組
//增加一個名稱為 group的組
tOpcGroup=(OPCGroupClass) OPCServerClass.OPCGroups.Add("group");
//激活該組,準備收發數據。
tOpcGroup.IsActive = true;
//設置組的刷新頻率,單位為ms,本例中使用的刷新頻率最小為1 ms
tOpcGroup.UpdateRate = 1;
(4) 添加數據項
private OPCItem item1;
//啟動數據訂閱功能,否則DataChange事件不能觸發
tOpcGroup.IsSubscribed = true;
(5) OPC數據的讀和寫。
對OPC服務器中的數據項數讀可以通過group組的DataChange 事件觸發來讀取。該事件有多個參數:其中:NumItems 是指數據項的個數;ItemValues為數據項的數據;Qualities為數據項的品質;TimeStamps為數據項的更改時間;ClientHandles 是數據項的標簽索引,其所指的OPC 標簽的值在ItemValues (1) 中,只有數據發生變化時才會觸發該事件。也只會傳輸發生了變化的數據,沒有變化的數據不會出現在本事件ItemValues 中。使用C#事件處理機制,將DataChange注冊到事件,一旦服務器端數據有變化,自動觸發此過程,觸發函數為:
void tOpcGroup_DataChange(int TransactionID,int NumItems,ref Array ClientHandles,ref Array ItemValues,ref Array Qualities,ref Array TimeStamps)
tOpcGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(tOpcGroup_DataChange);
(6) 斷開OPC 服務器。
OPC客戶端連接后占用服務器的資源,所以長時間不需要使用的OPC讀寫數據,則應及時斷開OPC連接以釋放資源。
//刪除所有的數據項
OPCItem l.RemoveAll
OPCServerClass.Disconnect();
opc1.ServerShutDown+=new DIOPCServerEvent_ServerShutDownEventHandler(opc1_ServerShutDown);
采用C#開發工具,按照OPC規范來實現OPC客戶程序。OPC客戶程序實現的功能有:通過OPC標準接口與OPC數據服務器連接,按照OPC服務器提供的Sine,Triangle,R8等波形數據,并取得OPC服務器中相關OPC點的數據,并對這些數據進行綜合處理,實現各種波形圖案,運行程序結果如圖2所示。
3 結 語
OPC規范的應用簡化了OPC客戶/服務器的開發過程,統一了數據存取的接口標準,將硬件供應商與應用軟件開發者分離,使得軟件開發者無需了解硬件的實質和操作過程,只要遵循OPC標準進行開發,就能夠訪問OPC服務器中的數據,大大簡化了過去傳輸數據的復雜過程。在此介紹了在Visual C#環境下,遵循OPC標準提出了基于OPC技術的系統設計方案及數據接口開發關鍵代碼,以快速、高效地進行底層數據采集,安全、靈活的數據處理,便捷的圖形界面,為虛擬儀器提供了嶄新的解決方案,具有較大的應用價值。
參考文獻
[1]盧宏,汪金良,曾青云.基于OPC技術的WinCE實時數據采集.自動化博覽,2006(8):58-60.
[2]黃珍,王永驥,潘瑞,等.OPC技術及其在工程船舶實時監控系統中的應用.船電技術,2006(3):43-46.
[3]李福軍,錢東海.OPC技術應用于工業測試系統的研究.自動化儀表,2006,27(2):43-46.
[4]喬加新.OPC客戶端與OPC服務器的交互方式的研究.信息技術,2005(8):122-124.
[5]潘愛民.COM原理與應用.北京:清華大學出版社,1999.
[6]OPC Fundation.OPC Data Access Specification 1.0A.1997.
[7]李蕾,戴瑜興.OPC數據存取服務器的實現.湖南工程學院學報,2005,15(2):19-22.
[8]李蕾,戴瑜興.COM技術在OPC服務器中的應用及實現.控制工程,2005,12(3):238-240.
[9]張建武,高國琴.OPC客戶/服務器模型設計.計算機仿真,2005,22(4):152-154.
[10]李善宣,李建兵.OPC技術在工業控制系統中的應用研究.成都:西南交通大學,2005.
作者簡介 朱立軍 男,1972年出生,遼寧人,講師,碩士。主要從事計算機測量與控制方面的研究。
安 娜 女,1983年出生,遼寧人,在讀碩士研究生。主要從事計算機軟件的研究。
陳未如 男,1963年出生,遼寧人,教授,碩士。主要從事構件平臺技術與程序設計方法的研究。