工控系統(tǒng)中實(shí)時(shí)數(shù)據(jù)庫(kù)關(guān)鍵技術(shù)研究與實(shí)現(xiàn)
文章介紹了在面向工控自動(dòng)化過(guò)程的實(shí)時(shí)監(jiān)控系統(tǒng)建設(shè)中,實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)。針對(duì)實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)的特點(diǎn),分析了實(shí)時(shí)數(shù)據(jù)庫(kù)的功能模塊、存儲(chǔ)結(jié)構(gòu)、事務(wù)調(diào)度和并發(fā)控制等關(guān)鍵技術(shù)并給出了具體實(shí)現(xiàn)方法。在實(shí)現(xiàn)過(guò)程中采用了多媒體定時(shí)器、內(nèi)存映射文件、多線程、同步對(duì)象等技術(shù),保證了系統(tǒng)的穩(wěn)定性和強(qiáng)實(shí)時(shí)性。
1 引言
現(xiàn)代工業(yè)的特點(diǎn)要求全過(guò)程的實(shí)時(shí)監(jiān)控,高速的實(shí)時(shí)數(shù)據(jù)處理、長(zhǎng)期的歷史數(shù)據(jù)存儲(chǔ)以及生產(chǎn)信息的集成與共享。要滿(mǎn)足上述對(duì)生產(chǎn)數(shù)據(jù)的處理要求僅靠大量采用集散控制系統(tǒng)(DCS)和關(guān)系數(shù)據(jù)庫(kù)技術(shù)并不能完全解決問(wèn)題。DCS數(shù)據(jù)存儲(chǔ)能力有限,同時(shí)企業(yè)中異構(gòu)的DCS無(wú)法進(jìn)行有效的數(shù)據(jù)共享。而關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)處理速度低,無(wú)法對(duì)生產(chǎn)過(guò)程數(shù)據(jù)進(jìn)行及時(shí)高效的存儲(chǔ)。
為了解決上述問(wèn)題,實(shí)時(shí)數(shù)據(jù)庫(kù)作為一個(gè)關(guān)鍵的支撐技術(shù)引入工業(yè)控制系統(tǒng)。在生產(chǎn)設(shè)備運(yùn)行過(guò)程中,實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)實(shí)時(shí)采集設(shè)備的運(yùn)行數(shù)據(jù),隨時(shí)掌握裝置的運(yùn)行情況,并通過(guò)對(duì)生產(chǎn)過(guò)程的關(guān)鍵數(shù)據(jù)的實(shí)時(shí)監(jiān)控分析,對(duì)出現(xiàn)的問(wèn)題即時(shí)進(jìn)行處理,使生產(chǎn)的運(yùn)行狀態(tài)保持平穩(wěn)。實(shí)時(shí)數(shù)據(jù)庫(kù)還是是連接工業(yè)生產(chǎn)控制系統(tǒng)與企業(yè)上層管理系統(tǒng)的橋梁,企業(yè)可以通過(guò)實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)提供的數(shù)據(jù)平臺(tái),為經(jīng)營(yíng)決策、計(jì)劃調(diào)度、先進(jìn)過(guò)程控制,質(zhì)量監(jiān)控等分系統(tǒng)提供同一的數(shù)據(jù)平臺(tái)。
2 實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)概念和特點(diǎn)
實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)(RTDBS)就是其事務(wù)和數(shù)據(jù)都可以有定時(shí)特性或顯式的定時(shí)限制的數(shù)據(jù)庫(kù)系統(tǒng)。系統(tǒng)的正確性不僅依賴(lài)于邏輯結(jié)果,而且還依賴(lài)于邏輯結(jié)果產(chǎn)生的時(shí)間。對(duì)于實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng),數(shù)據(jù)的一致性和執(zhí)行的周期性是重要的目標(biāo),由于在實(shí)時(shí)系統(tǒng)中經(jīng)常以固定的時(shí)間周期收集被控系統(tǒng)的實(shí)時(shí)數(shù)據(jù),相應(yīng)的控制系統(tǒng)也必須周期性地處理數(shù)據(jù)和作出響應(yīng);由于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在一些時(shí)限要求嚴(yán)格的場(chǎng)合不能滿(mǎn)足實(shí)時(shí)系統(tǒng)對(duì)數(shù)據(jù)實(shí)時(shí)性的要求,而內(nèi)存直接尋址是一種具有高速的數(shù)據(jù)訪問(wèn)方式,在技術(shù)上采用內(nèi)存數(shù)據(jù)庫(kù)是解決這一問(wèn)題的理想解決方案。
整個(gè)實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)方案的設(shè)計(jì)分為駐內(nèi)和留外兩個(gè)部分,駐內(nèi)部分即為內(nèi)存數(shù)據(jù)庫(kù),是實(shí)時(shí)數(shù)據(jù)庫(kù)的主體,存儲(chǔ)形式可采用順序結(jié)構(gòu),B樹(shù)結(jié)構(gòu)或多目錄搜索哈希技術(shù)(散列技術(shù))。內(nèi)存數(shù)據(jù)庫(kù)定時(shí)進(jìn)行事務(wù)處理,對(duì)超過(guò)一定時(shí)間的數(shù)據(jù)從內(nèi)存中清除,寫(xiě)到外存數(shù)據(jù)庫(kù)中。外存數(shù)據(jù)庫(kù)即磁盤(pán)數(shù)據(jù)庫(kù)或歷史數(shù)據(jù)庫(kù),用于歷史記錄分析,報(bào)表生成答應(yīng)或相關(guān)決策等等。本系統(tǒng)歷史數(shù)據(jù)庫(kù)采用的是Microsoft公司的數(shù)據(jù)庫(kù)產(chǎn)品SQLServer。
3 關(guān)鍵技術(shù)研究和實(shí)現(xiàn)
3.1數(shù)據(jù)的實(shí)時(shí)采集
在工業(yè)控制系統(tǒng)中,數(shù)據(jù)采集程序的實(shí)時(shí)性和穩(wěn)定性對(duì)于整個(gè)工控系統(tǒng)的性能起著至關(guān)重要的作用。Windos提供的定時(shí)器TImer遠(yuǎn)達(dá)不到要求,必須使用精度更高的定時(shí)器來(lái)取代。
Windows系統(tǒng)下的多媒體定時(shí)器API函數(shù)TImeSetevent和TImeKillEvent就能很好的滿(mǎn)足實(shí)時(shí)性的要求。該多媒體定時(shí)器工作在自己的線程內(nèi),且它的線程優(yōu)先級(jí)(threadprioritylevel)設(shè)定為T(mén)HREAD_PRIORITY_TIME_CRITICAL,這比絕大部分的線程優(yōu)先權(quán)數(shù)值都高,相比工作在用戶(hù)界面線程內(nèi)的Timer定時(shí)器來(lái)說(shuō),它不受消息機(jī)制的影響,能夠達(dá)到很高的定時(shí)精度。它的最高定時(shí)精度能夠達(dá)到1ms,能夠滿(mǎn)足較高實(shí)時(shí)性的要求。
3.2內(nèi)存數(shù)據(jù)庫(kù)技術(shù)
內(nèi)存數(shù)據(jù)庫(kù)指數(shù)據(jù)庫(kù)常駐內(nèi)存及事務(wù)的數(shù)據(jù)存取只涉及內(nèi)存。內(nèi)存數(shù)據(jù)庫(kù)是支持實(shí)時(shí)事務(wù)的一種最佳技術(shù),其本質(zhì)特征是其“主拷貝”或“工作版本”常駐內(nèi)存,活動(dòng)事務(wù)只與實(shí)時(shí)內(nèi)存數(shù)據(jù)庫(kù)的內(nèi)存拷貝交互,顯然,它需要較大的內(nèi)存量。內(nèi)存數(shù)據(jù)庫(kù)可以簡(jiǎn)記為MMDB。MMDB的“工作版本”常駐內(nèi)存,在任何一個(gè)事務(wù)執(zhí)行過(guò)程中沒(méi)有內(nèi)外存間數(shù)據(jù)I/O。這為系統(tǒng)較準(zhǔn)確估算和安排事務(wù)的運(yùn)行時(shí)間、實(shí)現(xiàn)事務(wù)的定時(shí)限制打下了基礎(chǔ),從而滿(mǎn)足外部事務(wù)應(yīng)用對(duì)響應(yīng)時(shí)間和事務(wù)吞吐率的需求。
3.2.1利用內(nèi)存映射文件共享內(nèi)存
共享內(nèi)存是實(shí)時(shí)數(shù)據(jù)庫(kù)核心技術(shù)之一。所謂內(nèi)存映射文件,即在內(nèi)存中申請(qǐng)一塊內(nèi)存空間,將一個(gè)文件與這塊空間相聯(lián)系,再進(jìn)行內(nèi)存映射,這樣,操作文件就有和操作內(nèi)存一樣的效率,幾個(gè)進(jìn)程可以通過(guò)操作該映射文件,實(shí)現(xiàn)進(jìn)程間在內(nèi)存一級(jí)的高速數(shù)據(jù)交互。當(dāng)采用內(nèi)存映射文件方式時(shí),Windows對(duì)于再次使用該文件的進(jìn)程不在創(chuàng)建新的映射文件對(duì)象而共享前一段內(nèi)存映射對(duì)象,并將該對(duì)象映射成兩個(gè)地址空間,這種機(jī)制不僅有效地利用了內(nèi)存,同時(shí)也實(shí)現(xiàn)了數(shù)據(jù)的共享。要在Windows2000下實(shí)現(xiàn)內(nèi)存讀寫(xiě)一級(jí)的數(shù)據(jù)通信效率,唯一的辦法就是使用內(nèi)存映射文件。內(nèi)存映射文件使用方法如下:
(1)創(chuàng)建或打開(kāi)文件內(nèi)核對(duì)象
創(chuàng)建或打開(kāi)一個(gè)文件內(nèi)核對(duì)象,總要調(diào)用CreateFileCreateFile函數(shù):HANDLECreateFile