在(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、任意時間段數據查詢等都有對應的組件。曆史數據的處理是實時數據庫的重要性能指標,紫金橋實時數據庫有著獨到的優勢。