基于Qt/Embedded的嵌入式控制界面开发

发布时间:2010-4-23 11:05    发布者:我芯依旧
关键词: Embedded , 控制界面 , 嵌入式
基于GPL(General Public License)架构之下的Linux,具有硬件需求低,架构开放,系统稳定,保密性好等特点,嵌入式Linux的这些优点正好符合工控领域安全性,稳定性,实时性和易维护等要求。另外,嵌入式Linux操作系统中一个重要的组成部分就是图形用户界面GUl(Graphic User Interface)。风电控制系统中人机界面功能复杂,种类繁多,其性能的好坏主要取决于图形功能的设计。利用Qt/Embedded(简称qte)开发的GUI,能实现系统的监视,控制,管理等功能。

1 控制界面的图形化设计

在风电控制界面设计中,对用户特征分析十分重要,用户一般是受过训练的,经常使用计算机而且有相当经验的非程序员用户。其人机界面开发中应考虑以下几方面:

(1)安全性:设定操作员级别,使画面显示,执行和操作根据权限的不同而有区别。
(2)顺序原则:信息分层,增强可读,集成一致性。
(3)图形系统:完成特定图形的输入,显示和操作。
(4)实时数据的操作:对现场采集的数据能在限定的时间内给予显示,通过画面方便的在线调节和设定一些参数。如风电中风速显示,叶轮的转角调节等。
(5)先进的报警系统。

众多的自动化控制设备,如微机调速器以及微机测量仪表等它们采用小体积的Flash或ROM,处理器性能相对较弱,它们适合用嵌入式GUI来完成人机交互的操作。嵌入式Linux系统的有代表性的GUI系统主要有MiniGUI、Microwindows、TinyX以及Qt/Embedded。很多工控软件是使用c++语言编写的,而且系统本身对库的健壮性,稳定性要求比较高,用qte能设计出优秀的图形界面,并且能和其它C++程序互相调用。

2 开发过程

开发使用的硬件平台为H9200F系统主板,它是基于嵌入式工业控制系统的开发套件。系统的核心是32位ARM920T核的高速ARM处理器AT91RM9200,移植了Uboot,设备的驱动程序包括触摸屏驱动和unux-2.4.27的内核,交叉编译工具为cross-2.95.3。

2.1 建立交叉编译环境

