天天看點

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伺服器的中流砥柱。

OPC協定解析-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伺服器的對象模型:

OPC協定解析-OPC用戶端與伺服器通訊解析
OPC協定解析-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的會話層和表示層使用者是有權利來使用的。