楊曉東 糜元根
南京工業(yè)大學(xué)電子與信息工程學(xué)院 江蘇 210009
近年來,隨著我國人民生活水平的提高和生活方式的轉(zhuǎn)變,餐飲業(yè)得以迅速發(fā)展。然而,在競爭愈演愈烈的今天,信息科技在各行各業(yè)廣泛應(yīng)用的時候,餐飲業(yè)卻一直徘徊在信息科技的邊緣地域。
據(jù)悉,我國現(xiàn)有各類飯店、餐館近400多萬家,年營業(yè)額超過7300億元人民幣,并保持著高達15%~17%的年增長率。不容忽視的是,在這些眾多的餐館中,上規(guī)模的卻不多,更多的只是街頭小店。
越來越多的餐飲業(yè)管理者達成了一種共識:傳統(tǒng)的由人工來傳遞菜單的點菜方式已經(jīng)不能滿足市場的需求。不僅浪費時間、效率低下,而且很容易出現(xiàn)錯誤,從而大大降低服務(wù)質(zhì)量,給企業(yè)帶來不必要的損失。
針對上述問題,本文介紹了一種全新的電子點菜系統(tǒng)。該系統(tǒng)的使用將大大降低人力資源成本,解決了傳統(tǒng)點菜方式的弊端,從而有效的提高了餐飲機構(gòu)的服務(wù)質(zhì)量和工作效率,也同時實現(xiàn)了餐飲業(yè)利潤的最大化。
本系統(tǒng)采用博芯公司基于ARM7的SEP4020處理器,開發(fā)板上帶有以太網(wǎng)芯片,SD卡,UART接口等外設(shè)。整個系統(tǒng)的界面用北京飛漫公司的MiniGUI1.3來設(shè)計,系統(tǒng)采用最新的Linux2.6內(nèi)核。如圖1所示。

