基于MiniGUI的机车车载显示终端研究

本文作者:admin       点击: 2007-07-11 00:00
前言:
摘要:MiniGUI是当前应用于嵌入式系统较为流行的嵌入式图形用户界面之一。本文主要研究利用MiniGUI开发机车车载显示终端图形用户界面,以解决当前基于DOS的机车车载显示终端图形用户界面开发难度和工作量大的问题。文中给出了机车车载显示终端的整体设计,重点分析了MiniGUI的裁减、移植以及基于MiniGUI的车载显示终端图形用户界面的开发。
关键词:MiniGUI ;显示终端 ; Linux ; PC/104
  
引言

机车车载显示终端是机车乘务员与机车设备之间进行人机信息交互的主要设备。在实际运用中,显示终端将机车的行车安全信息、故障信息和设备状态等反映给乘务员,以便有效地指导乘务员操作,确保机车安全,减小机车故障的影响。
机车车载显示终端用户界面是机车乘务员与机车显示终端相互交流信息的主要方式。机车乘务员对机车显示终端的关键技术并不熟悉,所以要求其用户界面必须直观,认读性好,与乘务员交互性好。目前我国的机车显示终端大多采用DOS操作系统(SS系列电力机车、DF系列内燃机车等),为了使用图形界面,必须从底层开始开发,难度和工作量很大。本文主要研究利用MiniGUI技术开发以嵌入式Linux为操作系统的机车车载显示终端的图形用户界面。
  
系统整体设计方案
 
1 显示终端硬件设计
机车车载显示终端硬件主要由研华科技的PCM-9372型号的PC/104主板作为硬件平台核心,其cpu为VIA Eden系列的处理器,它完全兼容x86体系。机车显示终端的显示器选用SHARP公司的10寸彩色TFT液晶显示屏。机车显示终端外形以及内部电路板照片如图1所示:

2 显示终端软件设计
机车车载显示终端软件主要由嵌入式Linux和MiniGUI构成。对Linux进行裁减并移植到机车显示终端的硬件平台上。基于MiniGUI完成机车显示终端图形用户界面程序以及有关应用程序的开发。机车显示终端软件结构如图2所示:
MiniGUI的裁减与移植

从Internet网上可以下载到免费的libminigui-1.3.3.tar.gz库文件和minigui-res-1.3.3.tar.gz资源文件,用以下命令进行MiniGUI的配置、编译和安装: 
tar xzvf minigui-res-1.3.3.tar.gz
make install
tar xzvf libminigui-1.3.3.tar.gz
./configure
make
make install
安装之后的MiniGUI体积为10M左右,对于嵌入式系统来说体积过于庞大,所以必须对其进行裁减。我们可以利用编译选项和修改配置文件来完成MiniGUI的裁减工作,最终将其裁减到2M,满足了机车显示终端嵌入式系统的要求。具体做法如下:
(1)在编译libminigui时,使用如下configure选项:
./configure
 --disable-static不支持静态链接库
 --disable-lite编译成thread版本
--disable-debug不支持调试信息,当然这是在应用程序调试成功后
--disable-tracemsg不支持跟踪信息
--enable -flatstyle支持平面窗口,而不是3D窗口
--disable-svgalib不支持svgalib引擎
--disable-libggi不支持libggi引擎
--enable-fblin 16支持16bpp的FrameBuffer引擎
--enable -nativeial支持本地ial
这样仅仅生成动态链接库,体积也就大大减小。
(2)修改/usr/local/etc/MiniGUI.cfg配置文件
在MiniGUI.cfg中,可供裁减的内容包括systemfont选项,truetypefonts选项,cursorinfo选项,iconinfo选项,bitmapinfo选项和imeinfo选项。
裁减完成后,我们将以下文件移植到目标机上:
①MiniGUI的函数库,包括libminigui,libmywins和libmgext等,还包括其他的应用程序函数库等。
②MiniCUI的配置文件,即/usr/local/etc/MiniGUI.cfg文件。
③MiniGUI所使用的资源文件即usr/local/lib/minigui/res。
  
