顶级欧美丰满熟妇XXXXX视频,中文字幕亚洲精品乱码,久久黑国产,中文字幕一区二区三区日韩精品 ,色九月亚洲综合网

DCS

新型DCS組態(tài)軟件實時數(shù)據(jù)庫研究和開發(fā)

ainet.cn   2012年08月04日

1 引言

  在工業(yè)企業(yè)信息化過程中,隨著關(guān)系數(shù)據(jù)庫應(yīng)用的局限性不斷被發(fā)現(xiàn),實時數(shù)據(jù)開始逐步使用。與關(guān)系數(shù)據(jù)庫相比,在工業(yè)企業(yè)中,生產(chǎn)數(shù)據(jù)的描述相對簡單,但其點數(shù)非常多,導(dǎo)致了實時數(shù)據(jù)庫和傳統(tǒng)的關(guān)系數(shù)據(jù)庫有不同的側(cè)重點。實時數(shù)據(jù)庫在快速處理大量簡單生產(chǎn)數(shù)據(jù),具有很大的優(yōu)勢。本文的工作建立在已經(jīng)搭建的基于工業(yè)以太網(wǎng)和can總線的中小型現(xiàn)場總線控制系統(tǒng)fcs(fieldbus control system)硬件平臺上,參考了開源內(nèi)存數(shù)據(jù)庫fastdb的實現(xiàn)機制,開發(fā)環(huán)境是vc++ 6.0。

2實時數(shù)據(jù)的概念和模型

  實時數(shù)據(jù)庫系統(tǒng)的功能特性與實時應(yīng)用的語義緊密相關(guān),必須首先明確其性質(zhì)與要求,進而確定rtdbs的設(shè)計目標(biāo)、功能、特性、系統(tǒng)模型。這種應(yīng)用往往有下列特性:數(shù)據(jù)時效性(最主要的區(qū)別);測點數(shù)量多(每秒內(nèi)要處理大量的數(shù)據(jù));存取速度快;數(shù)據(jù)存貯量(臨時存儲大量的數(shù)據(jù));數(shù)據(jù)之間的約束關(guān)系簡單。因此面向?qū)崟r應(yīng)用時候可以將數(shù)據(jù)庫理論中的部分功能弱化而將部分功能強化。例如,弱化表之間的關(guān)系描述;弱化了數(shù)據(jù)庫理論中的事務(wù)處理邏輯等等,舍棄了關(guān)系數(shù)據(jù)庫中的觸發(fā)器,存儲過程等高級功能,實時數(shù)據(jù)庫弱化這些功能,用以實現(xiàn)高效的數(shù)據(jù)插入和查詢功能。歷史數(shù)據(jù)庫和實時數(shù)據(jù)庫系統(tǒng)主要表現(xiàn)在數(shù)據(jù)和事務(wù)的時間特性上。一個實時數(shù)據(jù)對象可以抽象為一個三元組:d其中data為數(shù)據(jù)對象標(biāo)識,分量dv為數(shù)據(jù)的當(dāng)前狀態(tài)或值(value);dotp是數(shù)據(jù)的觀測時標(biāo)(observation timestamp),devi是數(shù)據(jù)的外部有效期(external validateinterval),即自dotp算起,dv的有效性的時間長度。具體應(yīng)用中實時數(shù)據(jù)結(jié)構(gòu)模型根據(jù)具體的設(shè)計需求,在這三元組上進行擴展,還包含其他屬性。