圖1 終端系統(tǒng)的框架圖
SEP4020是由南京東南大學(xué)國家專用集成電路系統(tǒng)工程技術(shù)研究中心設(shè)計,使用0.18um標(biāo)準(zhǔn)CMOS的工藝設(shè)計,內(nèi)嵌ASIX CORE(32位RISC內(nèi)核,兼容ARM720T,帶8KB指令數(shù)據(jù)Cache和全功能MMU),采用馮諾依曼結(jié)構(gòu),SEP4020芯片中集成各種功能包括:8/16位SRAM/NOR FLASH接口,16位SDRAM接口,硬件NAND FLASH控制器(支持NAND FLASH自啟動),10M/100M自適應(yīng)以太網(wǎng)MAC(支持RMII接口),64K Byte高速片上SRAM,USB1.1 Device(全速12Mbps,支持I2S 音頻接口,支持MMC/SD卡),LCD控制器(支持640*480*16 位TFT 彩屏和STN黑白、灰度屏),RTC(支持日歷功能/WatchDog,支持后備電源),10通道TIMER(支持捕獲、外部時鐘驅(qū)動和MATCH OUT),4通道PWM(支持高速GPIO),4通道UART(均支持紅外),2通道SSI(支持SPI和Microwire協(xié)議),2通道SmartCard接口(兼容ISO7816協(xié)議,支持最多97個GPIO),14個外部中斷(支持外部DMA傳輸),片上DPL(支持多種功耗模式,IDLE、SLOW、NORMAL、SLEEP)。SEP4020提供全面的、通用的片上外設(shè),大大減少了系統(tǒng)電路中除處理器以外的元器件配置,從而最小化系統(tǒng)成本,符合嵌入式的要求。
本系統(tǒng)包括六大功能模塊:訂位、冷菜、熱菜、菜單查詢、顧客結(jié)賬、退出。顧客可以根據(jù)界面上的按鈕對各功能進行操作。
為了與用戶有很好的交互性,需要設(shè)計圖形界面便于用戶操作。常見的圖形界面設(shè)計方法是QT和MiniGUI,綜合考慮了系統(tǒng)的硬件,采用飛漫公司的MiniGUI進行圖形界面設(shè)計。
MiniGUI編譯成兩個截然不同的版本,一個是MiniGUIThreads,一個是MiniGUI-Lite。MiniGUI-Threads適合于多窗口、實時性要求很高的系統(tǒng),比如工業(yè)控制系統(tǒng);而MiniGUI-Lite適合于功能豐富、結(jié)構(gòu)復(fù)雜系統(tǒng),比如PDA等信息產(chǎn)品。而且MiniGUI-Threads可以通過MiniGUI的消息函數(shù),可在不同的線程之間傳遞消息,相比較而言,本系統(tǒng)采用前者。
3.1.1 事件驅(qū)動和消息機制
MiniGUI是一個基于事件驅(qū)動的圖形用戶界面支持系統(tǒng),用戶程序的流程不再是只有一個入口和若干個出口的串行執(zhí)行線路;相反,程序會一直處于一個循環(huán)狀態(tài),在這個循環(huán)當(dāng)中,程序從外部輸入設(shè)備獲取某些事件,比如用戶的按鍵或者鼠標(biāo)的移動,然后根據(jù)這些事件作出某種的響應(yīng),并完成一定的功能,這個循環(huán)直到程序接受到某個消息為止。
3.1.2 窗口過程
窗口是MiniGUI當(dāng)中最基本的GUI元素,一旦窗口建立之后,窗口就會從消息隊列當(dāng)中獲取屬于自己的消息,然后交由它的窗口過程進行處理。窗口過程函數(shù)主要是對屬于該窗體的不同消息進行相應(yīng)的處理。窗口過程函數(shù)通常使用switch語句來對各種消息(message)進行處理。
當(dāng)前,Socket接口是TCP/IP網(wǎng)絡(luò)最為通用的API,也是在Internet上進行應(yīng)用開發(fā)最為通用的API。它是介于應(yīng)用層和傳輸層之間的編程接口,它提供了訪問下層通信協(xié)議的大量系統(tǒng)調(diào)用和相應(yīng)的數(shù)據(jù)結(jié)構(gòu)功能。在Linux系統(tǒng)中,Socket是應(yīng)用程序訪問下層網(wǎng)絡(luò)協(xié)議的惟一方法。具體地講,Socket在用戶級實現(xiàn)了兩個應(yīng)用程序之間的網(wǎng)絡(luò)連接和數(shù)據(jù)交換,所以Linux中的Socket意味著網(wǎng)絡(luò)上的通信。
我們在做網(wǎng)絡(luò)傳輸數(shù)據(jù)功能時,采用了客戶端/服務(wù)器(C/S)網(wǎng)絡(luò)通信:服務(wù)器端守護進程不斷的監(jiān)聽、等待連接;客戶端向遠程服務(wù)器發(fā)送連接請求,服務(wù)器端收到請求后,按照一定的規(guī)則建立連接,連接完成后,兩個程序之間就建立了一個虛擬的數(shù)據(jù)通信鏈路。這些程序可以直接從自己打開的套接口讀入和寫出數(shù)據(jù),而不用關(guān)心實際的數(shù)據(jù)鏈路。具體實現(xiàn)過程見圖2。

