在(zai)工(gong)業(ye)控(kong)製(zhi)中(zhong),常(chang)常(chang)要(yao)從(cong)一(yi)些(xie)數(shu)據(ju)的(de)曆(li)史(shi)趨(qu)勢(shi)中(zhong)分(fen)析(xi)問(wen)題(ti)和(he)發(fa)現(xian)問(wen)題(ti)。紫(zi)金(jin)橋(qiao)實(shi)時(shi)數(shu)據(ju)庫(ku)支(zhi)持(chi)曆(li)史(shi)數(shu)據(ju)的(de)快(kuai)速(su)保(bao)存(cun)和(he)檢(jian)索(suo),可(ke)以(yi)按(an)照(zhao)一(yi)定(ding)的(de)條(tiao)件(jian)把(ba)數(shu)據(ju)保(bao)存(cun)到(dao)曆(li)史(shi)庫(ku)中(zhong),用(yong)戶(hu)需(xu)要(yao)時(shi)可(ke)隨(sui)時(shi)訪(fang)問(wen)。
曆(li)史(shi)數(shu)據(ju)一(yi)般(ban)是(shi)點(dian)的(de)某(mou)個(ge)參(can)數(shu)在(zai)過(guo)去(qu)某(mou)一(yi)時(shi)刻(ke)的(de)瞬(shun)時(shi)值(zhi),是(shi)與(yu)時(shi)間(jian)有(you)關(guan)的(de)數(shu)據(ju),每(mei)一(yi)個(ge)曆(li)史(shi)數(shu)據(ju)記(ji)錄(lu)上(shang)都(dou)有(you)一(yi)個(ge)時(shi)間(jian)戳(chuo),記(ji)錄(lu)曆(li)史(shi)數(shu)據(ju)的(de)采(cai)樣(yang)時(shi)間(jian)。位(wei)號(hao)是(shi)否(fou)保(bao)存(cun)曆(li)史(shi)數(shu)據(ju),曆(li)史(shi)數(shu)據(ju)的(de)保(bao)存(cun)條(tiao)件(jian)都(dou)由(you)用(yong)戶(hu)進(jin)行(xing)數(shu)據(ju)組(zu)態(tai)時(shi)決(jue)定(ding)。實(shi)時(shi)數(shu)據(ju)庫(ku)按(an)照(zhao)用(yong)戶(hu)指(zhi)定(ding)的(de)采(cai)樣(yang)條(tiao)件(jian)在(zai)庫(ku)中(zhong)進(jin)行(xing)采(cai)樣(yang),如(ru)果(guo)采(cai)樣(yang)的(de)條(tiao)件(jian)滿(man)足(zu),就(jiu)將(jiang)采(cai)樣(yang)數(shu)據(ju)加(jia)上(shang)時(shi)間(jian)戳(chuo),記(ji)入(ru)曆(li)史(shi)庫(ku)中(zhong)。
曆li史shi數shu據ju庫ku是shi磁ci盤pan文wen件jian,為wei了le防fang止zhi頻pin繁fan的de寫xie磁ci盤pan,紫zi金jin橋qiao實shi時shi數shu據ju庫ku在zai內nei存cun中zhong開kai辟pi了le曆li史shi數shu據ju緩huan衝chong區qu。曆li史shi數shu據ju從cong實shi時shi數shu據ju庫ku中zhong采cai集ji以yi後hou,首shou先xian放fang在zai內nei存cun緩huan衝chong區qu中zhong,當dang存cun盤pan時shi間jian到dao達da或huo緩huan衝chong區qu已yi滿man時shi一yi次ci性xing的de寫xie入ru磁ci盤pan曆li史shi庫ku文wen件jian。用yong戶hu訪fang問wen曆li史shi數shu據ju時shi,係xi統tong首shou先xian檢jian查zha曆li史shi數shu據ju緩huan衝chong區qu中zhong是shi否fou有you用yong戶hu需xu要yao的de曆li史shi數shu據ju,如ru果guo沒mei有you然ran後hou在zai檢jian查zha曆li史shi數shu據ju庫ku文wen件jian中zhong是shi否fou有you用yong戶hu需xu要yao的de曆li史shi數shu據ju。曆li史shi數shu據ju緩huan衝chong區qu的de設she立li大da大da加jia快kuai了le曆li史shi數shu據ju的de存cun取qu速su度du。
紫金橋曆史數據庫具有如下特點:
u 紫金橋實時數據庫能夠將任何點的任何參數存盤。
u 無論數據來源於現場設備、人工錄入數據、還是計算結果都能存入曆史數據庫。
u 具有先進的數據壓縮算法,能夠充分利用有限的盤空間存儲長期的曆史數據
u 具有曆史插值功能。
對(dui)於(yu)某(mou)些(xie)特(te)定(ding)的(de)應(ying)用(yong),需(xu)要(yao)修(xiu)改(gai)曆(li)史(shi)數(shu)據(ju),紫(zi)金(jin)橋(qiao)實(shi)時(shi)數(shu)據(ju)庫(ku)沒(mei)有(you)提(ti)供(gong)相(xiang)關(guan)修(xiu)改(gai)曆(li)史(shi)數(shu)據(ju)的(de)方(fang)法(fa),但(dan)通(tong)過(guo)上(shang)述(shu)的(de)曆(li)史(shi)插(cha)值(zhi)功(gong)能(neng),可(ke)以(yi)完(wan)成(cheng)曆(li)史(shi)數(shu)據(ju)修(xiu)改(gai)的(de)目(mu)的(de)。下(xia)麵(mian)通(tong)過(guo)一(yi)個(ge)簡(jian)單(dan)的(de)示(shi)例(li),介(jie)紹(shao)下(xia)曆(li)史(shi)數(shu)據(ju)的(de)修(xiu)改(gai)。
在工程中新建一個窗口,添加如下組件:

