侵权投诉

搜索
更多>> 热门搜索:
订阅
纠错
加入自媒体

新型DCS组态软件实时数据库研究和开发

2012-06-26 16:16
苏子言岁月
关注

1 引言

  在工业企业信息化过程中,随着关系数据库应用的局限性不断被发现,实时数据开始逐步使用。与关系数据库相比,在工业企业中,生产数据的描述相对简单,但其点数非常多,导致了实时数据库和传统的关系数据库有不同的侧重点。实时数据库在快速处理大量简单生产数据,具有很大的优势。本文的工作建立在已经搭建的基于工业以太网和can总线的中小型现场总线控制系统fcs(fieldbus control system)硬件平台上,参考了开源内存数据库fastdb的实现机制,开发环境是vc++ 6.0。

2实时数据的概念和模型

  实时数据库系统的功能特性与实时应用的语义紧密相关,必须首先明确其性质与要求,进而确定rtdbs的设计目标、功能、特性、系统模型。这种应用往往有下列特性:数据时效性(最主要的区别);测点数量多(每秒内要处理大量的数据);存取速度快;数据存贮量(临时存储大量的数据);数据之间的约束关系简单。因此面向实时应用时候可以将数据库理论中的部分功能弱化而将部分功能强化。例如,弱化表之间的关系描述;弱化了数据库理论中的事务处理逻辑等等,舍弃了关系数据库中的触发器,存储过程等高级功能,实时数据库弱化这些功能,用以实现高效的数据插入和查询功能。历史数据库和实时数据库系统主要表现在数据和事务的时间特性上。一个实时数据对象可以抽象为一个三元组:d其中data为数据对象标识,分量dv为数据的当前状态或值(value);dotp是数据的观测时标(observation timestamp),devi是数据的外部有效期(external validateinterval),即自dotp算起,dv的有效性的时间长度。具体应用中实时数据结构模型根据具体的设计需求,在这三元组上进行扩展,还包含其他属性。

3 实时数据库系统功能和结构图

  实时数据库在系统中处于中枢环节,数据采集、计算、传输、显示和存储都需要实时数据库的相应功能来支持。通过i/o采集模块获取的现场数据经过程序解析后得到实时数据库可以识别的位号名和过程值。在写入实时数据库的时候会进行量程变换、参数补偿、滤波和累积等组态信息进行计算和各种报警处理,然后将采集到的数据写入实时数据库对应的i/o点变量中。模拟量输出(ao)和数字量输出(do)在实时数据库中经过解析之后,生成传输协议指定的格式通过i/o输出模块发送到主控卡。以上是数据的大体流程,如果这个过程中数据结构定义不完善,就会大大影响系统的效率,因此定义合理的数据结构使数据分发过程快速地完成是提高系统实时性的主要方法之一。系统中既有现场控制站的i/o数据,也有系统的内部变量,变量类型有整型、布尔型、浮点型,为了方便处理,对所有点进行抽象,提出一个统一的实时数据模型,本文中实时数据对象结构定义如下:

  class crtrecord {public:char* psztagname; //位号的名称long tagid;

  //位号idshort tagtype; //位号类型float pv; //采样值float pvpre;

  //上次采样值time_t lsampletime0; //上次采样时间time_t lsampletime;

  //本次采样时间time_t lvalidateinterval; //数据有效期bool btransrange;

  //是否量程变换float feuhi; //量程上限float feulo; //量程下限float fpvrawlo;

  //原始据上限float fpvrawhi; //原始数据下限bool balarming;//是否处于报警状态bool

  balarmen; //报警开关float falarmdb; //报警死区bool bhialarmen;

  //高限报警bool bhhalarmen; //高高限报警bool bllalarmen; //低低限报警bool

  bloalarmen; //低限报警float fllalarmvalue; //报警值int nllprio;

  //低低限报警级别float floalarmvalue; //低限报警值int nloprio;

  //低限报警级别float fhialarmvalue; //高限报警值int nhiprio; //高限报警级别float

  fhhalarmvalue; //高高限报警值int nhhprio; //高高限报警级别bool baccumulate;

  //累积开关int ntimecoeff; //时间系数int nunitcoeff; //单位系数bool

  bfilter; //是否滤波int nfilterconst; //滤波常数bool bsqrt;

  //是否开方int nsigcutthreshold;

  //小信号切除阈值}这样定义的数据结构可以方便的完成各种计算和报警操作,比如进行量程转换直接就可以使用这个实时数据对象的量程上下限和原始数据上下限字段进行计算,模拟量位号的变化率报警也可以根据本次采样值和上次采样值的关系推导出来。监控程序如流程图显示、实时趋势图、实时报警等要频繁的从实时数据库检索实时数据,因此实时数据库要支持多线程访问。这样就必须处理好并发控制和事务调度,这也是设计实时数据库的难点。实时数据库还要提供第三方接口,可以方便和其他的程序进行通讯。图1是组态软件实时数据库相关的功能和结构图,实时数据库起到一个核心的作用。

 

1  2  3  下一页>  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号