通讯协议021——全网独有的OPC AE知识四之接口(五)

本文简单介绍OPC AE规范的接口IOPCEventServer2的相关知识,更多通信资源请登录网信智汇(wangxinzhihui.com)。OPC AE规范描述了OPC事件服务器应该实现的对象和接口,实现在多个OPC客户端间共享事件和警报条件。
IOPCEventServer2是一个可选接口,用于在区域或源的基础上管理条件的启用状态。它扩展了在IOPCEventServer上定义的相应方法。方法定义允许客户端查询区域或源列表的当前启用状态。
为了进一步说明启用状态方法的用法,下面的示例区域模型作为启动条件。禁用的对象显示为高亮显示。
1)客户端为A11调用GetEnableStateByArea,对于当前状态,服务器均返回FALSE(pbEnabled)和有效状态(pbEffectivelyEnabled)。
2)客户端调用A11的EnableConditionByArea2,服务器返回S_OK。客户端为S1、S2和S3调用EnableConditionBySource2,区域模型将更新,如下图所示。
3)客户端为A11调用GetEnableStateByArea,对于当前状态,服务器均返回TRUE(pbEnabled)和有效状态(pbEffectivelyEnabled)。
4)客户端调用S1的DisableConditionBySource2,服务器返回S_OK。
5)客户端为A11调用GetEnableStateByArea,对于当前状态,服务器均返回TRUE(pbEnabled)和有效状态(pbEffectivelyEnabled)。
【接口说明】
1)HRESULT EnableConditionByArea2(
[in] DWORD dwNumAreas,
[in, string, size_is(dwNumAreas)] LPWSTR* pszAreas,
[out, size_is(,dwNumAreas)] HRESULT **ppErrors
);
将指定的过程区域置于启用状态。服务器生成源本身已启用且其层次结构中的包含区域没有被禁用的条件相关事件。
此方法的效果在事件服务器的范围内是全局的。如果服务器支持多个客户端,为所有客户端启用条件,所有客户端将开始接收条件相关事件。
由于此方法的全局影响,一些事件服务器实现者可能会选择不实现它。在这种情况下,如果客户端通过QueryInterface请求IOPCEventServer2,服务器应该返回E_NOINTERFACE 。
一个条件可能与多个来源相关。这些来源可能是分布于多个区域。启用一个区域的条件不会改变其他区域中关联源的同名条件的启用/禁用状态区域。例如,可以为“区域1”中的源启用“LevelAlarm”条件,而在“区域2”中的源禁用“LevelAlarm”条件。
如果源的条件状态设置为已启用,并且包含区域的层次结构中的所有区域都已启,则源启用。
如果HRESULT为S_OK,则可以忽略ppErrors(其中的所有结果都保证为S_OK)。
如果HRESULT是FAILED代码,则服务器应返回NULL的OUT指针参数及ppErrors。
调用方必须释放返回的ppErrors数组。
2)HRESULT EnableConditionBySource2(
[in] DWORD dwNumSources,
[in, string, size_is(dwNumSources)] LPWSTR* pszSources,
[out, size_is(,dwNumSources)] HRESULT **ppErrors
);
将指定事件源的所有条件置于启用状态。服务器将为这些源生成与条件相关的事件。
此方法的效果在事件服务器的范围内是全局的。如果服务器支持多个客户端,为所有客户端启用条件,所有客户端将开始接收条件相关事件。
由于此方法的全局影响,一些事件服务器实现者可能会选择不实现它。在这种情况下,如果客户端通过QueryInterface请求IOPCEventServer2,服务器应该返回E_NOINTERFACE。
一个条件可能与多个源相关联。启用一个源的相关条件不会更改其他源关联的相同名称的条件的启用/禁用状态。例如,可以为“A100”启用“LevelAlarm”条件,为“FIC101”禁用“LevelAlarm”条件。
如果源的条件状态设置为已启用,并且包含区域的层次结构中的所有区域都已启,则源启用。
如果HRESULT为S_OK,则可以忽略ppErrors(其中的所有结果都保证为S_OK)。
如果HRESULT是FAILED代码,则服务器应返回NULL的OUT指针参数及ppErrors。
调用方必须释放返回的ppErrors数组。
3)HRESULT DisableConditionByArea(
[in] DWORD dwNumAreas,
[in, string, size_is(dwNumAreas)] LPWSTR* pszAreas,
[out, size_is(,dwNumAreas)] HRESULT **ppErrors
);
将指定的过程区域置于禁用状态。服务器将停止为这些条件生成与条件相关的事件。
此方法的效果在事件服务器的范围内是全局的。如果服务器支持多个客户端,所有客户端的条件都被禁用,所有客户端将停止接收条件相关事件。
由于此方法的全局影响,一些事件服务器实现者可能会选择不实现它。在这种情况下,如果客户端通过QueryInterface请求IOPCEventServer2,服务器应该返回E_NOINTERFACE。
一个条件可能与多个来源相关。这些来源可能是分布于多个区域。禁用一个区域中的条件不会改变与其他区域中关联源的同名条件的启用/禁用状态。例如,可以为“区域1”中的源启用“LevelAlarm”条件,而在“区域2”中的源禁用“LevelAlarm”条件。
如果源的条件状态设置为禁用或包含区域的层次结构中的任何区域被禁用,则该源将被禁用。
如果HRESULT为S_OK,则可以忽略ppErrors(其中的所有结果都保证为S_OK)。
如果HRESULT是FAILED代码,则服务器应返回NULL的OUT指针参数及ppErrors。
调用方必须释放返回的ppErrors数组。
4)HRESULT DisableConditionBySource2(
[in] DWORD dwNumSources,
[in, string, size_is(dwNumSources)] LPWSTR* pszSources,
[out, size_is(,dwNumSources)] HRESULT **ppErrors
);
将指定事件源的所有条件置于禁用状态。服务器将不再为这些源生成与条件相关的事件。
此方法的效果在事件服务器的范围内是全局的。如果服务器支持多个客户端,所有客户端的条件都被禁用,所有客户端将停止接收条件相关事件。
由于此方法的全局影响,一些事件服务器实现者可能会选择不实现它。在这种情况下,如果客户端通过QueryInterface请求IOPCEventServer2,服务器应该返回E_NOINTERFAC。
一个条件可能与多个源相关联。禁用一个源相关联的条件不会改变其它源相关联的相同名称的条件的启用/禁用状态。例如,在“A100”启用“LevelAlarm”条件,在“FIC101”禁用“LevelAlarm”条件。
如果源的条件状态设置为禁用或包含区域的层次结构中的任何区域被禁用,则该源将被禁用。
如果HRESULT为S_OK,则可以忽略ppErrors(其中的所有结果都保证为S_OK)。
如果HRESULT是FAILED代码,则服务器应返回NULL的OUT指针参数及ppErrors。
调用方必须释放返回的ppErrors数组。
5)HRESULT GetEnableStateByArea(
[in] DWORD dwNumAreas,
[in, string, size_is(dwNumAreas)] LPWSTR* pszAreas,
[out, size_is(,dwNumAreas)] BOOL **pbEnabled,
[out, size_is(,dwNumAreas)] BOOL **pbEffectivelyEnabled, [out, size_is(,dwNumAreas)] HRESULT **ppErrors
);
返回pszAreas中指定的每个区域的当前启用状态和有效启用状态。
如果HRESULT为S_OK,则可以忽略ppErrors(其中的所有结果都保证为S_OK)。
如果HRESULT是FAILED代码,则服务器应返回NULL的OUT指针参数及ppErrors。
调用方必须释放返回的ppErrors数组。
6)HRESULT GetEnableStateBySource(
[in] DWORD dwNumSources,
[in, string, size_is(dwNumSources)] LPWSTR* pszSources,
[out, size_is(,dwNumSources)] BOOL **pbEnabled,
[out, size_is(,dwNumSources)] BOOL **pbEffectivelyEnabled, [out, size_is(,dwNumSources)] HRESULT **ppErrors
);
返回pszSources中指定的每个源的当前启用状态和有效启用状态。
如果HRESULT为S_OK,则可以忽略ppErrors(其中的所有结果都保证为S_OK)。
如果HRESULT是FAILED代码,则服务器应返回NULL的OUT指针参数及ppErrors。
调用方必须释放返回的ppErrors数组。
更多通信资源请登录网信智汇(wangxinzhihui.com)。