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

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

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

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

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