1 引言
OPC是OLE for Process Control的縮寫,即把OLE應用于工業控制領域。OLE的原意是對象鏈接和嵌入,隨著OLE2的發行,其范圍已遠遠超出了這個概念。現在的OLE包容了新的特征,如統一數據傳輸、結構化存儲和自動化,已經獨立于計算機語言、操作系統甚至硬件平臺的一種規范,是面向對象程序設計概念的進一步推廣。OPC建立在OLE規范之上,它為工業控制領域提供了一種標準的數據訪問機制。
工業控制領域用到大量的現場設備,在OPC出現之前,軟件開發商需要開發大量的驅動程序來連接這些設備。即使硬件供應商在硬件上做了一些小小的改動,應用程序就可能需要重寫;同時,由于不同設備甚至同一設備不同單元的驅動程序也可能不同,軟件開發商很難同時對這些設備進行訪問以優化操作。硬件供應商也在嘗試解決這個問題,然而由于不同客戶有著不同的需要,同時也存在著不同的數據傳輸協議,因此也一直沒有完整的解決方案。
自OPC出現之后,這個問題終于得到解決。OPC規范包括OPC服務器和OPC客戶兩個部分,其實質是在硬件供應商和軟件開發商之間建立了一套完整的“規范”,只要遵循這套規則,數據交互對兩者來說都是透明的,硬件供應商無須考慮應用程序的多種需求和傳輸協議,軟件開發商也無須了解硬件的實質和操作過程。
2 OPC適用范圍和基本概念
2.1 OPC適用范圍
OPC的設計者們最終的目標是在工業領域建立了一套數據傳輸規范,并為之制定了一系列的發展計劃。現有的OPC規范涉及如下領域:
(1) 在線數據監測。實現了應用程序和工業控制設備之間高效、靈活的數據讀寫。
(2) 報警和事件處理。提供了OPC服務器發生異常及OPC服務器設定事件到來時,向OPC客戶發送通知的一種機制。
(3) 歷史數據訪問。實現了讀取、操作、編輯歷史數據庫的方法。
(4) 遠程數據訪問。借助Microsoft的DCOM技術,OPC實現了高性能的遠程數據訪問能力。
(5) 安全性、批處理、歷史報警事件數據訪問等。
2.2 OPC基本概念
本系統使用的OPC服務器為臺灣泓格科技有限公司的NAP7000 OPC Server。對數據項設定好代表的具體的通道,可以把數據項看作數據源的地址。
OPC服務器由三類對象組成:服務器(Server)、組(Group)、數據項(Item)。服務器對象擁有服務器的所有信息,同時也是組對象的容器。組對象擁有本組的所有信息,同時包容并邏輯組織OPC數據項。在這里數據項就是指12個位輸入和2個位輸出。
OPC組對象提供了客戶組織數據的一種方法。客戶可對之進行讀寫,還可以設置客戶端的數據更新速率。當服務器緩沖區內的數據發生改變時,OPC將向客戶發出通知,客戶得到通知后再進行必要的處理。而無須浪費大量的時間進行查詢。OPC規范定義了兩種組對象:公共組和局部組(私有組)。公共組由多個客戶共有,局部組只隸屬于一個OPC客戶。一般來說,客戶和服務器的一對連接只需要定義一個組對象。
在每個組對象中,客戶可以加入多個OPC數據項。OPC數據項是服務器端定義的對象,通常指向設備的一個寄存器單元。OPC客戶對設備寄存器的操作都是通過其數據項來完成的,通過OPC數據項,OPC規范盡可能地隱藏了設備的特殊信息,也使OPC服務器的通用性大大增強。OPC數據項并不提供對外接口,客戶不能直接對之進行操作,所有的操作都是通過組對象進行的。每個OPC數據項的數據結構包括三個成員變量:即數據值、數據質量和時間戳。數據值是以Variant形式表示的。
3 客戶端監控程序開發一般步驟
OPC規范提供了兩套接口方案,即COM接口和自動化。COM接口效率高,通過該接口,客戶能夠發揮OPC服務器的最佳性能,采用C++語言的客戶一般用COM接口方案;自動化接口使用解釋性和宏語言訪問OPC服務器,采用Visaul Basic語言的客戶一般采用自動化接口。自動化接口使解釋性和宏語言編寫客戶應用程序變得簡單。本文給出的客戶端應用程序的應用實例就是用Visual Basic編寫的。
3.1 OPC的連接
先在“引用”將OPC Automation 2.0加入,然后開始定義全局變量。在本程序中,筆者使用了兩個OPC組進行OPC訪問。首先定義了OPC組與OPC數據項。注意數據項的值一定要以Variant形式表示。在定義所有變量后,就要進行OPC連接了。
主要程序如下:
Set Server = New OPCServer ’生成OPC對象,
sServers = Server.GetOPCServers("")
Server.Connect sServerName, "" ’連接OPC服務器
Set Group = Server.OPCGroups.Add("I7000")
Set ItemObj = GroupObj.OPCItems.AddItem("XXXITEM", 1)
' XXXITEM為添加的ITEM名稱
3.2 OPC的數據項讀寫
對OPC的寫可以有同步與異步之分,對于大量的數據傳輸,異步是更佳的選擇;但對少量的數據傳輸,同步表現得更好。要進行數據傳輸,先要將值數據進行賦值。
讀數據項主要程序如下:
Dim anItem As OPCItem
Set anItem = Group.OPCItems.Item(1)
anItem.Read OPCCache
寫數據項主要程序如下:
Dim anItem As OPCItem
Group.OPCItems.AddItem lTagSelected.Caption, 1
Set anItem = Group.OPCItems.Item(1)
3.3 OPC連接斷開
OPC客戶端連接后要占用服務器資源,所以如果不需要使用OPC時,必須進行OPC連接斷開。斷開的程序相當簡單,釋放資源即可。
斷開連接的主要程序如下:
Server.OPCGroups.RemoveAll
Server.Disconnect
Set Server = Nothing
4 結論
通過OPC技術,經過直接訪問硬件供應商提供的OPC服務器,從而達到訪問硬件的數據。OPC的優越性是顯而易見的:
(1) 硬件供應商只須提供一套符合OPC Server規范的程序組,無須考慮工程人員需求。
(2) 軟件開發商無須重寫大量的設備驅動程序。
(3) 工程人員在設備選型上有了更多的選擇。
(4) OPC擴展了設備的概念。只要符合OPC Server規范,OPC客戶都可與之進行數據交互,而無須了解究竟是PLC還是儀表,甚至在數據庫系統上建立了OPC規范,OPC客戶也可與之方便地實現數據交互。