|
紫zi金jin橋qiao軟ruan件jian自zi帶dai了le過guo程cheng數shu據ju庫ku,可ke以yi高gao效xiao的de保bao存cun相xiang關guan數shu據ju點dian的de曆li史shi記ji錄lu,同tong時shi提ti供gong了le豐feng富fu的de方fang法fa讀du取qu所suo需xu的de曆li史shi記ji錄lu。筆bi者zhe使shi用yong紫zi金jin橋qiao做zuo了le多duo個ge工gong程cheng,僅jin就jiu個ge人ren經jing驗yan進jin行xing簡jian單dan小xiao結jie,這zhe裏li和he大da家jia分fen享xiang,還hai望wang能neng起qi到dao拋pao磚zhuan引yin玉yu的de作zuo用yong,如ru有you不bu對dui之zhi處chu,還hai望wang指zhi正zheng。
通tong過guo紫zi金jin橋qiao組zu態tai軟ruan件jian自zi身shen的de過guo程cheng數shu據ju庫ku,可ke以yi通tong過guo兩liang種zhong方fang式shi自zi動dong保bao存cun數shu據ju點dian的de曆li史shi記ji錄lu,定ding時shi保bao存cun和he變bian化hua率lv保bao存cun,定ding時shi保bao存cun適shi合he保bao存cun變bian化hua不bu是shi很hen快kuai,或huo者zhe比bi較jiao有you規gui律lv的de數shu據ju點dian,變bian化hua率lv保bao存cun的de應ying用yong範fan圍wei相xiang對dui更geng廣guang,適shi合he變bian化hua較jiao快kuai或huo者zhe較jiao慢man的de情qing形xing,這zhe裏li要yao注zhu意yi兩liang點dian內nei容rong:
- duiyudingshibaocundelishijiluyibanbuzuoyasuode,suoyibujianyiduiyujiaoduodeshujukudianshezhiweibaocunjiangejiaoduandedingshibaocun,fouzelishijiludewenjiantijihuizengjiaxiangduijiaokuai;
- 對(dui)於(yu)變(bian)化(hua)率(lv)保(bao)存(cun)的(de)數(shu)據(ju),係(xi)統(tong)會(hui)自(zi)動(dong)壓(ya)縮(suo)保(bao)存(cun),要(yao)注(zhu)意(yi)的(de)是(shi)其(qi)變(bian)化(hua)率(lv)是(shi)相(xiang)對(dui)於(yu)該(gai)點(dian)的(de)量(liang)程(cheng)而(er)言(yan)的(de),而(er)不(bu)是(shi)相(xiang)對(dui)於(yu)上(shang)次(ci)保(bao)存(cun)的(de)曆(li)史(shi)值(zhi)。數(shu)據(ju)點(dian)的(de)量(liang)程(cheng)可(ke)以(yi)在(zai)“點組態”基本參數中修改;
個(ge)人(ren)覺(jiao)得(de)過(guo)程(cheng)數(shu)據(ju)庫(ku)很(hen)適(shi)合(he)保(bao)存(cun)現(xian)場(chang)連(lian)續(xu)的(de)采(cai)集(ji)值(zhi),對(dui)於(yu)一(yi)些(xie)字(zi)符(fu)型(xing)的(de)數(shu)據(ju),可(ke)能(neng)還(hai)需(xu)要(yao)借(jie)助(zhu)關(guan)係(xi)數(shu)據(ju)庫(ku)來(lai)保(bao)留(liu)曆(li)史(shi)值(zhi)了(le)。而(er)關(guan)係(xi)數(shu)據(ju)庫(ku)在(zai)保(bao)存(cun)連(lian)續(xu)數(shu)值(zhi)方(fang)麵(mian)也(ye)遠(yuan)不(bu)如(ru)過(guo)程(cheng)數(shu)據(ju)庫(ku)方(fang)便(bian)。關(guan)於(yu)紫(zi)金(jin)橋(qiao)對(dui)關(guan)係(xi)數(shu)據(ju)庫(ku)的(de)各(ge)種(zhong)操(cao)作(zuo),筆(bi)者(zhe)將(jiang)在(zai)其(qi)它(ta)文(wen)檔(dang)中(zhong)進(jin)行(xing)說(shuo)明(ming),這(zhe)裏(li)不(bu)再(zai)贅(zhui)述(shu)。
紫金橋軟件提供了多種方式讀取曆史數據,這裏僅就一些常用的方法進行說明。一般有三種方式讀取曆史記錄,分別是:曆史曲線、讀取單點曆史、讀取批量曆史。在說明各種方式之前先要解釋下“壞值”的(de)概(gai)念(nian),數(shu)據(ju)點(dian)隻(zhi)有(you)在(zai)係(xi)統(tong)運(yun)行(xing)時(shi)才(cai)能(neng)保(bao)存(cun)曆(li)史(shi)記(ji)錄(lu),對(dui)於(yu)係(xi)統(tong)沒(mei)有(you)運(yun)行(xing)時(shi)的(de)曆(li)史(shi)值(zhi),如(ru)果(guo)該(gai)時(shi)刻(ke)早(zao)於(yu)當(dang)前(qian)時(shi)刻(ke),紫(zi)金(jin)橋(qiao)軟(ruan)件(jian)通(tong)常(chang)會(hui)賦(fu)一(yi)個(ge)壞(huai)值(zhi),-9999。而對於未到時間的曆史值可以在“係統參數”進行設置,如圖所示:

