摘要:本文簡述了紫金橋" title="紫金橋">紫金橋軟件讀取歷史數(shù)據(jù)的三種方式,,重點說明了取批量歷史的不同操作方法以及各方法間的區(qū)別,。
正文:
紫金橋軟件自帶了過程數(shù)據(jù)庫" title="過程數(shù)據(jù)庫">過程數(shù)據(jù)庫,可以高效的保存相關數(shù)據(jù)點的歷史記錄,同時提供了豐富的方法讀取所需的歷史記錄。筆者使用紫金橋做了多個工程,,僅就個人經(jīng)驗進行簡單小結,這里和大家分享,,還望能起到拋磚引玉的作用,,如有不對之處,,還望指正。
關于保存歷史記錄
通過紫金橋組態(tài)軟件自身的過程數(shù)據(jù)庫,,可以通過兩種方式自動保存數(shù)據(jù)點的歷史記錄,,定時保存和變化率保存,定時保存適合保存變化不是很快,,或者比較有規(guī)律的數(shù)據(jù)點,變化率保存的應用范圍相對更廣,,適合變化較快或者較慢的情形,,這里要注意兩點內(nèi)容:
• 對于定時保存的歷史記錄一般不做壓縮的,所以不建議對于較多的數(shù)據(jù)庫點設置為保存間隔較短的定時保存,,否則歷史記錄的文件體積會增加相對較快,;
• 對于變化率保存的數(shù)據(jù),系統(tǒng)會自動壓縮保存,,要注意的是其變化率是相對于該點的量程而言的,,而不是相對于上次保存的歷史值。數(shù)據(jù)點的量程可以在“點組態(tài)”基本參數(shù)中修改,;
個人覺得過程數(shù)據(jù)庫很適合保存現(xiàn)場連續(xù)的采集值,,對于一些字符型的數(shù)據(jù),可能還需要借助關系數(shù)據(jù)庫" title="關系數(shù)據(jù)庫">關系數(shù)據(jù)庫來保留歷史值了,。而關系數(shù)據(jù)庫在保存連續(xù)數(shù)值方面也遠不如過程數(shù)據(jù)庫方便,。關于紫金橋對關系數(shù)據(jù)庫的各種操作,筆者將在其它文檔中進行說明,,這里不再贅述,。
歷史數(shù)據(jù)的讀取
紫金橋軟件提供了多種方式讀取歷史數(shù)據(jù),這里僅就一些常用的方法進行說明,。一般有三種方式讀取歷史記錄,,分別是:歷史曲線、讀取單點歷史,、讀取批量歷史,。在說明各種方式之前先要解釋下“壞值”的概念,數(shù)據(jù)點只有在系統(tǒng)運行時才能保存歷史記錄,,對于系統(tǒng)沒有運行時的歷史值,,如果該時刻早于當前時刻,紫金橋軟件通常會賦一個壞值,,-9999,。而對于未到時間的歷史值可以在“系統(tǒng)參數(shù)”進行設置,如圖所示:
下面簡述下讀取歷史記錄的三種操作:
1 通過歷史曲線
通過歷史曲線或者趨勢分析" title="趨勢分析">趨勢分析曲線可以直接查詢相關點的歷史值,,這種方法的優(yōu)點在于數(shù)據(jù)很直觀,,便捷,、曲線可以任意放大。
歷史曲線:
趨勢分析:
歷史曲線和趨勢分析曲線的不同在于,,歷史曲線可以通過“打散單元”的操作將該組件分解,,自行根據(jù)需要重新組合;而趨勢分析組件功能更強,,提供了歷史曲線沒有的統(tǒng)計數(shù)據(jù),、全屏顯示等功能,但是不支持分解操作,,不能自行組合,。
2 讀取單點歷史記錄
單獨采集某點某時刻的歷史值或某段時間的統(tǒng)計值一般通過腳本函數(shù)實現(xiàn):
• 讀取某刻歷史值一般使用三種函數(shù):GetHisData(Var,Year,Month,Day,Hour,Minute,Second,MilliSec);
GetHisData2(Var,StartTime, MilliSec),;
GetHisDataEx(DataSource, VarName ,StartTime,MilliSecond),;
GetHisData和GetHisData2前者適合讀取具體時刻的歷史值,后者通過一個時間值來獲取歷史記錄,,該值是一個整數(shù),,表示相對于1970年1月1日08:00時過去的秒數(shù),這個秒數(shù)在紫金橋軟件中非常常用,。實際工程中,,這個秒數(shù)可以通過函數(shù)LongTime ("2001/01/01 14:50:48")得到,該函數(shù)可以自動得到某時刻過去的秒數(shù),。秒數(shù)也可以通過一些組件得到,,比如起始時間組件,如圖所示:
圖中有一個起始時間組件,,其下是該組件的time屬性所對應的相對于1970/1/1/08:00:00 過去的秒數(shù),。比如該組件被命名為EndTime,在腳本中通過#EndTime.time即可得到相應的秒數(shù),。
• 讀取某段時間內(nèi)的統(tǒng)計值可以通過函數(shù)GetStatisDataEx(DataSource,,VarName, StartTime,,TimeSpan,, Flag,Time)或GetStatisData(Var, Year, Month, Day, Hour, TimeSpan, Flag,Time)得到一段時間內(nèi)的最大值,、最小值或者平均值,。
val = GetStatisDataEx("","FQ101.PV", LongTime("2007/09/04 14:30:00"), 2,0,,strTime) 示例中Val變量可以得到FQ101.pv值在2007年9月4日14點30分起2個小時內(nèi)的平均值,。這里要注意的是,GetStatisData 和GetStatisDataEx函數(shù)會自動過濾掉壞值,。在使用統(tǒng)計函數(shù)時,,要確保對應的點在組態(tài)時選擇上統(tǒng)計設置,,如圖所示:
此外還要注意的是,由于紫金橋系統(tǒng)是每小時自動統(tǒng)計下歷史記錄,,對于剛保存的歷史記錄,,比如1小時內(nèi)的歷史值,通過統(tǒng)計函數(shù)可能無法得到最新的統(tǒng)計值,。如果需要得到即時的統(tǒng)計值,,需要借助紫金橋軟件提供的SPC歷史組件進行統(tǒng)計。關于該組件的一些操作可以參看紫金橋軟件相關幫助文檔,。
3 讀取批量歷史
讀取批量歷史通常以報表的形式顯示出來,。對于歷史報表,依據(jù)不同的標準有不同的分法,,按照行數(shù)區(qū)分可以分為固定行列和不固定行數(shù),按顯示的類型可以分為統(tǒng)計和非統(tǒng)計歷史報表,。所謂統(tǒng)計報表通常是對一些累加值的點進行統(tǒng)計,,比如最大值、最小值,、或者平均值等,,非統(tǒng)計報表就是直接查詢某時刻的歷史值。不同情況下具體實現(xiàn)的方法也各不同,,這里僅就筆者熟悉的方法進行簡述,。
行數(shù)固定的非統(tǒng)計歷史報表
對于需要獲取某段時間內(nèi),固定時間間隔" title="時間間隔">時間間隔的歷史記錄,,通常其行數(shù)是固定的,,比如需要對一天內(nèi)的整點數(shù)值采樣,其行數(shù)是24,,時間間隔一小時,。這種情況下,使用自由報表的“取批量歷史”功能最為簡單,。具體操作方式簡述如下:
首先選中自由報表中需要顯示歷史記錄的一列,,然后點擊自由報表工具欄中右側的公式選擇按鈕,如圖所示:
點擊后選擇“取批量歷史”,,如圖所示:
系統(tǒng)彈出對話框:
在“數(shù)據(jù)庫變量”中填寫所關聯(lián)的數(shù)據(jù)點,,比如“A1.pv”,根據(jù)實際情況設定“采集個數(shù)”和“時間間隔”,,“采集個數(shù)”不能填寫為變量,。這里的“時間表達式”是指批量歷史中首個采集點的時間,可以是一個整形變量,,其值是前文中提到的1970年1月1日08:00時過去的秒數(shù),。
優(yōu)點:通過取批量歷史的功能,,可以輕松的獲取某點采集個數(shù)固定,時間間隔固定的歷史記錄,。
缺點:無法實現(xiàn)采集時間不固定,、采集歷史記錄個數(shù)不固定的要求,無法采集統(tǒng)計值,。
小技巧:通常顯示歷史記錄的時候,,往往需要在另一行顯示該記錄相對應的時間,可以選擇一列,,將該列的輸入輸出設置為“日期和時間”,,然后將該列關聯(lián)和歷史值對應的秒數(shù)即可。
行數(shù)不固定的非統(tǒng)計報表
有時需要用戶自行設置歷史記錄查詢的開始時間和結束時間,,查詢的歷史記錄的間隔時間,,這時往往需要借助歷史數(shù)據(jù)對象來獲取記錄。
在紫金橋的圖庫中“歷史數(shù)據(jù)”選擇“歷史數(shù)據(jù)對象”,,如圖所示:
將其拖拽置窗口,,系統(tǒng)自動增加一歷史數(shù)據(jù)對象,如圖所示:
雙擊該對象,,可以在屬性對話框中進行參數(shù)設置,,如圖所示:
該組件通常運行時是隱藏的??梢栽趯傩栽O置對話框中增加所需查詢的歷史點(可以同時查詢多個),。通過點擊“事件腳本”,可以在此編寫所需的腳本語句,,如圖所示:
通常是通過按鈕等事件調(diào)用歷史數(shù)據(jù)對象的Start(BeginTime, Cycle, Count)函數(shù),,通過該函數(shù)可以設置查詢的開始時間,查詢的時間周期和查詢的歷史個數(shù),,并進行查詢,。當查詢結束后,會執(zhí)行“檢索完成時”腳本,。一般在“檢索完成時”的腳本中通過一個循環(huán)語句,,把查詢到的結果更新到自由報表中。例如腳本:
num=#his.GetColCount();//得到查詢的行數(shù)
for k=1to num+1step1
#report.settxt(1,k+1,#his.GetTimeText(k-1,0));//得到時間
#report.settxt(2,k+1,#his.GetCellText(0,k-1));//得到變量1的歷史值
#report.settxt(3,k+1,#his.GetCellText(1,k-1));//得到變量2的歷史值
Next
該腳本首先獲得歷史數(shù)據(jù)對象查詢的數(shù)據(jù)行數(shù),,然后逐行賦值給自由報表中指定的單元格,。關于該組件的更詳細操作可以參看紫金橋軟件的說明書。
優(yōu)點:可以方便的采集行數(shù)固定或不固定的歷史值,。
統(tǒng)計報表
對于有些報表,,需要統(tǒng)計一些歷史值,比如一段時間的最大值,、最小值,、平均值或者某段時間內(nèi),,歷史值的最大值和最小值的差值(比如產(chǎn)量)。這類報表可以通過SPC控件或者歷史摘要控件進行讀取統(tǒng)計值,,然后再寫入自由報表中,,也可以直接使用統(tǒng)計函數(shù)獲取統(tǒng)計值。關于SPC控件和歷史摘要控件的操作方法和上文中提到了歷史數(shù)據(jù)對象比較類似,,具體內(nèi)容和相關函數(shù)可以參看紫金橋軟件說明書,。其中SPC控件可以從任意時段的歷史數(shù)據(jù)中進行抽樣統(tǒng)計,進行SPC統(tǒng)計的點是否選擇了“是否統(tǒng)計”都不影響SPC分析,;而歷史摘要控件選擇的是該點的統(tǒng)計值,,進行歷史摘要的點必須選擇“統(tǒng)計”,而統(tǒng)計往往是以小時為單位的,,所以相對于SPC控件,,摘要控件統(tǒng)計的結果更為準確,但是時間跨度需要大于一小時,。
這里要說明的是,,對于一些累加的值而言,比如產(chǎn)量等,,有時需要得到一段時間內(nèi)的差值,有些用戶往往會用結束時刻的歷史值減去開始時刻的歷史值,,這種做法是有隱患的,,因為開始時刻或者結束時刻系統(tǒng)可能處于未運行狀態(tài),這時,,歷史值會是壞值-9999,。所以建議的做法是選取這段時間內(nèi)的最大統(tǒng)計值減去這段時間內(nèi)的最小統(tǒng)計值(系統(tǒng)會自動過濾壞值),不過獲取統(tǒng)計值的速度會比獲取歷史值的速度稍慢一點,,如果該段時間跨度很大,,可以適當縮小統(tǒng)計值的時間范圍。
其他歷史報表
有時可能需要統(tǒng)計一些離散的歷史值,,比如在檢測行業(yè),,每次測量的時間間隔可能不固定,測量次數(shù)可能也不確定,,這時想查詢歷史檢測記錄,,使用前面提到的方法都難以實現(xiàn)。這里推薦兩種做法:
• 設置一個標記點,,該標記點使用變化率保存歷史記錄,,每測量結束后,都改變一次標記點的值,,其他測量值同樣保持歷史記錄,,查詢時使用“取全部歷史數(shù)據(jù)對象”組件(在圖庫中“歷史數(shù)據(jù)”中調(diào)用),,如圖所示:
通過該組件可以查詢這個標記點指定范圍內(nèi)的所有歷史記錄,同時可以查詢到該時刻時其他測量值的歷史值,。比如,,工程中有A1和A2兩個位號,A1是標記點,,現(xiàn)在希望查詢A1的在當天的所有歷史數(shù)據(jù),。比如查到的結果是12:23:18.102時刻有一個歷史數(shù)據(jù),18:43:25.358時刻有一個歷史數(shù)據(jù),。這時希望同時查詢A2在12:23:18.102時刻和18:43:25.358時刻的歷史數(shù)據(jù),。可以看到,,報表的前3列分別是時間,、毫秒和查詢的位號的數(shù)據(jù),可以在后面增加一列,,比如A2.PV,,見上圖。并在下面輸入如下的腳本=GetHisData2(A2.PV, Val(1,$R), Val(2,$R)) ,。這段腳本的意義是取A2.PV的歷史數(shù)據(jù),,其中時間采用左側第一列的時間,毫秒數(shù)采用左側第二列的時間,。當組件查詢到A1.PV的歷史數(shù)據(jù)的時候,,會自動地增加報表的行數(shù)來存放相應的數(shù)據(jù)。同時也會自動地復制上面輸入的腳本,,這樣后面的列就能顯示A2.PV的相應時刻的歷史數(shù)據(jù)了,。
優(yōu)點:無需借助關系數(shù)據(jù)庫,即可查詢離散的無規(guī)律變化的歷史記錄,;
缺點:受過程數(shù)據(jù)庫自身的局限,,無法保存字符型歷史記錄。
• 每次測量結束后,,將測量數(shù)據(jù)保存到關系數(shù)據(jù)庫中,,然后通過自由報表查詢關系數(shù)據(jù)庫中的歷史記錄。
優(yōu)點:可以方便的保存字符型或非字符型的離散歷史記錄,;
缺點:需要關系庫的支持,;
本文簡述了讀取紫金橋軟件歷史數(shù)據(jù)庫的三種方式:曲線、函數(shù),、報表,,并詳細介紹了各種情況下使用報表讀取歷史數(shù)據(jù)的不同操作方法,當然具體操作中,還有更多其他的方法可以選擇,。希望以上介紹能對各位操作紫金橋軟件有所幫助,,也希望起到拋磚引玉的作用,歡迎提出更好操作方法,,彼此討論提高,。