OPC協議解析 OPC客戶端與伺服器通訊解析

2022-05-17 23:11:36 字數 3075 閱讀 8956

opc伺服器, 是指按照opc**組織規定的opc規範群開發的軟體驅動。opc伺服器作為中間媒介負責從資料來源讀取資料再跟另外一端的客戶端通訊。在 opc客戶端/伺服器 的結構圖中, 通訊的發起端是, 也只能是opc客戶端。客戶端和伺服器的對話是雙向的, 也就是說, 客戶端既可以從伺服器讀出也可以向伺服器寫入。

topc**會定義了四種不同型別的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伺服器與資料來源的通訊

通過為乙個為某資料來源特別編寫的伺服器的api;

通過乙個可以是專屬於某乙個資料來源(請參見matrikonopc 霍尼韋爾tps伺服器), 也可也是開放式(請參見matrikonopc modbus伺服器)的通訊協議。

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通訊方式,這個在2023年左右還是很流行的方法,最近幾年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的會話層和表示層使用者是有權利來使用的。

OPC客戶端學習

opc 伺服器由三個物件組成 伺服器 server 組 group 項 item 1.初始化com庫,使用函式coinitializeex 2.通過opc伺服器的progid得到clsid,使用函式clsidfromprogid 3.建立opc伺服器物件,並查詢iopcitemmgt介面,使用函式 ...

C 開發OPC客戶端

第乙個隨筆,使用了open live write,作為客戶端.最近使用c 開發乙個小軟體,主要功能是opc客戶端.以後會開發各類別的協議,作為,協議的 棧.因為我本人是搞自動化的,所以搞自動化小夥伴像我這樣喜歡程式設計的可能有,但是一般是邏輯思維強,但是底子相對還是弱的.1,c 開發opc的準備工作...

OPC伺服器與OPC 客戶端配置問題總結

2.進入c windows syswow64資料夾,把壓縮包裡的所有檔案都貼上進去 3.在當前資料夾裡找到cmd.exe,右鍵 以管理員許可權開啟 4.輸入regsvr32 opcdaauto.dll,顯示註冊成功 object progids server.getopcservers host.h...