推广 热搜: 电机  PLC  变频器  服务机器人  培训  变送器  危化品安全,爆炸  西门子PLC  触摸屏  阀门 

先进控制软件系统实时数据库的设计

   日期:2013-03-23     来源:工控之家网    作者:工控之家    浏览:26    评论:0    
 
前 言
    近年来,DCS(集散控制系统)以其强大的控制功能、可靠的安全性能和良好的可移植性在国内外工控领域获得广泛的应用,DCS的日益普及为实现先进控制、实时优化等新技术提供了强有力的硬件支持和保障。先进控制除了具有改善控制性能、提高经济效益等主要功能外,也是深度开发和利用DCS资源、提高企业自动化和管理水平的重要途径。先进控制软件的设计一般分为几个模块:模型辨识器、多变量预估控制器、鲁棒PID控制器(含各种中间控制器)、实时数据库、工艺计算包等,其中实时数据库模块是其他模块的纽带和桥梁。所以,实时数据库模块设计的好坏直接影响到先进控制软件设计的成败。实时数据库是先进控制软件系统的重要组成部分,也是设计的难点之一。实时数据库是先进控制软件系统的数据处理中心。在先进控制系统投用运行环境时,工业现场的生产状况将实时地反映在变量的数值中,操作者在计算机前发布的指令也要迅速送达生产现场,所有这一切都是以实时数据库为中介环节。同时,实时数据库又是事务调度中心,数据采集事务、图形显示事务、报警事务、历史数据存盘事务等等都由实时数据库统一调配,从而达到控制的实时性。

1.实时数据库概述
    在引入实时数据库概念之前,先介绍一下数据对象。在先进控制软件设计中定义的数据不同于传统意义的数据或变量,它不只包含了变量的数值特征,还将与数据相关的其它属性(如数据的状态、报警限值等)以及对数据的操作方法(如存盘处理、报警处理等)封装在一起,作为一个整体,以对象的形式提供服务。这种把数值、属性和方法定义成一体的数据称为数据对象。在设计中,用数据对象来表述系统中的实时数据,用对象变量代替传统意义的值变量。用数据库技术管理的所有数据对象的集合称为实时数据库,实时数据库提供管理、刷新、查询数据对象等操作。

    实时数据库与普通商用数据库不同,实时数据库的主要目标是使尽量多的事务在规定的时间要求内完成,而不是公平地分配系统以使所有的事务都得到执行。它有以下几个特点:

    1)时间约束实时数据库系统的主要特征是在数据对象和事务上施加了时间约束。对数据的时间约束,就是在数据库的普通一致性要求以外,又规定了时态一致性要求。在实时系统中,具有时间约束的数据主要来自于外部的动态数据,如由传感器采集的现场数据,和由这些数据导出的数据。因此,可将数据的时间约束分为两类,即数据的绝对一致性和数据的相对一致性。数据的绝对一致性是指实时数据库中的数据应与外部数据(又称为环境数据)相一致,即要求数据库中的数据能及时地反映外部环境的状态。例如,在化工过程控制系统中,要求数据库中记录的塔的温度、压力等信息,与塔的实际的温度、压力等参数保持一致。这种一致性的破坏有时可能会导致灾难性的后果。在实时系统中,常常需要从一组数据项导出另外的数据,例如,根据系统的电流、电压导出系统的功率。此时往往要求用来导出新数据的一组数据在时间上应尽量接近,这就形成了实时数据库系统中数据的相对一致性概念。

    2)事务调度
    传统数据库系统中,事务调度的目标是提高系统对事务的吞吐率,但实时数据库系统则要求能使尽量多的事务在其期限内完成。因此,实时事务的调度与传统数据库系统中的事务调度是有差别的。大多数的实时事务调度策略都是围绕事务的优先级进行的。

    3)实时数据库的实时数据存储管理
    实时数据库主要承担系统所有实时数据的存储和管理,为相关的功能提供快速、正确的实时信息,因此,对实时数据库来说,其实时性是第一位的,考虑到这一点,实时数据库在系统运行过程中,应占用空间小,并常驻内存,以保证数据库读取速度快,存取灵活,易于各功能模块之间的数据共享。

    实时数据库的数据共享采用内存文件映射来实现。 对于那些实时性要求不高的非共享数据和共享数据,如采样值的转换系数等可以放在外存储空间。因此,在实时数据库设计时,要妥善处理时间和存储空间之间的矛盾,以保证先进控制系统的实时性。

