基于PhAB的图形控制界面设计

时间:2022-02-01 07:35:14

基于PhAB的图形控制界面设计

摘 要:介绍在QNX实时操作系统图形界面开发环境PhAB下的软件设计特点。结合船舶动力装置控制系统的具体要求,从界面绘制、资源设置和函数调用等三个方面对船舶动力装置控制系统图形控制界面和程序进行设计,阐述设计特点,探索在PhAB下图形界面设计的一般方法。对在QNX下图形界面的设计开发具有一定的指导意义。经测试运行,设计系统能满足控制要求。

关键词:PhAB;船舶动力装置;图形界面;控件

中图分类号:TP274文献标识码:B

文章编号:1004-373X(2010)04-148-04

Design of Graphical Interface Based on PhAB

SHI Feng,HU Dabin,XIA Ji

(College of Naval Architecture and Power,Naval University of Engineering,Wuhan,430033,China)

Abstract:The characteristics of software design in QNX RTOS′s photon application builder(PhAB) are bined with detail requirements of control system on marine power,the photon interface and program of this system are designed with interface mapping,resource setting and function callbacks.The characters of the design are described,and the general methods of interface design under PhAB are discussed.The idea of designing has certain significance for the graphical interface design under QNX RTOS.After testing and running,the design system can satisfy the control requirement.

Keywords:PhAB;marine power device;graphical interface;control

0 引 言

在工业控制特别是较复杂的工业控制领域,由于被控对象的多样化和控制逻辑的复杂性,各种传统的控制方式逐渐被计算机控制所替代。一个完整的计算机控制系统分为硬件和软件两个部分,而计算机控制的最大特点就是可以在相同的硬件条件下通过设计不同的控制软件完成各类控制要求。计算机操作系统分为分时和实时两种,两类操作系统在计算机控制领域中都有应用。但由于分时操作系统本身的通用性特点,稳定性和可靠性不高,在工作环境恶劣,可靠性要求高的系统中很少采用。实时操作系统是一类更适合于控制的计算机操作系统,相比于分时操作系统,实时操作系统大多拥有微内核,并且通过对结果返回的时间限制来实现程序运行的可预测性,因此具有较高的稳定性和可靠性[1]。近年来,随着实时操作系统在一些可靠性和实时性要求较高的领域的成功应用,实时操作系统得以快速发展,为适应硬件的发展和用户的需求,各大实时系统开发商都开发出适合本系统的图形控制界面,如VxWorks的WindML和QNX的PhAB[2-5]。本文在某型船舶动力装置控制系统设计中,以实时操作系统QNX作为开发平台,研究在QNX图形界面开发器PhAB界面设计的方法和特点。

1 图形界面开发环境

PhAB(Photon Application Builder)是QNX集成开发环境(QNX Momentics IDE)的一个部分。PhAB的图形构建采用分层的方式,而且拥有微内核结构。这使得在PhAB下设计的图形控制界面不仅占用空间小,而且运行速度块[6]。

PhAB采用所见即所得的控制界面开发模式。在PhAB中进行界面设计的基本单元是控件(Widget),控件以类的方式定义,控件类的成员叫作控件的资源[7]。控件的资源有两种分类方式:一种是以C语言的变量名分类的,如长整型,字节型,字符串型等;另一种是以资源的赋值方式不同为依据分类的,如尺寸和颜色资源(Scalar and color resources),字符串资源(String resources),标记资源(Flag resources) 和链接资源(Link resources)等。控件类以树状排列,并拥有严格的父子关系。如图1所示。

在界面绘制中,控件的创建可以通过在控件框中选取相应控件后直接在界面编辑区域绘制,也可以使用PhAB提供的函数编写。

2 界面绘制

