盧愛紅 劉中原 馮蓉珍
摘 要: 為了有效降低現(xiàn)有自助出票機(jī)的成本,縮小其體積,擴(kuò)大其推廣范圍,提出一種基于嵌入式Linux的自助出票機(jī)的實(shí)現(xiàn)方法。以ARM開發(fā)板作為核心板,集成門票打印機(jī)模塊和二代身份證識(shí)別模塊,設(shè)計(jì)自助出票機(jī)系統(tǒng)硬件平臺(tái);軟件設(shè)計(jì)包括嵌入式Linux環(huán)境下的各功能模塊驅(qū)動(dòng)設(shè)計(jì)、Linux文件系統(tǒng)環(huán)境配置、QT界面程序設(shè)計(jì)等。系統(tǒng)測試結(jié)果顯示,各模塊工作正常,能夠滿足用戶的需求。
關(guān)鍵詞: ARM; 嵌入式系統(tǒng); Linux; QT; 熱敏打印機(jī)
中圖分類號(hào):TP368.2 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2013)09-28-03
0 引言
隨著智慧化城市的發(fā)展,越來越多的人工操作將被智能機(jī)器所取代。目前在各種景區(qū)、影院等公共場所,人工售票還是主流。本文提出一種基于ARM的自助出票系統(tǒng)的設(shè)計(jì),游客可以通過刷身份證來自動(dòng)獲取公共場所門票,這大大節(jié)約了人力成本,方便了人們的生活。目前市面上的自助出票系統(tǒng)都是基于x86電腦硬件系統(tǒng),采用Windows操作系統(tǒng)來設(shè)計(jì)的,這使得自助出票機(jī)的體積不能縮小,也大大增加了成本,售價(jià)非常昂貴。我們采用以S3C2440為CPU核心的ARM平臺(tái),基于Linux操作系統(tǒng)來進(jìn)行自助出票機(jī)系統(tǒng)設(shè)計(jì),集成了QT界面設(shè)計(jì)單元、門票打印單元、身份證識(shí)別單元、系統(tǒng)時(shí)間單元等多個(gè)模塊,設(shè)計(jì)出低成本、高穩(wěn)定性、適合景區(qū)或影院等公共場所的自助出票機(jī),體積可以做成類似便攜式的嵌入式設(shè)備。該設(shè)計(jì)順應(yīng)當(dāng)前智慧城市的需求,有很深遠(yuǎn)的應(yīng)用前景。
1 系統(tǒng)要求與整體設(shè)計(jì)
自助出票機(jī)系統(tǒng)設(shè)計(jì)的基本要求和服務(wù)流程是:設(shè)計(jì)出一款便攜式的自助出票機(jī),掛在公共場所墻壁上,提供友好的界面支持,在沒有游客取票時(shí),顯示公共場所景點(diǎn)宣傳畫面,有游客取票時(shí),進(jìn)入取票界面,等待游客刷二代身份證,后臺(tái)根據(jù)身份證信息,結(jié)合系統(tǒng)當(dāng)前的時(shí)間,打印出實(shí)時(shí)的門票票據(jù)。界面需要設(shè)計(jì)對(duì)系統(tǒng)配置的接口,配置系統(tǒng)時(shí)間、系統(tǒng)接口參數(shù)等。系統(tǒng)提供SQLite數(shù)據(jù)庫支持,保存游客的客戶信息,便于后臺(tái)程序的統(tǒng)計(jì)和分析。
考慮到整個(gè)系統(tǒng)復(fù)雜的界面設(shè)計(jì)需求,同時(shí)系統(tǒng)需實(shí)現(xiàn)的多個(gè)功能模塊的驅(qū)動(dòng)和應(yīng)用支持,如身份證識(shí)別模塊、打印機(jī)模塊、系統(tǒng)時(shí)鐘配置、系統(tǒng)接口參數(shù)配置等,以及對(duì)SQLite輕巧數(shù)據(jù)庫的支持,我們選用以S3C2440為CPU的ARM開發(fā)平臺(tái),采用Linux操作系統(tǒng),能根據(jù)用戶需求進(jìn)行裁剪,簡化對(duì)平臺(tái)硬件配置的要求;選用基于Qt4.7類庫的QT嵌入式界面設(shè)計(jì),能友好地支持Linux平臺(tái),并提供豐富的復(fù)雜的界面設(shè)計(jì)效果。
系統(tǒng)設(shè)計(jì)框圖[1,4]如圖1所示。
2 硬件設(shè)計(jì)
嵌入式自助出票機(jī)采用S3C2440的ARM開發(fā)板[2],LCD顯示屏選用群創(chuàng)7寸LCD顯示屏,選用RTC模塊來實(shí)現(xiàn)系統(tǒng)的實(shí)時(shí)時(shí)間的管理,選用合適的打印機(jī)模塊和二代身份證識(shí)別模塊搭建出硬件系統(tǒng)。
2.1 熱敏打印機(jī)
門票打印機(jī)的選擇要根據(jù)現(xiàn)場的應(yīng)用場景來決定,主要參數(shù)有:①打印參數(shù):門票的紙張寬度、打印寬度,打印紙的折疊形式(折疊式或卷式)、打印方式(熱敏或熱轉(zhuǎn)?。┑?;②通信接口:要根據(jù)ARM開發(fā)板的接口以及Linux操作系統(tǒng)的特點(diǎn)來選擇打印機(jī)的驅(qū)動(dòng)接口,一般熱敏打印機(jī)支持USB接口、串口、網(wǎng)口三種通信方式,本設(shè)計(jì)選用串口驅(qū)動(dòng)打印機(jī),根據(jù)串口命令配置打印機(jī)輸出的字體格式、位圖、條形碼等多種用戶需求。
本設(shè)計(jì)選用的打印機(jī)是打印寬度為58mm的熱敏票據(jù)打印機(jī),工作電壓為5V。
2.2 TX523T身份證卡號(hào)模塊
TX523T是一款天線一體化,同時(shí)可以讀二代居民身份證卡號(hào)的模塊。TX523采用13.56MHz頻基站。當(dāng)有卡靠近時(shí),模塊會(huì)以韋根或 UART方式輸出卡號(hào)。根據(jù)需要,可選擇UART或Wiegand接口與任何MCU進(jìn)行連接;使用UART接口時(shí),可以選擇波特率 9600或 19200。為了簡化代碼,我們同樣采用串口通信與ARM開發(fā)板通信。5V供電電源需要從ARM開發(fā)板引出,ARM開發(fā)板通過GPIO口來配置身份證識(shí)別模塊的工作模式。
3 軟件設(shè)計(jì)
自助出票機(jī)軟件系統(tǒng)的設(shè)計(jì)是難點(diǎn),軟件模塊包括:①基于S3C2440開發(fā)板的Linux環(huán)境開發(fā)的配置[3];②QT嵌入式運(yùn)行環(huán)境的配置和基于Qt4.7類庫的自助出票機(jī)界面設(shè)計(jì)[5];③根據(jù)ESCPOS協(xié)議設(shè)計(jì)打印機(jī)的串口驅(qū)動(dòng)程序;④身份證識(shí)別模塊的串口驅(qū)動(dòng)程序;⑤時(shí)間處理模塊等。
3.1 Linux環(huán)境開發(fā)的配置
我們使用的交叉編譯的虛擬機(jī)開發(fā)環(huán)境為Ubuntu10.10版本,交叉編譯工具為arm-linux-4.3.3版本,S3C2440開發(fā)板的Linux內(nèi)核版本為:linux2.6.30.4,需要根據(jù)硬件接口和器件,如LCD顯示屏、UART串口、eth0網(wǎng)口、GPIO口的原理圖來按需對(duì)Linux2.6.30.4內(nèi)核進(jìn)行裁剪。
3.2 QT嵌入式運(yùn)行環(huán)境的配置和界面設(shè)計(jì)
自助出票機(jī)系統(tǒng)選用QT進(jìn)行嵌入式界面設(shè)計(jì)。QT是一個(gè)跨平臺(tái)的C++類庫,其界面設(shè)計(jì)程序在各個(gè)平臺(tái)上是一樣的,只是跨平臺(tái)時(shí)需要加上各個(gè)平臺(tái)的庫重新編譯生成可執(zhí)行文件。QT目前已經(jīng)發(fā)展到第三代,是通過升級(jí)類庫來更新發(fā)展,目前最高版本的類庫是Qt4.7,Nokia一直在對(duì)QT類庫進(jìn)行更新升級(jí)。QT平臺(tái)主要是面向嵌入式界面設(shè)計(jì)的,QT界面程序不是一個(gè)桌面系統(tǒng),而是可以直接運(yùn)行在嵌入式環(huán)境下的程序。
QT界面程序的設(shè)計(jì)環(huán)境是Qt creator,這是QT的集成開發(fā)環(huán)境(IDE),用于開發(fā)源代碼、編譯鏈接源代碼、調(diào)試源代碼,大大簡化了設(shè)計(jì)環(huán)境的配置。Qt creator環(huán)境配置成交叉編譯的環(huán)境之后,用Qt creator設(shè)計(jì)出的界面可執(zhí)行文件能夠在S3C2440開發(fā)板上運(yùn)行。
3.2.1 QT嵌入式運(yùn)行環(huán)境的配置
配置QT嵌入式運(yùn)行環(huán)境,需要對(duì)S3C2440開發(fā)板的文件系統(tǒng)進(jìn)行修改:添加經(jīng)過交叉編譯的Qt4.7類庫、添加ts觸摸屏校準(zhǔn)庫和配置應(yīng)用程序、修改/etc/profile配置文件、添加QT配置腳本、添加QT界面設(shè)計(jì)程序。配置文件主要用于指定環(huán)境變量的具體路徑,其中QTDIR是Qt4.7類庫路徑,QWS_MOUSE_PROTO用于指明觸摸屏或鼠標(biāo)的設(shè)備名。
3.2.2 人機(jī)界面設(shè)計(jì)
自助出票機(jī)的人機(jī)界面是多級(jí)界面。主界面提供取票界面、廣告界面、系統(tǒng)設(shè)置界面給用戶選擇。取票界面是主要的功能界面,等待從串口接收用戶輸入的身份證信息,與數(shù)據(jù)庫中的信息進(jìn)行比對(duì)和判斷,決定是否打印門票,并將用戶信息存儲(chǔ)到數(shù)據(jù)庫。廣告界面是根據(jù)用戶需求定制展示用戶宣傳圖片。系統(tǒng)設(shè)置界面主要需要讀取當(dāng)前系統(tǒng)時(shí)間,并可以根據(jù)時(shí)間進(jìn)行調(diào)整和設(shè)置,同時(shí)提供與打印機(jī)通信的串口UART1和與身份證識(shí)別模塊通信的UART2的屬性配置選項(xiàng)。系統(tǒng)流程圖如圖2所示。
⑴ 取票的處理過程
取票流程為:進(jìn)入取票界面,系統(tǒng)等待從串口2接收身份證識(shí)別模塊輸入的身份證UID號(hào),再查詢數(shù)據(jù)庫,若在當(dāng)前數(shù)據(jù)庫中沒有查到該游客的信息,則將游客信息存儲(chǔ)到數(shù)據(jù)庫,啟動(dòng)門票打印機(jī)打印出系統(tǒng)實(shí)時(shí)信息并自動(dòng)出一張票;若在當(dāng)前數(shù)據(jù)庫中已查到該游客的信息,則不再重復(fù)出票,處理完成之后返回主界面等待用戶輸入。在取票處理的程序設(shè)計(jì)過程中,我們將界面處理和數(shù)據(jù)處理分開管理,用不同的類進(jìn)行處理。取票處理過程抽象出五大功能類:GetTicket(取票界面類)、Serial(串口類)、EscPos(操作打印機(jī)的類)、IdCardMag(身份證號(hào)識(shí)別的類)、SqliteHelper(數(shù)據(jù)庫處理的類)。
⑵ 系統(tǒng)設(shè)置的處理過程
系統(tǒng)設(shè)置的過程為:進(jìn)入系統(tǒng)設(shè)計(jì)界面,通過輸入用戶名和密碼登錄到系統(tǒng)具體的設(shè)置頁面,具體功能是,在系統(tǒng)設(shè)置頁面中查看當(dāng)前自助出票機(jī)的系統(tǒng)時(shí)間:年月日時(shí)分,如果與當(dāng)前實(shí)際的時(shí)間不匹配,系統(tǒng)設(shè)置界面提供了相應(yīng)的調(diào)整時(shí)間的按鈕;在系統(tǒng)設(shè)置頁面中可以對(duì)串口的屬性進(jìn)行設(shè)置。系統(tǒng)設(shè)置過程抽象出三大功能類:SystemSet(系統(tǒng)設(shè)置界面類)、TimManager(系統(tǒng)時(shí)間處理功能類)。在SystemSet(系統(tǒng)設(shè)置界面類)中,完成對(duì)打印機(jī)的串口初始化和打印機(jī)設(shè)備初始化、身份證識(shí)別模塊串口初始化、QT時(shí)鐘管理初始化的工作。界面設(shè)計(jì)如圖3所示。
3.3 根據(jù)ESCPOS協(xié)議設(shè)計(jì)打印機(jī)驅(qū)動(dòng)
根據(jù)ESCPOS協(xié)議可以設(shè)置打印機(jī)打印的字符格式:字體、倍寬、倍高、粗體等,如果需要打印復(fù)雜的圖片,可以采用定義打印Flash位圖的方式處理。Flash位圖格式如圖4所示。
3.4 身份證識(shí)別模塊串口驅(qū)動(dòng)
身份證識(shí)別模塊串口驅(qū)動(dòng)的軟件設(shè)計(jì),重點(diǎn)是監(jiān)聽身份證識(shí)別模塊串口發(fā)送過來的數(shù)據(jù),對(duì)串口數(shù)據(jù)進(jìn)行分析,找到UID號(hào)的有用數(shù)據(jù)。在Linux操作系統(tǒng)中,串口設(shè)備是作為一個(gè)文件來進(jìn)行管理的,本系統(tǒng)中設(shè)備名是/dev/ttySAC2。我們對(duì)串口文件接收的數(shù)據(jù)監(jiān)聽有效地利用了QT的signal/slot信號(hào)/槽機(jī)制。采用QT提供的QSocketNotifier對(duì)象來監(jiān)聽系統(tǒng)文件操作,可以將文件操作轉(zhuǎn)換為QT事件(QSocketNotifier::Read)。當(dāng)串口有數(shù)據(jù)可讀時(shí),QT事件(QSocketNotifier::Read)會(huì)驅(qū)動(dòng)QSocketNotifier對(duì)象發(fā)送ativated 信號(hào),并調(diào)用預(yù)先設(shè)置好的槽函數(shù)(remoteDataIncoming)來處理事件。代碼如下:
m_notifier=new QSocketNotifier(m_fd,QSocketNotifier::Read,this);
connect(m_notifier,SIGNAL(activated(int)),this,SLOT
(remoteDataIncoming()));
3.5 時(shí)間處理模塊
S3C2440開發(fā)板板載RTC實(shí)時(shí)時(shí)鐘硬件電路,在系統(tǒng)斷電時(shí),RTC時(shí)鐘自帶的電池能夠保證時(shí)鐘正常工作。Linux操作系統(tǒng)提供的date命令可以設(shè)計(jì)操作系統(tǒng)的時(shí)間,hwclock -w命令可以實(shí)現(xiàn)操作系統(tǒng)的時(shí)間和硬件RTC實(shí)時(shí)時(shí)鐘的時(shí)間同步。我們使用QT的QDataTime類獲取當(dāng)前系統(tǒng)的實(shí)時(shí)時(shí)間,使用datetimedit控件接收用戶的設(shè)置,在通過date和hwclock命令對(duì)系統(tǒng)時(shí)鐘和硬件時(shí)間進(jìn)行同步修改。
4 實(shí)驗(yàn)結(jié)果
自助出票機(jī)系統(tǒng)集成時(shí),操作流程如下:
⑴ 將S3C2440開發(fā)板和周邊器件的硬件環(huán)境連線準(zhǔn)備好;
⑵ 在S3C2440開發(fā)板中燒入bootloader、Linux內(nèi)核和文件系統(tǒng),S3C2440開發(fā)板能夠正常啟動(dòng)進(jìn)入文件系統(tǒng);
⑶ 配置S3C2440開發(fā)板文件系統(tǒng)中QT運(yùn)行的環(huán)境,正確加載庫文件、配置文件和界面程序可執(zhí)行文件;
⑷ 自助出票機(jī)系統(tǒng)設(shè)計(jì)完成,可以驗(yàn)證結(jié)果。
自助出票系統(tǒng)的聯(lián)調(diào)如圖5所示,實(shí)驗(yàn)驗(yàn)證表明:系統(tǒng)能準(zhǔn)備識(shí)別出身份證號(hào),并觸發(fā)打印門票機(jī)制,打印出系統(tǒng)的實(shí)時(shí)信息。
5 結(jié)束語
自助出票機(jī)系統(tǒng)整體設(shè)計(jì)方案綜合考慮了現(xiàn)場應(yīng)用環(huán)境的需求,采用基于Linux的嵌入式開發(fā)技術(shù)有效地降低產(chǎn)品成本,提高系統(tǒng)的穩(wěn)定性。本設(shè)計(jì)可靠性好、成本低廉、操作方便,具有較強(qiáng)的工程實(shí)用意義和推廣價(jià)值。自助出票機(jī)采用S3C2440嵌入式開發(fā)板,有效降低了自助出票機(jī)的硬件成本;采用Linux操作系統(tǒng),可以高效地針對(duì)應(yīng)用場景進(jìn)行內(nèi)核的裁剪和驅(qū)動(dòng)程序的設(shè)計(jì);采用廣泛應(yīng)用于嵌入式系統(tǒng)界面的QT封裝的C++類來進(jìn)行界面設(shè)計(jì),可以設(shè)計(jì)出人機(jī)交互流暢穩(wěn)定的工控機(jī)界面。目前自助出票機(jī)經(jīng)過第三方的測試和用戶的初步使用,較好地滿足了客戶的需求。為了擴(kuò)大本設(shè)計(jì)的應(yīng)用場景,我們下一階段的工作目標(biāo)是:設(shè)計(jì)出一款基于ARM的自動(dòng)售票機(jī)。
參考文獻(xiàn):
[1] 劉超,周繼超,張紅星.基于Linux Qt的列車人機(jī)界面設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2013.4:215
[2] 汪思靜,程志強(qiáng).基于QT的虛擬示波器的軟面板設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013.6:180
[3] 孫計(jì)偉.基于嵌入式Linux的指紋識(shí)別系統(tǒng)設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2013.3(26):1
[4] 杜春雷.ARM體系結(jié)構(gòu)與編程[M].清華大學(xué)出版社,2003.
[5] 華清遠(yuǎn)見嵌入式培訓(xùn)中心.嵌入式Linux應(yīng)用程序開發(fā)標(biāo)準(zhǔn)教程[M].人民郵電出版社,2010.
[6] 韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊(cè)[M].人民郵電出版社,2010.
[7] 尤晉元.UNIX環(huán)境高級(jí)編程(第2版)[M].人民郵電出版社,2006.
[8] 倪繼利.Qt及Linux操作系統(tǒng)窗口設(shè)計(jì)[M].電子工業(yè)出版社,2009.
[9] 何劍鋒,栗楠.基于ARM920T嵌入式Linux/Qt4的點(diǎn)菜系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用,2011.6:43
[10] 宋榮.基于Qt/Embedded的嵌入式系統(tǒng)GUI開發(fā)[J].機(jī)電工程,2009.26(4):90
[11] 曾云,胡頻.嵌入式數(shù)據(jù)庫在QT中的應(yīng)用研究與實(shí)現(xiàn)[J].國外電子測量技術(shù),2010.9:73
[12] MICHAEL Owens.The Definitive Guide to SQLite[M].US: Apress,2006.
[13] Jasmin Blanchette,Mark Summerfield.C++ CUI Qt3 Program-ming[M].Beihang University,2006.3.
[14] 蘆東昕,周建彬.基于Qt/Embedded的控件擴(kuò)展研究與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006.10:97