搜索 Search

基于Linux的嵌入式POS的GUI及数据库研究

2014/8/25 18:07:10点击:

POS(PointofSale)是目前各商场、饭店、加油站等广泛提供的刷卡消费业务的辅助工具,位于商场、加油站等地的POS机将获得的用户*的数据(卡号、业务资料等)通过通信线路传给*服务处理系统上,经过处理的信息返回到POS机,从而完成用户的刷卡消费业务。为了实现上述数据交换过程,在POS机与银行主机之间必须进行数据通信。 

  目前使用最广泛的POS机接入方式是有线接入方式,而有线接入方式主要有两种:一是基于电话网的点到点拨号接入方式和基于DDN的专线接入方式。无线POS机是目前POS机行业的一项新技术,移动性强,平均交易时间短,并能随身携带。目前在全国各大商场和超市内随处可见POS刷卡机,但它们大多都是通过电话线联网进行通信,移动性差,不灵活,限制了业务发展。无线POS机成功的解决了这一难题,它通过一个POS和无线调制解调器的一体机在GPRS/CDMA网上联网传输信息。 

  1 Linux下的图形用户开发工具Q t 

  Qt是Trolltech(挪威)公司的产品。Qt是一个多平台的C++图形用户界面应用程序框架,它能给用户提供精美的图形用户界面所需要的所有元素,而 

  且它是基于一种面向对象的思想,所以用户对其对象的扩展是相当容易的,并且它还支持真正的组件编程。 

  在一台装有Linux操作系统的机器上建立Qt/Embeded开发环境:首先需要拥有三个软件安装包: tmake工具安装包,Qt/Embeded安装包,Qt的X11版安装包。 

  Qt包含了许多支持嵌入式系统开发的工具,其中两个最实用的工具是qmake和Qtdesigner(图形设计器)。Qt中有三个主要的基类:QObject、QapplicaTIon和QW idget。 

  在Qt中编程,利用Signal和Slot进行对象之间的通信是Qt的主要特征。它与W indows中的消息机制非常类似,但是Signal和Slot机制真正实现了一种消息的封装。当对象的状态改变时,发出Signa,l通知所有的Slot接受Signa,l尽管它不知道哪些函数是Slot。一个Signal可以发给多个Slo,t Slot也可以接收多个Signal。Slot除了可以接收Signal以外,与其他的成员函数没有区别。这种机制比使用回调函数要灵活,但是会减慢程序的运行速度。不过在现在高速CPU的面前,这种损失是无足轻重的,而且它还能保证程序的简明性和灵活性,非常便利。 

  QT支持包括Unix、Linux、W indows在内的多种操作系统平台。Linux下常用的KDE桌面环境就是基于QT编写的。QT使用了Unicode作为内部编码,可以同时支持多种编码。目前的版本对国际化标准支持非常完备,这就为本地化提供了可能[4]。 

  2 小型嵌入式数据库M ySQL /SQLite 

  SQLite作为一个嵌入式的数据库,主要的是程序小(200多K),速度快,支持ANSISQL-92的大部分标准功能。SQLite使用文件作为数据库,查询出的所有记录都放在内存中,它的sql句法比较简单易用,支持的类型也比较全。字符串和blob类型可以支持4GB的长度。它还支持事务处理。在单用户情况下,它的速度是最快的。多用户下,速度不及别的数据库。 

  特点:①支持符合acid(原子性,一致性,隔离性,持久性)特性的事务处理;②0配置,不需要任何安装和管理;③符合SQL92的绝大多数标准;④完整的数据库只存储在单个磁盘文件当中;⑤数据库文件可以被不同的机器共享,并与字节序无关;⑥string和BLOB的大小只受到可用内存的限制;⑦总共不到30000行代码。代码空间不到250K;⑧比现在的C/S结构的大部分数据库要快;⑨不依赖于任何其他的库;⑩支持数据库大小可以达到2的41次方,即2个TB。 

  SQLite的弱点:①没有专有的安全措施,数据库是一个文件;②没有内嵌的压缩、解压机制,数据库文件看上去太大。 

  MySQL是SQL数据库管理系统,MySQL是开源的,开源意味着任何人都可以使用和修改该软件,任何人都可以从Internet上下载和使用MySQL而不需要支付任何费用。MySQL服务器工作在客户/服务器或嵌入系统中,MySQL数据库服务器是一个客户/服务器系统,它由多线程SQL服务器组成,支持不同的后端、多个不同的客户程序和库、管理工具和广泛的应用程序接口(APIs)。 

  3 POS系统的硬件配置 

  POS系统硬件配置,见图1所示。 

  4 本POS系统介绍 

  由于我们使用的是Red hat9自带的Qtdesigner,由于是处于研究阶段,而且是免费的,所以暂时采用此软件.此软件没有集成开发环境(IDE),我们采用Qt的Qt designer画出基本的功能,然后由KDevelop修改添加源代码,通过Qt自带的uic(user inteRFace compiler)工具将. ui编译成. cpp和. h文件,最后通过修改makefile,达到我们编译此界面的目的。 

  (1)需要配置unixODBC,把unixODBC放到/usr/local下,解压缩,然后运行. /configure,其中需要一些环境变量参数的设置,系统生成一些makefile文件,运行make将unixODBC编译,然后make install安装unix-ODBC,即unixODBC安装好了。 

  (2)配置ODBC,选择数据库及其驱动。 

  (3)将Qt连接上数据库,完成连接。 

  5 开发流程 

  系统开发流程见图2所示。 


  6 具体介绍 

  本系统针对商场或专卖店而设计,系统的核心功能模块是主控模块,主要是系统初始化,与通信模块,数据库,条码扫描,键盘,RFID接口,显示器及打印机等模块的连接。另外系统预留,与银联卡及会员卡端口,以备系统扩展之用。 

  系统采用消息队列机制, 

  系统始终维持两个数据库的运行,主服务器的中央数据库和本地单机的小型数据库。 

  (1)通信模块:上传:主控模块的响应信息,出错信息,日志信息,交易信息,数据库响应,删除日志响应。下发:控制信息,查询日志,删除日志,查询,修改,删除数据库信息。 


  其中的主要消息有:①上传交易信息成功,上传交易信息失败;②本地数据库中无该商品;③键盘消息的处理,主要是按键处理;④写日志成功,写日志失败;⑤来自服务器的控制消息:删除日志,查询当前机器的工作状态,日志打包发送至服务器,本地pos机重启,关机等;⑥接受条码信息;⑦如果本地数据库无该商品,向服务器数据库发送查询信息。 

  (2)数据库SQLite说明:①SQLite编译、安装;②SQLiteODBC编译、安装。这个要配置SQLite源代码的目录。如果出现找不到SQLite的情况,在Makefile文件中加上路径;③建立SQLite中的一个数据库。SQLite文件夹下有个demo文件,或者参照Readme直接使用SQL语言生成;④系统ODBC配置。在Linux中将刚刚做好的数据库配置为系统数据源,即让QT能找到;⑤QT中使用数据显示组件,选择上述的数据源,然后组件就可以自动显示数据库中的数据了。Server端采用MSQL/SQLite+Linux; Client端采用MSQL/SQLite+uCLinux;显示通过串口实现。 

  (3)数据库设计: 

  Server: 

  ①product 

  PNo  Name  DescripTIon  InstockPrice 

  TotalNumLeftNum 

  ②sale 

  ONo Total Date 

  ③order 

  ONo PNo Saleprice Number 

  Client:①product 

  PNo Name Saleprice 

  ②sale 

  ONo Total Date 

  ③order 

  ONo PNo Saleprice Number 

  使用jdbc测定了sqlite3插入数据的效率,使用整体事务与不使用整体事务,差别明显。cpu: 1G,内存: 

  512MB使用整体事务: 1000000条记录,需要93s。使用逐个插入提交事务: 1 min只能处理20条记录。