通訊協(xié)議020——全網(wǎng)獨(dú)有的OPC AE知識(shí)四之接口(四)

本文簡(jiǎn)單介紹OPC AE規(guī)范的接口對(duì)象OPCEventServer的相關(guān)知識(shí),更多通信資源請(qǐng)登錄網(wǎng)信智匯(wangxinzhihui.com)。OPC AE規(guī)范描述了OPC事件服務(wù)器應(yīng)該實(shí)現(xiàn)的對(duì)象和接口,實(shí)現(xiàn)在多個(gè)OPC客戶(hù)端間共享事件和警報(bào)條件。
11)HRESULT EnableConditionByArea(
[in] DWORD dwNumAreas,
[in, size_is(dwNumAreas)] LPWSTR* pszAreas
);
將指定的過(guò)程區(qū)域置于啟用狀態(tài)。服務(wù)器只能為源本身已啟用并且不包含在禁用層次結(jié)構(gòu)中的區(qū)域生成條件關(guān)聯(lián)事件。
此方法的效果在事件服務(wù)器的范圍內(nèi)是全局的。如果服務(wù)器支持多個(gè)客戶(hù)端,將為所有客戶(hù)端啟用條件,客戶(hù)端將開(kāi)始接收相關(guān)條件事件。
?
12)HRESULT EnableConditionByArea(
[in] DWORD dwNumAreas,
[in, size_is(dwNumAreas)] LPWSTR* pszAreas
);
將指定的過(guò)程區(qū)域置于啟用狀態(tài)。此方法的效果在事件服務(wù)器的范圍內(nèi)是全局的。因此,如果服務(wù)器支持多個(gè)客戶(hù)端,為所有客戶(hù)端啟用條件,并且所有客戶(hù)端將開(kāi)始接收條件相關(guān)事件。
由于此方法的全局影響,一些事件服務(wù)器實(shí)現(xiàn)者可能會(huì)選擇不實(shí)現(xiàn)它。在這種情況下,服務(wù)器應(yīng)該返回E_NOTIMPL。
??? 一個(gè)條件可能與多個(gè)來(lái)源相關(guān)。這些來(lái)源可能是分布于多個(gè)區(qū)域。啟用一個(gè)區(qū)域的條件不會(huì)改變與其他區(qū)域中的源關(guān)聯(lián)的同名條件的啟用/禁用狀態(tài)。例如,LevelAlarm”條件,在“區(qū)域1”中為源啟用,而在“區(qū)域2”中為源禁用。
?
13)HRESULT EnableConditionBySource(
[in] DWORD dwNumSources,
[in, size_is(dwNumSources)] LPWSTR* pszSources
?);
將指定事件源的所有條件置于啟用狀態(tài)。服務(wù)器將為這些條件生成與條件相關(guān)的事件。
此方法的效果在事件服務(wù)器的范圍內(nèi)是全局的。因此,如果服務(wù)器支持多個(gè)客戶(hù)端,為所有客戶(hù)端啟用條件,所有客戶(hù)端將開(kāi)始接收條件相關(guān)事件。
由于此方法的全局影響,一些事件服務(wù)器實(shí)現(xiàn)者可能會(huì)選擇不實(shí)現(xiàn)它。在這種情況下,服務(wù)器應(yīng)該返回E_NOTIMPL。
一個(gè)條件可能與多個(gè)源相關(guān)聯(lián)。啟用一個(gè)源的相關(guān)條件,不會(huì)更改其他源相中相同名稱(chēng)條件的啟用/禁用狀態(tài),例如,可以為“A100”啟用“LevelAlarm”條件,為“FIC101”禁用“LevelAlarm”條件。
?
14)HRESULT DisableConditionByArea(
[in] DWORD dwNumAreas,
[in, size_is(dwNumAreas)] LPWSTR* pszAreas
);
將指定的過(guò)程區(qū)域置于禁用狀態(tài)。服務(wù)器將停止為這些條件生成與條件相關(guān)的事件。
此方法的效果在事件服務(wù)器的范圍內(nèi)是全局的。因此,如果服務(wù)器支持多個(gè)客戶(hù)端,所有客戶(hù)端的條件都被禁用,所有客戶(hù)端將停止接收條件相關(guān)事件。
由于此方法的全局影響,一些事件服務(wù)器實(shí)現(xiàn)者可能會(huì)選擇不實(shí)現(xiàn)它。在這種情況下,服務(wù)器應(yīng)該返回E_NOTIMPL。
一個(gè)條件可能與多個(gè)來(lái)源相關(guān)。這些來(lái)源可能是分布于多個(gè)區(qū)域。禁用一個(gè)區(qū)域的條件不會(huì)改變與其他區(qū)域中的源關(guān)聯(lián)的同名條件的啟用/禁用狀態(tài)。例如,LevelAlarm”條件,在“區(qū)域1”中為源禁用,而在“區(qū)域2”中為源啟用。
?
15)HRESULT DisableConditionBySource(
[in] DWORD dwNumSources,
[in, size_is(dwNumSources)] LPWSTR* pszSources
);
將指定事件源的所有條件置于禁用狀態(tài)。服務(wù)器將停止為這些條件生成與條件相關(guān)的事件。
此方法的效果在事件服務(wù)器的范圍內(nèi)是全局的。因此,如果服務(wù)器支持多個(gè)客戶(hù)端,所有客戶(hù)端的條件都被禁用,所有客戶(hù)端將停止接收條件相關(guān)事件。
由于此方法的全局影響,一些事件服務(wù)器實(shí)現(xiàn)者可能會(huì)選擇不實(shí)現(xiàn)它。在這種情況下,服務(wù)器應(yīng)該返回E_NOTIMPL。
一個(gè)條件可能與多個(gè)源相關(guān)聯(lián)。禁用一個(gè)源的相關(guān)條件,不會(huì)更改其他源相中相同名稱(chēng)條件的啟用/禁用狀態(tài),例如,可以為“A100” 禁用 “LevelAlarm”條件,為“FIC101” 啟用“LevelAlarm”條件。
?
16)HRESULT AckCondition(
[in] DWORD dwCount
[in, string] LPWSTR szAcknowledgerID,
[in, string] LPWSTR szComment,
[in, size_is(dwCount)] LPWSTR* pszSource,
[in, size_is(dwCount)] LPWSTR* pszConditionName,
[in, size_is(dwCount)] FILETIME* pftActiveTime,
[in, size_is(dwCount)] DWORD* pdwCookie,
[out, size_is(,dwCount)] HRESULT **ppErrors
?);
客戶(hù)端使用AckCondition方法來(lái)確認(rèn)事件服務(wù)器中的一個(gè)或多個(gè)條件??蛻?hù)端通過(guò)IOPCEventSink::OnEvent回調(diào)接收來(lái)自條件的事件通知。此AckCondition方法專(zhuān)門(mén)確認(rèn)條件處于活動(dòng)狀態(tài)或正在轉(zhuǎn)換轉(zhuǎn)換成不同的子條件(并且沒(méi)有該條件的其他狀態(tài)轉(zhuǎn)換)。一個(gè)或多個(gè)條件屬于特定的事件源——事件通知的源。對(duì)于每個(gè)相關(guān)條件事件通知,相應(yīng)的源、條件名稱(chēng)、活動(dòng)時(shí)間和Cookie作為OnEvent回調(diào)參數(shù)的一部分由客戶(hù)端接收。
?
17) HRESULT CreateAreaBrowser(
[in] REFIID riid,
[out, iid_is(riid) LPUNKNOWN* ppUnk
);
為客戶(hù)端創(chuàng)建一個(gè)OPCEventAreaBrowser對(duì)象,并將接口返回給客戶(hù)端。此對(duì)象將支持IUnknown和IOPCEventAreaBrowser接口。客戶(hù)端可以使用此接口瀏覽服務(wù)器上可用的過(guò)程區(qū)域。
更多通信資源請(qǐng)登錄網(wǎng)信智匯(wangxinzhihui.com)。