基于工程应用简单可靠的原则,在满足使用要求的条件下,在界面绘制中应选用较为简单的控件,即尽量选用图1中靠左边的控件[8-10]。在phab中,任何控件都有从PtWidget控件继承来的一个位置坐标参数和一个规定控件占用范围的参数。PhAB将这两个参数专门在编辑框的左边显示,通过设置这两个参数可以精确设定控件的坐标和在编辑框中占用范围的大小。

图1 控件类排列

界面的具体绘制如下:

边界和轮廓 边界和轮廓一般都由直线组成,因此选用直线控件(PtLine)绘制。直线控件是图形控件类(PtGraphic)下的子控件类,除继承图形控件类的资源外,直线控件还拥有用于规定直线起始坐标空间的Pt_ARG_ORIGIN资源和用于标记直线起点坐标和终点坐标的Pt_ARG_POINTS资源。在对直线控件进行相关设置时,直线的位置和长度可以通过直接拖动改变,更精确地设定则需要通过改变编辑框左边的坐标参数和范围参数确定。线条的颜色和宽度等可以通过对相关资源进行设置来改变,如通过改变Pt_ARG_COLOR资源的参数来改变直线的颜色,通过设置Pt_ARG_LINE_WIDTH资源的参数来改变直线的宽度。PhAB中,控件占用的空间并不仅仅是控件显示部分的面积,而是一个矩形区域,这个矩形区域将控件的所有显示部分包含在内。直线控件占用的空间就是以直线的起点和终点为对角的一个矩形区域,这点在对控件背景进行设置和判断控件的重合中需要考虑到。

显示框和标识框 显示框和标识框使用到基本控件(PtBasic)和容器控件(PtContainer)。从图1中可以看到,基本控件是PhAB中最基础的可显示控件,它是其他可显示控件的总父控件类。除继承PtWidget的资源外,基础控件还拥有用于显示的20多个新资源。如控件颜色资源,控件内部颜色资源和控件边界资源等。通过对这些资源的配置可以得到不同的显示效果。

基础控件在需要对显示框或标识框填写标题或设置改变尺寸时的动作时将无法满足要求,这时需要用到容器控件。

标识和信息显示 对标识和信息显示的绘制选用文本控件。系统设计中使用到的两类文本控件分别是PtText和PtMultiText。PtText是标签控件类(PtLabel)的子控件类。它对文字的编辑的支持较简单,仅支持单行文字显示,而且不能在同一个控件中使用不同的文字字体、字号和颜色等,优点是占用资源少,适合于普通标识性的文字使用场合。在该系统设计中大量用于文字显示的就是PtText控件。相对而言PtMultiText控件对文字编辑的支持要强大很多,它支持字符的多行显示,允许对同一控件中的字符进行字符大小、颜色等的编辑,能很好的支持复杂的信息显示。

阀件等特殊形状器件 PhAB并不像很多绘图工具一样为图形绘制提供各类通用的规则或不规则的图形或图标,因此在绘制特殊形状的器件图标时需要使用一个多边形控件(PtPolygon)对器件图标进行绘制。多边形控件是PhAB中功能最强大的控件之一。使用多边形控件绘制的图形分两种:一种是起点和终点重合的(在这种情况下即使绘制的时候没有将起点和终点连接在一起,系统也会在绘制完成后自动将其重合到一起)多边形;另一种是起点和终点不重合。 这种起点和终点的是否重合是通过配置对多边形控件的Pt_ARG_POLYGON_FLAGS标记资源是否有效来实现的。在前面已经提到PhAB控件占用的空间和在界面上显示的范围的不一致性,在对多边形绘制的控件进行配置时,控件的内部是指多边形各边围成的区域,而占用的范围是一个包含多边形所有边在内的矩形。以颜色设置为例,Pt_ARG_FILL_COLOR资源是对整个多边形占用范围的颜色进行填充,这块区域包括但不局限于多边形内部,填充的是一个矩形;而Pt_ARG_INSIDE_COLOR资源只对多边形各边围成区域的颜色进行填充,并且对多边形内部颜色的填充会覆盖对多边形所属区域颜色的填充。

