基于Linux的嵌入式POS的GUI及数据库研究
POS(PointofSale)是目前各商场、饭店、加油站等广泛提供的刷卡消费业务的辅助工具,位于商场、加油站等地的POS机将获得的用户*的数据(卡号、业务资料等)通过通信线路传给*服务处理系统上,经过处理的信息返回到POS机,从而完成用户的刷卡消费业务。为了实现上述数据交换过程,在POS机与银行主机之间必须进行数据通信。
本文引用地址://m.amcfsurvey.com/article/148839.htm目前使用最广泛的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]。
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所示。
![](http://uphotos.eepw.com.cn/fetch/20130729/148839_1_0.jpg)
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所示。
![](http://uphotos.eepw.com.cn/fetch/20130729/148839_1_1.jpg)
6 具体介绍
本系统针对商场或专卖店而设计,系统的核心功能模块是主控模块,主要是系统初始化,与通信模块,数据库,条码扫描,键盘,RFID接口,显示器及打印机等模块的连接。另外系统预留,与银联卡及会员卡端口,以备系统扩展之用。
系统采用消息队列机制,
系统始终维持两个数据库的运行,主服务器的中央数据库和本地单机的小型数据库。
(1)通信模块:上传:主控模块的响应信息,出错信息,日志信息,交易信息,数据库响应,删除日志响应。下发:控制信息,查询日志,删除日志,查询,修改,删除数据库信息。
![](http://uphotos.eepw.com.cn/fetch/20130729/148839_1_2.jpg)
其中的主要消息有:①上传交易信息成功,上传交易信息失败;②本地数据库中无该商品;③键盘消息的处理,主要是按键处理;④写日志成功,写日志失败;⑤来自服务器的控制消息:删除日志,查询当前机器的工作状态,日志打包发送至服务器,本地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条记录。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论