【无标题】

本文简单介绍OPC HDA规范的IOPCHDA_AsyncRead(可选)接口方法,更多通信资源请登录网信智汇(wangxinzhihui.com)。

异步操作允许客户端向服务器发送请求,而无需等待服务器填写请求并返回数据。每个操作都有一个关联的事务ID(由客户端创建),该ID在回调到客户端期间与数据一起返回。OPC HDA服务器的异步方法是使用IConnectionPoint实现的。这允许客户端建立不同的回调来处理不同类型的数据传输。虽然本文档后面提供了一些关于IConnectionPoint的信息,但建议阅读Microsoft文档。

预计某些服务器将不支持此处指定的所有异步接口。但是,所有服务器都必须支持IConnectPointContainer,并且任何支持任何异步接口的服务器都必须支撑IOPCHDA_DataCallback ConnectionPoint。如果服务器不支持特定接口,则无需实现向客户端的IOPCHDA_Data_callback对象中的匹配回调例程发送回调的方法。

如果需要,客户端提供一个TransactionID来区分一个调用和另一个调用。由于对异步调用的响应实际上可以在调用完成之前到达,因此客户端应该在进行调用之前存储此TransactionID,这样回调例程就可以访问TransactionID。相反,CancelID由服务器生成,如果客户端希望取消异步请求,则用于取消异步请求。

1)HRESULT  ReadRaw (dwTransactionID, htStartTime, htEndTime, dwNumValues, bBounds, dwNumItems, phServer, pdwCancelID, ppErrors)

此函数从历史数据库中读取一个或多个项目的指定时域的值、质量和时间戳。结果通过客户端的IOPCHDA_DataCallback::OnReadComplete方法返回。

当bBounds为TRUE时,将返回时域的边界值。此功能旨在供希望在历史记录中保存实际数据的客户使用。实际数据可以被压缩,或者可以是为项目收集的所有数据,这取决于历史记录和保存项目值时调用的存储规则。提供可选的边界值以允许客户端在对显示器上的实际数据进行趋势分析时对开始和结束时间的值进行插值。

2)HRESULT  AdviseRaw(dwTransactionID, htStartTime, ftUpdateInterval, dwNumItems, phServer, pdwCancelID, ppErrors)

此函数在一个或多个项目的更新间隔从指定的开始时间读取历史数据库中的值、质量和时间戳。结果通过客户端的IOPCHDA_DataCallback::OnDataChange方法返回。这是接口上的一个可选方法。

请求的时域由htStartTime和htEndTime定义。如果htEndTime小于htStartTime,则应以相反的顺序返回数据,后面的数据优先。与同步方法不同的是,如果dwNumValues为非零,则函数将继续以dwNumValue大小的块发送数据,直到发送完所有请求的数据为止。CancelID可用于取消请求。

回调应包含请求中所有ItemID的数据,但返回FAILED错误代码的ItemID除外。

请参阅IOPCHDA_SyncRead:ReadRaw上的讨论,了解服务器在各种情况下应向客户端返回的内容。

3)HRESULT  ReadProcessed (dwTransactionID, htStartTime, htEndTime, ftResampleInterval, dwNumItems, phServer, haAggregate, pdwCancelID, ppErrors)

此函数根据历史数据库中一个或多个项目的指定时域的数据计算聚合值、质量和时间戳。结果通过客户端的IOPCHDA_DataCallback::OnReadComplete方法返回。这是接口上的一个可选方法。

此功能用于在客户端软件可用时使用新数据更新客户端软件;例如周期性地用新数据更新趋势。

该请求将针对从htStartTime到未来的所有数据,因为它是以ftUpdateInterval指定的速率收集和报告的。报告将继续,直到请求被取消。在指定当前之前的开始时间时应注意,因为已经可用的数据将被无限制地返回,每个响应中都有相当于ftUpdateInterval的数据。一旦发送了所有已经收集的数据,就会为每个ftUpdateInterval发送新的数据。

如果没有新数据,服务器仍应发送一个响应,其中每个项目都有一个条目,对于没有数据的任何项目,dwCount为零,ppErrors代码为OPC_S_NODATA。通过这种方式,客户端可以确保间隔已被处理。

此函数使用ftUpdateInterval来限制数据返回率。

通知中不会标识任何注释。

请参阅IOPCHDA_SyncRead:ReadRaw上的讨论,了解服务器在各种情况下应向客户端返回的内容。

4)HRESULT  AdviseProcessed (dwTransactionID, htStartTime, ftResampleInterval, dwNumItems, phServer, haAggregate, dwNumIntervals, pdwCancelID, ppErrors)

该方法在标准的v1.0和v1.1之间进行了更改,以将haAggregate作为DWORD而非ENUM传递,从而允许供应商指定自己的聚合。使用该标准v1.0构建的服务器和客户端将与使用v1.1构建的服务器或客户端协同工作,但v1.0客户端可能与返回供应商指定聚合的v1.1服务器不兼容。

