APP下载

基于Linux平台组态软件图形界面系统的设计研究

2015-03-31刘思洋

物联网技术 2015年3期
关键词:组态软件

刘思洋

摘 要:主要介绍了工业控制组态软件开发环境中图元类的设计思想,结合实时数据库应用,并利用QT集成开发工具及C++面向对象的特性,给出了在Linux平台下组态人机界面中图元类的一种设计实现方法,实现了图元控件的封装性、独立性和可重用性。

关键词:组态软件;图元设计;组态动画;Linux

中图分类号:TP316 文献标识码:A 文章编号:2095-1302(2015)03-00-03

0 引 言

随着工业控制自动化水平的不断提高,计算机应用技术在工业控制领域的应用也越来越广泛。其中,组态软件是用于管理、控制和监控工业生产现场的软件平台,主要是指控制数据采集与生产过程监控的专用软件。组态软件解决了以前在控制系统中的复杂流程设计、以及数据采集等功能需要依靠复杂编程来实现的问题。它可以为工程人员提供使用灵活的组态开发方式和运行环境,在工业控制系统中同时进行工业现场实时数据的采集处理和存储,数据趋势显示、图形动画展示、报表、实时报警显示等多种任务。并且能够提供数据安全访问机制,可以采用基于角色的多级关系安全访问控制对实时数据库进行操作,防止未授权用户修改或删除工业控制现场的有效数据,避免非法访问系统而造成工业生产事故和损失。

工业控制应用的硬件平台种类繁多,硬件平台上的软件系统需要有良好的可移植性。Linux操作系统是基于Unix设计理念发展出来的操作系统,其系统源代码是开源的。虽然目前存在很多不同的Linux,但它们都使用了Linux内核并且具有广泛的硬件支持,可以安装在各种计算机硬件设备中,如台式计算机,大型机、手机、平板电脑、路由器等,因此非常适合于工业控制领域。Linux内核功能全面,具备网络管理、网络服务等方面的功能,可使用户很方便地建立高效稳定的通信,非常适用于工业控制领域自动化中的设备通信需求。其系统设计模块化程度高,代码的开源性也为用户提供了很高的自由度,对于工业控制领域中多样的需求,开发者可以根据个性化需求而有针对性的对操作系统源代码进行修改和优化,综合各方面优势,使得Linux操作系统能够在工业控制领域取得广泛的使用。

1 组态介绍,结构

组态软件系统需要适用于工业控制现场管理,其结构主要是由组态开发模块,用户界面运行模块,实时数据库系统,通信模块以及I/O驱动模块等组件组成,结构框图如图1所示。其中,用户图形界面系统将直观的展示系统运行状态,是最直观,与用户交互也最直接的主要模块。

图1 组态软件主要架构

从用户使用的角度来看,组态软件一般由开发环境和运行环境组成。工程人员在开发环境下,根据不同的工业现场设计需求,进行个性化的组态和配置,进入运行系统后,将已经设计好的组态程序进行运行,图形界面运行系统通过通信模块与实时数据库通信,数据库通过I/O通信模块采集现场设备数据并进行处理。一方面,实时数据库通过IO通信模块获取工业现场产生的实时生产数据,经过数据库处理后传送回组态运行界面,组态运行系统能够以图形或数据直观展示工业现场的生产情况,能够进行报警处理,显示趋势曲线等多种方式向用户提供工业控制解决方案。另一方面,用户也可以通过修改运行环境中的图形元素和参数配置,通过通信接口向图元对应的工控现场设备发送指令。组态软件就可以使用户能够以直观简洁、便于操作的方式管理和监控工业现场的生产情况和相关数据。

组态软件系统采用Qt/E集成开发工具进行设计开发。Qt/E最初由奇趣科技开发,后来为诺基亚公司收购,是一个跨平台的C++应用程序以及UI开发框架。它支持Linux操作系统,具有跨平台的优势,同时,也支持其他常见的如Windows操作系统,真正实现了一次开发而跨平台运行的目标。

Qt提供的信号和槽(Signal/Slot)机制是其核心特征机制之一。它可以让编程人员把一些互不了解的对象绑定在一起,用于对象之间的通信,槽可以和信号连接在一起,每当发射信号时,就会自动调用槽函数。它和普通C++成员函数几乎是一样的,可以是虚函数,可以被重载,可以是共有的、保护的或者私有的,并且也可以被其他C++函数直接调用,参数也可以是任意类型。而且,编程人员在开发时可以设计自己的信号和槽,将信号联系到某个槽上,则槽会在正确的时间,以正确的信号参数被调用。

Qt具有完备的图形开发工具,提供了双缓冲机制,能够把一个窗口部件渲染到一个脱屏QPixmap中,然后再把这个QPixmap复制到显示屏幕上。因此,用于组态图形运行系统中就能够消除屏幕的闪烁,更好地支持组态运行系统中图形界面的操作和展示,因此QT集成开发环境非常适用于组态软件的开发目标。

2 组态图形运行系统的设计

组态软件中,构成工业控制现场的图形界面由各个简单的图元对象组成,它们是组态运行画面的基础单元,也是动画功能的基本元素,主要分为基本图元和动态图元两类。每个图元拥有影响和决定其外观展示的各种属性,用户通过配置不同的属性值,在进入运行系统后将体现为不同形式的外观展示。Qt的视图框架中包括QGraphicsView,QGraphicsScene, QGraphicsItem和Qpainter,能够提供给用户开发图形界面所需的必要元素,并且使用C++高级编程语言,支持面向对象开发。能够进行图元的图形展示,可以绘制从简单的直线到复杂的和弦曲线等形状和动画效果。

