隨著組態(tài)軟件在各行業(yè)的應用越來越廣泛,,了解和使用組態(tài)軟件的人越來越多,,同時對組態(tài)軟件各方面的功能要求也越來越高,。
一般,,組態(tài)軟件在實際應用中都會用到幾個基本功能,,比如數(shù)據(jù)采集,、實時數(shù)據(jù)展示,、報警,、報表等,,而歷史數(shù)據(jù)存儲更是必不可少,。通過自動記錄下系統(tǒng)運行時的數(shù)據(jù)變化,可以對以后的事故分析,,趨勢統(tǒng)計提供必要的數(shù)據(jù)來源,,大大提高系統(tǒng)運行的穩(wěn)定性,減少出現(xiàn)生產(chǎn)事故的機會,。
目前市面上組態(tài)軟件種類繁多,,采用的存儲策略不盡相同,有采用外部數(shù)據(jù)庫作為歷史庫,,這種方式具有功能強大,、運行穩(wěn)定的優(yōu)點,但缺點也非常很明顯,,運行速度慢,、占用空間大、軟件集成性不好等,。因此很多公司都自己開發(fā)歷史數(shù)據(jù)存儲功能,,開發(fā)的歷史庫不僅具有速度快、占用空間小的優(yōu)點,,而且保密性較好,,不像通用數(shù)據(jù)庫可以隨便打開。
世紀星組態(tài)軟件也是使用獨立開發(fā)的歷史庫,。為保證歷史數(shù)據(jù)存儲速度快,、占用空間小,世紀星組態(tài)軟件主要采用以下三種方案,。
第一種是盡量減少數(shù)據(jù)存儲量,,從根本上降低對歷史數(shù)據(jù)庫的要求。
組態(tài)軟件記錄的數(shù)據(jù)都是現(xiàn)場采集上來的各種參量,,比如溫度,、壓力等,需要保存的信息包括變量標識,、值和精確到毫秒的時間,。為達到減小存儲量的目的,,世紀星采用兩個方法:
一是以存儲變量ID代替存儲變量名,這是顯而易見的道理,,變量ID以4個字節(jié)表示,,而變量名通常都會超過4個字節(jié)。在盡量減小存儲空間的前提下,,當然要選擇以變量ID代替變量名進行保存,。
二就是記錄時間的方法,每一個變量都需要記錄一個精確到毫秒的時間,。時間的存儲也可以有多種方式,,以字符串方式保存、以一個長整數(shù)來保存等等,。有些人可能不清楚如何以一個長整數(shù)來保存時間,,只需要一個特定的換算方法換算一下即可。當然,,以長整數(shù)來保存時間會減小存儲量,,這里還有一個問題,一個長整數(shù)是無法保存包括年,、月,、日、小時,、分鐘,、秒、毫秒所有這些值,,在世紀星中采用的辦法是以日期作為歷史數(shù)據(jù)文件的名稱,,這樣在文件中的時間只要表示小時、分鐘,、秒,、毫秒就沒問題了。
第二種就是建立索引,。這個方法在通用數(shù)據(jù)庫中也被廣泛的使用,,但由于工控行業(yè)有其自己的特殊性,比如數(shù)據(jù)都是定時存儲,,數(shù)據(jù)在文件中的位置順序有規(guī)律,,因此這種建立索引的方法更能發(fā)揮巨大的作用。
世紀星組態(tài)軟件的工程中保存兩種類型的歷史文件,,一種以IDX結尾的索引文件,,一種以LGH結尾的數(shù)據(jù)文件。在IDX文件中以分鐘為最小單元,,記錄歷史數(shù)據(jù)在LGH文件中的確定位置,。查詢數(shù)據(jù)時,,根據(jù)使用者提供的查詢時間,能夠很快的在IDX文件中確定數(shù)據(jù)的確切位置,,無視LGH數(shù)據(jù)文件的大小,,達到快速查詢的目的。
下圖是數(shù)據(jù)查詢時的示意圖:
最后一個策略就是數(shù)據(jù)壓縮,。工控行業(yè)有時候需要保存的數(shù)據(jù)量很大,有時變化速率在100毫秒以內(nèi),,而且需要保存的時間很長,,為保存這些數(shù)據(jù),同時確保占用空間小,,就必須采用數(shù)據(jù)壓縮,。世紀星采用zlib庫提供的壓縮算法,zlib是一種可以免費使用的壓縮庫,,壓縮效果好,,解壓速度快。是目前比較成熟的數(shù)據(jù)壓縮方法,。
采用這三種方法之后,,效果顯而易見。經(jīng)過測試,,包含1w個變量的工程,,其中4k個變量每200毫秒記錄一次,在查詢10分鐘的數(shù)據(jù)時所用時間不超過200毫秒,;查詢4個小時的數(shù)據(jù),,查詢時間不超過2秒。
在實際應用中也會發(fā)現(xiàn)一些不足,,比如工程中變量很多,,要求存儲的數(shù)據(jù)量很大,這時歷史文件會很大,,即使有索引文件,,在查詢時的速度也會降低。改進的方法是可以把一個文件分成多個,,比如變量ID小于5000的數(shù)據(jù)保存成一個文件,,變量ID在5000到10000之間的保存成一個文件,以此類推,,這樣就可以減小文件的規(guī)模,,從而提高查詢速度。