控制按钮 在系统控制界面绘制中需要绘制多种形状不同的控制按钮,如控制窗口的打开按钮、阀件的控制按钮、被控对象的选取按钮等。进行这类按钮绘制的有按钮控件(PtButton)和按钮控件的两个子控件:开关按钮(PtOnOffButton)和索套按钮(PtToggleButton)。按钮的形状除了可以在控件所给形状的基础上修改,还可以通过在按钮控件的Pt_ARG_LABEL_IMAGE资源中载入或绘制图形来设定按钮的外形,在Pt_ARG_ARM_IMAGE资源中载入或绘制图形来设置按钮按下时的形状。因此,通过对按钮控件相关资源的配置,可以绘制出各种不同效果的按钮器件。图2所示即为该系统设计中绘制的不同形状的按钮。

图2 系统中各种形状按钮

在系统界面绘制中,当选定多个控件并把他们定义为一个组时,将生成一个新的控件:组控件(PtGroup)。组控件的资源并不是所有组成组控件的控件的相同资源的集合,而是一个独立的控件。组控件属于容器控件类的子控件类,除继承容器控件的资源外,它还新增了十多个用于处理组控件内各控件关系的资源。而且,改变组控件的资源除了能对它内部的成员之间的相互关系进行改变外,不对内部控件本身的特性作任何修改。在某种意义上来说,组控件就是一个规定了里面物品排放方式的容器,改变容器的式样并不会对里面所装物品有什么影响。

通过以上对控制界面具体绘制的分析,完成如图3所示的界面绘制。

3 控件和资源的相关设置

在系统界面的设计中进行的资源设置包括对资源的赋值和获取资源参数。资源的赋值和参数获取方式按资源的不同类别有所差别,但使用的函数是相同的。

系统的设计过程中需要在多种情况下对控件资源进行赋值,包括标识按钮形态,显示被监测量的状态和操作过渡状态的显示等。对资源赋值的函数有PtSetResource()和PtSetResources(),PtSetResource()用以对控件的单一资源进行赋值,函数定义如下:

int PtSetResource(PtWidget_t *widget,longtype,longvalue,longlen);

其中:*widge表示将要赋值的控件名指针;type表示将要赋值的资源;value和len表示赋值给资源的参数。

对多个资源同时赋值用到的是PtSetResources()函数,PtSetResources()函数要配合PtSetArg()函数一起使用,其中PtSetArg()起到赋值初始化的作用, 函数定义如下:

PtSetArg( PtArg_t *arg,longtype,longvalue,longlen);

图3 系统控制界面

其中:*arg表示装载赋值资源的变量的结构体队列首地址;type表示将要赋值的资源;value和len表示赋值给资源的参数。

int PtSetResources( PtWidget_t *widget,intn_args,PtArg_t const*args);

其中:*widge表示将要赋值的控件名指针;n_args表示同时赋值资源的个数;*args表示装载赋值资源的变量的结构体队列首地址。

资源参数的获取在系统中主要用于读取监测变量的状态,读取资源参数的函数为PtGetResource()和PtGetResources(),使用方法与资源赋值函数类似,因此不再详细说明。如下为一段以控件资源的赋值和读取来显示某控件图形变化的一段程序:

PtArg_t arg[2];

PhImage_t *image;

PtSetArg(&arg[1],Pt_ARG_ARM_IMAGE,&image,0);

PtGetResources(ABW_JKA,1,&arg[1]);

PtSetArg(&arg[1],Pt_ARG_ARM_IMAGE,image,0);

PtSetResources(ABW_ JKB,1,&arg[1]);

PtBkgdHandlerProcess();//刷新屏幕

4 控件函数调用

