最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

通訊協(xié)議050——全網(wǎng)獨有的OPC HDA知識一之接口(五)IOPCHDA_SyncRead

2023-08-26 09:31 作者:zhouwl72  | 我要投稿

本文簡單介紹OPC HDA規(guī)范的IOPCHDA_SyncRead接口方法,更多通信資源請登錄網(wǎng)信智匯(wangxinzhihui.com)。

?

1)HRESULT ?ReadRaw (htStartTime, htEndTime, dwNumValues, bBounds, dwNumItems, phServer, ppItemValues, ppErrors)

此函數(shù)從歷史數(shù)據(jù)庫中讀取一個或多個項目的指定時域的值、質(zhì)量和時間戳。當(dāng)bBounds為TRUE時,將返回時域的邊界值。此功能旨在供希望在歷史記錄中保存實際數(shù)據(jù)的客戶使用。實際數(shù)據(jù)可以被壓縮,或者可以是為項目收集的所有數(shù)據(jù),這取決于歷史記錄和保存項目值時調(diào)用的存儲規(guī)則。提供可選的邊界值以允許客戶端在對顯示器上的實際數(shù)據(jù)進(jìn)行趨勢分析時對開始和結(jié)束時間的值進(jìn)行插值。

請求的時域由htStartTime、htEndTime和dwNumValues定義;必須至少指定其中兩個。如果htEndTime小于htStartTime,或者只指定了htEndTime和dwNumValues,則數(shù)據(jù)將以相反的順序返回,后面的數(shù)據(jù)將先返回。如果指定了這三個值,則調(diào)用將根據(jù)htStartTime和htEndTime的相對值以升序或降序返回從htStartTime到htEndTime最多dwNumValues的結(jié)果。如果dwNumValues為0,則返回該范圍內(nèi)的所有值。OPCHDA_TIME的空值用于指示未指定htStartTime或htEndTime。

如果htStartTime或htEndTime是以字符串(相對)格式給出的,則OPCHDA_time結(jié)構(gòu)的絕對時間(ftTime)應(yīng)設(shè)置為FILETIME,該FILETIME是服務(wù)器將相對時間轉(zhuǎn)換為的。

特別允許htStartTime和htEndTime相同。這允許客戶端只請求一個值。如果請求的時域超出服務(wù)器的范圍,則特別不允許服務(wù)器返回E_INVALIDARG。這種情況應(yīng)視為不存在數(shù)據(jù)的區(qū)間。

如果在該時間范圍內(nèi)存在多個dwNumValues結(jié)果,則該ItemID的ppErrors條目應(yīng)為OPC_S_MOREDATA。當(dāng)返回OPC_S_MOREDATA時,想要下一個dwNumValues值的客戶端應(yīng)再次調(diào)用ReadRaw,并將為該項返回的最舊值的時間戳作為新的htStartTime,同時保持htEndTime的原始值不變(如果需要相反的順序,則反轉(zhuǎn)htStartTime和htEndTime)。請注意,第二次調(diào)用將返回上一次調(diào)用中最后一個值的副本。

如果請求了邊界值,并且指定了非零的dwNumValues,則返回的任何邊界值都將包含在dwNumValue計數(shù)中。如果dwNumValues為1,則只返回起始邊界(如果需要相反的順序,則返回結(jié)束邊界)。如果dwNumValues為2,則返回數(shù)據(jù)點和起始邊界(如果需要相反的順序,則返回結(jié)束邊界)。

當(dāng)請求邊界值但未找到邊界值時,ppItemValues中相應(yīng)的數(shù)組元素的質(zhì)量將為OPCHDA_NOBOUND,時間戳等于開始或結(jié)束時間(視情況而定),VARIANT的值為VT_EMPTY。在歷史中查找邊界值的前后距離取決于服務(wù)器。

如果只指定了htStartTime或htEndTime中的一個,并且指定了非零的dwNumValues,則歷史上的最后一個值被視為結(jié)束界限(如果需要相反的順序,則為開始界限)。

對于不存在數(shù)據(jù)的間隔,如果未請求或未找到邊界值,則相應(yīng)的ppErrors應(yīng)為OPC_S_NODATA,而OPCHDA_Item的dwCount應(yīng)為0。如果請求了邊界值并且其中一個或兩個都存在,則ppError返回為S_OK,并返回邊界值。當(dāng)然,如果任何ppError代碼不是S_OK,則返回給客戶端的HRESULT必須是S_FALSE。

?

2)HRESULT ?ReadProcessed (htStartTime, htEndTime, ftResampleInterval, dwNumItems, phServer, haAggregate, ppItemValues, ppErrors)

該方法可選。

該方法在標(biāo)準(zhǔn)的v1.0和v1.1之間進(jìn)行了更改,以將haAggregate作為DWORD而非ENUM傳遞,從而允許供應(yīng)商指定自己的聚合。使用該標(biāo)準(zhǔn)v1.0構(gòu)建的服務(wù)器和客戶端將與使用v1.1構(gòu)建的服務(wù)器或客戶端協(xié)同工作,但v1.0客戶端可能與返回供應(yīng)商指定聚合的v1.1服務(wù)器不兼容。

