洪俊民(廈門萬佳通科技有限公司,福建 廈門 361006)
網(wǎng)絡(luò)訂餐系統(tǒng)中無線微型打印終端的研發(fā)
洪俊民
(廈門萬佳通科技有限公司,福建廈門361006)
摘要:本文介紹了一種基于GPRS網(wǎng)絡(luò)通信,可以打印票據(jù)的微型打印終端,該終端結(jié)合了網(wǎng)絡(luò)訂餐的應(yīng)用,用于幫助餐館快速處理網(wǎng)絡(luò)訂單。本文首先介紹了打印終端的總體設(shè)計(jì)思路,接著進(jìn)一步介紹了其硬件和軟件的設(shè)計(jì),最后給出總結(jié)。
關(guān)鍵詞:GSM;GPRS;網(wǎng)絡(luò)訂餐;微型打印
隨著網(wǎng)絡(luò)的普及,以及網(wǎng)絡(luò)速度的提升,越來越多的人漸漸習(xí)慣于通過網(wǎng)絡(luò)辦事,網(wǎng)上聊天、網(wǎng)上購物等已經(jīng)廣泛流行,而網(wǎng)上訂餐的方式也開始被生活節(jié)奏快的上班族所青睞。在網(wǎng)上選好菜品并下單,然后由餐館備餐,最后送貨上門,大大節(jié)省了許多時(shí)間,用餐的人不用再像以往那樣跑到餐館去點(diǎn)餐并等待餐館備餐,而餐館也可以提前處理訂餐,增加了每天的銷量。
網(wǎng)上訂餐基本上是通過使用電腦或手機(jī)等可上網(wǎng)設(shè)備實(shí)現(xiàn)的,餐館在網(wǎng)上提供了直觀的網(wǎng)頁,訂餐的人通過網(wǎng)頁可快速完成點(diǎn)餐,因此,網(wǎng)上訂餐是相當(dāng)方便快捷的,但對(duì)于餐館來說,如何快速簡(jiǎn)單的處理訂單,卻是一個(gè)大問題,以往,餐館需要準(zhǔn)備一臺(tái)電腦和一臺(tái)打印機(jī),但由于電腦的環(huán)境適應(yīng)性較差,難以用在油煙較多、濕氣較重的廚房,而且電腦還需要專門人員維護(hù),因而無法幫助餐館實(shí)現(xiàn)經(jīng)濟(jì)實(shí)用而又穩(wěn)定可靠的訂單處理。
無線微型打印終端就是為了解決這些諸多弊端而進(jìn)行研發(fā)的,該產(chǎn)品采用GSM模塊,結(jié)合熱敏打印模塊,相當(dāng)于集成了電腦和打印機(jī),該產(chǎn)品體積小,并且是通過GPRS網(wǎng)絡(luò)讀取訂單,無需連接網(wǎng)線,因此餐館可以任意移動(dòng)擺放該產(chǎn)品,并可用于廚房,由廚師直接處理票據(jù),而且本產(chǎn)品還設(shè)計(jì)了一種簡(jiǎn)單的訂單處理流程,因而可以提升餐館處理訂單的速度,并且使用簡(jiǎn)單快捷,適用性強(qiáng)。
網(wǎng)絡(luò)訂餐系統(tǒng)主要由兩部分組成:訂餐下單和訂單處理;首先是由用戶使用電腦或手機(jī)打開餐館的網(wǎng)站,并在網(wǎng)站上選擇需要的餐類,當(dāng)用戶確認(rèn)選擇后并用網(wǎng)銀或其他支付方式支付費(fèi)用后,即完成了訂餐下單,此時(shí),該訂單即被存儲(chǔ)在網(wǎng)絡(luò)服務(wù)器的數(shù)據(jù)庫中,當(dāng)餐館開啟無線微型打印終端機(jī)后,該終端機(jī)自動(dòng)通過GPRS網(wǎng)絡(luò),使用http協(xié)議與網(wǎng)絡(luò)服務(wù)器通信,網(wǎng)絡(luò)服務(wù)器查詢數(shù)據(jù)庫后,把訂單內(nèi)容發(fā)送給終端機(jī),該終端機(jī)按一定的票據(jù)格式打印出訂單內(nèi)容,并播放音樂提示餐館人員確認(rèn),餐館人員查看訂單內(nèi)容后,如無問題,則按終端機(jī)上的確認(rèn)鍵確認(rèn),但如若餐館無法實(shí)現(xiàn)客戶的要求或其他原因,則餐館人員需要按終端機(jī)上的取消鍵,并選擇預(yù)先設(shè)置的取消理由,比如“缺貨”,該終端機(jī)將把這些信息發(fā)送給服務(wù)器,服務(wù)器收到后即時(shí)顯示這些信息給訂餐用戶。
整個(gè)操作流程中,餐館人員只需確認(rèn)票據(jù)信息,并簡(jiǎn)單按鍵即可完成訂單處理,因此操作簡(jiǎn)單快捷,不占用太多餐館人員的時(shí)間,即使是忙碌的廚師都可以處理。
無線微型打印終端主要包括GSM模塊、LCD顯示、熱敏打印、鍵盤等部分。
2.1GSM模塊
GSM模塊采用的是SIMCOM的SIM840W模塊,該模塊集成了GSM標(biāo)準(zhǔn)功能,包括撥打/接聽電話、短信收發(fā)和GPRS網(wǎng)絡(luò)通信等功能,更重要的一點(diǎn)是,SIM840W模塊提供了SDK,允許二次開發(fā),其獨(dú)創(chuàng)的EAT接口,使開發(fā)人員可以像使用單片機(jī)一樣開發(fā)該模塊。
使用SIM840W模塊可以免去開發(fā)人員外接單片機(jī),其自帶的豐富資源又是單片機(jī)無法比擬的,SIM840W是由一顆32位、頻率為104MHz的ARM芯片,以及2.5兆字節(jié)的程序空間和2兆多字節(jié)的內(nèi)存組成的,開發(fā)人員可以定義簡(jiǎn)單幾個(gè)程序線程,使程序開發(fā)像單片機(jī)一樣簡(jiǎn)單,而EAT接口又使開發(fā)人員可以直接用某個(gè)函數(shù)發(fā)送標(biāo)準(zhǔn)的AT指令,因而豐富了模塊功能。
2.2LCD顯示
本終端的顯示采用點(diǎn)陣液晶驅(qū)動(dòng)芯片ST7565實(shí)現(xiàn),該芯片最大支持132*65點(diǎn)的LCD顯示(本終端只用到其中的128*64點(diǎn)),具有并行和串行兩種接口[1],出于節(jié)省I/O口的考慮,我們采用串行接口,但為了提高串行驅(qū)動(dòng)速度,我們用SIM840W的SPI口來驅(qū)動(dòng)ST7565芯片。
2.3熱敏打印模塊
票據(jù)的打印是由熱敏頭對(duì)熱敏紙加熱,并由馬達(dá)驅(qū)動(dòng)走紙完成的,其原理類似lcd的顯示,熱敏頭的加熱點(diǎn)數(shù)為384,也就是一行最多可以加熱384個(gè)點(diǎn),打印時(shí),把要打印的內(nèi)容所對(duì)應(yīng)的點(diǎn)的位置設(shè)置為加熱狀態(tài),當(dāng)加熱到一定時(shí)間后,即控制馬達(dá)轉(zhuǎn)動(dòng)走紙,馬達(dá)使用恒定電流斷路器的方式進(jìn)紙,馬達(dá)驅(qū)動(dòng)信號(hào)的每?jī)刹街g的精度為0.0625mm,(相當(dāng)于一個(gè)點(diǎn)的精度),在打印過程中應(yīng)當(dāng)根據(jù)實(shí)際的工作條件例如電壓、溫度、實(shí)際打印點(diǎn)數(shù)等參數(shù)來調(diào)整馬達(dá)的驅(qū)動(dòng)頻率。
2.4鍵盤
由于GSM模塊自帶有鍵盤掃描的GPIO口,因此對(duì)應(yīng)鍵盤的設(shè)計(jì)就非常簡(jiǎn)單,我們采用的是井字型掃描方式,當(dāng)有按鍵按下時(shí),在程序中,將會(huì)收到按鍵事件通知,調(diào)用API函數(shù)即可讀到按鍵的物理鍵值。
軟件的開發(fā)是在SIM840W上進(jìn)行的,該模塊提供了EMBEDDEDAT(簡(jiǎn)稱EAT)接口,主要用于客戶對(duì)SIM840W進(jìn)行二次開發(fā),SIMCom提供相關(guān)的API函數(shù),資源及運(yùn)行環(huán)境,客戶app程序運(yùn)行在SIM840W內(nèi)部。這樣可以不再需要外部MCU,節(jié)省成本。EAT主要功能包括標(biāo)準(zhǔn)的AT命令,如TCPIP連接功能,打電話功能以及發(fā)短信等相關(guān)功能。所提供的API包括事件獲取API,文件系統(tǒng)操作,timer的控制,周圍設(shè)備的API,及一些常用的系統(tǒng)API等。
我們的軟件設(shè)計(jì)就是根據(jù)EAT的特性進(jìn)行設(shè)計(jì)的,主要包括主程序,功能模塊程序和驅(qū)動(dòng)部分。
3.1主程序
EAT平臺(tái)提供多線程功能,目前支持1個(gè)主線程和最多8個(gè)子線程,主線程用于和系統(tǒng)通信,如接收系統(tǒng)事件,本終端的主程序正是在主線程上運(yùn)行的。
(1)主程序main.c中對(duì)應(yīng)的結(jié)構(gòu)體
#pragmaarmsectionrodata=“APP_ CFG”
#pragmaarmsectionrodata
#pragmaarmsectionrodata= ”APPENTRY”
constEatEntry_stAppEntry=
{
app_main,
app_func_ext1,
(app_user_func)EAT_NULL,// app_user1,
……
(app_user_func)EAT_NULL,//app_ user8,
};
#pragmaarmsectionrodata
(2)具體說明
app_main為主程序,負(fù)責(zé)接收系統(tǒng)(core)的消息,并調(diào)度運(yùn)行各個(gè)功能模塊,優(yōu)先級(jí)最高,相比其他8個(gè)線程,啟動(dòng)時(shí)間最早。EatEntry_st中的值不是0xFFFFFFFF,則該入口會(huì)被調(diào)用,同時(shí)系統(tǒng)分配相關(guān)的信息。App_user1,app_user2…app_user8是用戶可使用的其他8個(gè)線程,優(yōu)先級(jí)依次降低,即app_ main>app_user1>...>app_user8。
app_main示例代碼:
voidapp_main(void*data)
{
RAM初始化
while(1)
{
獲取事件
事件處理
調(diào)度功能模塊
……
}
}
3.2功能模塊
程序中的各個(gè)獨(dú)立功能都是以模塊的方式封裝的,并由主程序調(diào)度,主程序根據(jù)信號(hào)的傳遞調(diào)用相應(yīng)的模塊,比如,根據(jù)某個(gè)定時(shí)信號(hào)調(diào)用響應(yīng)該信號(hào)的功能模塊運(yùn)行。每個(gè)功能模塊都必須響應(yīng)啟動(dòng)信號(hào)和停止信號(hào),當(dāng)程序調(diào)用afshLoadHandler并帶有模塊函數(shù)名稱后,即啟動(dòng)了該功能模塊。功能模塊的生命周期是從啟動(dòng)信號(hào)開始,到結(jié)束信號(hào)前。在該終端的各個(gè)功能模塊中,最重要的兩個(gè)功能模塊是:后臺(tái)訂單接收模塊和訂單處理模塊;
(1)訂單接收模塊
該模塊啟動(dòng)一個(gè)定時(shí)器,在設(shè)定的時(shí)間到來時(shí),開始連接網(wǎng)絡(luò)服務(wù)器,并查詢是否有訂單,如果沒有訂單,則等到下一個(gè)定時(shí)時(shí)間到來時(shí)再重復(fù)查詢,如果查詢到服務(wù)器有訂單,則讀取訂單,并以信號(hào)方式把訂單發(fā)送給訂單處理模塊處理;
(2)訂單處理模塊
當(dāng)有訂單信號(hào)發(fā)送時(shí),該模塊即被調(diào)用,該模塊調(diào)用后,開始解析訂單格式,并按一定格式打印,然后響鈴并等待用戶確認(rèn),用戶根據(jù)打印的票據(jù)決定是否接收該訂單,在用戶按確認(rèn)或拒絕等相關(guān)操作后,該模塊將把相應(yīng)信息發(fā)送給服務(wù)器,信息中帶有該訂單的編碼,因此服務(wù)器可以確認(rèn)是哪條訂單被處理了。
3.3驅(qū)動(dòng)
本終端采用代碼分層的設(shè)計(jì),把與硬件相關(guān)部分的代碼與上層應(yīng)用分開,硬件相關(guān)代碼即為驅(qū)動(dòng)部分,屬于代碼中的底層部分;驅(qū)動(dòng)包括Lcd驅(qū)動(dòng)、打印驅(qū)動(dòng)、按鍵驅(qū)動(dòng)、音頻驅(qū)動(dòng)和IO口控制驅(qū)動(dòng)等部分,驅(qū)動(dòng)部分為上層提供了一些標(biāo)準(zhǔn)接口函數(shù),方便上層調(diào)用,使上層代碼不需要關(guān)心底層的控制,因此也方便了外圍硬件的更換,比如,更換外殼導(dǎo)致按鍵有所變化時(shí),只要修改驅(qū)動(dòng)代碼即可,上層不需做任何修改。所有驅(qū)動(dòng)函數(shù)名統(tǒng)一以“Drv_”作為前綴,如打印驅(qū)動(dòng)函數(shù)有開啟打印控制Drv_PrnOpen,關(guān)閉打印控制Drv_PrnClose等。
隨著網(wǎng)絡(luò)應(yīng)用的更加普及,配合網(wǎng)絡(luò)應(yīng)用的終端產(chǎn)品也將不斷的涌現(xiàn),本終端是配合網(wǎng)絡(luò)訂餐應(yīng)用的產(chǎn)品,方便餐館處理網(wǎng)絡(luò)訂餐,本終端也可以在不修改硬件的前提下,對(duì)軟件功能模塊進(jìn)行修改,即可適用于不同場(chǎng)合,比如,網(wǎng)上訂票、網(wǎng)上購物等。
參考文獻(xiàn)
[1]ST756565x132DotMatrixLCD Controller/Driver.SitronixInc.
[2]Simcom.SIM800_EmbeddedAT開發(fā)指導(dǎo).http://www.sim.com2013.
中圖分類號(hào):TP311
文獻(xiàn)標(biāo)識(shí)碼:A