OPC Server概述

来自:http://www.adlinktech.com/big5/news/products/p4_2.htm


1.What is OPC?


OPC 是 OLE for Process Control 的縮寫。顧名思義,OPC 是一種利用微軟的 COM/DCOM 技術來達成自動化控制的協定,根據 OPC Specification 的定義,OPC is "a standard mechanism for communicating to numerous data sources, either devices on the factory floor, or a database in a control room."


在現今的工業自動化中,我們需 要一套整合的資訊系統,由底層的各項裝置擷取資訊 (Field Management),中層的控制系統或圖控應用程式進行程序的控制 (Process Management),再由最上層的整合軟體將這些資訊整合起來以供企業決策或效能提昇,如下圖所示:



OPC 為硬體製造商與軟體發展商提供了一條橋樑,透過硬體廠商提供的 OPC Server 介面,軟體發展者不必考慮各項不同硬體間的差異,便可自硬體端取得所需的資訊,所以軟體發展者僅需專注於程式本身的控制流程的運作。此外,由於 COM/DCOM 實作並隱藏了網路的細節,透過 OPC 可以很容易地達成遠端控制的理想。


2.How does OPC work?


在說明 OPC Server/Client 運作方式之前,我們先簡單介紹一下 Microsoft 發展的 COM/DCOM 是什麼?


COM 是一種發展軟體元件的方法,所謂的軟體元件,是指一個可以提供應用程式、作業系統、以及其他元件服務的二進位可執行程式。事實上,發展自訂的 COM 物件就好像是在建構一套可以動態執行的物件導向 API 一般。你可以在應用程式執行的時期隨意拼上或移除所需要的元件。依據 COM 這樣的概念,發展應用程式就像是堆積木一樣,每一個 COM 元件就是一塊積木,你可以利用各式各樣不同的積木,拼湊出你所需要的應用程式。


在實作上,COM 透過一組一組的介面 (Interface) 提供服務,所有 COM 元件的使用者,都必須透過這些 Interface 來使用元件提供的功能。OPC 的規格中便定義了許多 OPC Server 應該提供的 Interface,要撰寫一個 OPC Server 的 COM 元件,你必須在你的元件中加入這些介面,並提供它們的實作,Client 便可以透過這些介面,操作連接到 OPC Server 的硬體裝置,這也就是 OPC Server/Client 運作的方式。以下的圖示可以讓這樣的概念更清晰:



3. OPC Server 架構


如前面所述,OPC Server 透過一組一組的介面提供服務,不過在實作的架構上,OPC Server 共分為三層:分別是 OPCServer, OPCGroup, OPCItem。


其中每一個 OPCItem 對應到一個實際的硬體裝置上的某一個 channel 或 port;每一個 OPCGroup 則包含了許多的 OPCItem,同時並定義這些 OPCItem 更新的時間、方式,以及提供讀取 OPCItem 值的介面;而每一個 OPCServer 則包含若干個 OPCGroup,同時提供操作這些 OPCGroup 的介面。


下圖可以較清楚地說明 OPCServer/OPCGroup/OPCItem 間的關係:



4. OPC Custom Interface


接下來的這一節,我們將討論 OPC Serve 的重點,也就是每一組介面的定義,以及它所提供的功能。


OPCServer 提供的介面

  • IOPCCommon
    HRESULT SetLocaleID ( dwLcid ) 設定位置資訊
    HRESULT GetLocaleID ( pdwLcid ) 取得位置資訊
    HRESULT QueryAvailableLocaleIDs ( pdwCount, pdwLcid ) 查詢可用的位置ID
    HRESULT GetErrorString ( dwError, ppString) 取得錯誤資訊字串
    HRESULT SetClientName (szName) 設定 Clinet 的名稱
  • IOPCServer
    HRESULT AddGroup(szName, bActive, dwRequestedUpdateRate, hClientGroup, pTimeBias, pPercentDeadband, dwLCID, phServerGroup, pRevisedUpdateRate, riid, ppUnk) 新增一個 OPCGroup
    HRESULT GetErrorString(dwError, dwLocale, ppString)  取得錯誤資訊字串
    HRESULT GetGroupByName(szName, riid, ppUnk) 依據名稱取得 OPCGroup 的介面
    HRESULT GetStatus(ppServerStatus) 取得 OPCServer 的狀態資訊
    HRESULT RemoveGroup(hServerGroup, bForce) 移除一個 OPCGroup
    HRESULT CreateGroupEnumerator(dwScope, riid, ppUnk) 產生一個 OPCGroup 列舉器
  • IConnectionPointContainer
    HRESULT EnumConnectionPoints( IEnumConnectionPoints ppEnum) 列舉所有的 Connection Points
    HRESULT FindConnectionPoint( REFIID riid, IConnectionPoint ppCP) 找出一個 Connection Point
  • IOPCItemProperties
    HRESULT QueryAvailableProperties(szItemID, pdwCount,ppPropertyIDs, ppDescriptions, ppvtDataTypes ); 查詢可用的 OPCItem 屬性
    HRESULT GetItemProperties (szItemID, dwCount, pdwPropertyIDs,ppvData, ppErrors ) 取得 OPCItem 的屬性
    HRESULT LookupItemIDs( szItemID, dwCount, pdwPropertyIDs,ppszNewItemIDs, ppErrors ) 使用名稱查詢 OPCItem 的 ID
  • IOPCBrowseServerAddressSpace (optional)
    HRESULT QueryOrganization(pNameSpaceType ) 查詢組織名稱
    HRESULT ChangeBrowsePosition(dwBrowseDirection, szString ) 變更瀏覽的位置
    HRESULT BrowseOPCItemIDs( dwBrowseFilterType, szFilterCriteria, vtDataTypeFilter, dwAccessRightsFilter, ppIEnumString ) 瀏覽 OPCServer 內所有定義的 OPCItem
    HRESULT GetItemID( szItemDataID, szItemID ) 取得 OPCItem 的 ID
    HRESULT BrowseAccessPaths( szItemID, ppIEnumString ) 瀏覽存取 OPCItem 的路徑