圖2 Socket通信
SQLite是2000年開發(fā)出來的一種小型嵌入式數(shù)據(jù)庫。它是一個小型的C語言鏈接庫,這個鏈接庫本身就完全包含數(shù)據(jù)庫引擎的功能,可以方便地運用于嵌入式系統(tǒng)中。SQLite提供了對SQL92的大多數(shù)支持,支持多表、索引、事務(wù)、視圖和觸發(fā)等一系列用戶接口以及驅(qū)動。簡單易用,速度也相當(dāng)快,同時提供了豐富的數(shù)據(jù)庫接口。這個庫具有很強的內(nèi)聚性,通過不到25000行的ANSIC代碼實現(xiàn),而且它的源代碼完全開放,可以自由地應(yīng)用于任何領(lǐng)域。
在與MiniGui的連接中,SQLite的API極其易使用,完全可以對嵌入式數(shù)據(jù)庫進行基本的操作,如建立表格、查詢、修改、插入、刪除、排序等,只需要三個用來執(zhí)行SQL和獲取數(shù)據(jù)的函數(shù)。此外它還是可以擴展的,允許自定義函數(shù),然后以Callback(回調(diào)函數(shù))的形式傳遞進去。
我們在使用MiniGui連接并操作SQLite時,主要經(jīng)歷了三個步驟:
(1)提供文件和訪問模式來調(diào)用sqlite3_open()連接數(shù)據(jù)庫,這個函數(shù)參數(shù)有兩個,一個是需要打開的數(shù)據(jù)庫文件名(UTF-8格式),另一個用于返回數(shù)據(jù)庫句柄。
(2)SQLite通過執(zhí)行Callback函數(shù)返回從數(shù)據(jù)庫得到的結(jié)果,不過有時候,在進行select查詢時,我們想要非回調(diào)的select查詢結(jié)果時,通過sqlite3_get_table()來實現(xiàn),它會以一個一維數(shù)組的形式返回我們查詢的值。
(3)調(diào)用sqlite3_exec()執(zhí)行,將SQL查詢語句和Callback函數(shù)的指針作為函數(shù)參數(shù)傳入,使用完關(guān)閉數(shù)據(jù)庫sqlite3_close()。
如圖3所示,開發(fā)板UB4020MB上電后,從NorFlash中讀取Uboot程序,然后初始化部分硬件,再運行內(nèi)核Linux Kernel,接著運行文件系統(tǒng),最后再加載部分驅(qū)動,有的驅(qū)動在加載內(nèi)核時加載了。這是開發(fā)板的系統(tǒng)已經(jīng)啟動過程。系統(tǒng)啟動后,可以運行點菜系統(tǒng)的主程序,出現(xiàn)主界面,用戶可以通過點擊按鈕選擇相應(yīng)的功能。

圖3 程序流程圖
數(shù)據(jù)庫服務(wù)器端采用Fedora 7作為服務(wù)器操作系統(tǒng),sqlite3作為數(shù)據(jù)庫,系統(tǒng)啟動后自動運行守護進程,這包括:建立套接字、綁定地址、開始監(jiān)聽并等待客戶端的連接,收到數(shù)據(jù)后更新本地數(shù)據(jù)庫,并將操作記錄寫入設(shè)定好的日志文件中,循環(huán)執(zhí)行以上過程。具體流程見圖4。
在PC機上安裝vmware虛擬機,在虛擬機中再安裝Fedora7系統(tǒng)。為了能夠方便重復(fù)調(diào)試,故采用NTF文件系統(tǒng),確保內(nèi)核支持NTF。并且安裝交叉編譯器cross-3.4.1.tar.gz。
嵌入式技術(shù)是與實踐緊密相結(jié)合的一門技術(shù),把我們學(xué)的知識理論通過實驗應(yīng)用到實踐中去,這樣我們才能真正掌握它們,并能運用它們。這個點菜系統(tǒng)的開發(fā),讓我們掌握了硬件設(shè)計、Bootloader、嵌入式Linux操作系統(tǒng)編譯、linux驅(qū)動開發(fā)、嵌入式數(shù)據(jù)庫和MiniGUI圖形界面開發(fā)等。

圖4 服務(wù)器端流程設(shè)計
本文的點菜系統(tǒng)除了應(yīng)用于學(xué)校的食堂,還可以應(yīng)用于飯店,具有很好的市場前景。系統(tǒng)還存在著一些不足,沒有加上無線網(wǎng)卡,在以后的實驗開發(fā)中會將無線加入到系統(tǒng)中。
[1]劉國文.餐飲業(yè)要重視信息化建設(shè)[J].烹調(diào)知識.2005.
[2]韓超.嵌入式GUI開發(fā)設(shè)計—基于MiniGUI[M].北京:電子工業(yè)出版社.2009.
[3]王琳,余震虹,李鑫等.基于ARM的嵌入式電子點菜系統(tǒng)的設(shè)計[J].微計算機信息.2009.
[4]孫瓊.嵌入式Linux應(yīng)用程序開發(fā)詳解[M].北京:人民郵電出版社.2007.
[5]Daniel W.Lewis.Fundamentals of embedded software[M].北京:高等教育出版社.2004.
[6]SQLite Home Page.http://www.sqlite.org.