杨铁军,李旭东
(河南工业大学 信息科学与工程学院,河南 郑州 450001)
粮情测控系统利用现代计算机技术实时检测粮食储藏过程中影响粮情变化的因素,并对实时检测的数据进行分析判断,对安全储粮提出处理建议,从而进行控制。目前,粮情测控大部分都是在监控中心,不便于粮库管理员现场了解粮库和设备信息。传统的粮情测控终端负责采集端点的温度信息并传递给监控中心,本身并没有控制和显示功能。为了方便人们在现场对粮仓环境进行监控,及时调整各项设备的运转参数,设计了一个具有图形化人机接口界面(GUI)的粮情测控终端,GUI部分采用Qt进行设计,具有简单、可靠、直观等特点,配合触摸屏操作可获得良好的互动效果。
整个粮情测控系统由3部分组成:端点传感器、测控终端和监控中心。监控中心由普通计算机组成,用于统筹整个粮库的各项指标并分析显示;测控终端用于采集端点传来的数据并实时显示;端点设备由18B20、hs1101和AVR单片机等组成。整个系统结构如图1所示。
图1 粮情测控系统组成结构Fig.1 Composition block diagram of grain monitoring and control system
本次开发的GUI程序是整个粮情测控系统中的测控终端部分。根据粮情测控系统的要求,本文实现了一个具有图形接口界面的测控终端,它采用Qtopia图形界面,具有界面美观、交互性强等特点。
硬件平台采用Samsung公司的S3C2440A微处理器,它是基于ARM920T的RISC型 CPU,是一款性价比较高的嵌入式32位处理器,最高主频可达533 MHz[1],内置16 KB指令缓存和16 KB数据缓存,4通道通用DMA,能够与常用的外围设备实现无缝连接,从而简化了外围电路设计,降低了产品成本、体积和功耗。存储模块采用Nand Flash大小为128 MB用于存放B00TLOADER代码、Linux内核映像、文件系统以及Qtopia等应用程序,SDRAM采用两片外接32 MB总共64 MB的HY57V561620FTP型内存器件,它们并接在一起形成32位总线数据宽度,增加了系统反应速度。LCD采用分辨率为800×480的7寸触摸屏,可以获得最佳舒适度。S3C2440本身总共有3个串口UART0~UART2,其中UART0,UART1可组合为一个全功能的串口,主要用于与端点设备通信。其硬件逻辑结构如图2所示。
图2 硬件逻辑结构Fig.2 Hardware logic structure
软件平台采用Linux操作系统,内核版本2.6.29,图形界面采用Qtopia2.2与最新的Qt4相比,其体积更小更适合嵌入式系统开发。终端系统组成结构如图3所示。
图3 终端系统组成结构Fig.3 Terminal system composition
本文的QT/Embedded人机界面的开发主要分为:底层驱动开发、配置开发环境和GUI应用程序的设计与实现等3部分。其中底层驱动开发包括帧缓冲的启动和设备驱动开发2部分。
Qt/Embedded的底层图形引擎基于FrameBuffer(帧缓冲)技术[2],简称为fbdrv,它是一种独立于硬件的抽象图形设备。目前的2.6内核的Linux都包含了对FrameBuffer技术的支持,但默认情况下并不开启,修改grub引导文件,在“kernel”后加入vga=0x0318参数即可成功启动。
S3C2440的触摸屏接口是与A/D转换器接口结合在一起的,由它产生中断控制触摸屏的输入。输入事件由事件处理器(event handler)进行处理,其驱动注册代码如下:
static struct input_handler evdev_handler={
.event=evdev_event,
.connect=evdev_connect,
.disconnect=evdev_disconnect,
.fops=&evdev_fops,
.minor=EVDEV_MINOR_BASE,
.name= “evdev”,
.id_table=evdev_ids,
};
将设备的驱动模块加载到嵌入式Linux内核后,应用程序就可以通过对设备文件的读写,实现对设备的操作。
本系统采取了触摸屏代替传统的鼠标加显示屏的操作方式,而触摸屏并不在Qt的默认支持范围,所以需要自行开发触摸屏驱动以实现Qt对触摸屏的支持,触摸屏的实现流程,如图4所示。
图4 触摸屏开发流程Fig.4 Flow chart of touch screen
Qtopia是基于Qt/Embedded开发的一个嵌入式的窗口系统和应用程序集,如地址本、图像浏览、Media播放器等,还包括娱乐和配置工具,广泛用于PDA等掌上设备。Qtopia平台由 Qtopia 库(Qt/E,qtopiapim,libqpe,libqtopia1) 和 Qtopia server/laucher组成。
Qt按照应用环境的不同,分为X-Windows的X11版本与嵌入式环境的版本Qt/E。其层次结构如图5所示。
Qt/E 通过 API与操作输入/输出(Input/Output,I/O)设施直接交互,它作为嵌入式GUI的实现工具,支持帧缓冲驱动,能在没有X-Server或X-Lib支持的条件下直接写帧缓冲,节省了内存,提高了程序的运行效率[4-5]。因此,鉴于Qt/E在跨平台、内存占用和快速性等方面的优势,将其作为面向粮库信息监测的嵌入式轻型GUI构件库的基础构建工具。
图5 Qtopia的软件层次结构Fig.5 Hierarchy of qtopia software
嵌入式开发模式通常采用宿主机/目标机的形式,先在本机X11环境下模拟嵌入式目标平台并完成程序的编写与调试,再通过交叉编译生成目标机可执行代码。整体搭建流程如图6所示。
图6 开发环境搭建流程Fig.6 Building flow chart of developing environment
开发Qt/Embedded程序需要建立Linux交叉编译环境。首先在宿主机(PC机)完全安装Fedora9 Linux系统(内核版本2.6.29)。然后编译安装ARM-Linux交叉编译器[6],最后编辑/root/.bashrc文件,添加 “export PATH=$PATH:/usr/local/arm/4.3.2/bin”设置环境变量即可成功建立交叉编译环境。
整个GUI系统的构建需要对 Qt/Embedded、Qtopia依次分别编译链接,然后有机地整合在一起。Qt/Embedded为Qtopia提供了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。建立Qtopia开发环境用到如下3个文件:
Trmake 1.14.tar.gz(用于生成Qt工程的Makefile文件),Qt-embedded-2.3.7.tar.gz(Qte基础类库的源码包主要提供lqte的库)和 Qt-x11-2.3.2.tar.gz(PC 桌面的 Qt源码包)。
分别建立2套开发环境,在/opt/arm2440/下建立x86-qtopia目录用于建立Qt/X11虚拟环境,建立arm-qtopia目录用于建立Qt/E交叉编译环境。2套开发环境的建立用到的软件包是一样的,只是使用的编译器和编译参数不一样,分别把上述3个文件依次解压到x86-qtopia和arm-qtopia 2个目录,然后分别进行编译、配置。
根据粮情测控系统的现场功能要求GUI应主要包含如下4部分:1)粮仓环境信息的实时显示,主要是粮仓内部环境的温度、湿度状况。2)粮仓控制设备的开关状态显示,如风机开关、天窗开关等。3)Web服务器控制按钮,用来开启和关闭Web服务。4)调试窗口,方便现场人员对设备参数进行调试修复。
Qt拥有众多的窗口控件,如按钮、表单、滚动条和程序窗口等,它们组合起来可以创建各种用户界面。其中QWidget是所有用户界面对象的基类,其它窗口部件都是继承QWidget或其子类[7]。
创建程序主窗口先要在main.cpp函数中创建QApplication类型的对象。其代码如下:QApplication app(argc, argv);
本程序使用QWidget类创建用户类[8],并使用户类通过公有继承派生于Qwidget类,代码如下:TableForm::TableForm(QWidget*parent,const char*name, WFlags fl):QWidget(parent, name, fl)
GUI程序的图形控件通过Qt带的Designer工具进行创建,能获得良好的视觉效果。
粮仓的温控信息通过QTable类进行显示,QCheckBox类负责设备状态控制,QPushButton类可与信号槽连接实现额外功能,代码如下:connect(ReadButton, SIGNAL(clicked()),this, SLOT(readinfo());
为使粮情测控系统的人机界面支持中文风格,方便粮库管理员的操作,需要对程序进行语言转化处理,采用Qt/Embedded开发的嵌入式粮情测控系统的人机界面需要采取以下步骤,以实现对中文的支持:
1)在main.cpp文件中添加头文件qtextcodec.h;
2)在 QApplication app (argc,argv)后添加“app.setDefault-Codec(QTextCodec::codecForName(“UTF-8”))”
3)设置相应的中文字体,GUI程序即可实现中文显示。
在系统终端下,执行 “qmake-o Makefile-spec/opt/arm2440/x86-qtopia/qtopia/tmake/lib/qws/linux-generic-g++*.pro”命令,生成针对于工程文件的Makefile文件,执行make就可以生成x86的可执行文件。
对Makefile进行修改,主要是将编译器gcc改为交叉编译工具arm-linux-g++,编译生成ARM平台目标代码即可在目标平台上成功运行。运行结果如图7所示。
图7 GUI汉化界面Fig.7 GUI localization interface
一个友好的图形用户界面对整个系统的推广有着重要意义。在粮情测控系统的现场应用中,该系统运行稳定,实现了对各个粮仓信息实时检测与控制,配合计算机的监控中心形成立体化监控网络,为国家实现科学保粮奠定了基础。
[1] Samsung Electronics Co.Ltd.User's manual S3C2440x[Z].2001.
[2] Linux,Linux frame buffer driver developer[EB/OL].(2009)[2010-03-25].http://www.linux-fbdev.org/.
[3] Jonathan Corbet,Alessandro Rubini,Greg Kroah Hartman.Linux device drivers[M].3 ed.O'Reilly,Inc,2005.
[4] AHN S H,SUL D M,CHOI SC,et al.Implementation of lightweight graphic library builder for embedded system[C]//Proceedings of the 8th International Conference on Advanced Communication Technology, IEEE,2006,(1):1662-168.
[5] HohlF Time limited blackbox security:protecting mobile agents from malicious hosts[J].Lecture Notes in Computer Science,1998,1419:92-113.
[6] Linux.TheARMLinuxproject[EB/OL]. (2004-11-05) [2010-04-07].http://www.arm.linux.org.uk/.
[7] Jasmin Blanchette,Mark Summerfield.C++GU I Programming with Qt3[M].2004.
[8] 倪继利.Qt及Linux操作系统窗口设计[M].北京:电子工业出版社,2006.
[9] Trolltech.Qtopia Reference Documentation [EB/OL].(2005)[2008-09-25].http://doc.trolltech.com.