组态软件实时数据库系统的设计及其实现
- 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);//使之序列化};
114 中 国 水 运 第09卷
2.利用DLL建立系统运行实时数据库系统
作为一个开放式的系统,组态软件一个显著的特点是具有标准的开放的外部访问接口,能够为第三方用户程序所访问,从而有利于现有系统与扩展的系统有机的整合。
作为实时内存数据库,对于外部访问还有实时性的要求,而且实时数据库本身并不是以文件的形式存在,它是在实时数据库系统运行过程中构造出来的,传统的数据库接口比如ODBC,DAO,ADO等都是面向数据库文件的,因此对于实时内存数据库本身,已不能采用传统的方法。
作为一个开放式的系统,组态软件一个显著的特点是具有标准的开放的外部访问接口,能够为第三方用户程序所访问,从而有利于现有系统与扩展的系统有机的整合。
作为实时内存数据库,对于外部访问还有实时性的要求,而且实时数据库本身并不是以文件的形式存在,它是在实时数据库系统运行过程中构造出来的,传统的数据库接口比如ODBC,DAO,ADO等都是面向数据库文件的,因此对于实时内存数据库本身,已不能采用传统的方法。
作为另外一些的数据交换方式DDE(Dynamic Data Exchange-动态数据交换协议)等虽然可以为了兼容现有的一些产品而采用,但速度是个问题[7]。
动态连接库DLL(Dynamic Link Library)是Windows 中的一种特殊的程序单元,被称为非任务化的可执行模块,它们由调用者的任务所驱动。
所谓动态连接是与静态连接相比较而言的,静态连接是由连接程序将静态连接库中的函数或资源在连接时拷贝给每个运行程序,而动态连接仅将DLL 在内存中装入一次。
因此在多任务环境下使用DLL可节约内存,提高程序的执行效率。
Windows中DLL的单实例运行特性使得它成为存放共享代码及资源的理想场所。
通过DLL 中的函数,所有使用DLL的应用程序可以存取DLL所拥有的全局数据,从而实现任务间的快速通信。
实时数据库接口由一组API函数组成,利用这些接口函数,I/O驱动程序和各个用户程序模块可以直接访问实时数据库,而无须绕道运行程序、这样系统不但具有全面的开放型和二次开发功能,而且实时性大大高于DDE方式[8]。
因此,本文采用的动态链接库DLL和全局内存共享的技术,不仅解决其连接的问题,而且由于其着眼于内存,也大大加快了接口的速度。
3.实时数据库的接口机制
实时数据库接口是系统提供给用户的一个开放的接口规范,它允许用户利用该接口直接访问实时数据库,这样就给用户提供了方便捷径的途径去开发输入输出接口驱动程序以及用户算法模块。
实时数据库建立在动态连接库的全局内存中,而对实时数据库的访问是通过动态连接库提供的一组API函数来实现的。
当系统运行时,运行程序负责启动该动态连接库,这样其他应用程序就可以通过接口函数对实时数据库进行操作了。
表1列出了实时数据库接口中常用的几个函数。
表1 实时数据库的部分接口函数
函数原型 参数说明
BOOL GetValueFromID
(int NodeID,float Value)
根据节点ID号从实时数据库中
读取数据
BOOL SetValueFormID
(int NodeID,float Value)
根据节点ID号将现场值写入实
时数据库
int GetIDFromNodenName
(CString NodeName)
根据节点名取得节点ID号 int GetTagNum() 查询变量的个数
BOOL GetpRroFromID
(int ID,CString Name,int Type...)
根据ID号取得其他属性 CString GetNodeNameFromID
(int NodeID)
根据ID号取得节点对象的名称由于用户可以利用系统提供的接口函数实现与实时数据库的数据交换,因此针对不同的工控设备只需要开发不同的驱动程序即可。
这说明该组态软件实时数据库系统与工控设备无关,具有很强的通用性和开放性。
四、结束语
本文在介绍工控组态软件的层次结构和分析组态软件核心问题的基础上,采用传统的数据库系统、文件管理系统和内存缓冲区三者相结合的方法,利用多种存储介质来构造实时数据库系统,从而满足组态软件对实时性的要求;采用VC++作为开发工具利用CObject最基类来存储实时数据库变量,搭建数据模型;采用Windows的动态连接库和全局共享内存技术来建立系统运行的实时数据库;并通过给用户提供一套接口标准——实时数据库接口,来实现I/O驱动程序及用户程序和实时数据库的高速数据传递。
实践验证利用本文建立的组态软件实时数据库系统具有很强的通用性和开放性。
参考文献
[1] Quazi N.Ahmed,Susan V.Vrbsky. Maintaining Security in
Firm Real-Time Database Systems[J].IEEE,2006,362-364.
[2] 宋志崇,王 建.组态软件实时数据库系统研究[J].企业应
用,2008,11(3):34-36.
[3] 杨华丽,石 锐,胡 捷等.组态软件实时数据库的设计和
实现[J].实验技术与管理,2007,24(3):80-83.
[4] 宋清昆,孙元娜,王学伟等.组态软件时数据库系统的设
计[J].计算机应用,2008,27(1):55.
[5] KRITHI R,SANG H.SON,LISA.CD.Real-Time
Databases.
and Data Services[J].Real-Time System,2004,28:179-193.
[6] 张齐,周博慧.组态软件实时数据库的设计与实现[J].微电
子学与计算机,2007,23(2):160-162.
[7] 何熠.监控组态软件数据库的研究[D].天津:天津大学,
2004.
[8] 季玲莉.监控组态软件数据库的研究[D].武汉:武汉理工大
学,2006.。