下麵簡述下讀取曆史記錄的三種操作:
1 通過曆史曲線
通過曆史曲線或者趨勢分析曲線可以直接查詢相關點的曆史值,這種方法的優點在於數據很直觀,便捷、曲線可以任意放大。
曆史曲線:

趨勢分析:

曆史曲線和趨勢分析曲線的不同在於,曆史曲線可以通過“打散單元”的操作將該組件分解,自行根據需要重新組合;而趨勢分析組件功能更強,提供了曆史曲線沒有的統計數據、全屏顯示等功能,但是不支持分解操作,不能自行組合。
2 讀取單點曆史記錄
單獨采集某點某時刻的曆史值或某段時間的統計值一般通過腳本函數實現:
- 讀取某刻曆史值一般使用三種函數:GetHisData(Var,Year,Month,Day,Hour,Minute,Second,MilliSec);
GetHisData2(Var,StartTime, MilliSec);
GetHisDataEx(DataSource, VarName ,StartTime,MilliSecond);
GetHisData和GetHisData2前者適合讀取具體時刻的曆史值,後者通過一個時間值來獲取曆史記錄,該值是一個整數,表示相對於1970年1月1日08:00時過去的秒數,這個秒數在紫金橋軟件中非常常用。實際工程中,這個秒數可以通過函數LongTime ("2026-04-08 13:25:48")得到,該函數可以自動得到某時刻過去的秒數。秒數也可以通過一些組件得到,比如起始時間組件,如圖所示:

圖中有一個起始時間組件,其下是該組件的time屬性所對應的相對於1970/1/1/08:00:00 過去的秒數。比如該組件被命名為EndTime,在腳本中通過#EndTime.time即可得到相應的秒數。
- 讀取某段時間內的統計值可以通過函數GetStatisDataEx(DataSource,VarName, StartTime,TimeSpan, Flag,Time)或GetStatisData(Var, Year, Month, Day, Hour, TimeSpan, Flag,Time)得到一段時間內的最大值、最小值或者平均值。
val = GetStatisDataEx("","FQ101.PV", LongTime("2026-04-08 13:25:48"), 2,0,strTime) 示例中Val變量可以得到FQ101.pv值在2007年9月4日14點30分起2個小時內的平均值。這裏要注意的是,GetStatisData 和GetStatisDataEx函數會自動過濾掉壞值。在使用統計函數時,要確保對應的點在組態時選擇上統計設置,如圖所示:

此外還要注意的是,由於紫金橋係統是每小時自動統計下曆史記錄,對於剛保存的曆史記錄,比如1小時內的曆史值,通過統計函數可能無法得到最新的統計值。如果需要得到即時的統計值,需要借助紫金橋軟件提供的SPC曆史組件進行統計。關於該組件的一些操作可以參看紫金橋軟件相關幫助文檔。
3 讀取批量曆史
duqupilianglishitongchangyibaobiaodexingshixianshichulai。duiyulishibaobiao,yijubutongdebiaozhunyoubutongdefenfa,anzhaoxingshuqufenkeyifenweigudingxingliehebugudingxingshu,anxianshideleixingkeyifenweitongjihefeitongjilishibaobiao。suoweitongjibaobiaotongchangshiduiyixieleijiazhidedianjinxingtongji,biruzuidazhi、最小值、或者平均值等,非統計報表就是直接查詢某時刻的曆史值。不同情況下具體實現的方法也各不同,這裏僅就筆者熟悉的方法進行簡述。
對於需要獲取某段時間內,固定時間間隔的曆史記錄,通常其行數是固定的,比如需要對一天內的整點數值采樣,其行數是24,時間間隔一小時。這種情況下,使用自由報表的“取批量曆史”功能最為簡單。具體操作方式簡述如下:
首先選中自由報表中需要顯示曆史記錄的一列,然後點擊自由報表工具欄中右側的公式選擇按鈕,如圖所示:

