通訊協(xié)議018——全網(wǎng)獨有的OPC AE知識四之接口(二)

本文簡單介紹OPC AE規(guī)范的接口對象OPCEventServer的相關(guān)知識,更多通信資源請登錄網(wǎng)信智匯(wangxinzhihui.com)。OPC AE規(guī)范描述了OPC事件服務器應該實現(xiàn)的對象和接口,實現(xiàn)在多個OPC客戶端間共享事件和警報條件。
1、OPCEventServer對象
OPCEventServer對象是OPC事件服務器公開的主要對象。該接口對象提供的包括:
? IUnknown
? IOPCCommon
? IOPCEventServer
? IConnectionPointContainer
IUnknown:服務器必須提供標準的IUnknown接口。請參閱OLE程序員參考資料。并且按照Microsoft的要求實現(xiàn)所有功能。
IOPCCommon:數(shù)據(jù)訪問等其他OPC服務器共享此接口設(shè)計。它提供了對特定客戶端/服務器會話有效的LocaleID設(shè)置和查詢。也就是說,就像組定義,一個客戶端的操作不會影響任何其他客戶端。
下面提供了此接口的快速參考。更詳細的討論見OPC通用規(guī)范。
???? HRESULT SetLocaleID ( [in] LCID dwLcid );
???? HRESULT GetLocaleID ( [out] LCID *pdwLcid );
???? HRESULT QueryAvailableLocaleIDs ( [out] DWORD *pdwCount, [out, sizeis(dwCount)] LCID *pdwLcid );
???? HRESULT GetErrorString( [in] HRESULT dwError, [out, string] LPWSTR *ppString );
???? HRESULT SetClientName ( [in, string] LPCWSTR szName );
IOPCEventServer:這是OPC事件服務器的報警和事件功能的主要接口。此接口是用于創(chuàng)建OPC事件訂閱對象、創(chuàng)建OPC事件區(qū)域瀏覽對象、查詢事件類別和相關(guān)事件參數(shù),管理條件,執(zhí)行雜項諸如獲取事件服務器狀態(tài)之類的操作。
?
2、IOPCEventServer接口方法
1)? HRESULT GetStatus (
[out] OPCEVENTSERVERSTATUS ** ppEventServerStatus
);
返回OPC事件服務器的當前狀態(tài)。
???
2)? HRESULT CreateEventSubscription(
[in] BOOL bActive,
[in] DWORD dwBufferTime,
[in] DWORD dwMaxSize,
[in] OPCHANDLE hClientSubscription,
[in] REFIID riid,
[out, iid_is(riid)] LPUNKNOWN * ppUnk
[out] DWORD * pdwRevisedBufferTime,
[out] DWORD * pdwRevisedMaxSize
);
將事件訂閱對象添加到事件服務器。
為客戶端創(chuàng)建一個OPCEventSubcription對象,并向客戶端返回一個接口。
此對象將至少支持IUnknown、IOPCEventSubscriptionMgt和IConnectionPointContainer??蛻舳丝梢怨芾泶私涌诘臓顟B(tài),包括篩選器和通過ConnectionPoints創(chuàng)建訂閱。
?
3)HRESULT QueryAvailableFilters(
??? [out] DWORD * pdwFilterMask
??? );
QueryAvailableFilters方法為客戶端提供了一種準確查找哪些由給定的事件服務器支持的篩選條件的方法。通常在對OPCEventSubscription對象配置篩選時調(diào)用。
預計在大多數(shù)情況下,查詢結(jié)果將相當“穩(wěn)定”。但是,服務器實際上允許在任何時候更改可用的選擇。因此,客戶應(至少允許作為選項)每次將選擇呈現(xiàn)給最終用戶時都進行新的查詢。
?
4)HRESULT QueryEventCategories(
[in] DWORD dwEventType,
[out] DWORD* pdwCount,
[out, size_is(*pdwCount)] DWORD** ppdwEventCategories,
[out, size_is(,*pdwCount)] LPWSTR** ppEventCategoryDescs
);
QueryEventCategories方法為客戶端提供了一種方法來查找給定服務器支持的事件。此方法通常會在指定事件篩選器前調(diào)用。服務器將能夠自定義事件類別。
根據(jù)服務器的復雜程度,返回的事件類別的數(shù)量會有所不同,但對于大多數(shù)服務器來說,預計小于30,這使得該接口比自定義枚舉器更合適。
預計在大多數(shù)情況下,查詢結(jié)果將相當“穩(wěn)定”。但是,服務器實際上允許在任何時候更改可用的選擇。因此,客戶應(至少允許作為選項)每次將選擇呈現(xiàn)給最終用戶時都進行新的查詢。
?
5)HRESULT QueryConditionNames(
[in] DWORD dwEventCategory,
[out] DWORD* pdwCount,
[out, size_is(,*pdwCount)] LPWSTR** ppszConditionNames
);
QueryConditionNames方法為客戶端提供了一種查找指定的事件類別的事件服務器的特定條件名稱的方法。這種方法通常是在指定事件篩選器之前調(diào)用。條件名稱是特定于服務器的。
根據(jù)服務器的復雜程度,返回的事件類別的數(shù)量會有所不同,但對于大多數(shù)服務器來說,預計小于30,這使得該接口比自定義枚舉器更合適。
預計在大多數(shù)情況下,查詢結(jié)果將相當“穩(wěn)定”。但是,服務器實際上允許在任何時候更改可用的選擇。因此,客戶應(至少允許作為選項)每次將選擇呈現(xiàn)給最終用戶時都進行新的查詢。
更多通信資源請登錄網(wǎng)信智匯(wangxinzhihui.com)。