2 实时数据库的分析与设计

    首先从功能角度分析实时数据库的设计。
    1)实时数据库系统的功能分析:
    现场数据采集:实时数据库提供了与典型数据源的接口,读写通讯设备寄存器的现场值,送到开辟的内存缓冲区。

    预处理机制:可以直接在实时数据库中对原始数据进行处理,如数据转化。滚动存储机制:实时数据库的各数据对象以链表形式存放在内存中,故数据库的容量相对容固定,当新的数据产生时,自动更新数据对象的现场值属性。

    自动更新机制:当实时数据库中的数据对象现场值属性改变时,自动启动线程,更新显示画面的数据

    显示,如需存盘,存入 Access 数据库中,实现实时监控。

    触发和定时机制:提供丰富的触发和定时机制,供各类数据处理、先进控制和优化算法使用,以保证数据的实时性、有效性、一致性。补偿机制:当不能保证连续运行时(如系统备份),需要提供相应的补偿机制,以保证数据不会丢失。

    数据检索机制:可以以类似于关系型数据库的方式检索实时数据库中的数据对象,取得所需的数据对象属性或操作。
    
    态汇总机制:实时数据库提供了报警状态、操作事件等信息的动态汇总功能。

    2)实时数据库事务调度分析

    在先进控制软件系统投入运行后,同时要进行与 DCS 数据采集、数据处理、图形显示刷新、历史数据存盘、紧急事件报警或越位报警等等,所有的这些事务,都要并行处理,如等待时间太长,无法满足实时性的要求。这样就要求我们实现一种并行编程,在只有一个 CPU 的机器上,也就是要将该 CPU 时间按照一定的优先准则分配给各个事件,定期处理某一事件而不会在某一事件处理过长,在 32 位 Windows98或 WindowsNT4.0 下,用多线程的编程技术来实现这种并行编程,实时调度各事务。

    3)实时数据库的设计
    以面向对象编程(OOP)的设计技术,将实时数据库定义为类的形式。如图 2 所示,将实时数据库类定义的与各图形显示模块、历史数据存盘模块等相联系的接口函数划分为几个模块加以说明:

    实时数据库初始化模块:该模块主要是根据先进控制所需要的数据创建各数据对象,以链表作为存储方式,并建立各数据对象对应的对象名索引,以提高访问数据对象的访问速度,同时建立 Access 历史数据库。

    基本操作模块:提供数据对象的基本操作,如通过数据对象名或 ID 取得数据对象的其他属性或通过名称取得数据对象的 ID 等等。

    读写数据操作模块:提供数据对象的读写数据操作,将存放在数据缓冲区的现场值写入实时数据库的数据对象的现场值属性中去,读取数据对象中的当前值。

    3通讯设备读写操作模块:管理通讯设备,读取设备的当前工作状态,对指定的设备进行操作。

    窗口操作模块:读取用户窗口的名称,对指定的用户窗口进行操作,读取用户窗口的当前状态。

    报警操作模块:存储报警信息,读取数据对象的报警限值。

    存盘操作模块:在 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; //优先级
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:
//创建 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(); //创建数据对象
//数据对象的基本操作
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 结束语
    实时数据库设计是先进控制软件设计的重要组成部分,是难点部分,本文通过对实时数据库的概述和分析,论述了实时数据库模块的实现方法,以面向对象的编程方式给出了定义类的部分代码。实时数据库系统复杂,由于篇幅有限,本文没有一一详细说明。笔者所开发的实时数据库可以与已经开发的先进控制软件连接起来,已经在实验室调试通过,还有一些工作(如实时数据库管理系统、实时数据库接口等)也正在进行。

 
打赏
 
更多>同类环保知识
0相关评论

推荐图文
推荐环保知识
点击排行
网站首页  |  免责声明  |  联系我们  |  关于我们  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  RSS订阅  |  违规举报  |  鲁ICP备12015736号-1
Powered By DESTOON