點擊後選擇“取批量曆史”,如圖所示:

係統彈出對話框:

在“數據庫變量”中填寫所關聯的數據點,比如“A1.pv”,根據實際情況設定“采集個數”和“時間間隔”,“采集個數”不能填寫為變量。這裏的“時間表達式”是指批量曆史中首個采集點的時間,可以是一個整形變量,其值是前文中提到的1970年1月1日08:00時過去的秒數。
優點:通過取批量曆史的功能,可以輕鬆的獲取某點采集個數固定,時間間隔固定的曆史記錄。
缺點:無法實現采集時間不固定、采集曆史記錄個數不固定的要求,無法采集統計值。
小技巧:通常顯示曆史記錄的時候,往往需要在另一行顯示該記錄相對應的時間,可以選擇一列,將該列的輸入輸出設置為“日期和時間”,然後將該列關聯和曆史值對應的秒數即可。
youshixuyaoyonghuzixingshezhilishijiluzhaxundekaishishijianhejieshushijian,zhaxundelishijiludejiangeshijian,zheshiwangwangxuyaojiezhulishishujuduixianglaihuoqujilu。
在紫金橋的圖庫中“曆史數據”選擇“曆史數據對象”,如圖所示:

將其拖拽置窗口,係統自動增加一曆史數據對象,如圖所示:

雙擊該對象,可以在屬性對話框中進行參數設置,如圖所示:

該組件通常運行時是隱藏的。可以在屬性設置對話框中增加所需查詢的曆史點(可以同時查詢多個)。通過點擊“事件腳本”,可以在此編寫所需的腳本語句,如圖所示:

通常是通過按鈕等事件調用曆史數據對象的Start(BeginTime, Cycle, Count)函數,通過該函數可以設置查詢的開始時間,查詢的時間周期和查詢的曆史個數,並進行查詢。當查詢結束後,會執行“檢索完成時”腳本。一般在“檢索完成時”的腳本中通過一個循環語句,把查詢到的結果更新到自由報表中。例如腳本:
num=#his.GetColCount();//得到查詢的行數
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
該(gai)腳(jiao)本(ben)首(shou)先(xian)獲(huo)得(de)曆(li)史(shi)數(shu)據(ju)對(dui)象(xiang)查(zha)詢(xun)的(de)數(shu)據(ju)行(xing)數(shu),然(ran)後(hou)逐(zhu)行(xing)賦(fu)值(zhi)給(gei)自(zi)由(you)報(bao)表(biao)中(zhong)指(zhi)定(ding)的(de)單(dan)元(yuan)格(ge)。關(guan)於(yu)該(gai)組(zu)件(jian)的(de)更(geng)詳(xiang)細(xi)操(cao)作(zuo)可(ke)以(yi)參(can)看(kan)紫(zi)金(jin)橋(qiao)軟(ruan)件(jian)的(de)說(shuo)明(ming)書(shu)。
優點:可以方便的采集行數固定或不固定的曆史值。
對於有些報表,需要統計一些曆史值,比如一段時間的最大值、最小值、平均值或者某段時間內,曆史值的最大值和最小值的差值(比如產量)。這類報表可以通過SPC控件或者曆史摘要控件進行讀取統計值,然後再寫入自由報表中,也可以直接使用統計函數獲取統計值。關於SPC控件和曆史摘要控件的操作方法和上文中提到了曆史數據對象比較類似,具體內容和相關函數可以參看紫金橋軟件說明書。其中SPC控件可以從任意時段的曆史數據中進行抽樣統計,進行SPC統計的點是否選擇了“是否統計”都不影響SPC分析;而曆史摘要控件選擇的是該點的統計值,進行曆史摘要的點必須選擇“統計”,而統計往往是以小時為單位的,所以相對於SPC控件,摘要控件統計的結果更為準確,但是時間跨度需要大於一小時。
這(zhe)裏(li)要(yao)說(shuo)明(ming)的(de)是(shi),對(dui)於(yu)一(yi)些(xie)累(lei)加(jia)的(de)值(zhi)而(er)言(yan),比(bi)如(ru)產(chan)量(liang)等(deng),有(you)時(shi)需(xu)要(yao)得(de)到(dao)一(yi)段(duan)時(shi)間(jian)內(nei)的(de)差(cha)值(zhi),有(you)些(xie)用(yong)戶(hu)往(wang)往(wang)會(hui)用(yong)結(jie)束(shu)時(shi)刻(ke)的(de)曆(li)史(shi)值(zhi)減(jian)去(qu)開(kai)始(shi)時(shi)刻(ke)的(de)曆(li)史(shi)值(zhi),這(zhe)種(zhong)做(zuo)法(fa)是(shi)有(you)隱(yin)患(huan)的(de),因(yin)為(wei)開(kai)始(shi)時(shi)刻(ke)或(huo)者(zhe)結(jie)束(shu)時(shi)刻(ke)係(xi)統(tong)可(ke)能(neng)處(chu)於(yu)未(wei)運(yun)行(xing)狀(zhuang)態(tai),這(zhe)時(shi),曆(li)史(shi)值(zhi)會(hui)是(shi)壞(huai)值(zhi)-9999。所以建議的做法是選取這段時間內的最大統計值減去這段時間內的最小統計值(係統會自動過濾壞值),不過獲取統計值的速度會比獲取曆史值的速度稍慢一點,如果該段時間跨度很大,可以適當縮小統計值的時間範圍。
youshikenengxuyaotongjiyixielisandelishizhi,biruzaijiancexingye,meiciceliangdeshijianjiangekenengbuguding,celiangcishukenengyebuqueding,zheshixiangzhaxunlishijiancejilu,shiyongqianmiantidaodefangfadounanyishixian。zhelituijianliangzhongzuofa:
- 設(she)置(zhi)一(yi)個(ge)標(biao)記(ji)點(dian),該(gai)標(biao)記(ji)點(dian)使(shi)用(yong)變(bian)化(hua)率(lv)保(bao)存(cun)曆(li)史(shi)記(ji)錄(lu),每(mei)測(ce)量(liang)結(jie)束(shu)後(hou),都(dou)改(gai)變(bian)一(yi)次(ci)標(biao)記(ji)點(dian)的(de)值(zhi),其(qi)他(ta)測(ce)量(liang)值(zhi)同(tong)樣(yang)保(bao)持(chi)曆(li)史(shi)記(ji)錄(lu),查(zha)詢(xun)時(shi)使(shi)用(yong)“取全部曆史數據對象”組件(在圖庫中“曆史數據”中調用),如圖所示:

