基于组件的小型分布式控制系统软件的设计及应用

2012-05-11 00:45徐兰春
微型电脑应用 2012年5期
关键词:图元人机界面内存

徐兰春

0 引言

当前虽然分布式控制系统软件众多,但是均由专门厂商开发,拥有庞大的软件包,价格昂贵。对于中小型企业来说,他们需要的是一套小巧、经济实用、操作起来简明方便、运行稳定可靠、易于扩展因此的系统,因此灵活、易于扩展、集成、高内聚、低耦合的小型分布式控制系统软件需求很强。

采用国际电工委员会的IEC61131-3开放型国际编程标准编写控制系统软件,因此通用性得到保证,并且采用面向对象和基于组件的开发思想,使得开发各个模块简明直观、易于复用和扩展。实时数据库数据分类存储,提高了系统运行效率和实时性。使用XML技术存储数据,使得其网络上易于传输。

1 系统的总体设计

结合中小型企业对控制软件要求小巧、经济实用、稳定可靠、易于扩展等需求特点,本文设计了DCS软件系统结构系统的典型模块包括:集中应用程序管理器、人机界面模块(包括开发和运行两部分)、实时数据库模块、历史数据库模块、I/O驱动模块,如图1所示:

图1 系统总体结构

系统通过I/O驱动模块从工业现场设备获得数据,对数据进行必要转换,送到实时数据库后,一方面通过人机界面模块把需要显示的信息显示在屏幕上,另一方面按照组态要求和操作员的指令将控制指令信息送到工业现场设备,对执行机构实施控制。对于需要存储的历史变量,周期地从实时数据库中获取。

2 人机界面的模块设计

人机界面模块完成系统和用户之间的交互作用,主要包括以下功能:1)图形显示功能;2)图形编辑功能;3)图形文件管理。虽然工业现场设备种类繁多,外形各异,但是各种复杂设备的图形均可由一些基本的图元组成,我们可以用这些基本图元构成复杂的工业流程画面。用户在人机界面模块中的基本操作,如图2所示:

图2 人机界面模块设计图

2.1 各种图元类的实现

本系统人机界面模块采用C#编程语言,在Visual Studio 2010环境下开发,将图元分为3种:基本图元类、合成图元类、动态图元类。我们先抽象出一个抽象的抽象图形类CGraphicObject,让基本图元类、合成图元类、动态图元类来继承它,抽象图形类有Color和Pen等字段,还有待实现的Draw()、SetData()、Inside()、Intersect()、DisplayFocus()等方法,用于保存图元的数据、绘制图元、和判断图元所处的位置。基本图元类包括直线CLine、圆CCirc、方形CRect、折线Cbrok类等,他们继承抽象图形类CGraphicObject,实现父类的一些方法,并添加自己特有的字段和方法;下面是基本图元类中方形类的定义:

public class CRectangle:CGraphicObject

{

public Point x;

public long w,h;

……

public CRectangle();

public CRectangle(Point x,long w,long h);

public CRectangle(Point x,Point y);

public override void SetData(Point x,Point y);

public override void Draw(Graphics g);

public override bool Inside(Rectangle R);

public override bool Intersect(Point p);

public override void DisplayFocus(Graphics g);

……

}

和基本图元类一样,合成图元类仍然继承基类CgraphicObject,所不同的是合成图元类多了一些字段和方法:如字段Grapiclist用来存储基本图元对象,方法AddObj()和Remove(),用于增删合成图元内子对象;动态图元类也是由基本图元类CGraphicObject直接派生而得来的,它特有的属性为sbdrawing和m_vnum等。Sbdrawing是一个数组,用来存储大量的基本图元对象,m_vnum是数组中具体某个图元的下标,通过数它可以获得相应的图元,设置相应属性,如是否显示等。

2.2 基本图元的存储

绘制好的基本图元,我们需要将它以文件的形式保存,在开发模块中,图元信息应保存在内存中以便用户对图元进行修改。一般有数组、链表、关系数据库文件的保存方式。链表优点插入图元和删除图元比较方便、缺点实现起来比较复杂。关系数据库文件方式优点使用起来比较方便,缺点系统开销太大,另外保密性不好。本系统采用数组的方式,这个方法实现起来比较容易。我们定义一个图形数组类,包含一个List类型的字段list,用于在内存中保存已绘制的图形(各个CgraphicObject对象),还有一些对字段list中对象进行操作的方法。绘图完成时需要将所绘制的图形保存起来以便下次使用,使用XmlSerializer进行串行化,将图元对象以文件的形式保存起来,当需再次打开图形使用时,通过Deserialize操作,再在把图形对象绘制出来。

3 实时数据库模块的设计

实时数据库除了具有传统数据库的功能外,还有自己的特有的性质,主要实时性方面的要求。实时系统数据库要求在规定的时间内完成指定的任务。

3.2 实时数据库模块的实现

1.实时数据库中数据的面向对象分析。在分布式控制软件中,实时数据库处理的对象一般是各种“点”(或称为变量)。一个点由若干参数组成,系统以点的参数保存各种信息。一般来说,标准的点类型有:模拟I/O点类型、数字I/O点类型、模拟内存点类型、数字内存点类型、累计点类型等[1]。结合所有类型“点”的性质抽象出一个基类,基类直接派生出I/O点和内存点;I/O点派生出I/O数字点和I/O模拟点,内存点派生出内存数字点和内存模拟点。

