组态软件实时数据库系统的设计及其实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第09卷 第7期 中 国 水 运 Vol.9 No.7 2009年 7月 China Water Transport July 2009
收稿日期:2009-05-10
作者简介:史 燕(1984-),女,杭州电子科技大学自动化学院硕士研究生,主要研究方向为智能仪表与控制装置。 基金项目:省重点科研项目。
组态软件实时数据库系统的设计及其实现
史 燕
(杭州电子科技大学 自动化学院,浙江 杭州 310018)
摘 要:为实现组态软件实时数据库系统的设计思想和实现方法,分析了组态软件的核心,介绍了组态软件实时数据库的设计方法,并摒弃了传统的利用DDE(Dynamic Data Exchange-动态数据交换协议)建立实时数据库系统的方法,采用了DLL(Dynamic Link Library-动态链接库)来建立实时数据库系统的新方法,给出了数据模型和接口机制的实现方法。实践证明该组态软件实时数据库系统具有很强的通用性和开放性。 关键词:组态软件;实时数据库系统;DLL;数据模型;接口机制
中图分类号:TP311.132 文献标识码:A 文章编号:1006-7973(2009)07-0112-03
组态软件是中文的说法,一般英文简称有三种分别为HMI/MMI/SCADA,对应全称为Human and Machine Interface/Man and Machine Interface/Supervisory Control and Data Acquisition,中文翻译为:人机界面/监视控制和数据采集软件。目前组态软件的发展迅猛,已经扩展到企业信息管理系统,管理和控制一体化,远程诊断和维护以及在互联网上的一系列的数据整合。目前,在Windows 环境的组态软件中I/O 接口驱动程序与系统实时数据库之间的数据交换一般都是在运行程序的参与下利用动态数据交换协议(DDE)来实现的。但由于DDE 是基于消息的协议标准,即使是一个简单的数据发送过程也需要处理数条消息,因而使得数据交换效率受到一定的影响。当系统在单位时间内需要采集或传递的数据点数较多时,这个问题尤其突出。而实时数据库的一个典型约束就是事物处理必须在特定的时间内及时完全完成[1],基于此思想,从提高系统的实时性能出发,本文提出了利用Windows 的动态连接库和全局共享内存技术来建立实时数据库系统的设计思想,将实时数据库存储于动态连接库所拥有的全局内存中,然后通过该动态连接库提供的接口函数来实现对数据库的读写以及查询和管理等功能,保证了实时数据库的共享性及最快的响应速。
一、实时数据库组态软件的核心分析
组态软件是数据采集与过程控制的专用软件,它们是在自动控制系统监控层一级的软件平台和开发环境。以组态方式提供给用户开发界面和使用方法,组态软件的结构可分为三个层次,图1是工控组态软件层次结构图。
(1)其中I/O 驱动程序接口模块位于组态软件底层,它主要完成现场控制站与上层软件之间的数据信号的转换和缓存。
(2)实时数据库控制模块位于组态软件的中间层, 它实现实时数据、历史数据、设备数据等数据之间的关联和控制,并与实时显示模块、报警模块和现场控制模块进
行通信控制[2]。实时数据库及时准确地获取现场数据是整个控制系统正常工作的基本前提,同时实时数据库管理系统是联系图形系统、历史数据库系统、报表系统、报警系统的桥梁和纽带,是组态软件的核心。又由于实时数据库核心问题在于事务处理既要确保数据的一致的一致性,又要保证事务的正确性,而它们都与定时限制相关联,即系统的正确性不仅依赖于逻辑结构,而且还依赖于逻辑结构产生的时间,因此实时数据库系统的设计是重点也是难点,受到研究者的极大关注[3]。
(3)关系型数据模块位于组态软件的顶层,它主要完成用户对数据库提出的各种操作查询请求。
图1 组态软件的层次结构
二、组态软件实时数据库的设计
第7期 史 燕:组态软件实时数据库系统的设计及其实现 113
1.实时数据库事务调度系统的设计
传统数据库系统和实时数据库系统的事务调度的目标是不同的,前者是为了提高系统对事务的吞吐量,而后者则是要求能使尽量多的事务在其期限内完成,有实时性限制。因此,在实时数据库系统中,实时事务的调度与传统数据库系统中的事务调度是有很大差别的,大多数实时调度策略都是围绕事务优先级进行的[4]。
在组态软件系统进入运行环境后,同时要进行与下位机数据采集、数据处理、图形显示刷新、紧急事件报警和历史数据存盘等事务的处理,并且所有这些事务都要求进行并行处理,如等待时间过长, 将无法满足实时性要求。这样就要求我们实现一种并行编程,在单CPU 的机器上,将该CPU 的时间按照一定的优先准则分配给各个事件,定期处理某一事件而不会对某一事件处理时间过长,为此,在Windows 环境下,采用多线程编程技术进行设计,以达到各事务的协调[5],下图2即为实时数据库系统事务调度分析图。
图2 实时数据库系统事务调度分析图 2.实时数据库的存储策略
由于传统的数据库基本上都是面向事务的,它所采用的数据表示方法、存储模式和存取手段尚难达到工控组态软件所要求的响应速度。所以在设计时为了处理时空矛盾,应优先考虑效率的要求,必须在规定的时间内得到数据。应该根据组态软件对不同类型的数据所要求的响应速度以及数据量的大小来制定数据的存储策略。为此,我们采用传统的数据库系统、文件管理系统和内存缓冲区三者相结合的方法,利用多种存储介质来构造组态软件的实时数据库[6]。
(1)采用Microsoft SQL Server2005作为外存数据库,存取现场设备的历史数据和数据量大而组态软件无特殊要求的共享数据等,通过实时数据库提供的接口函数对它进行操作。
(2)采用文件管理系统直接存取需要长期保存的非共享型数据,主要是组态软件的组态参数。
(3)采用内存缓冲区存取每个采样周期都要更新的数据如A/D、D/A、DI、DO 值,以及各种经常变化的实时数据,保证最快的响应速度。
这样,既保证了数据的共享性、独立性、安全性和完整性,又节约了内存,保证了系统的响应速度。
三、实时数据库系统的实现 1.实时数据模型的实现
实时数据模型中包含三方面的内容:一个是实时数据对象本身,一个是对实时数据对象的操作,还有一个是对实时数据对象的完整性和一致性的约束。因此着眼于组态软件和实时数据库的特点,本文选用VC++作为开发工具,利用面向对象技术,在组态数据库的基础上将实时数据对象分为模拟对象、数字对象、内存变量对象三类,使得实时内存数据库与组态数据库在根本上保持一致。
所有实时数据对象均派生自CObject 类,CObject 类是Windows 系统下用于表示对象的最基本类,是一个抽象类。下面我们主要介绍实际数字量类的定义,其他类的定义与此类似,这里不加介绍。实际数字量类定义如下:
Class CDigitalType:public CObject{ public://定义属性
int Index,TypeId;//定义记录号、节点号
int Deviceid,TypeType;//定义所属设备号、节点数据类型1,2,3,4,5
CString TypeName,TypeScript//点名,点描述 CString Ipaddr;//点地址链接描述符
int Offset,PhicalType;//偏移地址,硬件类型 bool Value;//裸数据点值
bool LastValue;//裸数据上次点值 fioat PorcessValue;//工程值
int rawhigh,rawlow;//裸数据上、下限 float high,low;//工程值上、下限
bool Initialvalue,Issaved;//初始值,是否存盘 bool Isalarm,AlarmValue;//是否报警,报警值 CString ProjectTag;//描述工程单位 CString AlarmInfo;//报警信息
float Rate, RateInterval;//变化率, 变化率周期 int Interval;//扫描周期
DWORD PrevTime;//上次采集时间ms
Sturct_SYSTEMTIME realtime;//上次采集时间 int RealTimeType,Pri;//固软实时、优先级 int OpMode;//只读,只写,读写 float WI;//优先级加权因子
struct HistoryBufferp Buffer;//设定历史缓冲区指
针
public:
virtual bool ReadLogic(LINK,int);//物理点值读取
virtual void WriteLogic(LINK,int);//物理点值写入
Virtual const CDigitalType
&operator=(CDigitalType & Pnode); void JudgeConstraint();//约束判断
virtual void Serialize(CArchive & Ar);//使之序列化};