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