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