魏 洋
(西南交通大學 信息科學與技術(shù)學院,成都 610031)
實時數(shù)據(jù)庫系統(tǒng)是組態(tài)軟件的核心組成部分,實時數(shù)據(jù)庫及時準確地獲取現(xiàn)場數(shù)據(jù)是整個控制系統(tǒng)正常工作的前提,同時實時數(shù)據(jù)庫系統(tǒng)是實時數(shù)據(jù)庫聯(lián)系圖形系統(tǒng)、歷史數(shù)據(jù)庫系統(tǒng)、報表系統(tǒng)、報警系統(tǒng)的橋梁和紐帶[1]。傳統(tǒng)的關(guān)系數(shù)據(jù)庫系統(tǒng)追求的目標是實現(xiàn)大容量數(shù)據(jù)存儲以及數(shù)據(jù)的準確性,其存放的數(shù)據(jù)不會主動的隨著時間的變化而改變即并沒有“實時性”概念,因此開發(fā)具有“實時性”概念的實時數(shù)據(jù)庫系統(tǒng),是基于組態(tài)軟件設(shè)計的重點與難點。
傳統(tǒng)的數(shù)據(jù)庫采用常駐磁盤的存儲策略,CPU訪問存儲在磁盤中的數(shù)據(jù)需要通過I/O操作,由于通過I/O操作讀取數(shù)據(jù)相比內(nèi)存讀取數(shù)據(jù)速度要慢很多,當系統(tǒng)中對實時事務處理的性能要求很高,頻繁的I/O操作很難滿足事務定時限制的要求。隨著高性能實時事務處理應用的增加以及存儲器容量的增加與價格的下降,以“內(nèi)存數(shù)據(jù)庫”(MMDB,main memory database)技術(shù)來實現(xiàn)實時數(shù)據(jù)庫的底層數(shù)據(jù)存儲管理,更有效地支持實時事務,已成為人們的共識[2]。因此我們采用內(nèi)存存儲器、磁盤存儲器和檔案式存儲器等多種存儲介質(zhì)共同構(gòu)造實時數(shù)據(jù)庫系統(tǒng)存儲體系,其體系結(jié)構(gòu)圖如圖1所示。
圖1 實時數(shù)據(jù)庫存儲結(jié)構(gòu)
圖1中,M1為內(nèi)存存儲器,它存放活躍事務的工作數(shù)據(jù),包括采集點、輸出控制點、計算中間變量點等。M2為磁盤存儲器,本系統(tǒng)采樣MySQL關(guān)系數(shù)據(jù)庫存放現(xiàn)場設(shè)備的歷史數(shù)據(jù)。M3為檔案式存儲器,用來存放系統(tǒng)組態(tài)參數(shù)以及系統(tǒng)日志等需要長期保存的非共享數(shù)據(jù),組態(tài)軟件的組態(tài)參數(shù)用來描述設(shè)備、變量、圖形等信息。由于XML語言具有極強的信息描述能力,選擇XML語言描述組態(tài)軟件的組態(tài)參數(shù),利用Qt中提供的QtXml模塊可對XML文檔中的組態(tài)參數(shù)分層讀取,獲取組態(tài)軟件所需的初始化節(jié)點參數(shù)。
傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)是“單值”的、靜態(tài)的,即只要不“顯式地”調(diào)用UPDATE命令更改數(shù)據(jù)庫中的值,數(shù)據(jù)庫中的數(shù)據(jù)不會隨著現(xiàn)實時間的改變而改變。而實時數(shù)據(jù)庫必須表示數(shù)據(jù)與時間的關(guān)系,即具有“實時性”。
實時數(shù)據(jù)庫中的數(shù)據(jù)對象用位號表示,位號為一個三元組d:<value,time,valid>。其中,d為位號的標識符,分量dvalue為d的當前狀態(tài)值,dtime為時標,即實時數(shù)據(jù)的采樣時間或生成時間,dvalid為有效期,對于采樣數(shù)據(jù)是采樣周期,對于控制輸出數(shù)據(jù)是控制輸出截止時間。
實時數(shù)據(jù)庫系統(tǒng)利用面向?qū)ο蟮哪K化設(shè)計方法,將實時數(shù)據(jù)庫中的功能分為多個模塊單元進行封裝,降低系統(tǒng)內(nèi)部的耦合程度,系統(tǒng)功能模塊之間通過封裝的接口函數(shù)進行聯(lián)系。實時數(shù)據(jù)庫系統(tǒng)功能模塊如圖2所示。
圖2 實時數(shù)據(jù)庫系統(tǒng)功能模塊結(jié)構(gòu)
實時數(shù)據(jù)庫系統(tǒng)的功能模塊主要分為以下幾個模塊單元:
(1)用戶觸發(fā)模塊:用戶觸發(fā)實時數(shù)據(jù)庫系統(tǒng)程序,系統(tǒng)程序根據(jù)存儲在檔案式存儲器中的XML文件讀取組態(tài)參數(shù),組態(tài)參數(shù)提供了系統(tǒng)初始化運行的必要信息。
(2)應用程序接口模塊:該模塊的接口函數(shù)提供了系統(tǒng)內(nèi)部各個功能模塊進行聯(lián)系的內(nèi)部通道,也給外部用戶程序提供了直接訪問實時數(shù)據(jù)庫的通道,外部用戶程序通過調(diào)用該模塊提供的接口函數(shù)可對實時庫數(shù)據(jù)進行查詢、刪除等基本操作,無需利用SQL語句進行操作,節(jié)省了解析SQL語句的步驟,提高了系統(tǒng)執(zhí)行效率。同時該模塊還提供了與外存數(shù)據(jù)庫,組態(tài)軟件等的外部接口函數(shù)。
(3)網(wǎng)絡(luò)通信模塊:本系統(tǒng)網(wǎng)絡(luò)通信模塊采用Modbus TCP/IP協(xié)議進行遠程數(shù)據(jù)傳輸,是實時數(shù)據(jù)庫與現(xiàn)場設(shè)備之間的網(wǎng)絡(luò)通道。
(4)采集模塊:數(shù)據(jù)采集模塊按照事先設(shè)定好的固定周期,對現(xiàn)場設(shè)備的狀態(tài)值進行采集,并寫入到實時數(shù)據(jù)庫中,采集模塊保證了實時數(shù)據(jù)庫中的采集數(shù)據(jù)與現(xiàn)場設(shè)備狀態(tài)值保持一致,是實時數(shù)據(jù)庫實時性的保障之一。
(5)回送模塊:回送模塊將組態(tài)軟件發(fā)出的控制指令數(shù)據(jù)傳輸?shù)浆F(xiàn)場設(shè)備,實現(xiàn)組態(tài)軟件對現(xiàn)場設(shè)備的遠程控制。
(6)讀寫操作模塊:該模塊包含數(shù)據(jù)輸入、輸出處理模塊,實現(xiàn)對實時數(shù)據(jù)對象讀寫操作的功能。
(7)歷史數(shù)據(jù)庫模塊:歷史數(shù)據(jù)由系統(tǒng)定時從實時數(shù)據(jù)庫中采樣保存到歷史數(shù)據(jù)庫中,歷史數(shù)據(jù)庫通過應用程序接口將數(shù)據(jù)保存到外部磁盤MySQL數(shù)據(jù)庫中。
(8)報警模塊:讀取用戶事先設(shè)定好的位號報警閾值,一旦位號當前值越限發(fā)出報警信息,并保存報警記錄。
(9)事故處理模塊:該模塊當現(xiàn)場控制設(shè)備發(fā)生故障時,發(fā)出事故報警,防止事故進一步惡化,并保存事故記錄。
一個完整的實時數(shù)據(jù)庫數(shù)據(jù)模型包括數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作、數(shù)據(jù)約束3個部分,即有:
RTDM : : = <RTDO, RTC, RTDP>[3]
其中,RTDM為數(shù)據(jù)模型,RTDO為實時數(shù)據(jù)對象及其結(jié)構(gòu),RTDP為施加于RTDO的操作,RTC為施加于RTDO與RTDP的限制,即數(shù)據(jù)約束。
2.1.1 數(shù)據(jù)結(jié)構(gòu)
有軌電車弱電集成系統(tǒng)現(xiàn)場有采集數(shù)據(jù)、計算數(shù)據(jù)、控制數(shù)據(jù)等。現(xiàn)場采集數(shù)據(jù)代表有軌電車弱電集成系統(tǒng)中被監(jiān)控設(shè)備狀態(tài),計算數(shù)據(jù)是由采集數(shù)據(jù)或者其它數(shù)據(jù)經(jīng)過邏輯運算得到的數(shù)據(jù),控制數(shù)據(jù)代表組態(tài)軟件輸出控制命令到現(xiàn)場被控設(shè)備。在實時數(shù)據(jù)庫系統(tǒng)中,將以上數(shù)據(jù)概括、抽象為模擬量輸入數(shù)據(jù)(AI)點、模擬量輸出數(shù)據(jù)(AO)點、數(shù)字量輸入數(shù)據(jù)(DI)點、數(shù)字量輸出數(shù)據(jù)(DO)點,統(tǒng)稱為位號[4]。一個位號有若干位號參數(shù),每個位號參數(shù)都有一個數(shù)據(jù)值,將其抽象歸納為類似于關(guān)系數(shù)據(jù)庫中的表的模型,位號標識類比表的主鍵,若干位號參數(shù)類比表的若干字段屬性,即一個位號數(shù)據(jù)表示表的一行記錄。位號數(shù)據(jù)以<key,value>的形式存儲在內(nèi)存中,表示結(jié)構(gòu)如表1所示。
表1 數(shù)據(jù)結(jié)構(gòu)
2.1.2 數(shù)據(jù)操作
在傳統(tǒng)數(shù)據(jù)庫中定義關(guān)系代數(shù)有5種基本操作:選擇、投影、并、差和笛卡爾積。在本實時數(shù)據(jù)庫系統(tǒng)中數(shù)據(jù)以<key,value>形式存儲,一組key/value類比于關(guān)系數(shù)據(jù)庫中的一行記錄,對于實時數(shù)據(jù)庫而言,一組數(shù)據(jù)是二維(值和時間)的,故傳統(tǒng)的關(guān)系代數(shù)操作不能適用于實時數(shù)據(jù)庫,要在傳統(tǒng)關(guān)系代數(shù)操作基礎(chǔ)上引入對時間的操作,以選擇操作為例:
為了說明方便,表2為簡略的有軌電車弱電集成系統(tǒng)現(xiàn)場數(shù)字量記錄表,將表2命名為table_DI。
表2 table_DI
查詢表table_DI中Value值為1,LastUpdate值大于等于30 000 ms的記錄:
其操作結(jié)果如表3所示。
表3 操作結(jié)果
2.1.3 數(shù)據(jù)約束
實時數(shù)據(jù)庫中的數(shù)據(jù)是相應現(xiàn)實世界的映像,因此現(xiàn)實世界狀態(tài)的任何變化都應及時反應到實時數(shù)據(jù)庫中。實時數(shù)據(jù)庫中的數(shù)據(jù)應保持外部(或絕對)一致性以及相互(或相對)一致性約束[5]。所謂外部一致性約束即要求數(shù)據(jù)對象時標必須足夠接近其真實產(chǎn)生時間,相互一致性約束即要求一組指定參與決策的數(shù)據(jù)集合相互之間的時間差距在一定的閾值范圍內(nèi)。
以有軌電車弱電集成系統(tǒng)中的采集數(shù)據(jù)為例,采集數(shù)據(jù)有兩個位號參數(shù)分別為LastUpdate(數(shù)據(jù)最新更新時間,單位為:ms)和CollecTime(采樣周期,單位為:ms),為了保持實時數(shù)據(jù)庫中實時數(shù)據(jù)外部一致性約束,規(guī)定采集數(shù)據(jù)中的LastUpdate與系統(tǒng)時間差值必須小于等于采樣周期,即有Data滿足:
為了保持實時數(shù)據(jù)庫中的實時數(shù)據(jù)相互一致性約束,規(guī)定參與決策的一組數(shù)據(jù)之間的時標差值必須小于等于采樣周期,即有一組數(shù)據(jù)Data1,Data2,…Data(n)滿足:
以DI點為例,介紹其模型實例,在有軌電車弱電集成系統(tǒng)中DI點主要為全線列車、機電設(shè)備、供電設(shè)備等的采集數(shù)據(jù)以及計算數(shù)據(jù)。DI點為被控設(shè)備的開關(guān)量數(shù)據(jù),由0和1表示開關(guān)的閉合。采用C++語言編程,根據(jù)有軌電車弱電集成系統(tǒng)中實際數(shù)據(jù)抽象概括了統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)模型,如下:
typedef struct tagDIGITAL
{
string PointCode; //位號標識
string PointDesc; //位號描述
string GroupCode; //組名稱,本系統(tǒng)中表示車站名稱
string DeviceCode; //車站中被控設(shè)備名稱
int PointType; //位號類型
int Value; //位號當前值
long CollectTime; //采樣周期,單位為:ms
long LastUpdate; //數(shù)據(jù)最新更新時間,單位為:ms
uchar DataCat; //位號當前值數(shù)據(jù)類型
short AlarmPriority; //報警優(yōu)先級
short RtuNo; //采集通道號,0表示通道1,1表示通道2
short PointNo; //采集序號,小于0表示計算點,大于等于0表示從被控設(shè)備相應內(nèi)存地址中讀取采集數(shù)據(jù)
short Complement; //取反標志,0不取反,1取反
short AlarmMode; //報警方式
short IncidentLim; //事故跳閘次數(shù)限
short SaveStyle; //存盤方式,0不存盤,1周期存盤,2變化存盤
short SaveInterval; //存盤間隔,單位為:min
short ValDefault; //缺省值,默認為0
} digital;
以上位號的數(shù)據(jù)模型已經(jīng)確立,系統(tǒng)初始化生成數(shù)據(jù)庫表或者生成數(shù)據(jù)庫表后查詢數(shù)據(jù)都需要知道表的結(jié)構(gòu)和表中字段的屬性結(jié)構(gòu),因此又抽象歸納了數(shù)據(jù)庫表和表中字段屬性的結(jié)構(gòu)模型,如下:
char code[MDB_COLUMN_DESCSIZE]; //位號標識,即字段名稱
char desc[MDB_COLUMN_DESCSIZE]; //位號描述,即字段描述
int offset; //字段相對偏移值
mce::ushort unitlen; //字段長度
mce::uchar datatype; //字段類型
mce::uchar iskey; //是否是主鍵,1為主鍵,0為非主鍵
} BASECOLUMN;
實時數(shù)據(jù)庫系統(tǒng)中所有的事務都對各種系統(tǒng)資源存在著共享與競爭,包括存儲空間、CPU時間、數(shù)據(jù)庫數(shù)據(jù)等,資源競爭式共享導致了各種沖突問題,而實時事務并發(fā)控制就是解決事務處理過程中所發(fā)生的各種沖突問題。目前,實時數(shù)據(jù)庫事務并發(fā)控制技術(shù)包括鎖式協(xié)議、樂觀協(xié)議和時標協(xié)議等,以上3種控制技術(shù)各有優(yōu)缺點[6]。針對實時數(shù)據(jù)庫系統(tǒng)中硬實時事務只有周期采集事務和偶發(fā)的故障處理事務,其余大部分為軟實時事務,并且計算機系統(tǒng)內(nèi)存資源有限等特點,所以實時數(shù)據(jù)庫系統(tǒng)選擇了鎖式控制協(xié)議。
鎖式并發(fā)控制協(xié)議機制都是進行悲觀的沖突探測,即凡是進行并發(fā)控制的兩個或多個事務都是沖突的,解決方法是讓沖突之一的事務阻塞或夭折。典型的鎖式并發(fā)控制算法是2PL(Two-Phase Lock Protocol)算法,該算法規(guī)定事務的執(zhí)行分為兩個階段:(1)事務對任何數(shù)據(jù)進行讀寫操作之前,要先獲得該數(shù)據(jù)的封鎖;(2)在釋放封鎖后,事務不再申請和獲得其它任何封鎖[7]。傳統(tǒng)的2PL算法采用AB(always block)協(xié)議,以TH和TR分別代表占有和請求事務,凡是發(fā)生沖突就阻塞TR事務,讓其等待。傳統(tǒng)的2PL算法存在以下問題:(1)可能會發(fā)生死鎖,這對于實時性很不利;(2)忽略了事務優(yōu)先級,默認為所有事務具有相同的優(yōu)先級次序,可能引發(fā)系統(tǒng)事務優(yōu)先級次序倒置,這違背了優(yōu)先級驅(qū)動事務的處理原則。
針對傳統(tǒng)的2PL算法存在的缺點,本實時數(shù)據(jù)庫系統(tǒng)使用優(yōu)先級2PL算法的鎖式并發(fā)控制協(xié)議。優(yōu)先級2PL算法將基于優(yōu)先級的沖突解決方式集成到傳統(tǒng)的2PL算法中,將每個事務指派一個優(yōu)先級,當發(fā)生沖突時并不總是阻塞TR,而是選擇讓優(yōu)先級較低的事務阻塞或夭折,這有利于高優(yōu)先級的事務被優(yōu)先處理。典型的優(yōu)先級2PL算法是2PL-HP算法即高優(yōu)先級2PL算法,該算法規(guī)定發(fā)生沖突時,若TR的優(yōu)先級比所有TH的優(yōu)先級高(可能有多個共享鎖的占有事務),則夭折所有的TH而讓TR執(zhí)行,否則TR等待。采用C++語言編程,2PL-HP的沖突處理算法為:
令P(T)表示事務T的優(yōu)先級,HC表示所有共享鎖占有者TH的集合,WC表示被阻塞的請求事務的集合,2PL-HP沖突處理算法用流程圖表示如圖3所示。2PL-HP算法在事務沖突解決方式上相比傳統(tǒng)的2PL算法,它考慮了事務的優(yōu)先級次序,將較低優(yōu)先級的事務推遲執(zhí)行,有效地解決了優(yōu)先級倒置問題。
圖3 2PL-HP沖突算法流程圖
在避免死鎖問題上,如果使用2PL-HP算法是靜態(tài)分配事務優(yōu)先級次序,可以避免死鎖發(fā)生。
實時數(shù)據(jù)庫接口為用戶程序提供了直接訪問實時數(shù)據(jù)庫中數(shù)據(jù)的有效通道,它是供用戶程序調(diào)用的一組函數(shù)集合,并且規(guī)定了調(diào)用這些函數(shù)集合的規(guī)范。直接調(diào)用接口函數(shù)提供的函數(shù)集合,極大地提高了研發(fā)人員開發(fā)用戶程序的效率。由于Windows中動態(tài)鏈接庫(DLL)文件被多個程序同時調(diào)用時,該DLL頁面只需放入內(nèi)存一次即可實現(xiàn)資源共享,有效節(jié)省了內(nèi)存資源,所以本系統(tǒng)的接口函數(shù)都是以動態(tài)鏈接庫的形式供用戶程序調(diào)用。表4列出了實時數(shù)據(jù)庫中部分接口函數(shù)。口函數(shù)執(zhí)行出現(xiàn)錯誤,接口函數(shù)返回值會返回錯誤信息,用戶調(diào)用程序通過檢查接口函數(shù)返回值判斷函數(shù)是否成功執(zhí)行。
表4 接口函數(shù)說明
接口函數(shù)中大部分都含有一個或多個參數(shù),并且具有返回值類型。接口函數(shù)內(nèi)部會檢查參數(shù)的正確性,返回值表示接口函數(shù)執(zhí)行正確與否,如果接
目前,國內(nèi)軌道交通運營的線路多采用適度集成模式,行車調(diào)度系統(tǒng)與綜合監(jiān)控系統(tǒng)等有特殊要求和影響行車安全的系統(tǒng)仍獨立設(shè)置。這種結(jié)構(gòu)的最大缺點是不能實現(xiàn)系統(tǒng)間高效的聯(lián)動,一旦行車過程中出現(xiàn)故障,各系統(tǒng)間響應速度不夠,限制了軌道交通的運營管理[8]。
有軌電車弱電集成系統(tǒng)應用于深圳龍華線有軌電車項目,將傳統(tǒng)的行車調(diào)度系統(tǒng)與綜合監(jiān)控系統(tǒng)集成在一套系統(tǒng)上統(tǒng)稱為有軌電車弱電集成系統(tǒng)。主要包括信號系統(tǒng)(ATS)、電力監(jiān)控系統(tǒng)(PSCADA)、火災自動報警系統(tǒng)(FAS)、自動售檢票系統(tǒng)(AFC)、旅客信息系統(tǒng)(PIS)、閉路電視系統(tǒng)(CCTV)、廣播系統(tǒng)(PA)、時鐘系統(tǒng)(CLK)等。在統(tǒng)一的系統(tǒng)平臺上實現(xiàn)對全線列車、機電設(shè)備、電力設(shè)備的監(jiān)控功能,需要一個紐帶將有軌電車弱電集成系統(tǒng)現(xiàn)場的硬件設(shè)備、用戶監(jiān)控界面連接起來。由于組態(tài)軟件能夠以靈活多樣的組態(tài)方式提供良好的用戶開發(fā)界面同時支持各種工業(yè)控制設(shè)備和常見的通信協(xié)議,與高可靠的網(wǎng)絡(luò)系統(tǒng)和工業(yè)計算機結(jié)合,可以實現(xiàn)向控制層和管理層提供軟、硬件的全部接口的功能,因此利用組態(tài)軟件開發(fā)有軌電車弱電集成系統(tǒng)的最佳選擇。實時數(shù)據(jù)庫系統(tǒng)是組態(tài)軟件的核心組成部分,它為組態(tài)軟件用戶界面提供現(xiàn)場監(jiān)控設(shè)備的實時數(shù)據(jù)同時實時地將控制數(shù)據(jù)傳達到被控設(shè)備中。以下簡述實時數(shù)據(jù)庫系統(tǒng)應用于有軌電車弱電集成系統(tǒng)中的PSCADA。
電力監(jiān)控子系統(tǒng)(PSCADA)對有軌電車全線的供電設(shè)備的狀態(tài)進行監(jiān)控,PSCADA所監(jiān)控的設(shè)備包括變電所10 kV、1 500 V、400 V開關(guān)量(包含斷路器位置、隔離開關(guān)位置、設(shè)備工況等),變電所10 kV、1 500 V、400 V電氣模擬量等(包含電流、電壓、頻率、有功功率、無功功率、有功電度、無功電度等)。其中變電所10 kV、1 500 V、400 V開關(guān)量在實時數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)模型在2.1中已經(jīng)給出。PSCADA系統(tǒng)的用戶界面通過實時數(shù)據(jù)庫系統(tǒng)提供的接口讀取現(xiàn)場被控設(shè)備的狀態(tài)值,將現(xiàn)場設(shè)備的實時狀態(tài)反應在用戶界面中,如圖4所示。
圖4 PSCADA用戶界面
圖4中,綠色矩形表示斷路器處于分閘狀態(tài),紅色表示斷路器處于合閘狀態(tài),鼠標右擊斷路器可以實現(xiàn)對斷路器遠程控制以及查看斷路器實時狀態(tài)值,包括數(shù)字開關(guān)量以及模擬量的值,如圖5所示。
圖5 右擊斷路器彈出窗口
以查看斷路器的實時狀態(tài)值為例,點擊實時信息查看編號為6G01斷路器的數(shù)字量與模擬量實時值,如圖6所示。
圖6 斷路器數(shù)字量、模擬量實時值
圖6中,斷路器相關(guān)的數(shù)字量、模擬量數(shù)據(jù)均是通過實時數(shù)據(jù)庫系統(tǒng)提供的接口函數(shù)讀取的供電設(shè)備現(xiàn)場實時的狀態(tài)值。
使用組態(tài)軟件開發(fā)有軌電車弱電集成系統(tǒng),系統(tǒng)需要實時監(jiān)測控制全線列車、機電設(shè)備、電力設(shè)備的狀態(tài)值,實時數(shù)據(jù)庫是對這些設(shè)備狀態(tài)的實時映射,所以實時數(shù)據(jù)庫系是決定整個系統(tǒng)能否正常工作的關(guān)鍵。結(jié)合有軌電車弱電集成系統(tǒng)實際控制場景,抽象歸納出了實時數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)模型。分析了實時數(shù)據(jù)庫系統(tǒng)的功能模塊結(jié)構(gòu),利用面向?qū)ο蟮哪K化設(shè)計方法以及動態(tài)鏈接庫技術(shù),提供了實時數(shù)據(jù)庫系統(tǒng)的接口函數(shù)。針對實時數(shù)據(jù)庫系統(tǒng)中多事務同時對計算機系統(tǒng)共享資源競爭所引發(fā)的沖突問題,使用鎖式并發(fā)控制技術(shù)解決事務沖突問題。通過對傳統(tǒng)的2PL算法與優(yōu)先級2PL算法比較,最終確立了使用2PL-HP算法實現(xiàn)鎖式并發(fā)控制協(xié)議,相比使用2PL算法,解決了事務優(yōu)先級倒置問題,避免了死鎖發(fā)生等問題。但同時該算法也存在一些缺陷,如使用2PL-HP算法相比傳統(tǒng)的2PL算法浪費了計算機系統(tǒng)資源,也有可能導致活鎖的發(fā)生。無論是基于樂觀還是悲觀的實時事務并發(fā)控制協(xié)議算法都存在一定的缺陷,本文是在計算機系統(tǒng)資源有限,實時數(shù)據(jù)庫系統(tǒng)軟實時事務較多的情況下,探索使用了基于2PL-HP算法實現(xiàn)實時數(shù)據(jù)系統(tǒng)事務鎖式并發(fā)控制協(xié)議,并成功運用在有軌電車弱電集成系統(tǒng)中。最后舉例說明實時數(shù)據(jù)庫系統(tǒng)在有軌電車弱電集成子系統(tǒng)PSCADA中的應用。
[1]王 荃,壘 壹,李福中.工控組態(tài)軟件實時數(shù)據(jù)庫系統(tǒng)的設(shè)計與實現(xiàn)[J]. 化工自動化及儀表,2000,27(3):40-43.
[2]張 維.實時事務處理的研究與設(shè)計[D].武漢:華中科技大學,2008:4-5.
[3]劉云生,易 嵐.一個實時數(shù)據(jù)模型[J].小型微型計算機系統(tǒng),2000,21(5):550-551.
[4]雷 建,王潤孝,沈 昕.流程工業(yè)生產(chǎn)調(diào)度與控制集成系統(tǒng)數(shù)據(jù)庫設(shè)計[J].工業(yè)儀表與自動化裝置,2008(3):74-74.
[5]P.A.Thopmpson. A temporal data model based on accounting principles.[D]PhD thesis,Dept. of Computer Science. Univ. of Calgary,Calgary,Alta.,Canada,Mar.1991.
[6]程昌秀,申排偉,陸 鋒.面向拓撲空間實體的擴展鎖技術(shù)[J].計算機輔助設(shè)計與圖形學學報,2005,17(2):209-210.
[7]姚曉玲,吳哲輝. 2PL協(xié)議的Petri網(wǎng)模型[J].計算機工程與應用,2004,40(24):160-161.
[8]金久強,王 浩.北京地鐵6號線行車綜合自動化系統(tǒng)設(shè)計與實現(xiàn)[J].鐵路計算機應用,2015,24(8):56-57.