此函数从一个或多个项目的指定开始时间间隔计算历史数据库中的聚合值、质量和时间戳。结果通过客户端的IOPCHDA_DataCallback::OnDataChange方法返回。这是接口上的一个可选方法。

此函数根据历史数据库中一个或多个项目的指定时域的数据计算聚合值、质量和时间戳。时域被划分为持续时间为ftResampleInterval的子区间。通过使用下一个ftResampleInterval中的数据,为以htStartTime开始的每个子区间计算指定的haAggregate。

此函数旨在提供相对于重采样间隔计算的值。例如,当ftResampleInterval为1小时时,此函数可以为指定时域内的每个项目提供每小时统计信息,如Maximum、Minimum、Average等。

请求的域由htStartTime、htEndTime和htResampleInterval定义。如果htStartTime或htEndTime是以字符串(相对)格式给定的,则返回的值应为服务器将该值转换为的FILETIME。必须指定这三个。如果htEndTime小于htStartTime,则应以相反的顺序返回数据,后面的数据优先。

对于MinimumActualTime和MaximumActualTime,如果一个子区间内存在多个值实例,则返回的值实例(时间戳)取决于服务器。在任何情况下,服务器可以设置OPCHDA_EXTRADATA质量标志,以使呼叫者知道存在具有该值的其他时间戳。

如果htResampleInterval为0,则服务器应为整个时间范围创建一个聚合值。这允许在长时间内进行聚合。

请参阅IOPCHDA_SyncRead:ReadProcessed上的讨论,了解服务器在各种情况下应向客户端返回的内容。

5)HRESULT  ReadAtTime (dwTransactionID, dwNumTimeStamps, ftTimeStamps, dwNumItems, phServer, pdwCancelID, ppErrors)

此函数从历史数据库中读取一个或多个项目的指定时间戳的值和质量。此函数旨在提供与具有已知时间戳的其他值相关的值。例如,收集实验室样本时传感器的值。结果通过客户端的IOPCHDA_DataCallback::OnReadComplete方法返回。这是接口上的一个可选方法。

当指定的时间戳不存在值时,应从周围的值中插入一个值,以表示指定时间戳的值。

OPCHDA_ITEM结构将在haAggregate字段中返回OPCHDA_NOAGGREGATE。

如果找到指定时间戳的值,服务器将以质量返回OPCHDA_RAW。如果该值是根据周围的值进行插值的,则服务器将以质量返回OPCHDA_interpolated。

6)HRESULT  ReadModified (dwTransactionID, htStartTime, htEndTime, dwNumValues, dwNumItems, phServer, pdwCancelID, ppErrors)

此函数从历史数据库中读取一个或多个项目的指定时域的值、质量、时间戳、用户ID和修改时间戳。结果通过客户端的IOPCHDA_DataCallback::OnReadModifiedComplete方法返回。此功能的目的是读取已修改/替换的历史记录中的值。如果ReadRaw、ReadProcessed或ReadAtTime返回的质量为OPCHDA_EXTRADATA,表示存在被取代的值,则此函数将允许您查看被取代的那些值。此函数只读取已修改/替换或删除的值。这是接口上的一个可选方法。

7)HRESULT  ReadAttribute (dwTransactionID, htStartTime, htEndTime, hServer, dwNumAttributes, dwAttributeIDs, pdwCancelID, ppErrors)

此函数从历史数据库中读取项目指定时域的属性值和时间戳。结果通过客户端的IOPCHDA_DataCallback::OnReadAttributeComplete方法返回。这是接口上的一个可选方法。

此函数从历史数据库中读取一个或多个项目的指定时域的修改值、质量、时间戳、用户ID和时间戳。

此函数的目的是读取已修改/替换的历史记录中的值(返回的值的质量为OPCHDA_EXTRADATA,表示该项/时间戳还有其他已被替换的值)。

请求的时域由htStartTime和htEndTime定义。如果htEndTime小于htStartTime,则应以相反的顺序返回数据,后面的数据优先。与同步方法不同的是,如果dwNumValues为非零,则函数将继续以dwNumValue大小的块发送数据,直到发送完所有请求的数据为止。CancelID可用于取消请求。

如果一个值被修改了多次,则会返回该时间的所有值。这意味着时间戳可以多次出现在数组中。具有相同时间戳的返回值的顺序应该是从最近修改值到最旧修改值。它是保留多次修改还是只保留最近的修改,这取决于服务器。

在异步ReadModified中,与同步不同,如果指定了所有三个参数(htStartTime、htEndTime和dwNumValues),则函数将继续以dwNumValue大小的块发送数据,直到发送完所有请求的数据。可用于取消请求的CancelID。

8)HRESULT  Cancel(dwCancelID)

此功能取消未完成的操作。实际实现是特定于服务器的,但服务器将通过客户端的IOPCHDA_Data_Callback::OnCancelComplete方法进行响应,除非调用返回FAILED错误代码。

此函数从历史数据库中读取项目指定时域的属性值和时间戳。

未完待续。更多通信资源请登录网信智汇(wangxinzhihui.com)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值