基于MiniGUI的机车车载显示
终端图形用户界面设计与开发

机车车载显示终端的图形用户界面主要完成数据的显示、查询和用户输入等功能,在设计上要求简单实用,操作方便,同时复杂的界面也会带来不必要的开销,影响性能。
MiniGUI是一种基于线程的窗口系统,界面控制线程和应用逻辑可以用不同的线程来完成,相互之间通过消息来完成数据传递。MiniGUI使用消息驱动作为应用程序的创建架构,主窗口可以单独属于一个线程,也可以附属于其他主窗口而一起属于一个线程。
作者将机车车载显示终端正常状态下的显示界面设定为主窗口,MiniGUI为每个主窗口建立单独的消息队列,在该主窗口基础上派生出的其它主窗口、对话框及其控件均使用同一消息队列。作者在主函数MiniGUIMain中创建并显示主窗口,并建立窗口结构与窗口过程的联系,然后从窗口管理器中获取、翻译并分发消息,而窗口过程则处理各个窗口的消息。消息可以有许多种类型,根据消息的类型可以完成不同的处理,如MSG_PAINT消息的处理通常用来绘制窗口,而MSG_CLOSE消息的处理则用来完成应用的结束,也可以在MiniGUIMain函数中建立其他应用线程。主界面设计流程图如图3所示:
主界面的关键代码如下所示:
int MiniGUIMain (int argc, const char* argv[])  /*主函数*/
{   ……
pthread_create(&display_control_thread,NULL,&dis_app,hDlg);
/*建立工作线程*/
pthread_create(&aparam_thread,NULL,&aparam_app,hDlg);
/*建立参数设置界面线程*/
HWND hWnd=HWND_DESKTOP;
DlgInitProgress.controls=CtrlInitProgress;
DialogBoxIndirectParam(&DlgInitProgress,hWnd,InitDialogBoxProc,0L)
return 0;
  }
static int InitDialogBoxProc (HWND hDlg, int message, WPARAM wParam,LPARAM lParam)                    /*主界面消息处理函数*/
  {switch(message)
  {case MSG_INITDIALOG:
         return 1;
  case MSG_PAINT:
  /*进行图形绘制操作*/
  case MSG_TIMER://定时器消息
  {
  /*获得工作线程数据并进行处理*/
  break;}
  case MSG_MYKEYDOWN:
  ……}
  return DefaultDialogProc(hDlg,message,wParam,lParam);
  }
设计开发完成的显示终端主界面和参数设置界面如图4和图5所示:
 
总结

本文给出了机车车载显示终端的总体设计方案,针对目前基于DOS的机车车载显示终端图形用户界面开发难度大的情况,研究并开发了基于MiniGUI的机车车载显示终端图形用户界面。详细介绍了MiniGUI的裁减和移植,以及如何基于MiniGUI进行图形用户界面程序的开发。最后完成了显示终端图形用户界面的开发,为新一代的机车车载显示终端软件开发提供了一种新思路和技术尝试。
  
参 考 文 献:
[1] 刘刚.基于MiniGUI的嵌入式浏览器的研究与开发.华中科技大学硕士学位论文.2005
[2] http://www.minigui.com
[3] 谷丰.基于Linux的机车显示系统平台的设计.机车电传动,2005,1
[4] 魏永明.MiniGUI编程手册.北京飞漫软件有限公司,2003
[5] 魏永明.面向实时嵌入式系统的图形用户界面支持系统----MiniGUI编译、安装和配置.http://www.cn.ibm.com/developerWorks/Linux/
作者介绍:
张晓辉,女,1979.2 ,硕士,天津理工大学计算机科学与技术学院教师。
研究方向:嵌入式系统
联系方式:13821638921
          zxh-1979@126.com