3 實時數(shù)據(jù)庫系統(tǒng)功能和結(jié)構(gòu)圖

  實時數(shù)據(jù)庫在系統(tǒng)中處于中樞環(huán)節(jié),數(shù)據(jù)采集、計算、傳輸、顯示和存儲都需要實時數(shù)據(jù)庫的相應(yīng)功能來支持。通過i/o采集模塊獲取的現(xiàn)場數(shù)據(jù)經(jīng)過程序解析后得到實時數(shù)據(jù)庫可以識別的位號名和過程值。在寫入實時數(shù)據(jù)庫的時候會進行量程變換、參數(shù)補償、濾波和累積等組態(tài)信息進行計算和各種報警處理,然后將采集到的數(shù)據(jù)寫入實時數(shù)據(jù)庫對應(yīng)的i/o點變量中。模擬量輸出(ao)和數(shù)字量輸出(do)在實時數(shù)據(jù)庫中經(jīng)過解析之后,生成傳輸協(xié)議指定的格式通過i/o輸出模塊發(fā)送到主控卡。以上是數(shù)據(jù)的大體流程,如果這個過程中數(shù)據(jù)結(jié)構(gòu)定義不完善,就會大大影響系統(tǒng)的效率,因此定義合理的數(shù)據(jù)結(jié)構(gòu)使數(shù)據(jù)分發(fā)過程快速地完成是提高系統(tǒng)實時性的主要方法之一。系統(tǒng)中既有現(xiàn)場控制站的i/o數(shù)據(jù),也有系統(tǒng)的內(nèi)部變量,變量類型有整型、布爾型、浮點型,為了方便處理,對所有點進行抽象,提出一個統(tǒng)一的實時數(shù)據(jù)模型,本文中實時數(shù)據(jù)對象結(jié)構(gòu)定義如下:

  class crtrecord {public:char* psztagname; //位號的名稱long tagid;

  //位號idshort tagtype; //位號類型float pv; //采樣值float pvpre;

  //上次采樣值time_t lsampletime0; //上次采樣時間time_t lsampletime;

  //本次采樣時間time_t lvalidateinterval; //數(shù)據(jù)有效期bool btransrange;

  //是否量程變換float feuhi; //量程上限float feulo; //量程下限float fpvrawlo;

  //原始據(jù)上限float fpvrawhi; //原始數(shù)據(jù)下限bool balarming;//是否處于報警狀態(tài)bool

  balarmen; //報警開關(guān)float falarmdb; //報警死區(qū)bool bhialarmen;

  //高限報警bool bhhalarmen; //高高限報警bool bllalarmen; //低低限報警bool

  bloalarmen; //低限報警float fllalarmvalue; //報警值int nllprio;

  //低低限報警級別float floalarmvalue; //低限報警值int nloprio;

  //低限報警級別float fhialarmvalue; //高限報警值int nhiprio; //高限報警級別float

  fhhalarmvalue; //高高限報警值int nhhprio; //高高限報警級別bool baccumulate;

  //累積開關(guān)int ntimecoeff; //時間系數(shù)int nunitcoeff; //單位系數(shù)bool

  bfilter; //是否濾波int nfilterconst; //濾波常數(shù)bool bsqrt;

  //是否開方int nsigcutthreshold;

  //小信號切除閾值}這樣定義的數(shù)據(jù)結(jié)構(gòu)可以方便的完成各種計算和報警操作,比如進行量程轉(zhuǎn)換直接就可以使用這個實時數(shù)據(jù)對象的量程上下限和原始數(shù)據(jù)上下限字段進行計算,模擬量位號的變化率報警也可以根據(jù)本次采樣值和上次采樣值的關(guān)系推導(dǎo)出來。監(jiān)控程序如流程圖顯示、實時趨勢圖、實時報警等要頻繁的從實時數(shù)據(jù)庫檢索實時數(shù)據(jù),因此實時數(shù)據(jù)庫要支持多線程訪問。這樣就必須處理好并發(fā)控制和事務(wù)調(diào)度,這也是設(shè)計實時數(shù)據(jù)庫的難點。實時數(shù)據(jù)庫還要提供第三方接口,可以方便和其他的程序進行通訊。圖1是組態(tài)軟件實時數(shù)據(jù)庫相關(guān)的功能和結(jié)構(gòu)圖,實時數(shù)據(jù)庫起到一個核心的作用。

4事務(wù)處理和并發(fā)控制

  事務(wù)是并發(fā)控制的基本單位,保證事務(wù)原子性、一致性、隔離性、持久性(acid)才能確保數(shù)據(jù)庫從一種狀態(tài)轉(zhuǎn)移到另一種狀態(tài)。隔離性定理表明,只要每個讀寫事務(wù)的操作對象與其他寫事務(wù)的操作對象能相互隔離,事務(wù)就可以完全隔離的并發(fā)執(zhí)行。而且在實時數(shù)據(jù)庫中事務(wù)有定時限制的特性,系統(tǒng)的正確性不僅依賴于邏輯結(jié)果,而且依賴于邏輯結(jié)果產(chǎn)生的時間,因此必須對并發(fā)操作進行合理調(diào)度。事務(wù)可串行化是實現(xiàn)事務(wù)調(diào)度的目標(biāo),嚴(yán)格的兩階段鎖兼顧并發(fā)度又可以避免死鎖,因此可以用來實現(xiàn)事務(wù)的可串行化。兩階段鎖的封鎖類型有兩種:排他鎖(exclusive locks,簡稱x鎖,又稱為寫鎖)和共享鎖(share locks,簡稱s鎖,又稱為讀鎖)。兩階段鎖是指事務(wù)的執(zhí)行分兩個過程:第一階段是獲得封鎖,在這個階段,事務(wù)可以申請任何數(shù)據(jù)項上的任何類型的鎖,但是不釋放任何鎖,這一階段又稱為擴展階段。第二階段是釋放封鎖,事務(wù)釋放他申請的全部封鎖,不再申請任何封鎖,這一階段又稱為收縮階段。封鎖序列如圖2所示。

  圖2 封鎖序列

  達到最大的事務(wù)吞吐量和最短的事務(wù)平均響應(yīng)時間是實時數(shù)據(jù)庫追求的目標(biāo),合理設(shè)計鎖粒度可以提高數(shù)據(jù)庫并發(fā)的效率。在實時內(nèi)存數(shù)據(jù)庫中,事務(wù)獲得鎖的開銷與處理數(shù)據(jù)的開銷相當(dāng),所以鎖開銷對事務(wù)運行的速度的影響不可忽視。使用細粒度鎖可以提高并發(fā)性,但在沖突較低時,并發(fā)能力對吞吐量幾乎沒有影響。如果這時沖突較低,將細粒度鎖換成粗粒度鎖會減少鎖開銷。所以,為了在保證并發(fā)度的前提下減少事務(wù)加鎖開銷,應(yīng)該盡量使用粗粒度的鎖,本文就是采用粗粒度鎖,加鎖和解鎖都是數(shù)據(jù)庫級別。參考fastdb的實現(xiàn)方式,在本程序設(shè)計中數(shù)據(jù)庫的訪問方式有如下三種情形,使用一個共用體來表示:enum dbaccesstype {dbreadonly, dballaccess,dbconcurrentread}。如果某個進程使用dballaccess模式訪問數(shù)據(jù)庫,如果該進程使用了insert、update、delete等修改數(shù)據(jù)的操作,其他進程訪問該庫的所有操作(包括select)都會被阻塞,直到該操作提交或回滾。如果使用dbconcurrentupdate模式訪問數(shù)據(jù)庫,當(dāng)某個進程對數(shù)據(jù)進行寫操作,同時另外的進程使用dbreadonly或者dbconcurrentread讀取數(shù)據(jù),不會出現(xiàn)阻塞的情況。

5 實時數(shù)據(jù)庫的接口實現(xiàn)

  組態(tài)軟件的實時數(shù)據(jù)庫要具有開放的第三方接口,可以提供給其他的程序進行數(shù)據(jù)的讀寫,例如可以和opc server進行通訊。傳統(tǒng)的數(shù)據(jù)庫接口比如odbc和ado都是面向關(guān)系型數(shù)據(jù)庫的,對于實時內(nèi)存數(shù)據(jù)庫不再適合。dde接口雖然常用于以前產(chǎn)品的數(shù)據(jù)交換中,但是速度是個問題。因此采用com接口,讓實時數(shù)據(jù)庫以進程內(nèi)com服務(wù)器(in-process com server)方式對外部提供統(tǒng)一的接口。第三方接口采用api方式和sql語法方式。使用api方式可以獲得更高的存取速度,而使用sql語法需要對sql進行解析,這樣就會影響系統(tǒng)的處理速度,當(dāng)前只實現(xiàn)了幾種常用的sql語法解析,考慮到終端用戶的需要,故同時提供這兩種接口方式。下面是實時數(shù)據(jù)庫常用的兩個接口函數(shù)原型:stdmethod(setpvfromtagn-ame)(/*in]*/ bstr *pbstrtagname, /*in]*/ short tagtype, /*in]*/float value); //通過位號名更新實時數(shù)據(jù)stdmethod(getpvfromtag -name)(/*in]*/bstr *pbstrtagnam -e, /*in]*/ short tagtype, /*out]*/ float*pvalue); //通過位號名讀取實時數(shù)據(jù)

6查詢處理算法

  在組態(tài)軟件中,存儲介質(zhì)是影響實時性的一個重要因素。實時數(shù)據(jù)庫采用物理內(nèi)存作為存儲區(qū),在內(nèi)存中完成對數(shù)據(jù)的實時操作。這樣主存數(shù)據(jù)庫就具有了高性能的事務(wù)處理能力,因此查詢算法也要針對內(nèi)存訪問的特點設(shè)計。

  6.1算法選擇

  磁盤數(shù)據(jù)庫系統(tǒng)的典型的索引技術(shù)是b-tree索引。b-tree主要目的是減少數(shù)據(jù)文件的索引查找所需要的磁盤i/o的數(shù)量。t-tree是針對主存訪問優(yōu)化的索引技術(shù),是lehman提出的適應(yīng)于主存數(shù)據(jù)庫系統(tǒng)的索引結(jié)構(gòu)。t-tree是一種一個節(jié)點中包含多個索引條目的平衡二叉樹,t-tree的時間復(fù)雜度為對數(shù)ο(logn)。散列法比樹訪問機制更快速,平均時間復(fù)雜度為常數(shù)ο(1)。由于hash表應(yīng)用起來相對簡單,維護也比較方便,對實時數(shù)據(jù)庫操作最多的是根據(jù)位號名進行的精確查詢、更新,因此散列技術(shù)是實時內(nèi)存數(shù)據(jù)庫的首選方案。

  6.2算法設(shè)計本文

  采用帶有沖突鏈的可擴展的hash表,這個表實際上是一個對象指針數(shù)組,有一個指針指向沖突鏈,沖突鏈元素構(gòu)成一個后向鏈表,每一個元素都包含一個指向后一個元素的指針,可以為數(shù)值型和字符串型數(shù)據(jù)創(chuàng)建hash表。為了避免沖突鏈的增長,hash表可以根據(jù)當(dāng)前的存儲狀態(tài)自動增長,當(dāng)前在同時滿足如下兩種情況下會調(diào)整hash表的大?。孩俦碇械挠涗洍l數(shù)比hash表空間大;②hash表中使用的元素數(shù)目(即非空的沖突鏈數(shù)目)大于表的2/3。每次hash表都以兩倍的大小增加,確切的說hash表大小是2**n-1(從統(tǒng)計學(xué)觀點來看使用奇數(shù)或者素數(shù)作為hash表的大小可以減少沖突的機會)。使用散列機制關(guān)鍵在于選擇合適的hash函數(shù)使得數(shù)據(jù)項均勻散列避免或減少沖突。本文使用一個非常簡單的hash函數(shù)h= h*31 + *key++;hash表的索引就是散列碼除以hash表的大小所得的余數(shù)。采用此hash函數(shù)對組態(tài)位號名進行散列,經(jīng)驗證,散列的均勻度比較理想。

7實時數(shù)據(jù)和歷史數(shù)據(jù)的關(guān)系

  實時數(shù)據(jù)和歷史數(shù)據(jù)對于組態(tài)軟件同等重要,分析他們之間的各自特點才能找到一個好的解決方案。歷史數(shù)據(jù)量巨大;歷史數(shù)據(jù)保存的時間長;存儲格式簡單,沒有復(fù)雜的關(guān)系;以位號名和時間為查詢條件;大量的查詢都是最近時間段的歷史數(shù)據(jù);追加多,刪除少,修改少,中間插入少。故采用實時數(shù)據(jù)庫和歷史數(shù)據(jù)庫相結(jié)合的方法可以發(fā)揮各自的優(yōu)點。本軟件中使用功能完善的關(guān)系數(shù)據(jù)庫sqlserver 2000作為歷史數(shù)據(jù)庫。sql server2000具有強大的數(shù)據(jù)管理功能和較高的效率,可以滿足企業(yè)上層程序?qū)?shù)據(jù)的分析和訪問。比如報表的生成,繪制歷史曲線,數(shù)據(jù)挖掘等。利用windows多線程機制,創(chuàng)建了一個單獨的線程用于轉(zhuǎn)儲歷史數(shù)據(jù),采用定量轉(zhuǎn)儲方式,轉(zhuǎn)儲的條件是當(dāng)內(nèi)存中的歷史數(shù)據(jù)超過程序中設(shè)置的最大值。

8結(jié)束語

  實時數(shù)據(jù)庫是組態(tài)軟件的關(guān)鍵部分,在內(nèi)存中實現(xiàn)實時數(shù)據(jù)庫能滿足組態(tài)軟件對實時性的要求。利用兩階段鎖實現(xiàn)并發(fā)控制和事務(wù)調(diào)度,針對內(nèi)存的特點設(shè)計的查詢處理算法,使得數(shù)據(jù)可以滿足流程圖監(jiān)控等頻繁的數(shù)據(jù)檢索。利用實時數(shù)據(jù)庫簡化了組態(tài)軟件中數(shù)據(jù)管理,增強了系統(tǒng)的穩(wěn)定性。

(轉(zhuǎn)載)

標(biāo)簽:DCS 組態(tài)軟件 實時數(shù)據(jù)庫 我要反饋 
泰科電子ECK、ECP系列高壓直流接觸器白皮書下載
億萬克
專題報道