基于Linux的嵌入式POS的GUI及數(shù)據(jù)庫(kù)研究
POS(PointofSale)是目前各商場(chǎng)、飯店、加油站等廣泛提供的刷卡消費(fèi)業(yè)務(wù)的輔助工具,位于商場(chǎng)、加油站等地的POS機(jī)將獲得的用戶*的數(shù)據(jù)(卡號(hào)、業(yè)務(wù)資料等)通過(guò)通信線路傳給*服務(wù)處理系統(tǒng)上,經(jīng)過(guò)處理的信息返回到POS機(jī),從而完成用戶的刷卡消費(fèi)業(yè)務(wù)。為了實(shí)現(xiàn)上述數(shù)據(jù)交換過(guò)程,在POS機(jī)與銀行主機(jī)之間必須進(jìn)行數(shù)據(jù)通信。
目前使用最廣泛的POS機(jī)接入方式是有線接入方式,而有線接入方式主要有兩種:一是基于電話網(wǎng)的點(diǎn)到點(diǎn)撥號(hào)接入方式和基于DDN的專線接入方式。無(wú)線POS機(jī)是目前POS機(jī)行業(yè)的一項(xiàng)新技術(shù),移動(dòng)性強(qiáng),平均交易時(shí)間短,并能隨身攜帶。目前在全國(guó)各大商場(chǎng)和超市內(nèi)隨處可見(jiàn)POS刷卡機(jī),但它們大多都是通過(guò)電話線聯(lián)網(wǎng)進(jìn)行通信,移動(dòng)性差,不靈活,限制了業(yè)務(wù)發(fā)展。無(wú)線POS機(jī)成功的解決了這一難題,它通過(guò)一個(gè)POS和無(wú)線調(diào)制解調(diào)器的一體機(jī)在GPRS/CDMA網(wǎng)上聯(lián)網(wǎng)傳輸信息。
1 Linux下的圖形用戶開(kāi)發(fā)工具Q t
Qt是Trolltech(挪威)公司的產(chǎn)品。Qt是一個(gè)多平臺(tái)的C++圖形用戶界面應(yīng)用程序框架,它能給用戶提供精美的圖形用戶界面所需要的所有元素,而
且它是基于一種面向?qū)ο蟮乃枷?所以用戶對(duì)其對(duì)象的擴(kuò)展是相當(dāng)容易的,并且它還支持真正的組件編程。
在一臺(tái)裝有Linux操作系統(tǒng)的機(jī)器上建立Qt/Embeded開(kāi)發(fā)環(huán)境:首先需要擁有三個(gè)軟件安裝包: tmake工具安裝包,Qt/Embeded安裝包,Qt的X11版安裝包。
Qt包含了許多支持嵌入式系統(tǒng)開(kāi)發(fā)的工具,其中兩個(gè)最實(shí)用的工具是qmake和Qtdesigner(圖形設(shè)計(jì)器)。Qt中有三個(gè)主要的基類:QObject、QapplicaTION和QW idget。
在Qt中編程,利用Signal和Slot進(jìn)行對(duì)象之間的通信是Qt的主要特征。它與W indows中的消息機(jī)制非常類似,但是Signal和Slot機(jī)制真正實(shí)現(xiàn)了一種消息的封裝。當(dāng)對(duì)象的狀態(tài)改變時(shí),發(fā)出Signa,l通知所有的Slot接受Signa,l盡管它不知道哪些函數(shù)是Slot。一個(gè)Signal可以發(fā)給多個(gè)Slo,t Slot也可以接收多個(gè)Signal。Slot除了可以接收Signal以外,與其他的成員函數(shù)沒(méi)有區(qū)別。這種機(jī)制比使用回調(diào)函數(shù)要靈活,但是會(huì)減慢程序的運(yùn)行速度。不過(guò)在現(xiàn)在高速CPU的面前,這種損失是無(wú)足輕重的,而且它還能保證程序的簡(jiǎn)明性和靈活性,非常便利。
QT支持包括Unix、Linux、W indows在內(nèi)的多種操作系統(tǒng)平臺(tái)。Linux下常用的KDE桌面環(huán)境就是基于QT編寫(xiě)的。QT使用了Unicode作為內(nèi)部編碼,可以同時(shí)支持多種編碼。目前的版本對(duì)國(guó)際化標(biāo)準(zhǔn)支持非常完備,這就為本地化提供了可能[4]。
2 小型嵌入式數(shù)據(jù)庫(kù)M ySQL /SQLite
SQLite作為一個(gè)嵌入式的數(shù)據(jù)庫(kù),主要的是程序小(200多K),速度快,支持ANSISQL-92的大部分標(biāo)準(zhǔn)功能。SQLite使用文件作為數(shù)據(jù)庫(kù),查詢出的所有記錄都放在內(nèi)存中,它的sql句法比較簡(jiǎn)單易用,支持的類型也比較全。字符串和blob類型可以支持4GB的長(zhǎng)度。它還支持事務(wù)處理。在單用戶情況下,它的速度是最快的。多用戶下,速度不及別的數(shù)據(jù)庫(kù)。
特點(diǎn):①支持符合acid(原子性,一致性,隔離性,持久性)特性的事務(wù)處理;②0配置,不需要任何安裝和管理;③符合SQL92的絕大多數(shù)標(biāo)準(zhǔn);④完整的數(shù)據(jù)庫(kù)只存儲(chǔ)在單個(gè)磁盤(pán)文件當(dāng)中;⑤數(shù)據(jù)庫(kù)文件可以被不同的機(jī)器共享,并與字節(jié)序無(wú)關(guān);⑥string和BLOB的大小只受到可用內(nèi)存的限制;⑦總共不到30000行代碼。代碼空間不到250K;⑧比現(xiàn)在的C/S結(jié)構(gòu)的大部分?jǐn)?shù)據(jù)庫(kù)要快;⑨不依賴于任何其他的庫(kù);⑩支持?jǐn)?shù)據(jù)庫(kù)大小可以達(dá)到2的41次方,即2個(gè)TB。
SQLite的弱點(diǎn):①?zèng)]有專有的安全措施,數(shù)據(jù)庫(kù)是一個(gè)文件;②沒(méi)有內(nèi)嵌的壓縮、解壓機(jī)制,數(shù)據(jù)庫(kù)文件看上去太大。
MySQL是SQL數(shù)據(jù)庫(kù)管理系統(tǒng),MySQL是開(kāi)源的,開(kāi)源意味著任何人都可以使用和修改該軟件,任何人都可以從Internet上下載和使用MySQL而不需要支付任何費(fèi)用。MySQL服務(wù)器工作在客戶/服務(wù)器或嵌入系統(tǒng)中,MySQL數(shù)據(jù)庫(kù)服務(wù)器是一個(gè)客戶/服務(wù)器系統(tǒng),它由多線程SQL服務(wù)器組成,支持不同的后端、多個(gè)不同的客戶程序和庫(kù)、管理工具和廣泛的應(yīng)用程序接口(APIs)。
3 POS系統(tǒng)的硬件配置
POS系統(tǒng)硬件配置,見(jiàn)圖1所示。
4 本POS系統(tǒng)介紹
由于我們使用的是Red hat9自帶的Qtdesigner,由于是處于研究階段,而且是免費(fèi)的,所以暫時(shí)采用此軟件.此軟件沒(méi)有集成開(kāi)發(fā)環(huán)境(IDE),我們采用Qt的Qt designer畫(huà)出基本的功能,然后由KDevelop修改添加源代碼,通過(guò)Qt自帶的uic(user inteRFace compiler)工具將. ui編譯成. cpp和. h文件,最后通過(guò)修改makefile,達(dá)到我們編譯此界面的目的。
(1)需要配置unixODBC,把unixODBC放到/usr/local下,解壓縮,然后運(yùn)行. /configure,其中需要一些環(huán)境變量參數(shù)的設(shè)置,系統(tǒng)生成一些makefile文件,運(yùn)行make將unixODBC編譯,然后make install安裝unix-ODBC,即unixODBC安裝好了。
(2)配置ODBC,選擇數(shù)據(jù)庫(kù)及其驅(qū)動(dòng)。
(3)將Qt連接上數(shù)據(jù)庫(kù),完成連接。
5 開(kāi)發(fā)流程
系統(tǒng)開(kāi)發(fā)流程見(jiàn)圖2所示。
6 具體介紹
本系統(tǒng)針對(duì)商場(chǎng)或?qū)Yu(mài)店而設(shè)計(jì),系統(tǒng)的核心功能模塊是主控模塊,主要是系統(tǒng)初始化,與通信模塊,數(shù)據(jù)庫(kù),條碼掃描,鍵盤(pán),RFID接口,顯示器及打印機(jī)等模塊的連接。另外系統(tǒng)預(yù)留,與銀聯(lián)卡及會(huì)員卡端口,以備系統(tǒng)擴(kuò)展之用。
系統(tǒng)采用消息隊(duì)列機(jī)制,
系統(tǒng)始終維持兩個(gè)數(shù)據(jù)庫(kù)的運(yùn)行,主服務(wù)器的中央數(shù)據(jù)庫(kù)和本地單機(jī)的小型數(shù)據(jù)庫(kù)。
(1)通信模塊:上傳:主控模塊的響應(yīng)信息,出錯(cuò)信息,日志信息,交易信息,數(shù)據(jù)庫(kù)響應(yīng),刪除日志響應(yīng)。下發(fā):控制信息,查詢?nèi)罩?刪除日志,查詢,修改,刪除數(shù)據(jù)庫(kù)信息。
其中的主要消息有:①上傳交易信息成功,上傳交易信息失敗;②本地?cái)?shù)據(jù)庫(kù)中無(wú)該商品;③鍵盤(pán)消息的處理,主要是按鍵處理;④寫(xiě)日志成功,寫(xiě)日志失敗;⑤來(lái)自服務(wù)器的控制消息:刪除日志,查詢當(dāng)前機(jī)器的工作狀態(tài),日志打包發(fā)送至服務(wù)器,本地pos機(jī)重啟,關(guān)機(jī)等;⑥接受條碼信息;⑦如果本地?cái)?shù)據(jù)庫(kù)無(wú)該商品,向服務(wù)器數(shù)據(jù)庫(kù)發(fā)送查詢信息。
(2)數(shù)據(jù)庫(kù)SQLite說(shuō)明:①SQLite編譯、安裝;②SQLiteODBC編譯、安裝。這個(gè)要配置SQLite源代碼的目錄。如果出現(xiàn)找不到SQLite的情況,在Makefile文件中加上路徑;③建立SQLite中的一個(gè)數(shù)據(jù)庫(kù)。SQLite文件夾下有個(gè)demo文件,或者參照Readme直接使用SQL語(yǔ)言生成;④系統(tǒng)ODBC配置。在Linux中將剛剛做好的數(shù)據(jù)庫(kù)配置為系統(tǒng)數(shù)據(jù)源,即讓QT能找到;⑤QT中使用數(shù)據(jù)顯示組件,選擇上述的數(shù)據(jù)源,然后組件就可以自動(dòng)顯示數(shù)據(jù)庫(kù)中的數(shù)據(jù)了。Server端采用MSQL/SQLite+Linux; Client端采用MSQL/SQLite+uCLinux;顯示通過(guò)串口實(shí)現(xiàn)。
(3)數(shù)據(jù)庫(kù)設(shè)計(jì):
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測(cè)定了sqlite3插入數(shù)據(jù)的效率,使用整體事務(wù)與不使用整體事務(wù),差別明顯。cpu: 1G,內(nèi)存:
512MB使用整體事務(wù): 1000000條記錄,需要93s。使用逐個(gè)插入提交事務(wù): 1 min只能處理20條記錄。