1 OPC服務器
OPC服務器, 是指按照OPC基金組織規定的OPC規范群開發的軟件驅動。OPC服務器作為中間媒介負責從數據源讀取數據再跟另外一端的客戶端通信。在 OPC客戶端/服務器 的結構圖中, 通信的發起端是, 也只能是OPC客戶端。客戶端和服務器的對話是雙向的, 也就是說, 客戶端既可以從服務器讀出也可以向服務器寫入。
TOPC基金會定義了四種不同類型的OPC服務器。他們分別是:
- OPC數據訪問服務器(OPC DA) – 它基於 OPC數據訪問規范, 是一種為實時數據通訊特別定義的服務器類別。
- OPC歷史數據訪問服務器(OPC HDA) – 它基於OPC歷史數據訪問規范, 是用來給支持OPC歷史數據訪問規范的客戶端供給歷史數據的服務器。
- OPC報警與事件服務器 (OPC AE) – 它基於OPC報警與事件訪問規范, 為支持OPC報警與事件規范的客戶端傳送報警與時間信息。
- OPC UA服務器 - 它基於OPC基金總會最新並且最先進的UA規范,使得OPC服務器可以與任何數據形式兼容。
總體來說, 前面三種是存在時間比較長久且比較經典的服務器類型, 但最后一款OPC UA服務器會隨着時間的推移成為今后OPC服務器的中流砥柱。
1)OPC客戶端與OPC服務器(OPC數據訪問服務器、OPC歷史數據訪問服務器或OPC報警與事件服務器)的通信
OPC服務器是利用Microsoft Windows的 COM/DCOM技術作為數據交換的方式。這就是說OPC服務器必須安裝在支持Microsoft Windows操作系統的PC上。一個OPC服務器可以同時跟多於一個的 OPC客戶端 通訊。
2)OPC服務器 – 數據傳譯器
OPC服務器的一個關鍵作用就是將以數據源輸出形式傳送的數據, 翻譯成支持之前提到的某一或多於一種的OPC數據訪問規范形式!!!(比如說, OPC實時數據訪問規范)。OPC數據規范群只是定義了OPC服務器的OPC通訊模塊, 所以數據形式翻譯模塊的准確性和高效性就完全取決於OPC服務器供應商的開發方式。
3)OPC服務器與數據源的通信
OPC服務器和數據源用數據源支持的數據形式通信。數據源可以是某個硬件設備, 某個控制器或者是某個應用程序。因為數據源可以各種各樣, 而每一個不同形式的數據源又都用自己的通訊協議或者API可以通過多個物理通信方式(串行RS485, RS232, 以太網, 無線通訊等)通信, 所以OPC數據規范群並沒有定義OPC服務器和數據源之間的交流法則。 兩個關於OPC服務器和數據源通訊的最普遍的例子就是:
通過為一個為某數據源特別編寫的服務器的API;
通過一個可以是專屬於某一個數據源(請參見MatrikonOPC 霍尼韋爾TPS服務器), 也可也是開放式(請參見MatrikonOPC Modbus服務器)的通信協議。
2 實現與SIMATIC NET OPC DA通訊
OPC是Object Linking and Embedding(OLE)forProcess Control的縮寫,它是微軟公司的對象鏈接和嵌入技術在過程控制方面的應用。OPC以OLE/COM/DCOM技術為基礎,采用客戶/服務器模式,為工業自動化軟件面向對象的開發提供了統一的標准,這個標准定義了應用Microsoft操作系統在基於PC的客戶機之間交換自動化實時數據的方法,采用這項標准后,硬件開發商將取代軟件開發商為自己的硬件產品開發統一的OPC接口程序,而軟件開發者可免除開發驅動程序的工作,充分發揮自己的特長,把更多的精力投入到其核心產品的開發上。
SimaticNet是西門子全集成自動化系統中的一個重要組成部分,它為完善的工業自動化控制系統的通訊提供部件和網絡,同時提供多個OPCServer,為數據的外部訪問提供接口,本文主要以OPC.SimaticNET為例說明。
90年代OPC基金會開發了一系列的通訊接口比如 Data Access (DA), Alarm & Events (A&E), Historical Data Access (HDA) and Data eXchange (DX),統稱傳統OPC。今天主要使用的OPC DA通訊方式,這個在1995年左右還是很流行的方法,最近幾年OPC Foundation又開發了新的 OPC Unified Architecture (UA) 標准,更好的適應了工業4.0。關於傳統OPC和OPC UA的區別,后面會單獨來說。
許多OPC服務器,包括OPC.SimaticNet,是在COM平台開發的,從而對於基於.NET框架下的C#語言,作為客戶端程序語言訪問OPCServer,需要解決兩個平台間無縫遷移的問題。OPC基金會對會員提供了OpcRcw動態鏈接庫,OPC NET COM 包裝器和OPC NET API,將OPC復雜的規范封狀成簡單易用的C#類 ,可以比較容易地實現數據訪問。
OPC主要包含兩種接口:CUSTOM標准接口和OLE自動化標准接口,自定義接口是服務商必須提供的,而自動化接口則是可選的。
自定義接口是一組COM接口,主要用於采用C++語言的應用程序開發;
自動化接口是一組OLE接口,主要用於采用VB,DELPHI,Excel等基於腳本編程語言的應用程序開發。本文是使用C#通過自動化接口來實現的,也是最簡單的方式。
首先必須了解的是OPC服務器的對象模型:
程序中涉及到的重要方法和屬性比較多,解釋下幾個容易搞混的:
OPCItem 對象的屬性ServerHandle,只讀屬性,服務器提供給Item的句柄,通過此句柄,Client可以定位到此Item,來對此Item進行后續的操作,比如移動刪除;
OPCItem 對象的屬性ClientHandle,可讀可寫屬性,客戶端分配給Item的句柄,這個句柄可以手動設置,也可由.NET隨機選取的,不需要我們來設置,並且每次運行時,這
個句柄都不同,類似於TCP scoket通訊中的Client端分配的端口號。Server端必須指定端口號,Client端隨機生成,每次都不一樣。
OPCGroup 對象的屬性的IsSubscribed,可讀可寫屬性,Group的IsSubscribed為True,此Group才能開始接受服務器的數據屬性,此Group才能被訂閱。
OPCGroup 對象的事件DataChange (TransactionID As Long, NumItems As Long, ClientHandles() As Long,ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)需要注意的是NumItems參數是每次事件觸發時Group中實際發生數據變化的Item的數量,而不是整個Group里的Items.
OPCGroup 對象的屬性UpdateRate,可讀可寫屬性,規定了數據刷新的周期,單位milliseconds.注意的是,不是設定多少ms,實際就是多少,比如給定53ms,OPC server會就近選擇50ms.有區間划分的。
從整體上說下OPC DA的協議規范,OPC DA是在WINDOWS的COM/DOM技術上定義的接口定義,在TCP IP七層模型的最高層應用層,決定了它必須運行在WINDOWS平台,不能夠跨平台,靈活性和安全性不如OPC UA,因為OPC DA的會話層和表示層用戶是有權利來使用的。