Qt/Embedded是奇趣科技推出的基于Linux的嵌入式平台开发工具,是Qt的嵌入式版本。由于KDE等项目均使用Qt作为支持库,所以许多基于Qt的X Windows程序可以非常方便地移植到Qt/Embedded版本上。Qt/Embedded具有面向对象、跨平台和界面设计方便美观等优点,已得到了广泛的应用。
本文针对当前物流行业终端定位功能的需求,提出与之相适应的物流终端定位功能实现方案,并利用Qt/Embedded,在基于嵌入式Linux和S3C2410的物流信息化终端平台上对终端定位功能进行了初步实现。
软硬件系统设计原理
基于现有网络建设的总体情况和物流配送过程中对定位数据的可靠性、连续覆盖性、精度的要求,并综合考虑各种定位技术的发展现状及技术成熟度、实现成本等因素,本系统在物流配送网络中采用了GPS辅助定位系统,即GPS+CellID+RFID+图形道路匹配相结合的定位技术。
系统的软硬件功能框图如图1所示,开发板CPU采用的是三星公司的S3C2410。该处理器内部集成了ARM公司ARM920T处理器核的32 位微控制器。GPS模块利用RS232接口与开发板通信,提供卫星定位信号;GSM/GPRS模块提供通信以及CELLID定位信息获取;RFID模块提供标签信息采集和RFID定位功能。终端通过GSM/GPRS通信网络与物流信息控制中心建立联系,提交相关数据采集信息和接收物流信息控制中心指令。
图1 系统软、硬件功能框图
系统采用嵌入式Linux操作系统,移植Qt/Embedded 3.3.4和SQLITE数据库,采用Qt编程实现物流信息化终端定位功能。
软件系统设计
本文的软件系统设计主要以S3C2410平台为核心,通过RS-232串口从GPS模块、GSM/GPRS模块、RFID模块提取
宿主机开发环境建立
由于目标平台资源所限,需要搭建交叉编译环境,本系统开发过程中采用的平台如下:
宿主机:RED HAT 9.0
Qt/X11 3.3.4
Qt/Embedded 3.3.4
SQLITE 2.8.16
cross-2.95.3.tar.bz2
目标机:Linux Kernel 2.4.18
Qt/Embedded 3.3.4
SQLITE 2.8.16
Qt/Embedded 3.3.4移植
为了正确交叉编译Qt/Embedded,建议宿主机完全安装RED HAT 9.0,同时要确保UUID、ZLIB、JPEG、GIF、PNG、SQLITE等Qt中所需要的头文件、库文件在交叉编译前正确安装,并移植相应的库文件至目标机中,此类文件的具体安装在此不再赘述。下面主要对Qt/Embedded 3.3.4的交叉编译及移植进行详细讨论。[page]
下载解压源文件
$ cd ~
$ mkdir -p qt_embedded/
$ cd qt_embedded
$ wget ftp://ftp.trolltech.com/qt/source/qt-x11-free-3.3.4.tar.bz2
$ wget ftp://ftp.trolltech.com/qt/source/qt-embedded-free-3.3.4.tar.bz2
$ tar jxf qt-x11-free-3.3.4.tar.bz2
$ tar jxf qt-embedded-free-3.3.4.tar.bz2
$ mkdir -p qt-embedded-free-3.3.4-target/
$ sudo cp -r qt-embedded-free-3.3.4/ qt-embedded-free-3.3.4-target/
安装Qt/X11
$ cd qt-x11-free-3.3.4
$ export QTDIR=$PWD
$ export PATH=$QTDIR/bin:$PATH
$ export LD_LIBRARY_PATH =$QTDIR/lib:$LD_LIBRARY _PATH
$ echo yes | ./configure -thread -plugin-sql-sqlite -prefix /usr/local/ Qt-3.3.4/
$ make
$ sudo make install
安装Qt/E 3.3.4的宿主机版本
为便于在宿主机上进行嵌入式程序开发,利用qvfb进行虚拟嵌入式LCD屏幕显示。
$ cd ../qt-embedded-free-3.3.4
$ export QTDIR=$PWD
$ export PATH=$QTDIR/bin:$PATH
$ export LD_LIBRARY_PATH =$QTDIR/lib:$LD_LIBRARY _PATH
$ echo yes | ./configure -thread -plugin-sql-sqlite -prefix /usr/local/Qt-embedded-3.3.4-host -qvfb
$ make
$ sudo make install
$ sudo cp -r lib/fonts/ /usr/local/Qt-embedded-3.3.4-host/lib/
安装Qt/E 3.3.4的目标机版本
$ cd ../qt-embedded-free-3.3.4-target
$ cp ../qt-x11-free-3.3.4/bin/uic bin/(注意:需拷贝uic工具的QT/X11版本至安装目录中)
由于Qt/E3.3.4没有专门针对触摸屏的配置选项,为了确保触摸屏能正常工作,可以利用现有的配置选项进行修改,以满足实际需要。现利用qt-mouse-Linuxtp修改触摸屏驱动。
修改src/embedded/qmouselinuxtp-qws.h,添加下面两行:
#
#define Qt_QWS_IPAQ_RAW
修改src/embedded/qmouselinuxtp-qws.cpp,把文件中/dev/**3600改为开发板ARM-Linux操作系统中相应触摸屏驱动的名称/dev/touchscreen/0raw。
$ echo yes | ./configure -embedded arm -shared -debug -no-cups -thread -plugin-sql-sqlite -no-ipv6 -qt-mouse-Linuxtp -prefix /usr/local/Qt-embedded-3.3.4-target -depths 16 -system-libpng -system-libjpeg
$ export QMAKESPEC="qws/linux-arm-g"++
$ make
$ sudo make install
$ sudo cp -r lib/fonts/ /usr/local/Qt-embedded-3.3.4-target/lib/
此时,将交叉编译的Qt/E 3.3.4的库文件下载至开发板中,并设置相应的环境变量QTDIR、PATH、LD_LIBRARY_PATH等。另外还要设置触摸屏环境变量如下:
$ export QWS_MOUSE_ PROTO="LinuxTP:/dev/touchscreen/0raw"
$ export QWS_KEYBOARD=
此时,触摸屏可能仍无法工作或误差较大,其主要原因是开发板操作系统中/etc/pointercal文件不存在或该文件中对触摸屏进行调整的校准参数不正确,需对/etc/pointercal文件进行修改。修改方法有两种:一种方法是直接新建该文件,并在文件中按正确格式添加相应参数;另一种方法是交叉编译tslib-1.3.tar.bz2,将生成的校准程序拷贝至目标板,设置环境变量,运行校准程序,可直接生成高精度的/etc /pointercal文件。这里推荐使用第二种方法。
至此,Qt/E3.3.4便可在目标板上正确执行,移植完毕。
Qt/E编程
本文采用Qt/Embedded 3.3.4版本,主要是考虑到Qt/E 3.3版本相对以往版本更成熟,可视化编程相对更方便易用,且其支持SQLITE数据库驱动,便于数据库操作与编程。在本设计中主要使用了Qt/E的画布模块、SQL模块、网络模块及多线程编程,缩短了程序的开发周期,提高了开发效率。下面主要就多线程编程和画布模块编程进行讨论。[page]
多线程编程
通常情况下图形用户界面应用程序有一个执行线程并且每次执行一个操作。如果用户在单线程的应用程序中从用户界面中调用一个耗时的操作,当这个操作被执行的时候,用户界面通常会被冻结。本实现使用QThread子类化得到QGPSThread类,并使用QMutex、QSemphore和 QWaitCondition来同步各线程。QGPSThread类用于通过串口编程接收GPS模块的$GPRMC定位数据帧,并加以解析,得到实时的经纬度等定位信息,供其它线程使用。
画布模块
画布模块中QCanvas库是一个高度优化的二维绘图库,QCanvas可以包含很多任意图形的项并且在内部使用双缓冲来避免闪烁,而且 QCanvas支持分层,适合数字地图的分层显示。QCanvas与其它画布模块结合使用,能很方便地实现导航地图的显示、缩放、漫游以及鹰眼等功能。下面是导航地图常用操作的实现代码。
void Form2::zoomin() //缩小地图比例
{
QWMatrix m = mapview->worldMatrix();
m.scale( 0.5, 0.5 );
mapview->setWorldMatrix( m );
}
void Form2::movleft() //地图向左漫游
{
mapview->scrollBy(-10,0);
}
void Form2::centerpoint() //将当前定位点居于显示地图正中
{
mapview->center (pointx,pointy);
}
void Form2::movleft() //定位点在地图上移动
{
i->move (pointx,pointy);
canvas->update();
}
初步实现
嵌入式信息终端平台定位功能的初步实现如图2所示,该系统人机界面友好,定位精确。定位误差主要取决于GPS-OEM模块的定位精度,实验显示,本系统能初步满足物流信息终端对定位功能的需求。
图2 嵌入式信息终端平台定位功能的初步实现
结语
本文提出了一种嵌入式物流信息化终端定位功能的实现方案,并利用Qt/E编程对其进行了初步实现。实验结果证明,
参考文献
1.常菲,李明禄,李鲁群.物流配送中移动定位技术研究[J].微型电脑应用(研究与设计),2004,20(1).22-24
2.杨晕,胡永健,林志泉.基于Linux和S3C2410嵌入式图象传输系统设计[J].微计算机信息(嵌入式与SOC),2007,23(3-2).20-24
3.(加拿大)布兰切尼(Blanchette,J.),(英)桑姆菲尔德(Summerfield,M.)著;齐亮译.C++ GUI Qt3 编程[M].北京:北京航空航天大学出版社,2006
上一篇:一种嵌入式便携数据采集分析仪
下一篇:基于ARM和VxWorks实现自动彩信发送的嵌入式系统
推荐阅读最新更新时间:2024-03-16 12:56
设计资源 培训 开发板 精华推荐
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况