论文部分内容阅读
[摘要]设计一种基于Qt Graphics View的组态仿真框架。按照Graphics View模块化的设计思路,首先介绍其每个模块的特性,并在此基础上提出组态仿真的设计要素。最后提出控制策略和数据库的设计思路。
[关键词]Qt Graphics View 组态 仿真 控制策略
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0320043-01
一、引言
随着信息技术和自动化技术的飞速发展,可视化组态软件系统在工程设计、地形勘测、游戏开发等诸多领域都有着广泛的应用。开发一款控制算法高效、功能完善且具有灵活扩展性的组态仿真软件可能是一项十分复杂的工作,但优秀的软件框架无疑是至关重要的。
Qt是一套优秀的跨平台应用程序开发包,自4.2版本开始引入的Graphics View框架对于开发者有很大的吸引力。Graphics View提供基于图元的模型视图设计方式,具备完善的图元管理、碰撞检测、外部事件处理及坐标变换等功能。Graphics View包含三个主要模块,它们分别是场景(Scene)、视图(View)和图元(Item)。下文将从模块的角度,利用Graphics View设计一个通用的组态仿真框架。
二、视图模块
Graphics View的视图模块提供了场景的载体,其实现类为QGraphicsView, 该类继承自QAbstractScrollArea,是一个可滚动的窗口组件。在设计过程中,可以直接利用QGraphicsView的子类作为软件的顶层组件,更常用的方法是将其作为QMainWindow的中心部件,这样可以充分利用QMainWindow的菜单栏和工具栏实现功能的统一化布局和管理。
视口的几何变换功能可以在该模块完成。QGraphicsView类提供了统一的视口变换方法setMatrix,从而将旋转、缩放、平移、仿射等变换统一为矩阵变换。值得注意的是,矩阵变换仅改变场景的显示效果,并不影响实际的图元数据。所有这些功能可以转化成为模块的接口,通过信号槽机制连接用户界面,响应用户操作。
三、场景模块
Graphics View的场景模块主要由QGraphicsScene类来实现。绘图场景模块位于整个组态仿真框架的中间层次:外层有可视化模块QGraphicsView的支持,同时场景也管理着框架最内层次的图元模块、控制着图元的几何变换和渲染、重绘、设置字体和颜色等变换。利用场景可以实现对大量不同类型图元的系统方便的管理。
在仿真框架中,我们将控制逻辑加入到该模块,使其具有控制器的功能。根据软件的具体需求不同,该模块可能执行不同的操作,一般分为以下几类:1.响应各种鼠标和键盘事件,实现对图元的编辑功能;2.响应图元状态改变的事件(包括图元焦点事件、位置改变事件、文字插入事件等);3.通过控制逻辑执行相应的图元处理,并将处理结果反馈给视图模块和相应的图元;4.通过事件广播机制管理场景内各种类型图元的属性。
场景模块中的控制逻辑部分用来定义应用程序在整个场景和图元之上的行为。场景从视图模块获得用户命令,然后传送给控制逻辑执行,对图元进行相应的处理。最后场景模块更新图元数据,并将更新通知给视图模块。实现了三个模块的同步更新。对于控制逻辑的管理可采用策略模式(Strategy Pattern)进行:定义统一的接口,不同的控制算法以不同的方式实现此接口。
四、图元模块
Graphics View框架中的图元是软件中需要管理和编辑的对象。基类QGraphicsItem定义了所有图元类型的共同属性和方法,另外,框架也提供了最常用的几种标准图元,如矩形图元(RectItem)、文本图元(TextItem)、位图图元(PixmapItem)等。在框架的设计过程中,我们可以根据需求继承QGraphicsItem,实现自己的图元类型。在实际应用中,我们常常需要在同一场景中建立大量不同类型的图元对象,对它们的统一管理也可使用策略模式。QGraphicsItem的接口type()可进行图元类型统一识别。
考虑到实际应用中众多的模块类别及数据流格式,对于图形化组态仿真来说,关键是如何建立起反映实际拓扑结构的模块和流程。Graphics View中的图元具有碰撞检测、外部事件响应及相互之间的逻辑关联、定向信息传递等特性,利用这些特性可以很容易地实现组态仿真软件中的数据流动、信息反馈、实时监控等业务逻辑。例如,用户可以根据连线的源图元和目的图元类型及连线方向很容易地判断出相关业务信息。另外,QGraphicsScene通过二叉搜索算法进行图元查找,大大提高了搜索效率,对于业务逻辑非常复杂、模块众多的仿真仍能够做到很高的实时性。
五、控制策略
组态仿真重要的是做到准确、实时地模拟实际系统,在模拟的过程中,控制策略起着关键作用。本文涉及的控制策略主要包含两个部分:场景的控制和单个图元的控制。场景的控制即系统全局状态的控制由场景模块的控制逻辑部分来完成,而单个图元的控制通过图元对象自身与外界的交互来完成。这种集中加分布式的控制策略既便于整个仿真系统的统一管理,也增加了系统各个逻辑模块自主运作的灵活性,减轻了控制逻辑的工作负担。
六、数据库
组态仿真系统的数据库用来记录系统中各个模块的属性和当前状态信息,以及模块之间的关联信息。对于一般框架而言,数据库中应包含如下信息:1.图元的静态属性(编号、名称、模块类别、所执行的业务逻辑等);2.图元的动态属性(位置、大小、当前状态等);3.图元的输入接口和输出接口的属性;4.图元之间连线的属性(连线的序号、信息流向、上下游图元的接口号等)。
如果软件设计为单机模式,控制策略和数据库可作为与视图、场景并列的模块;如果软件设计为客户机/服务器模式,则可由服务器负责数据库和控制策略算法的管理。
七、结束语
本文讨论了Qt的Graphics View各个模块的主要特性以及如何利用这些特性完成一个通用的组态仿真软件框架的设计,该框架虽然不够细化,但能反映出一般组态仿真系统的一些共性。在控制策略完善的情况下,利用Graphics View框架可以设计出界面美观、执行效率高、一体性和灵活性较好的仿真系统,CISCO公司的仿真软件Packet Tracer 5便是一个成功的案例。
参考文献:
[1]薛福珍、侯菲莉,基于环节的控制系统图形组态仿真软件[J].系统仿真学报,2002,14(7).
[2]杨晨、钟晶亮,分布式控制系统可视化组态仿真软件开发[J].系统仿真学报,1999,11(4).
[3]蔡志明,精通Qt4编程[M].北京:电子工业出版社,2008.
[4]Nokia. Qt 4.4.3 Reference Documentation,2008.
[关键词]Qt Graphics View 组态 仿真 控制策略
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0320043-01
一、引言
随着信息技术和自动化技术的飞速发展,可视化组态软件系统在工程设计、地形勘测、游戏开发等诸多领域都有着广泛的应用。开发一款控制算法高效、功能完善且具有灵活扩展性的组态仿真软件可能是一项十分复杂的工作,但优秀的软件框架无疑是至关重要的。
Qt是一套优秀的跨平台应用程序开发包,自4.2版本开始引入的Graphics View框架对于开发者有很大的吸引力。Graphics View提供基于图元的模型视图设计方式,具备完善的图元管理、碰撞检测、外部事件处理及坐标变换等功能。Graphics View包含三个主要模块,它们分别是场景(Scene)、视图(View)和图元(Item)。下文将从模块的角度,利用Graphics View设计一个通用的组态仿真框架。
二、视图模块
Graphics View的视图模块提供了场景的载体,其实现类为QGraphicsView, 该类继承自QAbstractScrollArea,是一个可滚动的窗口组件。在设计过程中,可以直接利用QGraphicsView的子类作为软件的顶层组件,更常用的方法是将其作为QMainWindow的中心部件,这样可以充分利用QMainWindow的菜单栏和工具栏实现功能的统一化布局和管理。
视口的几何变换功能可以在该模块完成。QGraphicsView类提供了统一的视口变换方法setMatrix,从而将旋转、缩放、平移、仿射等变换统一为矩阵变换。值得注意的是,矩阵变换仅改变场景的显示效果,并不影响实际的图元数据。所有这些功能可以转化成为模块的接口,通过信号槽机制连接用户界面,响应用户操作。
三、场景模块
Graphics View的场景模块主要由QGraphicsScene类来实现。绘图场景模块位于整个组态仿真框架的中间层次:外层有可视化模块QGraphicsView的支持,同时场景也管理着框架最内层次的图元模块、控制着图元的几何变换和渲染、重绘、设置字体和颜色等变换。利用场景可以实现对大量不同类型图元的系统方便的管理。
在仿真框架中,我们将控制逻辑加入到该模块,使其具有控制器的功能。根据软件的具体需求不同,该模块可能执行不同的操作,一般分为以下几类:1.响应各种鼠标和键盘事件,实现对图元的编辑功能;2.响应图元状态改变的事件(包括图元焦点事件、位置改变事件、文字插入事件等);3.通过控制逻辑执行相应的图元处理,并将处理结果反馈给视图模块和相应的图元;4.通过事件广播机制管理场景内各种类型图元的属性。
场景模块中的控制逻辑部分用来定义应用程序在整个场景和图元之上的行为。场景从视图模块获得用户命令,然后传送给控制逻辑执行,对图元进行相应的处理。最后场景模块更新图元数据,并将更新通知给视图模块。实现了三个模块的同步更新。对于控制逻辑的管理可采用策略模式(Strategy Pattern)进行:定义统一的接口,不同的控制算法以不同的方式实现此接口。
四、图元模块
Graphics View框架中的图元是软件中需要管理和编辑的对象。基类QGraphicsItem定义了所有图元类型的共同属性和方法,另外,框架也提供了最常用的几种标准图元,如矩形图元(RectItem)、文本图元(TextItem)、位图图元(PixmapItem)等。在框架的设计过程中,我们可以根据需求继承QGraphicsItem,实现自己的图元类型。在实际应用中,我们常常需要在同一场景中建立大量不同类型的图元对象,对它们的统一管理也可使用策略模式。QGraphicsItem的接口type()可进行图元类型统一识别。
考虑到实际应用中众多的模块类别及数据流格式,对于图形化组态仿真来说,关键是如何建立起反映实际拓扑结构的模块和流程。Graphics View中的图元具有碰撞检测、外部事件响应及相互之间的逻辑关联、定向信息传递等特性,利用这些特性可以很容易地实现组态仿真软件中的数据流动、信息反馈、实时监控等业务逻辑。例如,用户可以根据连线的源图元和目的图元类型及连线方向很容易地判断出相关业务信息。另外,QGraphicsScene通过二叉搜索算法进行图元查找,大大提高了搜索效率,对于业务逻辑非常复杂、模块众多的仿真仍能够做到很高的实时性。
五、控制策略
组态仿真重要的是做到准确、实时地模拟实际系统,在模拟的过程中,控制策略起着关键作用。本文涉及的控制策略主要包含两个部分:场景的控制和单个图元的控制。场景的控制即系统全局状态的控制由场景模块的控制逻辑部分来完成,而单个图元的控制通过图元对象自身与外界的交互来完成。这种集中加分布式的控制策略既便于整个仿真系统的统一管理,也增加了系统各个逻辑模块自主运作的灵活性,减轻了控制逻辑的工作负担。
六、数据库
组态仿真系统的数据库用来记录系统中各个模块的属性和当前状态信息,以及模块之间的关联信息。对于一般框架而言,数据库中应包含如下信息:1.图元的静态属性(编号、名称、模块类别、所执行的业务逻辑等);2.图元的动态属性(位置、大小、当前状态等);3.图元的输入接口和输出接口的属性;4.图元之间连线的属性(连线的序号、信息流向、上下游图元的接口号等)。
如果软件设计为单机模式,控制策略和数据库可作为与视图、场景并列的模块;如果软件设计为客户机/服务器模式,则可由服务器负责数据库和控制策略算法的管理。
七、结束语
本文讨论了Qt的Graphics View各个模块的主要特性以及如何利用这些特性完成一个通用的组态仿真软件框架的设计,该框架虽然不够细化,但能反映出一般组态仿真系统的一些共性。在控制策略完善的情况下,利用Graphics View框架可以设计出界面美观、执行效率高、一体性和灵活性较好的仿真系统,CISCO公司的仿真软件Packet Tracer 5便是一个成功的案例。
参考文献:
[1]薛福珍、侯菲莉,基于环节的控制系统图形组态仿真软件[J].系统仿真学报,2002,14(7).
[2]杨晨、钟晶亮,分布式控制系统可视化组态仿真软件开发[J].系统仿真学报,1999,11(4).
[3]蔡志明,精通Qt4编程[M].北京:电子工业出版社,2008.
[4]Nokia. Qt 4.4.3 Reference Documentation,2008.