您现在的位置是:首页 > 工控

工控系统中实时数据库关键技术研究与实现

2020-01-26 11:00:30

   文章介绍了在面向工控自动化过程的实时监控系统建设中,实时数据库系统的设计。针对实时数据库系统的特点,分析了实时数据库的功能模块、存储结构、事务调度和并发控制等关键技术并给出了具体实现方法。在实现过程中采用了多媒体定时器、内存映射文件、多线程、同步对象等技术,保证了系统的稳定性和强实时性。

  1 引言

  现代工业的特点要求全过程的实时监控,高速的实时数据处理、长期的历史数据存储以及生产信息的集成与共享。要满足上述对生产数据的处理要求仅靠大量采用集散控制系统(DCS)和关系数据库技术并不能完全解决问题。DCS数据存储能力有限,同时企业中异构的DCS无法进行有效的数据共享。而关系数据库数据处理速度低,无法对生产过程数据进行及时高效的存储。

  为了解决上述问题,实时数据库作为一个关键的支撑技术引入工业控制系统。在生产设备运行过程中,实时数据库系统实时采集设备的运行数据,随时掌握装置的运行情况,并通过对生产过程的关键数据的实时监控分析,对出现的问题即时进行处理,使生产的运行状态保持平稳。实时数据库还是是连接工业生产控制系统与企业上层管理系统的桥梁,企业可以通过实时数据库系统提供的数据平台,为经营决策、计划调度、先进过程控制,质量监控等分系统提供同一的数据平台。

  2 实时数据库系统概念和特点

  实时数据库系统(RTDBS)就是其事务和数据都可以有定时特性或显式的定时限制的数据库系统。系统的正确性不仅依赖于逻辑结果,而且还依赖于逻辑结果产生的时间。对于实时数据库系统,数据的一致性和执行的周期性是重要的目标,由于在实时系统中经常以固定的时间周期收集被控系统的实时数据,相应的控制系统也必须周期性地处理数据和作出响应;由于传统的关系型数据库在一些时限要求严格的场合不能满足实时系统对数据实时性的要求,而内存直接寻址是一种具有高速的数据访问方式,在技术上采用内存数据库是解决这一问题的理想解决方案。

  整个实时数据库系统方案的设计分为驻内和留外两个部分,驻内部分即为内存数据库,是实时数据库的主体,存储形式可采用顺序结构,B树结构或多目录搜索哈希技术(散列技术)。内存数据库定时进行事务处理,对超过一定时间的数据从内存中清除,写到外存数据库中。外存数据库即磁盘数据库或历史数据库,用于历史记录分析,报表生成答应或相关决策等等。本系统历史数据库采用的是Microsoft公司的数据库产品SQLServer。

  3 关键技术研究和实现

  3.1数据的实时采集

  在工业控制系统中,数据采集程序的实时性和稳定性对于整个工控系统的性能起着至关重要的作用。Windos提供的定时器TImer远达不到要求,必须使用精度更高的定时器来取代。

  Windows系统下的多媒体定时器API函数TImeSetevent和TImeKillEvent就能很好的满足实时性的要求。该多媒体定时器工作在自己的线程内,且它的线程优先级(threadprioritylevel)设定为THREAD_PRIORITY_TIME_CRITICAL,这比绝大部分的线程优先权数值都高,相比工作在用户界面线程内的Timer定时器来说,它不受消息机制的影响,能够达到很高的定时精度。它的最高定时精度能够达到1ms,能够满足较高实时性的要求。

  3.2内存数据库技术

  内存数据库指数据库常驻内存及事务的数据存取只涉及内存。内存数据库是支持实时事务的一种最佳技术,其本质特征是其“主拷贝”或“工作版本”常驻内存,活动事务只与实时内存数据库的内存拷贝交互,显然,它需要较大的内存量。内存数据库可以简记为MMDB。MMDB的“工作版本”常驻内存,在任何一个事务执行过程中没有内外存间数据I/O。这为系统较准确估算和安排事务的运行时间、实现事务的定时限制打下了基础,从而满足外部事务应用对响应时间和事务吞吐率的需求。

  3.2.1利用内存映射文件共享内存

  共享内存是实时数据库核心技术之一。所谓内存映射文件,即在内存中申请一块内存空间,将一个文件与这块空间相联系,再进行内存映射,这样,操作文件就有和操作内存一样的效率,几个进程可以通过操作该映射文件,实现进程间在内存一级的高速数据交互。当采用内存映射文件方式时,Windows对于再次使用该文件的进程不在创建新的映射文件对象而共享前一段内存映射对象,并将该对象映射成两个地址空间,这种机制不仅有效地利用了内存,同时也实现了数据的共享。要在Windows2000下实现内存读写一级的数据通信效率,唯一的办法就是使用内存映射文件。内存映射文件使用方法如下:

  (1)创建或打开文件内核对象

  创建或打开一个文件内核对象,总要调用CreateFileCreateFile函数:HANDLECreateFile

  (2)创建一个文件映射内核对象。