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