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