2.实时数据库系统数据的存储策略。实时数据库系统综合采用了传统数据库系统、文件系统和内存数据库系统。采用的存储策略是:(1)对于长期需要保存的非共享数据,采用文件的方式存储在磁盘或者其他可以移动的设备上,具体方法与本文基本图元存储类似。(2)对于工业控制过程中有些数据量很大,但又不经常使用的数据,将其存放在外存中,采用微软的SQL Server,可以通过LINQ to SQL对数据进行存取操作。(3)对于每个采样周期都要更新的数据采用内存数据库系统存取。本文采用红黑树来组织这类数据,红黑树在二叉树定义的基础上,增加了自己的5条规则:1)任何一个节点不是红色就是黑色;2)根节点为黑色;3)如果节点是红色,则子节点必为黑色;4)任意一个叶子节点必须为黑色;5)任何以节点至NULL(树尾端)的任何路径,所含黑节点的个数必须相同。以上5条性质的强约束使得这棵树是大致平衡的,因此对红黑树元素的操作(如查找)在最坏的情况下都是高效的。在一棵有100万个节点的树中查找任意元素最多需要约30次比较,实时性得到保证。为了便于对底层数据进行操作,采用C++开发实时数据库。下面是红黑树类的定义:

class Rb_Tr

{

private:

Tr_node*root;//根指针

Tr_node*Nil;//哨兵结点指针

public:

Rb_Tr();

~Rb_Tr();

void Leaf_Rotate(Tr_node*x);//左旋转

void Right_Rotate(Tr_node*x);//右旋转

bool RB_Search(int k,Tr_node*&x);//搜索

bool RB_Insert(Tr_node*x);//插入

void RB_Insert_Fixup(Tr_node*z);//插入后调整红黑树结构

void RB_Create(int A[],int n);//创建红黑树

Tr_node *RB_Successor(Tr_node*x);//返回结点x的直接后继

bool RB_Delete(int k);//删除

void RB_Delete_Fixup(Tr_node*x);//删除后调整红黑树结构

void LevelOrder_Traverse();//层次遍历红黑树

void InOrder_Traverse();//中序遍历红黑树

};

这样,通过外存数据库(SQL Server 2008)、文件管理系统、内存数据库,既保证了数据的共享性、完整性、又节约了内存,保证了系统的响应速度。

4 历史数据库模块的设计

历史数据库用于存储实时数据库中需要长期保存的数据,它按照一定的周期定时从实时数据库中获取数据。该模块的设计主要用到了LINQ to SQL,它是.NET Framework 3.5版的一个组件,提供了用于将关系数据作为对象管理的运行时基础结构[3]。在 LINQ to SQL 中,关系数据库的数据模型映射到用开发人员所用的编程语言表示的对象模型。我们在SQL Server 2008中建立历史数据库,建立所需要存储各类点的表,然后在Visual Studio 2010环境下使用对象关系设计器,把历史数据库中的数据模型映射到我们编程语言表示的对应模型上,从而实现历史数据库中的数据与编程语言(C#或C++)表示的对像模型数据(人机界面模块中的数据和实时数据库中的数据)交互。

5 小型控制系统软件的应用

本软件开发的某船舶控制系统的压载系统监控界面,图中为自动控制模式下的压载水置换模式工况。该模式下船的左舷向右舷排水或右舷向左舷排水以平衡船在水中的姿态。使用情况表明该系统稳定可靠、界面直观易懂、实时性良好,并能根据各种工况进行相应的处理,如图3所示:

图3 压载系统人机界面

6 结论

本文结合中小企业对分布式控制系统软件需求的特点,设计了一个小型的分布式控制系统软件。文中重点论述了人机界面开发和实时数据库两个核心模块,采用了面向对象的思想来设计分析各个模块底层的数据结构,对高层软件架构采用了基于组件开发的思想,使得软件结构清晰合理,易于开发、便于扩展,同时使用起来稳定可靠、经济适用。

[1]李建伟,郭宏.监控组态软件的设计与开发[M].冶金工业出版社.2007.

[2]马国华.监控组态软件及其应用[M].清华大学出版社.2001.

[3]王小科,王军.C#开发实战1200例[M].清华大学出版社.2011.6.

[4]程洁.大话设计模式[M].清华大学出版社.2007.12.

[5]廖勇,李新峰,付志涛.Visual C#学习笔记[M].电子工业出版社.2008.5.

[6]付钊,吕海峰.组态软件中实时数据库的研究[J].计算机时代.2011.7.

猜你喜欢
图元人机界面内存
学术出版物插图的编排要求(一):图注
联锁表自动生成软件的设计与实现
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
CBTC系统车载人机界面的设计与实现
电气CAD接线图快速转换G图形的技术应用研究
内存搭配DDR4、DDR3L还是DDR3?
CTCS-3级列控车载人机界面的系统设计与实现
达人机界面DOP-B10VS511
数控车床的工艺与编程