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