此函數(shù)根據(jù)歷史數(shù)據(jù)庫中一個或多個項目的指定時域的數(shù)據(jù)計算聚合值、質(zhì)量和時間戳。時域被劃分為持續(xù)時間為ftResampleInterval的子區(qū)間。通過使用下一個ftResampleInterval中的數(shù)據(jù),為以htStartTime開始的每個子區(qū)間計算指定的haAggregate。

此函數(shù)旨在提供相對于重采樣間隔計算的值。例如,當(dāng)ftResampleInterval為1小時時,此函數(shù)可以為指定時域內(nèi)的每個項目提供每小時統(tǒng)計信息,如Maximum、Minimum、Average等。

請求的域由htStartTime、htEndTime和htResampleInterval定義。如果htStartTime或htEndTime是以字符串(相對)格式給定的,則返回的值應(yīng)為服務(wù)器將該值轉(zhuǎn)換為的FILETIME。必須指定這三個。如果htEndTime小于htStartTime,則應(yīng)以相反的順序返回數(shù)據(jù),后面的數(shù)據(jù)優(yōu)先。如果htStartTime和htEndTime相同,則服務(wù)器應(yīng)返回E_INVALIDARG,因為沒有任何有意義的方法來解釋這種情況。

用于計算每個子區(qū)間的聚合的值應(yīng)包括正好落在子區(qū)間開始的時間戳上的任何值,但不應(yīng)包括直接落在子間隔結(jié)束的時間戳的任何值。因此,每個值在計算中只能包含一次。如果時域的順序相反,我們認(rèn)為較晚的時間戳是子區(qū)間的開始時間,較早的時間戳則是子區(qū)間結(jié)束時間。請注意,這意味著簡單地交換開始和結(jié)束時間不會導(dǎo)致以相反的順序返回相同的值,因為在這兩種情況下請求的子區(qū)間不相同。

如果計算的最后一個子區(qū)間不是完整的子區(qū)間(請求的時域不能被重新采樣間隔整除),則返回的最后一個聚合應(yīng)基于該不完整的子間隔,并且聚合的質(zhì)量應(yīng)為OPCHDA_PARTIAL。

對于MinimumActualTime和MaximumActualTime,如果一個子區(qū)間內(nèi)存在多個值實例,則返回的值實例(時間戳)取決于服務(wù)器。在任何情況下,服務(wù)器可以設(shè)置OPCHDA_EXTRADATA質(zhì)量標(biāo)志,以使呼叫者知道存在具有該值的其他時間戳。

要獲得同一項目的多個聚合,請在每個所需聚合的項目列表中包含服務(wù)器項目句柄。

如果htResampleInterval為0,則服務(wù)器應(yīng)為整個時間范圍創(chuàng)建一個聚合值。這允許在長時間內(nèi)進(jìn)行聚合。時間戳等于htEndTime的值將從該聚合中排除,就像它將從具有該結(jié)束時間的子區(qū)間中排除一樣。

與聚合一起返回的時間戳應(yīng)為間隔開始時的時間,除非聚合指定了不同的值。此外,如果聚合所依據(jù)的所有值的質(zhì)量均為良好,則聚合返回的質(zhì)量應(yīng)為良好(見OPC數(shù)據(jù)訪問標(biāo)準(zhǔn))。如果這些值中的任何一個具有任何其他質(zhì)量,則聚合的質(zhì)量應(yīng)為亞正常(0x010110xx)。

如果時域中的任何子區(qū)間中不存在給定項的數(shù)據(jù),則服務(wù)器應(yīng)在該項的ppErrors數(shù)組中返回OPC_S_NODATA,并且相應(yīng)的ppItemValues結(jié)構(gòu)的dwCount應(yīng)為0。

如果該項的至少一個子區(qū)間中確實存在數(shù)據(jù),則服務(wù)器應(yīng)返回時域中每個子區(qū)間的時間戳、質(zhì)量和值。對于沒有數(shù)據(jù)的每個子區(qū)間,服務(wù)器應(yīng)返回該子區(qū)間的VT_EMPTY值和OPCHDA_NODATA質(zhì)量,并帶有適當(dāng)?shù)臅r間戳。如果聚合的時間戳基于數(shù)據(jù),則為OPCHDA_NODATA返回的時間戳應(yīng)為間隔開始的時間戳。

注:供應(yīng)商定義的聚合在子區(qū)間中是否包含后緣值方面可能具有不同的行為。預(yù)計服務(wù)器供應(yīng)商將清楚地記錄其供應(yīng)商特定聚合的行為,以便客戶端知道每個聚合中包含哪些值。

?

3)HRESULT ?ReadAtTime (dwNumTimeStamps, ftTimeStamps, dwNumItems, phServer, ppItemValues, ppErrors)

此函數(shù)從歷史數(shù)據(jù)庫中讀取一個或多個項目的指定時間戳的值和質(zhì)量。此函數(shù)旨在提供與具有已知時間戳的其他值相關(guān)的值。例如,收集實驗室樣本時傳感器的值。

返回的值和質(zhì)量的順序應(yīng)與請求中提供的時間戳的順序相匹配。

