先進(jìn)控制軟件系統(tǒng)實(shí)時(shí)數(shù)據(jù)庫的設(shè)計(jì)
時(shí)間:2007-12-18 10:14:00來源:dujing
導(dǎo)語:?本文通過對(duì)實(shí)時(shí)數(shù)據(jù)庫的概述和分析,論述了實(shí)時(shí)數(shù)據(jù)庫模塊的實(shí)現(xiàn)方法,以面向?qū)ο蟮木幊谭绞浇o出了定義類的部分代碼
前 言
近年來,DCS(集散控制系統(tǒng))以其強(qiáng)大的控制功能、可靠的安全性能和良好的可移植性在國內(nèi)外工控領(lǐng)域獲得廣泛的應(yīng)用,DCS的日益普及為實(shí)現(xiàn)先進(jìn)控制、實(shí)時(shí)優(yōu)化等新技術(shù)提供了強(qiáng)有力的硬件支持和保障。先進(jìn)控制除了具有改善控制性能、提高經(jīng)濟(jì)效益等主要功能外,也是深度開發(fā)和利用DCS資源、提高企業(yè)自動(dòng)化和管理水平的重要途徑。先進(jìn)控制軟件的設(shè)計(jì)一般分為幾個(gè)模塊:模型辨識(shí)器、多變量預(yù)估控制器、魯棒PID控制器(含各種中間控制器)、實(shí)時(shí)數(shù)據(jù)庫、工藝計(jì)算包等,其中實(shí)時(shí)數(shù)據(jù)庫模塊是其他模塊的紐帶和橋梁。所以,實(shí)時(shí)數(shù)據(jù)庫模塊設(shè)計(jì)的好壞直接影響到先進(jìn)控制軟件設(shè)計(jì)的成敗。實(shí)時(shí)數(shù)據(jù)庫是先進(jìn)控制軟件系統(tǒng)的重要組成部分,也是設(shè)計(jì)的難點(diǎn)之一。實(shí)時(shí)數(shù)據(jù)庫是先進(jìn)控制軟件系統(tǒng)的數(shù)據(jù)處理中心。在先進(jìn)控制系統(tǒng)投用運(yùn)行環(huán)境時(shí),工業(yè)現(xiàn)場(chǎng)的生產(chǎn)狀況將實(shí)時(shí)地反映在變量的數(shù)值中,操作者在計(jì)算機(jī)前發(fā)布的指令也要迅速送達(dá)生產(chǎn)現(xiàn)場(chǎng),所有這一切都是以實(shí)時(shí)數(shù)據(jù)庫為中介環(huán)節(jié)。同時(shí),實(shí)時(shí)數(shù)據(jù)庫又是事務(wù)調(diào)度中心,數(shù)據(jù)采集事務(wù)、圖形顯示事務(wù)、報(bào)警事務(wù)、歷史數(shù)據(jù)存盤事務(wù)等等都由實(shí)時(shí)數(shù)據(jù)庫統(tǒng)一調(diào)配,從而達(dá)到控制的實(shí)時(shí)性。
1.實(shí)時(shí)數(shù)據(jù)庫概述
在引入實(shí)時(shí)數(shù)據(jù)庫概念之前,先介紹一下數(shù)據(jù)對(duì)象。在先進(jìn)控制軟件設(shè)計(jì)中定義的數(shù)據(jù)不同于傳統(tǒng)意義的數(shù)據(jù)或變量,它不只包含了變量的數(shù)值特征,還將與數(shù)據(jù)相關(guān)的其它屬性(如數(shù)據(jù)的狀態(tài)、報(bào)警限值等)以及對(duì)數(shù)據(jù)的操作方法(如存盤處理、報(bào)警處理等)封裝在一起,作為一個(gè)整體,以對(duì)象的形式提供服務(wù)。這種把數(shù)值、屬性和方法定義成一體的數(shù)據(jù)稱為數(shù)據(jù)對(duì)象。在設(shè)計(jì)中,用數(shù)據(jù)對(duì)象來表述系統(tǒng)中的實(shí)時(shí)數(shù)據(jù),用對(duì)象變量代替?zhèn)鹘y(tǒng)意義的值變量。用數(shù)據(jù)庫技術(shù)管理的所有數(shù)據(jù)對(duì)象的集合稱為實(shí)時(shí)數(shù)據(jù)庫,實(shí)時(shí)數(shù)據(jù)庫提供管理、刷新、查詢數(shù)據(jù)對(duì)象等操作。
實(shí)時(shí)數(shù)據(jù)庫與普通商用數(shù)據(jù)庫不同,實(shí)時(shí)數(shù)據(jù)庫的主要目標(biāo)是使盡量多的事務(wù)在規(guī)定的時(shí)間要求內(nèi)完成,而不是公平地分配系統(tǒng)以使所有的事務(wù)都得到執(zhí)行。它有以下幾個(gè)特點(diǎn):
1)時(shí)間約束實(shí)時(shí)數(shù)據(jù)庫系統(tǒng)的主要特征是在數(shù)據(jù)對(duì)象和事務(wù)上施加了時(shí)間約束。對(duì)數(shù)據(jù)的時(shí)間約束,就是在數(shù)據(jù)庫的普通一致性要求以外,又規(guī)定了時(shí)態(tài)一致性要求。在實(shí)時(shí)系統(tǒng)中,具有時(shí)間約束的數(shù)據(jù)主要來自于外部的動(dòng)態(tài)數(shù)據(jù),如由傳感器采集的現(xiàn)場(chǎng)數(shù)據(jù),和由這些數(shù)據(jù)導(dǎo)出的數(shù)據(jù)。因此,可將數(shù)據(jù)的時(shí)間約束分為兩類,即數(shù)據(jù)的絕對(duì)一致性和數(shù)據(jù)的相對(duì)一致性。數(shù)據(jù)的絕對(duì)一致性是指實(shí)時(shí)數(shù)據(jù)庫中的數(shù)據(jù)應(yīng)與外部數(shù)據(jù)(又稱為環(huán)境數(shù)據(jù))相一致,即要求數(shù)據(jù)庫中的數(shù)據(jù)能及時(shí)地反映外部環(huán)境的狀態(tài)。例如,在化工過程控制系統(tǒng)中,要求數(shù)據(jù)庫中記錄的塔的溫度、壓力等信息,與塔的實(shí)際的溫度、壓力等參數(shù)保持一致。這種一致性的破壞有時(shí)可能會(huì)導(dǎo)致災(zāi)難性的后果。在實(shí)時(shí)系統(tǒng)中,常常需要從一組數(shù)據(jù)項(xiàng)導(dǎo)出另外的數(shù)據(jù),例如,根據(jù)系統(tǒng)的電流、電壓導(dǎo)出系統(tǒng)的功率。此時(shí)往往要求用來導(dǎo)出新數(shù)據(jù)的一組數(shù)據(jù)在時(shí)間上應(yīng)盡量接近,這就形成了實(shí)時(shí)數(shù)據(jù)庫系統(tǒng)中數(shù)據(jù)的相對(duì)一致性概念。
2)事務(wù)調(diào)度
傳統(tǒng)數(shù)據(jù)庫系統(tǒng)中,事務(wù)調(diào)度的目標(biāo)是提高系統(tǒng)對(duì)事務(wù)的吞吐率,但實(shí)時(shí)數(shù)據(jù)庫系統(tǒng)則要求能使盡量多的事務(wù)在其期限內(nèi)完成。因此,實(shí)時(shí)事務(wù)的調(diào)度與傳統(tǒng)數(shù)據(jù)庫系統(tǒng)中的事務(wù)調(diào)度是有差別的。大多數(shù)的實(shí)時(shí)事務(wù)調(diào)度策略都是圍繞事務(wù)的優(yōu)先級(jí)進(jìn)行的。
3)實(shí)時(shí)數(shù)據(jù)庫的實(shí)時(shí)數(shù)據(jù)存儲(chǔ)管理
實(shí)時(shí)數(shù)據(jù)庫主要承擔(dān)系統(tǒng)所有實(shí)時(shí)數(shù)據(jù)的存儲(chǔ)和管理,為相關(guān)的功能提供快速、正確的實(shí)時(shí)信息,因此,對(duì)實(shí)時(shí)數(shù)據(jù)庫來說,其實(shí)時(shí)性是第一位的,考慮到這一點(diǎn),實(shí)時(shí)數(shù)據(jù)庫在系統(tǒng)運(yùn)行過程中,應(yīng)占用空間小,并常駐內(nèi)存,以保證數(shù)據(jù)庫讀取速度快,存取靈活,易于各功能模塊之間的數(shù)據(jù)共享。
實(shí)時(shí)數(shù)據(jù)庫的數(shù)據(jù)共享采用內(nèi)存文件映射來實(shí)現(xiàn)。 對(duì)于那些實(shí)時(shí)性要求不高的非共享數(shù)據(jù)和共享數(shù)據(jù),如采樣值的轉(zhuǎn)換系數(shù)等可以放在外存儲(chǔ)空間。因此,在實(shí)時(shí)數(shù)據(jù)庫設(shè)計(jì)時(shí),要妥善處理時(shí)間和存儲(chǔ)空間之間的矛盾,以保證先進(jìn)控制系統(tǒng)的實(shí)時(shí)性。
2 實(shí)時(shí)數(shù)據(jù)庫的分析與設(shè)計(jì)
首先從功能角度分析實(shí)時(shí)數(shù)據(jù)庫的設(shè)計(jì)。
1)實(shí)時(shí)數(shù)據(jù)庫系統(tǒng)的功能分析:
現(xiàn)場(chǎng)數(shù)據(jù)采集:實(shí)時(shí)數(shù)據(jù)庫提供了與典型數(shù)據(jù)源的接口,讀寫通訊設(shè)備寄存器的現(xiàn)場(chǎng)值,送到開辟的內(nèi)存緩沖區(qū)。
預(yù)處理機(jī)制:可以直接在實(shí)時(shí)數(shù)據(jù)庫中對(duì)原始數(shù)據(jù)進(jìn)行處理,如數(shù)據(jù)轉(zhuǎn)化。滾動(dòng)存儲(chǔ)機(jī)制:實(shí)時(shí)數(shù)據(jù)庫的各數(shù)據(jù)對(duì)象以鏈表形式存放在內(nèi)存中,故數(shù)據(jù)庫的容量相對(duì)容固定,當(dāng)新的數(shù)據(jù)產(chǎn)生時(shí),自動(dòng)更新數(shù)據(jù)對(duì)象的現(xiàn)場(chǎng)值屬性。
自動(dòng)更新機(jī)制:當(dāng)實(shí)時(shí)數(shù)據(jù)庫中的數(shù)據(jù)對(duì)象現(xiàn)場(chǎng)值屬性改變時(shí),自動(dòng)啟動(dòng)線程,更新顯示畫面的數(shù)據(jù)
顯示,如需存盤,存入 Access 數(shù)據(jù)庫中,實(shí)現(xiàn)實(shí)時(shí)監(jiān)控。
觸發(fā)和定時(shí)機(jī)制:提供豐富的觸發(fā)和定時(shí)機(jī)制,供各類數(shù)據(jù)處理、先進(jìn)控制和優(yōu)化算法使用,以保證數(shù)據(jù)的實(shí)時(shí)性、有效性、一致性。補(bǔ)償機(jī)制:當(dāng)不能保證連續(xù)運(yùn)行時(shí)(如系統(tǒng)備份),需要提供相應(yīng)的補(bǔ)償機(jī)制,以保證數(shù)據(jù)不會(huì)丟失。
數(shù)據(jù)檢索機(jī)制:可以以類似于關(guān)系型數(shù)據(jù)庫的方式檢索實(shí)時(shí)數(shù)據(jù)庫中的數(shù)據(jù)對(duì)象,取得所需的數(shù)據(jù)對(duì)象屬性或操作。
態(tài)匯總機(jī)制:實(shí)時(shí)數(shù)據(jù)庫提供了報(bào)警狀態(tài)、操作事件等信息的動(dòng)態(tài)匯總功能。
2)實(shí)時(shí)數(shù)據(jù)庫事務(wù)調(diào)度分析
在先進(jìn)控制軟件系統(tǒng)投入運(yùn)行后,同時(shí)要進(jìn)行與 DCS 數(shù)據(jù)采集、數(shù)據(jù)處理、圖形顯示刷新、歷史數(shù)據(jù)存盤、緊急事件報(bào)警或越位報(bào)警等等,所有的這些事務(wù),都要并行處理,如等待時(shí)間太長(zhǎng),無法滿足實(shí)時(shí)性的要求。這樣就要求我們實(shí)現(xiàn)一種并行編程,在只有一個(gè) CPU 的機(jī)器上,也就是要將該 CPU 時(shí)間按照一定的優(yōu)先準(zhǔn)則分配給各個(gè)事件,定期處理某一事件而不會(huì)在某一事件處理過長(zhǎng),在 32 位 Windows98或 WindowsNT4.0 下,用多線程的編程技術(shù)來實(shí)現(xiàn)這種并行編程,實(shí)時(shí)調(diào)度各事務(wù)。
3)實(shí)時(shí)數(shù)據(jù)庫的設(shè)計(jì)
以面向?qū)ο缶幊蹋∣OP)的設(shè)計(jì)技術(shù),將實(shí)時(shí)數(shù)據(jù)庫定義為類的形式。如圖 2 所示,將實(shí)時(shí)數(shù)據(jù)庫類定義的與各圖形顯示模塊、歷史數(shù)據(jù)存盤模塊等相聯(lián)系的接口函數(shù)劃分為幾個(gè)模塊加以說明:
實(shí)時(shí)數(shù)據(jù)庫初始化模塊:該模塊主要是根據(jù)先進(jìn)控制所需要的數(shù)據(jù)創(chuàng)建各數(shù)據(jù)對(duì)象,以鏈表作為存儲(chǔ)方式,并建立各數(shù)據(jù)對(duì)象對(duì)應(yīng)的對(duì)象名索引,以提高訪問數(shù)據(jù)對(duì)象的訪問速度,同時(shí)建立 Access 歷史數(shù)據(jù)庫。
基本操作模塊:提供數(shù)據(jù)對(duì)象的基本操作,如通過數(shù)據(jù)對(duì)象名或 ID 取得數(shù)據(jù)對(duì)象的其他屬性或通過名稱取得數(shù)據(jù)對(duì)象的 ID 等等。
讀寫數(shù)據(jù)操作模塊:提供數(shù)據(jù)對(duì)象的讀寫數(shù)據(jù)操作,將存放在數(shù)據(jù)緩沖區(qū)的現(xiàn)場(chǎng)值寫入實(shí)時(shí)數(shù)據(jù)庫的數(shù)據(jù)對(duì)象的現(xiàn)場(chǎng)值屬性中去,讀取數(shù)據(jù)對(duì)象中的當(dāng)前值。
3通訊設(shè)備讀寫操作模塊:管理通訊設(shè)備,讀取設(shè)備的當(dāng)前工作狀態(tài),對(duì)指定的設(shè)備進(jìn)行操作。
窗口操作模塊:讀取用戶窗口的名稱,對(duì)指定的用戶窗口進(jìn)行操作,讀取用戶窗口的當(dāng)前狀態(tài)。
報(bào)警操作模塊:存儲(chǔ)報(bào)警信息,讀取數(shù)據(jù)對(duì)象的報(bào)警限值。
存盤操作模塊:在 Access 數(shù)據(jù)庫中存儲(chǔ)需要存盤的數(shù)據(jù)。
3.實(shí)時(shí)數(shù)據(jù)庫的實(shí)現(xiàn)
實(shí)時(shí)數(shù)據(jù)庫中的數(shù)據(jù)對(duì)象類的定義:數(shù)據(jù)對(duì)象分為模擬量、開關(guān)量、字符串三個(gè)類型,下面重點(diǎn)介紹模擬量類的定義,并給出部分VC++代碼,其他類的定義與此類似,在此不做介紹。
//模擬量的類定義:
class AnalogType : public CObject
{
public:
AnalogType();
virtual ~AnalogType();
private:
//基本屬性操作參數(shù)
CString ObjectName; //對(duì)象名
float ObjectInivalue; //初始值
float ObjectMinvalue; //最小值
float ObjectMaxvalue; //最大值
CString ObjectUnit; //對(duì)象的工程單位
int ObjectPointN; //小數(shù)位數(shù)
//存盤操作參數(shù)
BOOL IsSave; //是否存盤
int SaveTime; //存盤時(shí)間
//報(bào)警操作參數(shù)
BOOL IsAlarm //是否報(bào)警
int AlarmPriority; //優(yōu)先級(jí)
float LowLowvalue; //低低報(bào)警
float Lowvalue; //低報(bào)警
float HeighHeighvalue; //高高報(bào)警
float Heighvalue; //高報(bào)警
float LowDevvalue; //低偏差報(bào)警值
float HeighDevvalue; //高偏差報(bào)警值
int FieldvalueInt; //現(xiàn)場(chǎng)的實(shí)時(shí)整型值
float FieldvalueFloat; //現(xiàn)場(chǎng)的實(shí)時(shí)模擬值
//定義數(shù)據(jù)操作
public:
//定義屬性的輸入接口提供初始化操作
void SetObjectName(CString name) {ObjectName=name; }
void SetObjectInivalue(float inivalue) {ObjectInivalue=inivalue;}
void SetObjectMinvalue(float minvalue) {ObjectMinvalue=minvalue;}
void SetObjectMaxvalue(float maxvalue) {ObjectMaxvalue=maxvalue;}
void SetObjectUnit(CString unit) {ObjectUnit=unit;}
……
//定義輸出接口,提供給基本數(shù)據(jù)操作和存盤、報(bào)警操作
CString GetObjectName() { return ObjectName; }
float GetObjectInivalue() { return ObjectInivalue;}
float GetObjectMinvalue() { return ObjectMinvalue;}
float GetObjectMaxvalue() { return ObjectMaxvalue;}
CString GetObjectUnit() { return ObjectUnit;}
……
//現(xiàn)場(chǎng)的實(shí)時(shí)值操作
void SetFieldvalue(float valuefield) {Fieldvalue=valuefield; }
float GetFieldvalue() { return Fieldvalue; }
};
實(shí)時(shí)數(shù)據(jù)庫類的設(shè)計(jì),用 VC++聲明的頭文件如下:
class RealDB : public CObject
{
private :
AnalogType *TemAnalog;
SwitchType *TemSwitch;
POSITION temposition;
int DataNum;
private:
//創(chuàng)建 Access 歷史數(shù)據(jù)庫和表
BOOL CreateNewTable();
BOOL CreateHistoryAlarmDB();
BOOL CreateHistoryObjectTable();
public:
CDaoTableDef *m_newtable;
CDatabase m_dataobject;
CObList m_listdata; //數(shù)據(jù)對(duì)象的鏈表
CString IndexTag[200]; //定義最大數(shù)據(jù)對(duì)象個(gè)數(shù) 200
int AnalogSwitchSign; //定義模擬和開關(guān)型的分割位置
//操作
public:
RealDB();
virtual ~RealDB();
BOOL CreateDataObject(); //創(chuàng)建數(shù)據(jù)對(duì)象
//數(shù)據(jù)對(duì)象的基本操作
BOOL GetProFromName(CString Name, int Type , float InitV ,CString Unit ,
float MaxV , float MinV , int PointN );
BOOL GetProFromID(int id,CString Name, int Type , float InitV ,CString Unit ,
float MaxV , float MinV , int PointN );
int GetIDFromDataName(CString dataname); //通過標(biāo)記名取得 ID 號(hào)
CString GetDataNameFromID(int id); //通過 ID 取得數(shù)據(jù)對(duì)象的名稱
int GetDataType(CString Name);
int GetAlmDataName(CString name[200]); //報(bào)警數(shù)據(jù)對(duì)象集合
int GetSaveDataName(CString alarmname[200]); //保存數(shù)據(jù)對(duì)象的集合
//數(shù)據(jù)對(duì)象的現(xiàn)場(chǎng)值讀寫操作
BOOL GetvalueFromName(CString name,float value); //通過標(biāo)記名取得現(xiàn)場(chǎng)值
BOOL SetvalueFromName(CString name,float value); //通過標(biāo)記名將現(xiàn)場(chǎng)值寫入數(shù)據(jù)對(duì)象中
BOOL GetvalueFromID(int id,float value); //通過 ID 號(hào)取得現(xiàn)場(chǎng)值
BOOL SetvalueFromID(int id,float value); //通過 ID 號(hào)寫入現(xiàn)場(chǎng)值
BOOL GetvalueArrayFromID(int Num,int id[],float value[]);//成組讀取數(shù)據(jù)對(duì)象的現(xiàn)場(chǎng)值
BOOL SetvalueArrayFromID(int Num, int id[], float value[]);//成組寫入數(shù)據(jù)對(duì)象的現(xiàn)場(chǎng)值
……
};
4 結(jié)束語
實(shí)時(shí)數(shù)據(jù)庫設(shè)計(jì)是先進(jìn)控制軟件設(shè)計(jì)的重要組成部分,是難點(diǎn)部分,本文通過對(duì)實(shí)時(shí)數(shù)據(jù)庫的概述和分析,論述了實(shí)時(shí)數(shù)據(jù)庫模塊的實(shí)現(xiàn)方法,以面向?qū)ο蟮木幊谭绞浇o出了定義類的部分代碼。實(shí)時(shí)數(shù)據(jù)庫系統(tǒng)復(fù)雜,由于篇幅有限,本文沒有一一詳細(xì)說明。筆者所開發(fā)的實(shí)時(shí)數(shù)據(jù)庫可以與已經(jīng)開發(fā)的先進(jìn)控制軟件連接起來,已經(jīng)在實(shí)驗(yàn)室調(diào)試通過,還有一些工作(如實(shí)時(shí)數(shù)據(jù)庫管理系統(tǒng)、實(shí)時(shí)數(shù)據(jù)庫接口等)也正在進(jìn)行。
標(biāo)簽:
中國傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動(dòng)網(wǎng)(www.wangxinlc.cn)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“中國傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。