OPCGroup Object 提供的介面

  • IOPCGroupStateMgt
    HRESULT GetState(pUpdateRate, pActive, ppName, pTimeBias, pPercentDeadband, pLCID, phClientGroup, phServerGroup) 取得 OPCGroup 的狀態即設定資訊
    HRESULT SetState(pRequestedUpdateRate, pRevisedUpdateRate, pActive, pTimeBias, pPercentDeadband, pLCID, phClientGroup) 設定 OPCGroup 的狀態資訊
    HRESULT SetName(szName) 設定 OPCGroup 的名稱
    HRESULT CloneGroup(szName, riid, ppUnk) 複製一個 OPCGroup
  • IOPCSyncIO
    HRESULT Read(dwSource, dwCount, phServer, ppItemValues, ppErrors); 以同步方式讀取 OPCGroup 內的 OPCItem(s) 的值
    HRESULT GetItemProperties (szItemID, dwCount, pdwPropertyIDs,ppvData, ppErrors ) 取得 OPCItem 的屬性
    HRESULT Write(dwCount, phServer, pItemValues, ppErrors) 以同步方式將值寫入OPCGroup 內的 OPCItem(s)
  • IOPCAsyncIO2
    HRESULT Read(dwCount, phServer, dwTransactionID, pdwCancelID, ppErrors,) 以非同步方式讀取 OPCGroup 內的 OPCItem(s) 的值,值會在讀取硬體的動作結束後以 callback 的形式傳回
    HRESULT SetState(pRequestedUpdateRate, pRevisedUpdateRate, pActive, pTimeBias, pPercentDeadband, pLCID, phClientGroup) 設定 OPCGroup 的狀態資訊
    HRESULT Write(dwCount, phServer, pItemValues, dwTransactionID, pdwCancelID, ppErrors) 以非同步方式將值寫入OPCGroup 內的 OPCItem(s)
    HRESULT Cancel2 (dwCancelID) 取消前一次的非同步讀取/寫入
    HRESULT Refresh2(dwSource, dwTransactionID, pdwCancelID) 更新 OPCGroup 內 OPCItem(s) 的值
    HRESULT SetEnable(bEnable) 將 OPCGroup 設為 Enable
    HRESULT GetEnable(pbEnable) 傳回 OPCGroup 是否為 Enable
  • IOPCItemMgt
    HRESULT AddItems(dwCount, pItemArray, ppAddResults, ppErrors); 在 OPCGroup 內新增 OPCItem(s)
    HRESULT ValidateItems(dwCount, pItemArray, bBlobUpdate, ppValidationResults, ppErrors) 檢查 OPCItem(s) 的名稱是否可用
    HRESULT RemoveItems(dwCount, phServer, ppErrors) 移除 OPCGroup 內的 OPCItem(s)
    HRESULT SetActiveState(dwCount, phServer, bActive, ppErrors) 設定 OPCItem(s) 是否為 Avtive
    HRESULT SetClientHandles(dwCount, phServer, phClient, ppErrors) 設定 OPCItem(s) 的 handle
    HRESULT SetDatatypes(dwCount, phServer, pRequestedDatatypes, ppErrors) 設定 OPCItem(s) 的資料型別
    HRESULT CreateEnumerator(riid, ppUnk) 產生 OPCItems 的列舉器
  • IConnectionPointContainer
    HRESULT EnumConnectionPoints( IEnumConnectionPoints ppEnum) 列舉所有的 Connection Points
    HRESULT FindConnectionPoint( REFIID riid, IConnectionPoint ppCP) 找出一個 Connection Point


5. 結論


OPC Server/Client 是一套利用微軟的 COM/DCOM 技術達成工業自動化資料取得的架構。OPC Server 提供了許多的介面,Client 端透過這些介面,可以取得與 OPC Server 相連的硬體裝置的資訊,而無須瞭解這些硬體裝置的細節資訊。也就是說,程式設計者可以使用相同的程式碼,操作不同的硬體裝置,充分達成 software reuse 的理想。同時,由於 COM/DCOM 已實作了網路部分的細節,也使得 Client 對 OPC Server 進行遠端存取非常容易,使程式設計者很容易地達成遠端控制的目標。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值