本文简单介绍OPC AE规范的接口对象OPCEventServer的相关知识,更多通信资源请登录网信智汇(wangxinzhihui.com)。OPC AE规范描述了OPC事件服务器应该实现的对象和接口,实现在多个OPC客户端间共享事件和警报条件。
1、OPCEventServer对象
OPCEventServer对象是OPC事件服务器公开的主要对象。该接口对象提供的包括:
• IUnknown
• IOPCCommon
• IOPCEventServer
• IConnectionPointContainer
IUnknown:服务器必须提供标准的IUnknown接口。请参阅OLE程序员参考资料。并且按照Microsoft的要求实现所有功能。
IOPCCommon:数据访问等其他OPC服务器共享此接口设计。它提供了对特定客户端/服务器会话有效的LocaleID设置和查询。也就是说,就像组定义,一个客户端的操作不会影响任何其他客户端。
下面提供了此接口的快速参考。更详细的讨论见OPC通用规范。
- 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事件服务器的报警和事件功能的主要接口。此接口是用于创建OPC事件订阅对象、创建OPC事件区域浏览对象、查询事件类别和相关事件参数,管理条件,执行杂项诸如获取事件服务器状态之类的操作。
1. IOPCEventServer接口方法
1)HRESULT GetStatus (
[out] OPCEVENTSERVERSTATUS ** ppEventServerStatus
);
返回OPC事件服务器的当前状态。
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
);
将事件订阅对象添加到事件服务器。
为客户端创建一个OPCEventSubcription对象,并向客户端返回一个接口。
此对象将至少支持IUnknown、IOPCEventSubscriptionMgt和IConnectionPointContainer。客户端可以管理此接口的状态,包括筛选器和通过ConnectionPoints创建订阅。
3)HRESULT QueryAvailableFilters(
[out] DWORD * pdwFilterMask
);
QueryAvailableFilters方法为客户端提供了一种准确查找哪些由给定的事件服务器支持的筛选条件的方法。通常在对OPCEventSubscription对象配置筛选时调用。
预计在大多数情况下,查询结果将相当“稳定”。但是,服务器实际上允许在任何时候更改可用的选择。因此,客户应(至少允许作为选项)每次将选择呈现给最终用户时都进行新的查询。
4)HRESULT QueryEventCategories(
[in] DWORD dwEventType,
[out] DWORD* pdwCount,
[out, size_is(*pdwCount)] DWORD** ppdwEventCategories,
[out, size_is(,*pdwCount)] LPWSTR** ppEventCategoryDescs
);
QueryEventCategories方法为客户端提供了一种方法来查找给定服务器支持的事件。此方法通常会在指定事件筛选器前调用。服务器将能够自定义事件类别。
根据服务器的复杂程度,返回的事件类别的数量会有所不同,但对于大多数服务器来说,预计小于30,这使得该接口比自定义枚举器更合适。
预计在大多数情况下,查询结果将相当“稳定”。但是,服务器实际上允许在任何时候更改可用的选择。因此,客户应(至少允许作为选项)每次将选择呈现给最终用户时都进行新的查询。
5)HRESULT QueryConditionNames(
[in] DWORD dwEventCategory,
[out] DWORD* pdwCount,
[out, size_is(,*pdwCount)] LPWSTR** ppszConditionNames
);
QueryConditionNames方法为客户端提供了一种查找指定的事件类别的事件服务器的特定条件名称的方法。这种方法通常是在指定事件筛选器之前调用。条件名称是特定于服务器的。
根据服务器的复杂程度,返回的事件类别的数量会有所不同,但对于大多数服务器来说,预计小于30,这使得该接口比自定义枚举器更合适。
预计在大多数情况下,查询结果将相当“稳定”。但是,服务器实际上允许在任何时候更改可用的选择。因此,客户应(至少允许作为选项)每次将选择呈现给最终用户时都进行新的查询。
更多通信资源请登录网信智汇(wangxinzhihui.com)。