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

本文簡單介紹OPC AE規(guī)范的OPCEventSubscription對象的相關(guān)知識,更多通信資源請登錄網(wǎng)信智匯(wangxinzhihui.com)。OPC AE規(guī)范描述了OPC事件服務(wù)器應(yīng)該實現(xiàn)的對象和接口,實現(xiàn)在多個OPC客戶端間共享事件和警報條件。
OPCEventSubscription對象是OPC事件服務(wù)器為管理單個事件訂閱而提供的對象。它是通過調(diào)用IOPCEventServer::CreateEventSubscription創(chuàng)建的。此對象提供以下接口:
? IUnknown
? IOPCEventSubscriptionMgt
? IConnectionPointContainer
此外,OPCEventSubscription包含一個IID_IOPCEventSink對象,該對象支持IConnectionPoint接口。
客戶端和服務(wù)器之間的每個訂閱都只有一個篩選器,盡管該篩選器可以包括多個條件??蛻舳丝梢允褂枚鄠€訂閱實現(xiàn)多個篩選器,每個訂閱都有自己的篩選器。建立訂閱后,將創(chuàng)建一個默認(rèn)過濾器,該過濾器相當(dāng)于“無過濾”,即發(fā)送所有事件通知。
定義篩選器范圍的標(biāo)準(zhǔn)是消除客戶端沒有感興趣的大多數(shù)事件,而不必詳盡無遺。過濾器的主要原因是減少不必要的通信開銷并提高性能??蛻舳丝梢詫邮盏降氖录ㄖM行額外的篩選,進一步精確地自定義顯示或存儲事件通知。
這些接口中的每一個提供的功能都在本節(jié)中進行了定義。
IOPCEventSubscriptionMgt接口指定如何管理對OPC事件信息的特定訂閱。它用于指定選擇感興趣事件的標(biāo)準(zhǔn),指定要在事件通知中返回的供應(yīng)商特定信息,以及請求刷新所選條件。
IOPCEventSubscriptionMgt接口說明如下。
?
1)HRESULT SetFilter(
[in] DWORD dwEventType,
[in] DWORD dwNumCategories,
[in, size_is(dwNumCategories)] DWORD* pdwEventCategories, [in] DWORD dwLowSeverity,
[in] DWORD dwHighSeverity,
[in] DWORD dwNumAreas,
[in, size_is(dwNumAreas)] LPWSTR* pszAreaList,
[in] DWORD dwNumSources,
[in, size_is(dwNumSources] LPWSTR* pszSourceList
);
設(shè)置要用于事件訂閱的篩選條件。
可以使用以下標(biāo)準(zhǔn)選擇事件:
?事件類型,即簡單、條件或跟蹤。
?事件類別
?最低嚴(yán)重性,即嚴(yán)重性大于或等于指定嚴(yán)重性的所有事件。
?最高嚴(yán)重性,即嚴(yán)重性小于或等于指定嚴(yán)重性的所有事件。
?過程區(qū)域
?事件源
單個標(biāo)準(zhǔn)的值列表在邏輯上被“或”運算在一起(例如,如果兩個事件類別指定,將接收兩個類別的事件通知)。如果指定了多個標(biāo)準(zhǔn),它們將被邏輯地“與”在一起,即僅那些滿足所有標(biāo)準(zhǔn)的事件將被選擇。例如,指定最低嚴(yán)重性和最高嚴(yán)重性將導(dǎo)致選擇事件嚴(yán)重性介于兩個值之間。
OPCEventSubscription對象只有一個篩選器。
服務(wù)器負(fù)責(zé)將其內(nèi)部嚴(yán)重性級別映射為均勻分布在1..1000范圍內(nèi)。希望接收所有嚴(yán)重性事件的客戶端應(yīng)設(shè)置dwLowSeverity=1和dwHighSeverity=1000。
服務(wù)器可能不支持所有各種篩選條件。給定服務(wù)器支持的特定篩選條件可以通過IOPCEventServer::QueryAvailableFilters方法確定。如果指定了服務(wù)器不支持的篩選條件,它將忽略該篩選條件并返回S_FALSE。
注意,對于給定條件,如果與確認(rèn)或恢復(fù)正常相對應(yīng)的事件通知具有與該條件變?yōu)榛顒拥氖录ㄖ煌膰?yán)重性級別,則由于按嚴(yán)重性進行過濾,客戶端可能會接收一組通知,但不會接收其他通知。
2)HRESULT GetFilter(
[out] DWORD* pdwEventType,
[out] DWORD* pdwNumCategories,
[out, size_is(,*pdwNumCategories)] DWORD** ppdwEventCategories,
[out] DWORD* pdwLowSeverity,
[out] DWORD* pdwHighSeverity,
[out] DWORD* pdwNumAreas,
[out, size_is(,*pdwNumAreas)] LPWSTR** ppszAreaList
[out] DWORD* pdwNumSources,
[out, size_is(,*pdwNumSources)] LPWSTR** ppszSourceList
?);
返回當(dāng)前用于事件訂閱的篩選器。
如果服務(wù)器不支持SetFilter中請求的一個或多個篩選條件,它將為列表返回空數(shù)組,并返回指示未對非列表項進行篩選的值。在這些情況下,它不會返回SetFilter中可能已請求但已被忽略的任何篩選器。
?
3)HRESULT SelectReturnedAttributes(
[in] DWORD dwEventCategory,
[in] DWORD dwCount,
[in, size_is(dwCount)] DWORD* dwAttributeIDs,
);
對于每個事件類別,SelectReturnedAttributes設(shè)置要隨IOPCEventSink::OnEvent回調(diào)中的通知事件一起返回的屬性。
可以多次調(diào)用此方法,以便為每個唯一值指定要返回的屬性事件類型和事件類別對。對于給定的事件類型和事件類別對,屬性可以通過將dwCount參數(shù)設(shè)置為零來“清除”返回的值。如果多次調(diào)用相同的事件類型和事件類別對,則最新的調(diào)用將生效。
更多通信資源請登錄網(wǎng)信智匯(wangxinzhihui.com)。