當(dāng)指定的時間戳不存在值時,應(yīng)從周圍的值中插入一個值,以表示指定時間戳的值。

OPCHDA_ITEM結(jié)構(gòu)將在haAggregate字段中返回OPCHDA_NOAGGREGATE。

如果找到指定時間戳的值,服務(wù)器將在質(zhì)量中設(shè)置OPCHDA_RAW位。如果該值是根據(jù)周圍的值進(jìn)行插值的,則服務(wù)器將在質(zhì)量中設(shè)置OPCHDA_interpolated位。

?

?

4)HRESULT ?ReadModified(htStartTime, htEndTime, dwNumValues, dwNumItems, phServer, ppItemValues, ppErrors)

此函數(shù)從歷史數(shù)據(jù)庫中讀取一個或多個項目的指定時域的修改值、質(zhì)量、時間戳、用戶ID和時間戳。如果ReadRaw、ReadProcessed或ReadAtTime返回的質(zhì)量為OPCHDA_EXTRADATA,表示存在被取代的值,則此函數(shù)將允許您查看被取代的那些值。此函數(shù)只讀取已修改/替換或刪除的值。這是接口上的一個可選方法。

請求的域由htStartTime、htEndTime和dwNumValues定義;必須至少指定其中兩個。如果htEndTime小于htStartTime,或者只指定了htEndTime和dwNumValues,則應(yīng)以相反的順序返回數(shù)據(jù),后面的數(shù)據(jù)優(yōu)先。如果指定了這三個值,則調(diào)用應(yīng)根據(jù)StartTime和EndTime的相對值以升序或降序返回從StartTime到EndTime的最多dwNumValues結(jié)果。如果在該時間范圍內(nèi)存在多個dwNumValues結(jié)果,則該ItemID的ppErrors條目應(yīng)為OPC_S_MOREDATA。如果dwNumValues為0,則返回該范圍內(nèi)的所有值。

如果一個值被修改了多次,則會返回該時間的所有值。這意味著時間戳可以多次出現(xiàn)在數(shù)組中。具有相同時間戳的返回值的順序應(yīng)該是從最近修改值到最舊修改值。是否保留多次修改或僅保留最近的修改取決于服務(wù)器。

?

5)HRESULT ?ReadAttribute (htStartTime, htEndTime, hServer, dwNumAttributes, pdwAttributeIDs, ppAttributeValues, ppErrors)

此函數(shù)從歷史數(shù)據(jù)庫中讀取項目指定時域的屬性值和時間戳。如果需要屬性的當(dāng)前值,則htStartTime應(yīng)設(shè)置為“NOW”,htEndTime應(yīng)為NULL。

此函數(shù)用于檢索已更改的屬性,以便將這些屬性的值與其數(shù)據(jù)的值關(guān)聯(lián)起來。例如,傳感器的重新校準(zhǔn)可能需要改變正常的最大和最小屬性。

如果項目唯一可用的屬性值是當(dāng)前值,則應(yīng)返回這些值,并將ppError設(shè)置為OPC_S_CURRENTVALUE。

除了請求當(dāng)前值(htStartTime=NOW,htEndTime=NULL)的情況外,服務(wù)器應(yīng)始終返回一個起始邊界值。因此,如果客戶端請求1997年1月1日至1997年10月1日的屬性值,則服務(wù)器應(yīng)在1997年1日返回該屬性的值,而不是返回的第一個值是1997年1月份1日之后該屬性的第一個新值。同樣,第一個值的時間戳應(yīng)為1997年1月1日,而不管屬性實際何時取該值。所有其他時間戳應(yīng)為屬性值發(fā)生變化的時間。

請注意,雖然客戶端可以向服務(wù)器查詢ItemID的本機數(shù)據(jù)類型,但客戶端不能假設(shè)從服務(wù)器發(fā)送的所有數(shù)據(jù)都是該數(shù)據(jù)類型。給定ItemID的數(shù)據(jù)類型可能在Item的使用壽命內(nèi)發(fā)生了變化,因此客戶端應(yīng)該能夠處理接收與此調(diào)用返回的數(shù)據(jù)類型不同的數(shù)據(jù)類型的數(shù)據(jù)。

未完待續(xù)。更多通信資源請登錄網(wǎng)信智匯(wangxinzhihui.com)。


通訊協(xié)議050——全網(wǎng)獨有的OPC HDA知識一之接口(五)IOPCHDA_SyncRead的評論 (共 條)

分享到微博請遵守國家法律
邵阳县| 上蔡县| 荔浦县| 班玛县| 宁乡县| 东安县| 保德县| 营山县| 农安县| 绥中县| 阳曲县| 开阳县| 和平县| 彭山县| 格尔木市| 伊宁市| 石阡县| 虹口区| 东安县| 巴东县| 璧山县| 六盘水市| 丰城市| 漳浦县| 宿松县| 绥江县| 三江| 吉木萨尔县| 萨迦县| 新源县| 藁城市| 北碚区| 榆社县| 黄冈市| 砚山县| 无棣县| 新兴县| 皋兰县| 北票市| 拜泉县| 濮阳市|