OPC協議解析-OPC客戶端與服務器通信解析

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服務器供應商的開發方式。spa

3)OPC服務器與數據源的通訊操作系統

OPC服務器和數據源用數據源支持的數據形式通訊。數據源能夠是某個硬件設備, 某個控制器或者是某個應用程序。由於數據源能夠各類各樣, 而每個不一樣形式的數據源又都用本身的通信協議或者API能夠經過多個物理通訊方式(串行RS485, RS232, 以太網, 無線通信等)通訊, 因此OPC數據規範羣並無定義OPC服務器和數據源之間的交流法則。 兩個關於OPC服務器和數據源通信的最廣泛的例子就是:翻譯

經過爲一個爲某數據源特別編寫的服務器的API;server

經過一個能夠是專屬於某一個數據源(請參見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的會話層和表示層用戶是有權利來使用的。

相關文章
相關標籤/搜索