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

本文簡單介紹OPC AE規(guī)范的接口對象OPCEventServer的相關(guān)知識,更多通信資源請登錄網(wǎng)信智匯(wangxinzhihui.com)。OPC AE規(guī)范描述了OPC事件服務(wù)器應(yīng)該實現(xiàn)的對象和接口,實現(xiàn)在多個OPC客戶端間共享事件和警報條件。
6)HRESULT QuerySubConditionNames(
[in] LPWSTR szConditionName,
[out] DWORD* pdwCount,
[out, size_is(,*pdwCount)] LPWSTR** ppszSubConditionNames
);
QuerySubConditionNames方法為客戶端提供了一種查找相關(guān)條件的特定子條件的方法。條件名稱是服務(wù)器特定的。
返回的子條件名稱的數(shù)量將根據(jù)服務(wù)器的復(fù)雜程度而變化,但對于大多數(shù)服務(wù)器來說,預(yù)計小于10,這使得該接口比自定義枚舉器更合適。
服務(wù)器上特定條件的可用子條件名稱應(yīng)為相當(dāng)“穩(wěn)定”,并且它們通常不會“在線”更改。但是,實際上允許服務(wù)器隨時更改可用的選擇。因此,客戶應(yīng)該這樣做(或者至少允許作為一種選擇)每次選擇要呈現(xiàn)給最終用戶時,都要做新的查詢。
?
7)HRESULT QuerySourceConditions(
[in] LPWSTR szSource,
[out] DWORD* pdwCount,
[out, size_is(,*pdwCount)] LPWSTR** ppszConditionNames
);
QuerySourceConditions方法為客戶端提供了一種查找與指定的源(例如FIC101)相關(guān)聯(lián)的特定條件名稱的方法。條件名稱是服務(wù)器特定的。
根據(jù)服務(wù)器的復(fù)雜程度,返回的條件名稱的數(shù)量會有所不同,但對于大多數(shù)服務(wù)器,預(yù)計小于10,這使得該界面比自定義界面更合適枚舉器。
服務(wù)器上特定源的可用條件名稱將相當(dāng)“穩(wěn)定”,并且它們通常不會“在線”更改。但是,實際上允許服務(wù)器隨時更改可用的選擇。因此,客戶應(yīng)該這樣做(或者至少允許作為一種選擇)每次選擇要呈現(xiàn)給最終用戶時,都要做新的查詢。
?
8)HRESULT QueryEventAttributes(
[in] DWORD dwEventCategory,
[out] DWORD* pdwCount,
[out, size_is(,*pdwCount)] DWORD** ppdwAttrIDs,
[out, size_is(,*pdwCount)] LPWSTR** ppszAttrDescs
[out, size_is(,*pdwCount)] VARTYPE** ppvtAttrTypes
?);
使用QueryEventCategories方法返回的EventCategories,客戶端應(yīng)用程序可以調(diào)用QueryEventAttributes方法以獲取有關(guān)供應(yīng)商特定屬性的信息,服務(wù)器可以提供指定事件類別內(nèi)的事件作為事件通知的一部分。簡單服務(wù)器可能不支持某些甚至所有EventCategories的任何供應(yīng)商屬性。
特定事件類別的所有事件都有可能支持相同的屬性信息。對于同一服務(wù)器中該類別的不同實例具有不同屬性的事件類別,服務(wù)器應(yīng)該返回所有屬性的并集,而客戶端必須允許事件中的某些事件通知屬性為null。
?
9)HRESULT TranslateToItemIDs(
[in] LPWSTR szSource,
[in] DWORD dwEventCategory
[in] LPWSTR szConditionName,
[in] LPWSTR szSubconditionName,
[in] DWORD dwCount,
[in, size_is(dwCount)] DWORD* pdwAssocAttrIDs,
[out, size_is(,dwCount)] LPWSTR** ppszAttrItemIDs,
[out, size_is(,dwCount)] LPWSTR** ppszNodeNames,
[out, size_is(,dwCount)] CLSID** ppCLSIDs
?);
許多報警和OPC事件服務(wù)器都與OPC DA服務(wù)器相關(guān)聯(lián)。由于這些服務(wù)器可以向與事件相關(guān)聯(lián)的一些或全部屬性提供數(shù)據(jù)訪問接口,應(yīng)用程序需要能夠確定特定ItemID給相關(guān)源ID的一個或多個特定屬性ID代碼,以便能夠通過數(shù)據(jù)訪問接口訪問屬性,TranslateToItemID執(zhí)行所需的轉(zhuǎn)換。此功能有助于客戶端希望使用OPC數(shù)據(jù)訪問接口訂閱給定事件或警報相關(guān)實時數(shù)據(jù)的情況。
給定事件源和關(guān)聯(lián)屬性ID代碼的數(shù)組,返回項目ID的數(shù)組與每個屬性ID對應(yīng)的字符串。事件源以及關(guān)聯(lián)的屬性ID作為IOPCEventSink::OnEvent回調(diào)機制的一部分返回。給定事件類別的屬性ID代碼和描述也可以通過IOPCEventServer::QueryEventAttributes函數(shù)獲取。服務(wù)器必須為沒有相應(yīng)項目ID的屬性ID返回NULL字符串。
?
10)HRESULT GetConditionState (
[in] LPWSTR szSource,
[in] LPWSTR szConditionName,
[in] DWORD dwNumEventAttrs,
[in, size_is(dwNumEventAttrs)] DWORD* pdwAttributeIDs,
[out] OPCCONDITIONSTATE ** ppConditionState
);
返回與szSource和szConditionName??蛻舳吮仨氠尫欧祷氐慕Y(jié)構(gòu)。
一些服務(wù)器可能沒有維護足夠的條件狀態(tài)信息來完全實現(xiàn)此方法。在這種情況下,服務(wù)器應(yīng)該返回E_NOTIMPL。如果服務(wù)器選擇實現(xiàn)此方法必須為OPCCONDITIONSTATE的每個成員返回有效信息。
更多通信資源請登錄網(wǎng)信智匯(wangxinzhihui.com)。