控制系统界面各部分的动作需要通过设计和编写程序实现。程序与控件的链接分两种情况,一种是通过编写程序改变控件的某些资源以达到反应被控量状态的目的,这种情况可以叫作控件的接收信号;另一种是当控件状态发生变化时,系统将为控件调用与这种变化相对应的链接函数,即控件的发出信号。控件的函数调用也属于控件的一类资源,即上文中提到的链接资源(Link Resources)。控件有多种函数调用方式,而且不同控件的可调用方式并不完全相同。下面为系统中用到的几种通用函数调用方式:

(1) 点击调用(Activate Callbacks):点击调用的控件资源是Pt_CB_ACTIVATE。当使用鼠标操作时,鼠标左键点击(一个按下后松开的过程)一个控件时将调用这个资源所链接的函数。点击调用是系统设计中最常用的控件函数调用情况,在系统的关闭、控制命令的发出、参数的显示等控件设置中都会用到。操作中是需要注意的是在点击调用的场合,仅按下一个控件并不会调用这个资源的函数,还需要在控件上松开按下的鼠标左键。

(2) 按下调用(Arm Callbacks):按下调用的控件资源是Pt_CB_ARM。与点击调用不同,按下调用函数的链接执行只需要鼠标左键在控件上按下就可以。按下调用在PhAB中并不只是代表鼠标左键对控件的按下,而是控件的一种状态。以一个PtButton控件为例,当选中它并在键盘上按下回车键时,控件会经历一个“弹起-按下-弹起”的过程,这个过程中的“按下”就是表示的按下调用起作用的状态。而对于一个非按键控件来说,它的按下状态并不一定会在控件的外形上有所表示。

(3) 右键按下调用(Menu Callbacks):鼠标右键按下调用之所以叫作Menu Callbacks是因为在很多应用中右键的按下会出来一个菜单来选择相应的功能。右键按下调用的控件资源为Pt_CB_MENU。它也是所有控件都拥有的一种函数调用方式。

(4) 热键调用(Hotkey Callbacks):热键调用是一种方便的函数调用方式,它的控件资源是Pt_CB_HOTKEY。热键的组成可以是联合键(Alt,Shift,Ctrl)中的一个或几个加上一个其他键,也可以只是一个非联合键。热键调用在当前程序运行中有效。

在控件的调用中,调用的可以不仅是函数,还可以是弹出一个窗口,菜单或者对话框,这些调用要求给出窗口弹出的坐标,弹出方式以及设定相关参数。

5 结 语

所设计图形控制界面系统运行于VP9 型单板机和AVME9668+IP408信号采集模块的VME总线下。长时间的调试运行表明,本文所设计的基于PhAB的图形控制软件运行稳定、可靠,实现了系统功能,达到了既定要求。

参考文献

[1]郑泽胜.嵌入式系统以及实时软件开发[EB/OL].,2009.

[2]张义中.Unix平台下C语言高级编程指南[M].北京:北京希望电子出版社,2000.

[3]Arnold Berger.嵌入式系统设计[M].吕骏,译.北京:电子工业出版社,2002.

[4]刘海燕,邵立嵩,荆涛.Linux系统应用与开发教程[M].北京:机械工业出版社,2007.

[5]侯业勤,张菁.分布式嵌入式实时操作系统QNX[M].北京:中国宇航出版社,1999.

[6]QNX官方网站.Qnx Software Systems Ltd[EB/OL].,2009.

[7]曹冰冰.基于QNX实时操作系统的测试系统的开发[D].西安:西北工业大学,2002.

[8]陈晓刚,严丹.基于QNX操作系统的高可靠性应用软件框架[J].工业控制计算机,2008,21(2):48-51.

[9]吴勇,傅鹏,兰鲁光.基于QNX的实时数据采集系统[J].微计算机信息,2006,22(2):63-64.

[10]王冬霞,王茂,单家方.基于QNX的分布式采集控制系统[J].核聚变与等离子体物理,2007,27(4):334-338.

上一篇:基于D161A语音卡实现的异系统智能转接装置 下一篇:小型高精度恒温系统的研究