嵌入式系统应用软件的开发属于跨平台开发,因为嵌入式设备所用的CPU和Pc机上的CPU有着不同的架构,需要一个交义开发环境在PC机上编译出适用于嵌入式设备CPU架构的软件。用来开发的计算机一般称为宿主机(X86),它运行Linux程序;嵌入式设备称为目标机,一般就是目标板(arm),所以我们必须配置两套开发环境((for ARM和for X86)。如图1为完整的嵌入式Qt程序开发流程。

1.gif
图1 嵌入式Qt交叉编译开发过程

从网上下载免费的Qt/Embedded开发包,本系统采用qte3.3.4的版本:qt-embedded-free-3.3.4.tar.gz,qt-x11-free-3.3.4.tar.gz。其软件包中自带了qmake,可以生成工程文件和Makefile文件。

* 将压缩包解压后安装在主机上。在qte的安装过程中,研究了以下几个问题:

(1)./configure后的命令指定Qt嵌入式开发包能否生成虚拟缓冲帧工具qvfb,支持的显示颜色深度,支持的图形种类等。如果qte的应用是在UNIX/Linux平台下开发的话,那么qvfb就可以在机器上以一个独立的控制台或者虚拟缓冲帧的方式来运行,通过指定显示设备的宽度,高度和颜色深度,虚拟出来的缓冲帧将和物理的显示设备在每个像素卜保持一致。这样每次调试应用时开发人员就不用总是刷新嵌入式设备的FLASH存储空间。从而加速了应用的编译、链接和运行周期。

(2)安装完成后为保证每次运行程序的路径都足正确的,需要修改个人设定文档中的~/.bashrc文件或者~/.bash_profile或者系统路径文件,在文档中加入几个路径变量,特别是QTEDIR=qte安装路径,QTDIR=qte安装路径和qte的lib文件路径的设定。

(3)运行qvfb,若无法找到输入设备,如显示/dev下没有fb0设备,则列临时文件夹/tmp下删除相应的文件;如果是缺少字库,则将系统里的字库拷贝到QTDIR/lib下,最后必须保证环境变量PATH能搜寻到qvtb命令。

* 第二步是在交义编译的目录下重新安装能编译目标板arm程序的qte。

首先在交叉编泽目录下重新解压qt-embedded-free-3.3.4.tar.gz,将X86的QTEDIR/bin文件罩的moc和uic二进制文件复制到交义编译的目录下的bin文件夹里。然后配置交叉编译工具(如qmake),修改.conf文件,指定文件的编译器为安装的交叉编译工具,即QMAKE_CC,QMAKE_CXX,QMAKE_LINK,QMAKE_LINK_SHLIB所用的工具。

精简Qt就在于make命令,按开发的实际需求可以增减Qt库的大小。qte开发包有5种编译范围的选项,使用这些选项,可控制Qt生成的库文件的大小。每个选项都对应在$QTDIR/src/tools/的.h(标头档)文件里.Tmlltech把这些标头档定义为“Feature Definition Files”(特征定义档)。除厂使用已有的五种定义外,也可以根据实际定义Qt的特征,把在sre/tools/中所不需要的项目用QT_NO_记录下来创造一个自定义标头档,但是还要注意项目之间功能的相依性问题。

最后,执行strip命令:#strip -R.note -R.comment $QTDIR/lib/lihqte.so*。将交叉编译好的Qt库libqte.so*下载到开发板中的某个目录下。

2.2 Qt/Embedded开发程序过程

Qt/Embedded的开发有两种方式,一种是图形编程方式,一种是传统的代码编程方式。不论是使用图形界面编程还是直接写代码。都会涉及到Qt的元对象系统。Qt的一个主要成就就是使用了一个机制扩展了c++并且可以创建独立的软件组件。这种机制被称为元对象系统,它有两个关键技术:信号和槽,以及内省(introspection)。内省功能是实现信号和槽的基础,它允许程序员在运行时获得有关QObject子类的“元信息”,包含对象的类名以及它所支持的信号和槽的列表。但是标准的c++没有对Qt元对象系统提供支持。Qt通过提供一个独立的工具moc来解析Q_OBJECT类定义。moc使用纯c++来实现它所有功能,所以Qt的元对象系统可以在任意C++编译器上工作。

2.gif
图2 Qt/Embedded编程过程

* 利用Qt Designer开发

这是一种所见即所得的方式。启动Qt图形编辑器,编辑GUI界,保存后得到.ui文件。在Qt Designer的代码编辑器里输入的代码保存为file.ui.h文件(一个C++源文件)。双击窗体启动Qt Designer的代码编辑器,可以添加所制窗口的一些额外功能。比如添加新的槽函数.Qt Designer会自动监测到在代码中已经创建了一个新槽,并且Uic(User Interface Compiler)会在窗体的类定义中自动生成正确的函数声明。在Qt中,uic是从XML文件生成代码的用户编辑器,用来将fiie.ui文件生成file.h和file.cpp文件。

在风电控制系统中为了设定用户级别,对信息进行安全管理和根据权限而限制操作范围,一般需要有用户登录管理,如:

3.gif
图3 用户管理界面

两个界面是用Qt Designer开发的,它们进行切换的功能就可以在代码编辑器中蓖写accept ()函数实现,即:Login1的对象->hide0;Login2的对象->show0,

* 编写程序开发

这是一般程序员开发程序时所用的方式。在控制界面中,需要使用很多图元和图标,系统应该有图库集和能调入图形的扩展接口。或者是有自己建立的基本图元。Qt中有很多为应用程序提供图片的方法。常用的有:

(1)在运行时候把图片保存到文件中并且载人它们;
(2)在源文件中包含XMP文件(因为XMP文件也是有效的C++文件)
(3)使用Qt的图片集机制。

图片集方法比在运行的时候载入文件更加方便和迅速,并且它可以和所有支持的文件格式一起工作。这些图片被存放在源代码树中名为images的子目录下。

程序中继承QMainWindow()类编写桌面,采用Qt的布局管理器QGridLayout().QVBoxLayout()和QHBoxLayout(),在桌面上双击第三个图标Item 3打开表格处理程序为:

4.jpg
图4 桌面系统

void desktop::iconView()
{ QIconView *qiconview=new QIconView(this);//定义按钮类对象
⋯//对象的属性设定
QIconViewItem *itemX:new QIconViewItem(qiconview, QString("Item X")); //定义各个按钮
⋯//按钮属性(setRenameEnabled(),setPixmap()等)
QObject::connect(qiconview,SIGNAL(doubleClicked(QIconViewItem *)),this,SLOT(itemClicked(QIconViewItem *)));//按钮信号与槽的设定
⋯//鼠标移动按钮的监听}
void desktop::itemClicked(QIconViewItem *item)//按钮按下的槽函数
{int id=item->index();
switch(id){
case 0-2:{...//其他应用程序}break;
case 3:{表格程序的对象base;
base->show0;
base的属性设定;}break;⋯}

2.3 将程序发布到目标板上

将开发好的Qt/Embedded程序用交叉编译工具重新编译成可执行文件,生成二进制目标可执行代码,再将嵌入式目标系统挂载到Linux宿主机的共享分区,让qte程序直接运行在嵌入式目标系统,并进行调试。调试成功以后,就可以把程序同化到系统的FLASH存储器中。如果需要程序开机自动运行,可以编辑启动时的执行文件/usr/etc/rc.local,将启动运行的程序路径及文件名添加到这里,就可以实现系统启动时的程序自动运行。

3 结束语

桌面系统实现了图像数据的载入,文字编辑,表格处理和屏幕键盘等基础功能,为开发风力发电组态软件提供了一个很好的平台。本文的创新点在于:1.以设计风力发电控制台人机交互界面为前提,以用户需求结合qte特点来开发嵌入式GUI。2.对qte安装和编程上的技术问题做了详细分析,提出精简qte的方法。


作者:赵莹,徐大平,吕跃刚      来源:《微计算机信息》(嵌入式与SOC)2009年第4-2期
本文地址:https://www.eechina.com/thread-10754-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表