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