从Qt 4.2开始引入的QGraphicsView框架用来取代Qt 3中的Canvas模块,并在很多地方进行了改进,QGraphicsView能够管理大量图元,支持如碰撞检测、坐标变换等功能。QGraphicsView中的图元能够处理键盘事件、鼠标事件,包括鼠标按下,移动,释放,双击事件,能够跟踪鼠标移动。在QGraphicsView框架中,通过二元空间划分树提供了快速的图元查找,这样就能够实时地显示大场景。框架中包含三个主要的类,分别是QGraphicsView,QGraphicsScene, QGraphicsItem,依次分别是视图,场景和图元。

QGraphicsItem是在一个QGraphicsScene中最基本的图形类,它是在QGraphicsScene 中绘制的各个图形的项的基类,类中包括声明图形项的位置,进行碰撞检测,绘制的重载和进行各个项之间的相互作用的事件处理等属性。

Qgraphicsscene进行场景的展示,包含许多不同的项。场景(以及它的项)在视图中显示,这样用户就可以看到了。QGraphicsView提供一个显示QGraphicsScene内容的窗口,可以在构造时候把场景对象作为参数,或者之后使用setScene()来设置View的场景,然后调用show()函数后,view就可以默认的在场景的中心进行图形界面的显示。

2.1 简单静态图元

图形运行系统简单的静态图元,例如直线、圆形、多边形等,在绘制此类图形时,需要用到QPainter类,自定义图元类继承QWidget类并重载paintEvent ( QPaintEvent * )方法,可以在派生的图元类中重新实现绘图事件。

由于不同图元要求图形有不同形状,大小和颜色等,需要重写其paint函数,对图元类的属性值进行赋值,画出期望的图形形状和颜色,以矩形图元为例:

class MyRect: public QGraphicsObject{

public:

MyRect( );

QRectF boundingRect() const;

void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);

};

重写paint函数,对不同属性进行赋值,在函数定义中实现图像的绘制。

void MyRect::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){

Q_UNUSED(option);

Q_UNUSED(widget);

painter->setPen(QPen(Qt::black,2));

painter->setBrush(QColor(255,80,60));

painter->drawRect(-50,-50,50,20);

}

即可构造出自定义大小/形状和颜色的平面矩形形状。其他简单图形例如圆形、直线、多边形等,都可以使用类似的方法进行定义和重写,就可以设计画出不同的简单图形元素。

2.2 动态图元的设计实现

系统中的动态运行图元类能够灵活而直观的显示工业现场运行状态,每一个动态的控件有独立的数据源,因而有特定的动画功能和效果。以动态图形水管流动的图元为例,可以使用QT/E中QGraphicsDropShadowEffect 类并设置数据范围使得管道流水具有阴影效果,并且将图元项添加到动画组QParallelAnimationGroup中,则动态图元类型具有阴影动画效果,以水管WaterPipe类为例,实现代码如下:

WaterPipe::WaterPipe(QGraphicsItem *parent)

: WaterPipePart(parent)

{

//setFlag(ItemHasNoContents);

QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect;

effect->setBlurRadius(1);

this->setGraphicsEffect(effect);

QGraphicsObject *flowItem = new Flow(this);

QGraphicsObject *pipeItem = new Pipe(this);

pipeItem->setPos(0,20);

flowItem->setPos(20,21);

QParallelAnimationGroup *animation = new QParallelAnimationGroup(this);

QPropertyAnimation *flowAnimation = new QPropertyAnimation(flowItem, “pos”);

flowAnimation->setStartValue(QPointF(63,0));

flowAnimation->setEndValue(QPointF(117,0));

animation->addAnimation(flowAnimation);

animation->setLoopCount(-1);

animation->start();

}

在视图QGraphicsView中添加包含有WaterPipe类型图元项的QGraphicsScene场景,进行初始化和调用显示函数后,在图形界面运行系统中便会显示出水管动态流动的画面效果,因此,对于类似的具有动态画面效果的图元类型,可以采用上述方法设计实现,并能够在Linux平台系统中得到良好应用。

3 结 语

本文采用在Linux系统下Qt/E进行开发设计,解决了组态图形界面中的简单图元设计和实现的问题,提出了采用面向对象设计思想,对不同的静态和动态图元控件类的设计开发和研究。随着工业自动化的发展和控制系统的规模不断增大,使得组态软件的功能需求日渐增多,系统变得更加复杂。由于组态软件系统整体的复杂性,组态软件系统中各个模块之间的交互以及运行展示仍需要根据实际应用中的不同需求、不同情况进行不断的优化和完善。

参考文献

[1]王亚青,陈青,刘畅生,等. 组态软件设计与开发[M]. 西安:西安电子科技大学出版社,2003.

[2]李冬梅. 基于Qt的组态软件的设计与开发[D].大连:大连理工大学,2012.

[3]段鹏,金敏. 嵌入式Linux组态软件图形界面设计实现[J].微计算机信息,2008(5):47-48.

[4]谭晓鹏. 工业控制中嵌入式组态的研究[D]. 成都:电子科技大学,2008.

[5]安吉宇. 基于Qt的Linux组态软件研究与开发[J]. 电子器件,2006(2):29-35.

猜你喜欢

组态软件
基于面向对象的组态软件实时数据库的设计
PLC与组态软件在空压机气源测控系统中的应用
基于WebAccess的PLC远程控制系统设计