通過該組件可以查詢這個標記點指定範圍內的所有曆史記錄,同時可以查詢到該時刻時其他測量值的曆史值。比如,工程中有A1和A2兩個位號,A1是標記點,現在希望查詢A1的在當天的所有曆史數據。比如查到的結果是12:23:18.102時刻有一個曆史數據,18:43:25.358時刻有一個曆史數據。這時希望同時查詢A2在12:23:18.102時刻和18:43:25.358時刻的曆史數據。進入“取全部曆史數據”對象的報表設置界麵:
可以看到,報表的前3列分別是時間、毫秒和查詢的位號的數據,可以在後麵增加一列,比如A2.PV,見上圖。並在下麵輸入如下的腳本=GetHisData2(A2.PV, Val(1,$R), Val(2,$R)) 。這段腳本的意義是取A2.PV的曆史數據,其中時間采用左側第一列的時間,毫秒數采用左側第二列的時間。當組件查詢到A1.PV的曆史數據的時候,會自動地增加報表的行數來存放相應的數據。同時也會自動地複製上麵輸入的腳本,這樣後麵的列就能顯示A2.PV的相應時刻的曆史數據了。
優點:無需借助關係數據庫,即可查詢離散的無規律變化的曆史記錄;
缺點:受過程數據庫自身的局限,無法保存字符型曆史記錄。
- 每次測量結束後,將測量數據保存到關係數據庫中,然後通過自由報表查詢關係數據庫中的曆史記錄。
優點:可以方便的保存字符型或非字符型的離散曆史記錄;
缺點:需要關係庫的支持;
本文簡述了讀取紫金橋軟件曆史數據庫的三種方式:曲線、函數、baobiao,bingxiangxijieshaolegezhongqingkuangxiashiyongbaobiaoduqulishishujudebutongcaozuofangfa,dangranjuticaozuozhong,haiyougengduoqitadefangfakeyixuanze。xiwangyishangjieshaonengduigeweicaozuozijinqiaoruanjianyousuobangzhu,yexiwangqidaopaozhuanyinyudezuoyong,huanyingtichugenghaocaozuofangfa,bicitaoluntigao。
|