摘要:針對(duì)基于PC機(jī)的打印終端在實(shí)際運(yùn)用中的許多不足提出了一種基于WiFi無(wú)線局域網(wǎng)技術(shù)的嵌入式移動(dòng)打印終端設(shè)計(jì)方案。奪方案采用33C2440A為微處理器,以Linux為嵌入式操作系統(tǒng),擴(kuò)展了觸摸屏、掃描儀、打印機(jī)等豐富的外設(shè),可以提供查詢、打印等多種功能;移植了WiFi無(wú)線網(wǎng)卡,克服了有線限制,可以無(wú)線移動(dòng);擁有USB等多種接口,方便系統(tǒng)的調(diào)試與升級(jí)。
關(guān)鍵詞:WiFi;打印終端;Linux;nini2440
引言
目前,國(guó)內(nèi)外大多數(shù)打印終端是以固定設(shè)備的方式為用戶提供數(shù)據(jù)錄入和打印服務(wù),設(shè)備投資較大,并存在安裝、使用不方便等缺陷。嵌入式無(wú)線打印終端可以很好地克服以上的缺點(diǎn),它融入了無(wú)線網(wǎng)絡(luò)的新技術(shù),可以通過(guò)掃描儀、鍵盤(pán)和打印機(jī)來(lái)輸入輸出數(shù)據(jù),同時(shí)通過(guò)WiFi無(wú)線網(wǎng)絡(luò),與遠(yuǎn)程服務(wù)器的數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交互,能滿足超市的收銀系統(tǒng)、圖書(shū)館的借還書(shū)系統(tǒng)、火車(chē)站的售票系統(tǒng)等系統(tǒng)的基本功能的需求;同時(shí)隨著打印終端運(yùn)用的越來(lái)越廣泛,它也會(huì)為流動(dòng)性比較疆的應(yīng)用場(chǎng)合提供方便,例如節(jié)假日期間,在旅游區(qū)、火車(chē)站、電影院等增加臨時(shí)售票點(diǎn)、在營(yíng)業(yè)廳和各種消費(fèi)場(chǎng)所的移動(dòng)打印查詢終端以及在倉(cāng)庫(kù)配送管理中的應(yīng)用等等。
嵌入式打印終端的系統(tǒng)架構(gòu)
無(wú)線移動(dòng)打印系統(tǒng)的架構(gòu)圖如圖1所示,本系統(tǒng)采用c/s結(jié)構(gòu),PC機(jī)作為遠(yuǎn)程服務(wù)器,嵌入式打印終端作為客戶端。嵌入式打印終端以S3C2440A處理器為核心,選用Linux操作系統(tǒng),外接觸摸屏,同時(shí)有良好的人機(jī)界面,它負(fù)責(zé)接收輸入設(shè)備(掃描儀和鍵盤(pán))的數(shù)據(jù),并通過(guò)無(wú)線局域網(wǎng)與遠(yuǎn)程服務(wù)器完成數(shù)據(jù)的查詢與交互,并將結(jié)果從打印機(jī)輸出;遠(yuǎn)程服務(wù)器用于存放大型數(shù)據(jù)庫(kù),并通過(guò)無(wú)線網(wǎng)絡(luò)接收無(wú)線移動(dòng)打印終端發(fā)來(lái)的數(shù)據(jù),完成數(shù)據(jù)的查詢、更新、發(fā)送工作。
系統(tǒng)硬件
嵌入式打印終端硬件結(jié)構(gòu)圖如圖2所示。該平臺(tái)選用S3C2240A為處理器,它功能引腳豐富,包含了3個(gè)串口引腳,同時(shí)集成了豐富的外設(shè)控制寄存器,包括LCD控制器、USB設(shè)備寄存器等等。以方便外設(shè)的擴(kuò)展。嵌入式打印終端的外設(shè)按照作用分類(lèi),主要分為兩大模塊:功能模塊和系統(tǒng)調(diào)試與升級(jí)模塊,功能模塊主要是實(shí)現(xiàn)嵌入式打印終端的查詢和打印功能,系統(tǒng)調(diào)試和升級(jí)模塊主要方便系統(tǒng)的調(diào)試和以后系統(tǒng)的升級(jí)。
功能模塊主要包含掃描儀、打印機(jī)、擴(kuò)展鍵盤(pán)、WiFi無(wú)線設(shè)備、7英寸的觸摸屏顯示器和128MNandflash。S3C2440A有三個(gè)串口,通常情況下,串口0用作整個(gè)系統(tǒng)的控制終端,我們選用串口1連接帶Rs-232串口的掃描儀,選用串D2連接帶KS-232串口的微型打印機(jī):擴(kuò)展鍵盤(pán),由GPIO引腳擴(kuò)展而成,包含基本的數(shù)字鍵和確認(rèn)鍵,主要是在掃描儀失效或者條形碼不能掃描的時(shí)候使用:WiFi無(wú)線網(wǎng)卡一般為USB口,目前最流行、性價(jià)比最高的是TP-LinkUSB WiFi無(wú)線網(wǎng)卡,我們可以將wiFi無(wú)線網(wǎng)卡插在電路板的USB Host接口上:7英寸的觸摸屏顯示器主要用于顯示,也可以通過(guò)觸摸屏進(jìn)行一部分選擇和確認(rèn)操作:128M Nandflash用于存儲(chǔ)Linux操作系統(tǒng)和文件系統(tǒng)。
系統(tǒng)調(diào)試與升級(jí)模塊主要由一個(gè)串行接口、一個(gè)RJ45的網(wǎng)絡(luò)接口、一個(gè)USB接口組成,串口作為整個(gè)系統(tǒng)的控制終端,顯示調(diào)試信息;RJ45網(wǎng)絡(luò)接口可以運(yùn)用NFS服務(wù),進(jìn)行在線系統(tǒng)調(diào)試:USB接口可以下載更新的程序,也可以對(duì)Nandflash的程序進(jìn)行拷貝與備份。
系統(tǒng)軟件
Linox驅(qū)動(dòng)程序
嵌入式打印終端外接了輸入輸出設(shè)備,所以要編寫(xiě)輸入設(shè)備和輸出設(shè)備的驅(qū)動(dòng)。編寫(xiě)設(shè)備驅(qū)動(dòng)就是為具體硬件的file-operations結(jié)構(gòu)編寫(xiě)各個(gè)函數(shù)(包括open、read、write、ioctl等),Linux內(nèi)核中驅(qū)動(dòng)程序種類(lèi)齊全,我們可以在同類(lèi)型驅(qū)動(dòng)的基礎(chǔ)上進(jìn)行修改以符合具體的單板。
無(wú)線網(wǎng)卡的移植
嵌入式打印終端與服務(wù)器之間的網(wǎng)絡(luò)通信,主要是無(wú)線網(wǎng)卡與服務(wù)器端的無(wú)線路由之間的通信。Linux內(nèi)核驅(qū)動(dòng)豐富,包含了多種型號(hào)的USB無(wú)線網(wǎng)卡驅(qū)動(dòng),用戶可以選擇合適無(wú)線網(wǎng)卡型號(hào)。本嵌入式打印終端系統(tǒng)中采用Linux-2.6.32.2內(nèi)核。為了加載無(wú)線網(wǎng)卡驅(qū)動(dòng),我們?cè)趦?nèi)核所在的目錄運(yùn)行make menuconfig,進(jìn)入內(nèi)核的配置主菜單。進(jìn)行如下選擇:networkingsupport-wireless-Generic IEEE 802.11Networking Stack(mac80211),這樣就選擇了無(wú)線網(wǎng)卡的協(xié)議類(lèi)型,然后退回到內(nèi)核配置主菜單,選擇devicedrivers,通過(guò)device drivers->networddevice support-wireless LAN,選擇Wireless LAN(IEEE 802.11)子項(xiàng),并進(jìn)入就可以看到已經(jīng)配置了以芯片廠商為分類(lèi)方式的常見(jiàn)的各種USB無(wú)線網(wǎng)卡類(lèi)型,我們可以選擇我們需要的USB無(wú)線網(wǎng)卡類(lèi)型。我們重新編譯內(nèi)核,然后下載到程序存儲(chǔ)芯片中重啟,就可以在啟動(dòng)信息中看到無(wú)線網(wǎng)卡已被識(shí)別。通過(guò)正確配置無(wú)線網(wǎng)卡,就可以實(shí)現(xiàn)無(wú)線網(wǎng)卡與無(wú)線路由的無(wú)線連接了,連接信息如圖3所示。如果無(wú)線路由連接網(wǎng)絡(luò),嵌入式打印終端通過(guò)無(wú)線網(wǎng)卡連接上網(wǎng),那么它發(fā)揮作用的空間也就更大。
服務(wù)器網(wǎng)絡(luò)通信的實(shí)現(xiàn)
服務(wù)器網(wǎng)絡(luò)通信主要是實(shí)現(xiàn)對(duì)打印終端發(fā)出的信號(hào)進(jìn)行偵聽(tīng),如果打印終端有連接信號(hào)發(fā)出,則與之連接,然后按照終端的要求實(shí)現(xiàn)數(shù)據(jù)接收、查詢以及發(fā)送,具體步驟如下。
(1)建立socket。分三步進(jìn)行:首先,要定義服務(wù)器的端口和最大連接數(shù);其次,填充服務(wù)器的IP地址和端口號(hào);最后,建立一個(gè)TCPsocket,如下所示:
server=socket(AF_INET,SOCK_
STREAM,O);//定義為局域網(wǎng),
套接字為流格式
if(server==INVALID_SOCKET)
//需要錯(cuò)誤檢查
{
prinff(create server error!\’);
exit(1);
}
(2)綁定IP,即綁定服務(wù)器的IP地址和端口號(hào),以便接收打印終端的連接要求。
(3)監(jiān)聽(tīng)打印終端的請(qǐng)求。如果打印終端無(wú)連接,則進(jìn)入等待狀態(tài),即無(wú)限循環(huán)狀態(tài),如果有連接,則建立連接并執(zhí)行accept。
(4)收發(fā)數(shù)據(jù)。收發(fā)數(shù)據(jù)也分為三個(gè)步驟,首先,接收打印終端發(fā)來(lái)的數(shù)據(jù);然后,服務(wù)器根據(jù)接收的數(shù)據(jù)的關(guān)鍵字,在數(shù)據(jù)庫(kù)中進(jìn)行查詢;最后將數(shù)據(jù)庫(kù)中查詢的結(jié)果發(fā)送到打印終端。
打印終端網(wǎng)絡(luò)通信
打印終端應(yīng)用程序的主要功能是:將條形碼掃描儀等輸入設(shè)備讀取的數(shù)據(jù),經(jīng)過(guò)開(kāi)發(fā)板的串口接收,然后由無(wú)線網(wǎng)絡(luò)傳送到服務(wù)器,服務(wù)器接收并查詢數(shù)據(jù)庫(kù),并將查詢的結(jié)果返回到打印終端,由打印機(jī)打印出相應(yīng)的結(jié)果。其中打印終端的網(wǎng)絡(luò)部分的程序設(shè)計(jì)的具體步驟如下所示:
(1)建立socket,并進(jìn)行錯(cuò)誤檢查,失敗則返回;
(2)設(shè)定端口、連接方式、連接地址,并試圖連接服務(wù)器;
(3)等待輸入設(shè)備輸入數(shù)據(jù),如果沒(méi)有數(shù)據(jù)輸入,則一直等待;
(4)如果有數(shù)據(jù)輸入且錄入完畢,則發(fā)送給服務(wù)器;
(5)等待服務(wù)器返回?cái)?shù)據(jù);
(6)將返回的數(shù)據(jù)進(jìn)行打印;
(7)關(guān)閉socket和相應(yīng)的設(shè)備文件。
應(yīng)用程序的開(kāi)發(fā)
服務(wù)器端采用Windows Server2003操作系統(tǒng),并安裝SQL server2005數(shù)據(jù)庫(kù)軟件。使用Visual c++6_0開(kāi)發(fā)服務(wù)器端應(yīng)用軟件。服務(wù)器端接收到終端發(fā)送的查詢指令后,解析后分析所要查詢的內(nèi)容,并通過(guò)SQL查詢,根據(jù)需要查詢的關(guān)鍵字搜索到相對(duì)的內(nèi)容,編碼后發(fā)送給相應(yīng)終端。
嵌入式無(wú)線移動(dòng)打印終端采用QT4.6開(kāi)發(fā)人機(jī)界面,顯示查詢結(jié)果。QT是一個(gè)跨平臺(tái)的c++圖形界面庫(kù),它有優(yōu)良的跨平臺(tái)特性,運(yùn)用于多種操作系統(tǒng),它有良好的封裝機(jī)制使得它模塊化程度非常高、可重用性非常好。同時(shí),QT還有一個(gè)輕量級(jí)的跨平臺(tái)集成開(kāi)發(fā)環(huán)境Qt Creator,可以讓首次接觸QT開(kāi)發(fā)框架的開(kāi)發(fā)人員能迅速上手和操作,嵌入式無(wú)線打印終端人機(jī)界面在qvfb下的效果圖如圖4所示。
結(jié)語(yǔ)
與PC機(jī)無(wú)線打印終端相比,基于WiFi無(wú)線網(wǎng)絡(luò)的嵌入式移動(dòng)打印終端具有明顯的優(yōu)點(diǎn),它價(jià)格便宜、功耗低、傳輸速度快、體積小、移動(dòng)方便:選用Linux作為嵌入式操作系統(tǒng),其設(shè)備驅(qū)動(dòng)或新文件系統(tǒng)模塊化,用戶可根據(jù)需要?jiǎng)討B(tài)加載,這樣有利于支持新設(shè)備、新功能,方便系統(tǒng)的升級(jí)。