1. 程式人生 > >OPC協議解析-OPC客戶端與伺服器通訊解析

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

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的會話層和表示層使用者是有權利來使用的。