為了能用腳本調用各組件的功能,將各組件命名為:
|
組件 |
名稱 |
|
取曆史組件 |
His |
|
左側下拉框 |
tagSel |
|
起始時間 |
BegTime |
|
時間範圍 |
TimeLen |
|
左側報表 |
list |
|
右側下拉框 |
tagSel2 |
|
右側報表 |
newList |
設計思路:
1.查詢:tongguoxialakuangxuanzeyaoxiugaideshujukudian,dianjizhaxunanniushi,yongqishishijianhejieshushijianzujiandeshezhi,tongguoququlishizujianzhaxungaiduanshijianfanweineidelishishuju,ranhoujiangshujuxianshizaibaobiaozhong。dianjidaochudaoExcel按鈕,將報表中的數據(包括時間和數值)導出至Excel中。
2.修改:利用Excel打開保存的文件,修改數據。
3.插值:選擇對應的數據庫點,點擊選擇Excel文件按鈕,加載Excel修改後的文件,將數據顯示在報表中,點擊插入曆史數據庫按鈕,完成曆史數據的插入。
實現方法:
1.將要修改的點在添加至下拉框中。
2.在查詢按鈕中添加自定義動作,如下:
string strCurTag = #tagSel.GetCurItemText();
strCurTag = StrTrimLeft(strCurTag);
strCurTag = StrTrimRight(strCurTag);
if StrInStr(StrLower(strCurTag),".pv",0) < 0 then
strCurTag = strCurTag+".pv";
endif
#his.FindHisEx(strCurTag,#BegTime.Time,#TimeLen.Time); //利用取曆史組件的FindHisEx函數,查詢某一數據庫點在指定時間範圍內的曆史數據。
3.將取曆史組件中的數據導出至報表中,設置取曆史組件的數據刷新動作為:
//調整報表的顯示行數,如果不足20行,則顯示20行,大於則顯示實際的行數
#list.DeleteRow(21,#list.RowCount());
int nListCnt = #list.RowCount();
int nDataCnt = #his.GetDataCount();
#list.ClearRowData(1,nListCnt);
if nDataCnt > nListCnt then
#list.AddRow(nDataCnt-nlistCnt);
Endif
//通過for循環將數據添加至報表中
int i=0;
int nTime = 0;
int nMS = 0;
real rData = 0;
for i=1 to nDataCnt+1
nTime = #his.GetDataTime(i);
#list.SetVal(1,i,nTime);
nMs = #his.GetDataMS(i);
#list.SetVal(2,i,nMs);
rData = #his.GetData(i);
#list.SetVal(3,i,rData);
Next
4.導出Excel按鈕腳本,如下:
#list.SaveAsEx("",0);
利用報表的SaveAsEx函數實現報表數據導出Exce文件功能。
5.選擇Exce按鈕腳本,如下:
#newList.LoadAsEx("",0);
6.插入曆史數據庫腳本,如下:
int nCnt = #hisList.RowCount();
int i=0;
string strCurTag = #tagSel2.GetCurItemText();
strCurTag = StrTrimLeft(strCurTag);
strCurTag = StrTrimRight(strCurTag);
if StrInStr(StrLower(strCurTag),".pv",0) < 0 then
strCurTag = strCurTag+".pv";
endif
for i=1 to nCnt+1
InsertHisDataEx("",strCurTag,#hisList.Val(3,i),#hisList.Val(1,i),#hisList.Val(2,i));
Next
利用InsertHisDataEx函數,實現曆史數據的插值,如果該時間戳已經存在,數據庫自動替換該值。
總結:利(li)用(yong)該(gai)功(gong)能(neng)可(ke)以(yi)方(fang)便(bian)的(de)完(wan)成(cheng)曆(li)史(shi)數(shu)據(ju)的(de)修(xiu)改(gai),紫(zi)金(jin)橋(qiao)實(shi)時(shi)數(shu)據(ju)庫(ku)對(dui)曆(li)史(shi)數(shu)據(ju)的(de)操(cao)作(zuo)提(ti)供(gong)了(le)靈(ling)活(huo)的(de)操(cao)作(zuo)手(shou)段(duan)。曆(li)史(shi)數(shu)據(ju)保(bao)存(cun)對(dui)數(shu)據(ju)完(wan)整(zheng)性(xing)和(he)數(shu)據(ju)的(de)壓(ya)縮(suo)比(bi)上(shang)有(you)較(jiao)好(hao)的(de)兼(jian)顧(gu)平(ping)衡(heng),數(shu)據(ju)保(bao)存(cun)結(jie)構(gou)先(xian)進(jin)合(he)理(li),使(shi)得(de)在(zai)檢(jian)索(suo)有(you)較(jiao)高(gao)的(de)效(xiao)率(lv),係(xi)統(tong)提(ti)供(gong)多(duo)種(zhong)數(shu)據(ju)查(zha)詢(xun)手(shou)段(duan),包(bao)括(kuo)單(dan)點(dian)數(shu)據(ju)查(zha)詢(xun),批(pi)量(liang)數(shu)據(ju)查(zha)詢(xun),指(zhi)定(ding)時(shi)間(jian)格(ge)式(shi)查(zha)詢(xun)、任意時間段數據查詢等都有對應的組件。曆史數據的處理是實時數據庫的重要性能指標,紫金橋實時數據庫有著獨到的優勢。