停車場計(jì)費(fèi)POS機(jī)軟件設(shè)計(jì)_第1頁
停車場計(jì)費(fèi)POS機(jī)軟件設(shè)計(jì)_第2頁
停車場計(jì)費(fèi)POS機(jī)軟件設(shè)計(jì)_第3頁
停車場計(jì)費(fèi)POS機(jī)軟件設(shè)計(jì)_第4頁
停車場計(jì)費(fèi)POS機(jī)軟件設(shè)計(jì)_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第一章概述1.1選題目的1.1.1時(shí)代背景隨著中國經(jīng)濟(jì)的快速發(fā)展,汽車得到了快速普及,其保有量也迅速增加。截至2018年10月,中國機(jī)動車保有量高達(dá)3.24億輛,駕駛?cè)烁哌_(dá)4.05億人[1]。伴隨著汽車保有量的迅速增加,隨之而來涌現(xiàn)出大量的收費(fèi)停車場。實(shí)現(xiàn)高效率的停車計(jì)費(fèi),對于提高出行便利度具有重要意義。目前,停車收費(fèi)存在多種解決方案,有傳統(tǒng)的人工計(jì)費(fèi)方式,有ETC收費(fèi)方式,有ETCP收費(fèi)方式,本文所述的停車場收費(fèi)POS機(jī)則是另外一種方式。下面對各種計(jì)費(fèi)方式作一比較。1.1.2幾種停車收費(fèi)方式(1)人工計(jì)費(fèi)方式:汽車進(jìn)停車場時(shí),工作人員將號牌和進(jìn)場時(shí)間手動記錄到紙條上,之后憑時(shí)長手動計(jì)算費(fèi)用。此種方式的優(yōu)點(diǎn)是無需投資;缺點(diǎn)是計(jì)費(fèi)方式過于原始,僅適用于個別小微型、出入不太頻繁的停車場。(2)ETC收費(fèi)方式:ETC(ElectronicTollCollection)一般安裝于高速公路出入口進(jìn)行高速通行費(fèi)收費(fèi),部分居民區(qū)停車場也實(shí)現(xiàn)了對于ETC車輛的收費(fèi)。該方式通過車載的插有IC卡的電子標(biāo)簽與收費(fèi)出入口處的ETC天線進(jìn)行微波通信實(shí)現(xiàn)電子收費(fèi)。其優(yōu)點(diǎn)是較為便利,只要賬戶處于有效扣款狀態(tài)即可實(shí)現(xiàn)收費(fèi);其缺點(diǎn)是,設(shè)施投資較大,且安裝了ETC的車輛不夠普及,無法適用于所有車輛。(3)ETCP計(jì)費(fèi)方式:停車場事先安裝固定攝像頭和地感線圈,用于感知車輛出入以及進(jìn)出場識別號牌,結(jié)合收費(fèi)軟件,自動從用戶設(shè)定好的賬戶中扣款。其優(yōu)點(diǎn)是可以實(shí)現(xiàn)抬桿進(jìn)場、離場扣費(fèi);其缺點(diǎn)是扣費(fèi)過程完全依賴網(wǎng)絡(luò),可能出現(xiàn)付費(fèi)后無法放行的現(xiàn)象,投資也遠(yuǎn)高于本文所述POS機(jī)計(jì)費(fèi)方式,故該方式僅適合規(guī)模較大、長期經(jīng)營的停車場,不適合規(guī)模偏小的、經(jīng)營時(shí)間不確定的停車場,也不適合臨時(shí)停車場。(4)停車場計(jì)費(fèi)POS機(jī)計(jì)費(fèi)方式:車輛進(jìn)入停車場時(shí),工作人員僅需向其發(fā)放由非接觸IC卡制成的停車卡,離開時(shí)駕駛員將停車卡交給工作人員,工作人員只需在停車場計(jì)費(fèi)POS機(jī)上刷卡即可直接顯示停車金額,可以收取現(xiàn)金,或者工作人員和車輛駕駛者雙方使用手機(jī)進(jìn)行微信支付。該方式是對以上幾種收費(fèi)方式的有效補(bǔ)充,可靈活應(yīng)用在中小規(guī)模停車場以及臨時(shí)停車場,不但可實(shí)現(xiàn)精確計(jì)算停車費(fèi),還能有效減少工作人員的工作量,具有很好的實(shí)際應(yīng)用價(jià)值;同時(shí),與1.1.2節(jié)所述第2、3種計(jì)費(fèi)方式相比,還大大減小了停車場硬件設(shè)備投資。1.1.3對停車場計(jì)費(fèi)POS機(jī)的改進(jìn)本文所述的停車場計(jì)費(fèi)POS機(jī),對上述第4種停車場計(jì)費(fèi)POS機(jī)的軟硬件進(jìn)行了改進(jìn)。普通的停車場計(jì)費(fèi)POS機(jī)功能簡單,配置較低,使用低檔單片機(jī),存儲容量較小,沒有操作系統(tǒng)和通訊功能,僅能實(shí)現(xiàn)計(jì)時(shí)和總費(fèi)用計(jì)算功能;其次,不能實(shí)現(xiàn)支付功能,只能使用工作人員個人手機(jī)打開微信向車主收費(fèi)。本文所述停車場計(jì)費(fèi)POS機(jī)不但在硬件上采用更高的配置,增加了4G通訊功能,在軟件方面也有較大的改進(jìn):首先,帶有Linux操作系統(tǒng),在實(shí)現(xiàn)并行任務(wù)處理上優(yōu)勢明顯,而且非常方便程序的擴(kuò)展;其次,在軟件實(shí)現(xiàn)上,增加了微信支付接口,停車人員不但可以直接使用現(xiàn)金支付,也可以使用手機(jī)直接掃描POS機(jī)顯示的付款碼實(shí)現(xiàn)微信支付,實(shí)現(xiàn)了從進(jìn)場計(jì)費(fèi)到最終支付的一體化。1.2硬件平臺1.2.1硬件平臺簡介硬件運(yùn)行平臺基于ARM9處理器,具備64MBDDR內(nèi)存和128MBFLASH,該配置可流暢運(yùn)行本文所述軟件系統(tǒng)并保證足夠的數(shù)據(jù)存儲能力;配備TFT彩色顯示屏,帶有非接觸IC卡讀卡功能,具有較高的可靠性和易用性。1.2.2硬件技術(shù)參數(shù)CPU:SAMSUNGS3C2416;CPU運(yùn)行主頻:400MHz;內(nèi)存:64MBDDRSDRAM;FLASH:128MBNANDFLASH;LCD:分辨率320X240,TFT真彩屏;電池:3.7V/2000mAh;無線通訊:支持4G通訊;支持讀取的非接觸IC卡片:NXPMifareS50和S70;按鍵:18鍵;工作溫度:0~40℃。1.2.3硬件架構(gòu)1.3總體軟件架構(gòu)系統(tǒng)首先從Bootloader啟動,之后Bootloader將會加載經(jīng)過裁剪的Linux內(nèi)核,內(nèi)核隨后加載根文件系統(tǒng),然后加載各個驅(qū)動文件,最后加載主應(yīng)用程序。主應(yīng)用程序包括兩個進(jìn)程:主進(jìn)程和網(wǎng)絡(luò)進(jìn)程。對于標(biāo)準(zhǔn)的Linux設(shè)備比如串口,主應(yīng)用程序可以通過網(wǎng)絡(luò)進(jìn)程用系統(tǒng)調(diào)用的方式進(jìn)行調(diào)用,從而對連接在串口上的設(shè)備比如4G模塊進(jìn)行調(diào)用;對于其他設(shè)備,主應(yīng)用程序的主進(jìn)程通過各個驅(qū)動的庫文件調(diào)用驅(qū)動,實(shí)現(xiàn)對各個設(shè)備的調(diào)用訪問??傮w軟件結(jié)構(gòu)見圖1-4。圖1-4總體軟件架構(gòu)圖第二章Bootloader設(shè)計(jì)2.1開發(fā)和編譯環(huán)境我們選用U-boot作為Bootloader,其開發(fā)在PC版Linux平臺下進(jìn)行。選用vmware虛擬機(jī)運(yùn)行PC版Linux操作系統(tǒng),選用的Linux操作系統(tǒng)是fedora12。U-boot、Linux內(nèi)核和驅(qū)動、驅(qū)動庫文件、主應(yīng)用程序均需要在交叉編譯環(huán)境下編譯。關(guān)于交叉編譯的相關(guān)基礎(chǔ)知識本文不展開詳述,如需了解請查看參考文獻(xiàn)“交叉編譯的預(yù)備知識”[4]。開發(fā)和編譯環(huán)境總結(jié)如下:計(jì)算機(jī)CPU:不低于Intel酷睿i3二代;計(jì)算機(jī)內(nèi)存:不低于2GB,推薦4-16GB;虛擬機(jī):采用vmware虛擬機(jī)軟件,版本不低于8.0;虛擬機(jī)上運(yùn)行的Linux操作系統(tǒng):fedora12;虛擬機(jī)內(nèi)存:不低于1GB;Linux內(nèi)核版本:3.4.2;其他要求:具備交叉編譯能力,包括gcc、ld、glibc、binutils等交叉編譯必須的文件。2.2Bootloader配置和程序設(shè)計(jì)2.2.1U-Boot的主要目錄結(jié)構(gòu)我們采用的U-Boot版本是1.3.4。其源代碼主要目錄介紹如下:board:該目錄存放了所有支持的目標(biāo)(開發(fā)板)平臺支持代碼。cpu:該目錄包括了所有支持的CPU類型。common:該目錄存放了通用代碼/函數(shù)的實(shí)現(xiàn)。drivers:該目錄包括各種外設(shè)的驅(qū)動。fs:該目錄包括了文件系統(tǒng)支持。lib_arm:該目錄包括ARM平臺公共接口代碼。include:該目錄專用于保存頭文件。net:該目錄是與網(wǎng)絡(luò)相關(guān)的文件目錄。examples:示例程序。lib_xxx:該目錄是與處理器體系有關(guān)的文件。2.2.2U-Boot的移植和配置U-Boot支持兩種啟動模式[5],即“啟動加載”和“下載”模式。啟動加載模式即正常啟動模式;下載模式用于更新U-Boot、內(nèi)核和文件系統(tǒng)。對U-Boot的移植和配置步驟如下:1.設(shè)置異常向量表,包括復(fù)位、未定義指令、各種中斷等異常;2.設(shè)置CPU為SVC模式,即管理模式,該模式是操作系統(tǒng)使用的保護(hù)模式;3.禁止所有中斷,關(guān)閉看門狗;4.設(shè)定CPU的頻率,對于S3C2416,設(shè)定頻率為400MHz;5.配置內(nèi)存控制器,與內(nèi)存大小、內(nèi)存數(shù)目相匹配;6.配置棧空間,將BBS段清零;7.復(fù)制NANDFLASH代碼到內(nèi)存;8.初始化FLASH和內(nèi)存;9.初始化外圍設(shè)備,包括LCD顯示屏。2.2.3U-Boot程序設(shè)計(jì)完成了移植和配置之后,就可以開始U-Boot程序設(shè)計(jì)了。Linux之下的原生源碼編輯工具是vi,其有三種基本模式,見圖2-1。圖2-1vi的三種基本模式[6]vi的具體指令用法可以在Linux命令行下輸入“vi--help”查看。U-Boot程序主要是對LCD進(jìn)行初始化,顯示指定LOGO的開機(jī)界面,在5秒的顯示LOGO期間檢測串口是否存在CTRL+C中斷反饋。POS機(jī)連好電腦和串口數(shù)據(jù)線開機(jī)后,如在電腦的串口終端按下CTRL+C按鍵組合,則U-Boot將進(jìn)入命令行模式,此時(shí)可以執(zhí)行更新U-Boot、更新內(nèi)核、更新文件系統(tǒng)的指令,并且可以執(zhí)行各種U-Boot指令;否則正常啟動內(nèi)核。程序流程見圖2-2。圖2-2U-Boot程序流程第三章Liunx內(nèi)核移植和配置3.1開發(fā)和編譯環(huán)境內(nèi)核開發(fā)和編譯環(huán)境總結(jié)如下:計(jì)算機(jī)CPU:不低于Intel酷睿i3二代;計(jì)算機(jī)內(nèi)存:不低于2GB,推薦4-16GB;虛擬機(jī):采用vmware虛擬機(jī)軟件,版本不低于8.0;虛擬機(jī)上運(yùn)行的Linux操作系統(tǒng):fedora12;虛擬機(jī)內(nèi)存:不低于1GB;其他要求:具備交叉編譯能力,包括gcc、ld、glibc、binutils等交叉編譯必須的文件。3.2內(nèi)核移植和配置3.2.1Linux內(nèi)核移植的必要性標(biāo)準(zhǔn)的Linux操作系統(tǒng)體積龐大,通常有自己的桌面系統(tǒng),帶有數(shù)量眾多的驅(qū)動和功能插件,而我們的系統(tǒng)屬于嵌入式系統(tǒng),沒有必要運(yùn)行功能如此繁雜的標(biāo)準(zhǔn)Linux系統(tǒng),為此有必要對標(biāo)準(zhǔn)Linux進(jìn)行裁剪、移植,使之在完成功能的前提下具備較小的文件體積。3.2.2內(nèi)核移植和配置內(nèi)核移植和配置過程如下:(1)修改Makefile文件。修改根目錄下的Makefile文件,指定使用arm-linux-交叉編譯器,指定使用ARM處理器。(2)設(shè)置NANDFLASH的驅(qū)動和分區(qū)。首先,停車收費(fèi)POS機(jī)使用128MBNANDFLASH,需要為它建立驅(qū)動;其次,需要為它建立一個分區(qū)表,指定內(nèi)核、文件系統(tǒng)等分區(qū)存放的位置和大小。(3)配置內(nèi)核。Linux配置內(nèi)核使用makemenuconfig指令,需要配置的主要項(xiàng)目如下。可加載驅(qū)動模塊支持:選擇該項(xiàng)則后續(xù)所有驅(qū)動可以單獨(dú)編譯,以驅(qū)動模塊形式加載到內(nèi)核;選擇對S3C2416CPU的支持;選擇支持MTD設(shè)備;選擇支持的NANDFLASH型號;選擇支持FrameBuffer設(shè)備,這是為了支持TFTLCD;取消對無關(guān)功能的支持,以減小內(nèi)核體積。(4)如果有需要修改的內(nèi)核源碼,進(jìn)一步進(jìn)行修改。在這里我們利用Linux定時(shí)器增加了一個LED燈,每秒點(diǎn)亮一次,用于指示內(nèi)核正常運(yùn)行。(5)重新編譯內(nèi)核。3.2.3根文件系統(tǒng)的選擇根文件系統(tǒng)是Linux操作系統(tǒng)正常工作所必需的。只有加載了文件系統(tǒng),才能正常存取各種文件,從而實(shí)現(xiàn)正常的系統(tǒng)功能。根文件系統(tǒng)選用yaffs2文件系統(tǒng)。yaffs文件系統(tǒng)是一種專門為NANDFLASH設(shè)計(jì)的文件系統(tǒng),適合大容量存儲設(shè)備,yaffs2與yaffs1文件系統(tǒng)相比,性能又有所提高,其差別參考表3-1。表3-1yaffs2與yaffs1文件系統(tǒng)比較[7]本文所述停車計(jì)費(fèi)POS機(jī)的嵌入式Linux操作系統(tǒng),使用了FHS(FilesystemHiearchyStandard)標(biāo)準(zhǔn)文件系統(tǒng)目錄體系,在此基礎(chǔ)上,根據(jù)實(shí)際需要進(jìn)行了增刪。驅(qū)動程序的目錄在:/usr/local/driver;應(yīng)用程序的目錄在:/usr/local/app;在此之外還有一個啟動腳本running.sh,其位置放在/usr/local。第四章驅(qū)動和庫文件設(shè)計(jì)4.1開發(fā)和編譯環(huán)境驅(qū)動程序開發(fā)和編譯環(huán)境如下:計(jì)算機(jī)CPU:不低于Intel酷睿i3二代;計(jì)算機(jī)內(nèi)存:不低于2GB,推薦4-16GB;虛擬機(jī):采用vmware虛擬機(jī)軟件,版本不低于8.0;虛擬機(jī)上運(yùn)行的Linux操作系統(tǒng):fedora12;虛擬機(jī)內(nèi)存:不低于1GB;其他要求:具備交叉編譯能力,包括gcc、ld、glibc、binutils等交叉編譯必須的文件。4.2驅(qū)動和庫文件結(jié)構(gòu)對于Linux內(nèi)核自帶驅(qū)動的設(shè)備,比如串口,我們通過調(diào)用系統(tǒng)函數(shù)的方式進(jìn)行調(diào)用。除此之外還有3個自定義驅(qū)動:LCD、按鍵、非接觸IC卡讀卡模塊驅(qū)動。對于這幾個驅(qū)動,為了使驅(qū)動調(diào)用更加方便,采用驅(qū)動+庫文件的結(jié)構(gòu),如圖4-1所示。圖4-1驅(qū)動和庫文件結(jié)構(gòu)驅(qū)動所有的功能集合(函數(shù)集)都包含在其對應(yīng)的驅(qū)動庫文件中。主應(yīng)用程序只需調(diào)用庫文件中對應(yīng)的函數(shù)即可。4.3驅(qū)動程序設(shè)計(jì)需要開發(fā)的驅(qū)動程序有三個:按鍵驅(qū)動、LCD驅(qū)動和非接觸IC卡讀卡模塊驅(qū)動。這三個驅(qū)動程序均以內(nèi)核模塊的形式,在內(nèi)核加載后,用腳本動態(tài)加載到內(nèi)核:insmodkey.koinsmodlcd.koinsmodrfic.ko驅(qū)動模塊鏈接到內(nèi)核的過程,見圖4-2。圖4-2鏈接驅(qū)動模塊到內(nèi)核[8]4.3.1按鍵驅(qū)動按鍵部分原理圖見圖4-3。圖4-3按鍵原理圖我們選用的是按鍵直接觸發(fā)中斷的方式。按鍵產(chǎn)生中斷后,立刻查詢按鍵行(ROW)和按鍵列(COLUMN)的電平狀態(tài),當(dāng)某一按鍵的行和某一按鍵列均為低電平時(shí),即可判斷是該行和該列對應(yīng)的按鍵按下。按鍵中斷處理函數(shù)如下:voidkbd_interrupt(intirq,void*dev_id,structpt_regs*regs){UCHARkey; if(irq!=IRQ_EINT0) return; key=read_key_column_and_row(); save_key_value(); key_timer_start();}由上可見,按鍵中斷處理就是在產(chǎn)生按鍵中斷時(shí),讀取對應(yīng)的鍵值,并且保存起來;在超過一定超時(shí)時(shí)間(500ms)后,如果按鍵庫文件沒有取鍵值,則該鍵值將被拋棄。4.3.2LCD驅(qū)動Linux驅(qū)動分為三類:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。在Linux下的LCD驅(qū)動屬于字符設(shè)備。LCD接口部分原理圖見圖4-4。圖4-4LCD接口原理圖S3C2416有專用的LCD接口,LCD部分的框架圖見圖4-5。圖4-5S3C2416LCD框架圖[9]S3C2416支持多種顯示接口,我們選擇了S3C2416的16位色RGB總線模式。在此模式下,要做的就是往LCD的顯示緩存送顯示數(shù)據(jù),只需要實(shí)現(xiàn)LCD寫入功能即可,因此LCD驅(qū)動完全可以利用驅(qū)動的標(biāo)準(zhǔn)read/write架構(gòu):staticstructfile_operationss3c2410_fops={ owner: THIS_MODULE, open: s3c2416_lcd_open, read: NULL, write: s3c2416_lcd_write, ioctl: lcd_ioctl, release: s3c2416_lcd_release,};s3c2416_lcd_write()是實(shí)現(xiàn)LCD內(nèi)容寫入的核心函數(shù),其內(nèi)容如下:staticssize_ts3c2410_lcd_write(structfile*file,constchar*data,size_tlen,loff_t*ppos){ intret=0; if(len) { if(*data) { memcpy((char*)((unsignedlong)fbin+(unsignedlong)ppos),data,len); } ret=len; } returnret;}LCD寫入函數(shù)所做的實(shí)際是往顯示緩存的起始區(qū)域?qū)憯?shù)據(jù)。4.3.3非接IC卡讀卡器驅(qū)動非接IC卡讀卡器,使用的讀卡芯片是FM1702Q。其原理圖見圖4-6(天線部分略):圖4-6非接IC卡讀卡器應(yīng)用原理圖非接IC卡讀卡器驅(qū)動所做事項(xiàng)如下:初始化讀卡器接口,這里是SPI接口;初始化讀卡芯片;根據(jù)不同讀寫卡指令,選擇指定的寄存器進(jìn)行寫入和讀出。非接觸IC卡分為邏輯加密卡和CPU卡。前者只需支持ISO14443-1/2/3標(biāo)準(zhǔn);后者除此之外,還需增加對于ISO14443-4的支持。因?yàn)槲覀冎С諱ifareUltralightS50和S70芯片非接觸IC卡,此種卡片屬于邏輯加密卡,因此僅需支持ISO14443-1/2/3。相關(guān)底層驅(qū)動函數(shù)如下(//后為注釋說明部分):unsignedcharFM17XX_Init() //初始化芯片unsignedcharClear_FIFO(void) //清空FM17XX中FIFO的數(shù)據(jù)voidWrite_FIFO(unsignedcharcount,unsignedchar*buff)//寫FIFOunsignedcharRead_FIFO(unsignedchar*buff) //讀FIFOvoidRf_On() //打開天線射頻voidRf_Off() //關(guān)閉射頻,停止讀卡unsignedcharSPIRead(unsignedcharaddr) //讀FM17XX寄存器voidSPIWrite(unsignedcharadd,unsignedcharwrdata)//寫寄存器這些底層函數(shù)主要作用就是實(shí)現(xiàn)對FM1702Q芯片的初始化,并且對FM1702Q寄存器進(jìn)行讀寫。4.4庫文件設(shè)計(jì)4.4.1按鍵驅(qū)動庫文件按鍵庫文件為主應(yīng)用程序提供了一個查詢鍵值的函數(shù)getkey()。與驅(qū)動程序采用中斷方式不同,按鍵庫文件是查詢式的。即驅(qū)動通過中斷獲取到的鍵值,按鍵庫文件函數(shù)通過查詢的方式獲取該鍵值。該函數(shù)內(nèi)容如下:intgetkey(UCHAR*key){ UCHARi; if(ioctl(kbdfd,GET_KEY_VALUE,&i)<0) return-1;if(i>MAX_KEY_VALUE) return-1; *key=i; return0;}主應(yīng)用程序通過執(zhí)行g(shù)etkey()函數(shù)即可獲得鍵值。4.4.2LCD驅(qū)動庫文件LCD驅(qū)動庫文件負(fù)責(zé)調(diào)用LCD驅(qū)動文件,實(shí)現(xiàn)各項(xiàng)具體的LCD函數(shù)功能,比如顯示圖片、文字、圖框等。主要函數(shù)如下:intinit_lcd(void) //初始化LCDvoidclear_full_screen(void) //清屏intshow_background(intcolor) //顯示背景色intshow_bmpfile(intx,inty,char*bmp_file) //顯示BMP文件intshow_text(inty,intx,intfont_size,intfont_color,char*input) //顯示文字4.4.3非接觸IC卡讀卡器庫文件非接觸IC卡讀卡器主要有以下庫文件:unsignedcharTypeA_Init(void); //初始化函數(shù)unsignedcharTypeA_Request(unsignedcharmode,unsignedchar*atqa); //卡片請求指令unsignedcharTypeA_Halt(void); //卡片休眠指令unsignedcharTypeA_AntiColl(unsignedchar*card_uid); //卡片反碰撞unsignedcharTypeA_Check_UID(unsignedchar*card_uid); //獲取卡片UIDunsignedcharTypeA_Select_Card(unsignedchar*card_sak); //選卡unsignedcharTypeA_Card_Active(unsignedcharmode); //卡激活上述函數(shù)的主要作用是,調(diào)用FM1702Q讀卡器芯片的寄存器,實(shí)現(xiàn)對FM1702Q讀卡器芯片進(jìn)行上層操作,使主應(yīng)用程序?qū)崿F(xiàn)完整的讀寫卡流程。第五章主應(yīng)用程序設(shè)計(jì)5.1開發(fā)和編譯環(huán)境主應(yīng)用程序的開發(fā)和編譯環(huán)境如下:計(jì)算機(jī)CPU:不低于Intel酷睿i3二代;計(jì)算機(jī)內(nèi)存:不低于2GB,推薦4-16GB;虛擬機(jī):采用vmware虛擬機(jī)軟件,版本不低于8.0;虛擬機(jī)上運(yùn)行的Linux操作系統(tǒng):fedora12;虛擬機(jī)內(nèi)存:不低于1GB;其他要求:具備交叉編譯能力,包括gcc、ld、glibc、binutils等交叉編譯必須的文件。5.2主應(yīng)用程序結(jié)構(gòu)主應(yīng)用程序有兩個進(jìn)程。第一個進(jìn)程為主進(jìn)程,負(fù)責(zé)實(shí)現(xiàn)網(wǎng)絡(luò)連接之外的所有功能;第二個進(jìn)程為網(wǎng)絡(luò)進(jìn)程,專用于4G網(wǎng)絡(luò)連接。主進(jìn)程和網(wǎng)絡(luò)進(jìn)程之間通過管道通信。管道創(chuàng)建方式如下://createmainpipe.ret=mkfifo(FIFO_MAIN,S_IFIFO|0666);if((ret)&&(ret!=-1)){printf("main:Can'tcreate%sbecause%s;ret:%d.",FIFO_NET,strerror(errno),ret);}umask(0);//openpipe.handle_write=open(FIFO_MAIN,O_WRONLY);//blockmode,waitinga10netopenthispipe.if(handle_write==-1){printf("main:open%serror:%s",FIFO_MAIN,strerror(errno));}執(zhí)行完畢后,將會自動創(chuàng)建管道文件,此后主進(jìn)程和網(wǎng)絡(luò)進(jìn)程之間即可通過管道交換數(shù)據(jù)。主進(jìn)程和網(wǎng)絡(luò)進(jìn)程互相之間的通知由信號來完成。我們選用Linux系統(tǒng)中保留的兩個信號SIGUSR1和SIGUSR2來作為主進(jìn)程和網(wǎng)絡(luò)進(jìn)程的觸發(fā)信號。信號注冊后,可以用來配合在主進(jìn)程和網(wǎng)絡(luò)進(jìn)程進(jìn)行通信觸發(fā)。主應(yīng)用程序結(jié)構(gòu)見圖5-1。圖5-1主應(yīng)用程序結(jié)構(gòu)5.3主應(yīng)用程序設(shè)計(jì)5.3.1進(jìn)程間通信因?yàn)橛袃蓚€進(jìn)程(主進(jìn)程和網(wǎng)絡(luò)進(jìn)程),所以主應(yīng)用程序的設(shè)計(jì)實(shí)際上是對主進(jìn)程和網(wǎng)絡(luò)進(jìn)程的程序設(shè)計(jì)。兩個進(jìn)程間采用管道通信,用信號SIGUSR1和SIGUSR2觸發(fā)。我們使用一套完整的通信機(jī)制來完成進(jìn)程間通信。進(jìn)程間數(shù)據(jù)使用十六進(jìn)制(HEX)傳送,數(shù)據(jù)格式見表5-1。數(shù)據(jù)內(nèi)容、校驗(yàn)碼幾個部分。幀間隔T1=50ms,即兩幀數(shù)據(jù)之間至少間隔50ms。一方數(shù)據(jù)發(fā)送完畢之后,必須等待對方返回后才可發(fā)送下一幀數(shù)據(jù)。地址:主進(jìn)程地址為0x10;網(wǎng)絡(luò)進(jìn)程地址為0x11。數(shù)據(jù)長度指的是數(shù)據(jù)內(nèi)容部分的字節(jié)長度。如果數(shù)據(jù)長度為0,表示數(shù)據(jù)內(nèi)容為空。校驗(yàn)碼為從主地址到數(shù)據(jù)內(nèi)容幾個部分的累加。數(shù)據(jù)通信主要的命令是發(fā)送和接收數(shù)據(jù)。信息幀總是從主進(jìn)程發(fā)起的,然后網(wǎng)絡(luò)進(jìn)程給予回應(yīng)。當(dāng)主進(jìn)程需要聯(lián)網(wǎng)時(shí),先發(fā)送SIGUSR1信號給網(wǎng)絡(luò)進(jìn)程,表明有數(shù)據(jù)需要發(fā)送,然后按上述指定格式發(fā)送數(shù)據(jù)給網(wǎng)絡(luò)進(jìn)程;網(wǎng)絡(luò)進(jìn)程準(zhǔn)備好回應(yīng)時(shí),發(fā)送SIGUSR2信號給主進(jìn)程,之后通過管道發(fā)送回復(fù)內(nèi)容即可。5.3.2網(wǎng)絡(luò)進(jìn)程設(shè)計(jì)網(wǎng)絡(luò)進(jìn)程僅包括4G網(wǎng)絡(luò)處理。4G模塊EC20的功能框圖如圖5-2所示。圖5-24G模塊功能框圖[10]CPU和4G模塊的通信通過串口進(jìn)行,網(wǎng)絡(luò)進(jìn)程僅需調(diào)用標(biāo)準(zhǔn)linux串口文件讀寫函數(shù)read()、write()即可用4G模塊收發(fā)數(shù)據(jù)。設(shè)計(jì)網(wǎng)絡(luò)進(jìn)程時(shí),其加載流程如下:(1)初始化串口和4G模塊;(2)建立與主進(jìn)程通訊的管道;(3)注冊SIGUSR2信號;(4)隨時(shí)準(zhǔn)備接收主進(jìn)程發(fā)過來的聯(lián)網(wǎng)指令;(5)如有聯(lián)網(wǎng)指令,將數(shù)據(jù)轉(zhuǎn)換成4G模塊指定格式的數(shù)據(jù)包,發(fā)送,并接收返回?cái)?shù)據(jù)。4G模塊廠家提供了4G上網(wǎng)撥號腳本,因此,只要進(jìn)行簡單配置即可上網(wǎng),并且可以把4G模塊映射到系統(tǒng)網(wǎng)絡(luò)設(shè)備“eth1”,之后,通過標(biāo)準(zhǔn)的socket通訊方式即可聯(lián)網(wǎng)。5.3.3主進(jìn)程設(shè)計(jì)主進(jìn)程包括了4G網(wǎng)絡(luò)聯(lián)網(wǎng)之外的所有功能,其加載流程如下:(1)建立與網(wǎng)絡(luò)進(jìn)程通訊的管道;(2)注冊SIGUSR1信號;(3)初始化外設(shè);(4)建立定時(shí)器線程,以備定時(shí)之用;(5)讀取當(dāng)前日期、時(shí)間;(6)建立讀卡線程,以備隨時(shí)讀取停車卡;(7)顯示待機(jī)界面。在主進(jìn)程中,需要使用非接觸IC卡讀寫庫文件函數(shù)對非接觸IC卡進(jìn)行讀寫操作。一個Mifare卡的射頻通信函數(shù)調(diào)用流程如圖5-3所示。圖5-3Mifare卡的射頻通信函數(shù)調(diào)用流程[11]加載完畢后,主進(jìn)程已經(jīng)顯示待機(jī)界面,并且在后臺隨時(shí)準(zhǔn)備讀卡。當(dāng)工作人員選擇“進(jìn)場”菜單并選定對應(yīng)的費(fèi)率后,將待發(fā)放的非接IC卡放到POS機(jī)背面,此時(shí)讀卡器會將當(dāng)前時(shí)間和計(jì)費(fèi)規(guī)則寫入非接觸IC卡,生成訂單;之后即可將非接觸IC卡發(fā)放給車輛。待車輛準(zhǔn)備離開時(shí),用POS機(jī)讀取非接IC卡,根據(jù)當(dāng)前時(shí)間和IC卡費(fèi)率即可計(jì)算出停車費(fèi)金額,此時(shí)駕駛員可以選擇現(xiàn)金或微信支付;如選擇現(xiàn)金支付,收到現(xiàn)金后,即可結(jié)束訂單;如選擇微信支付,工作人員選擇進(jìn)入微信支付界面,此時(shí)將會顯示包含了待支付金額的微信二維碼,駕駛員使用手機(jī)微信支付后,自動結(jié)束訂單。主進(jìn)程的流程見圖5-4。圖5-4主進(jìn)程流程圖 第六章結(jié)論對比幾種常見的停車收費(fèi)系統(tǒng),本文所述的停車收費(fèi)POS機(jī)系統(tǒng)具有一定的實(shí)用價(jià)值。該軟件系統(tǒng)在傳統(tǒng)停車收費(fèi)POS機(jī)基礎(chǔ)上,進(jìn)行了一定程度的改進(jìn),軟件系統(tǒng)所賴以運(yùn)行的硬件平臺不再采用常見的小容量、集成內(nèi)存和FLASHROM的單片機(jī),而是采用主頻達(dá)400MHz的ARM9芯片S3C2416,同時(shí)配以大容量內(nèi)存(64MB)和FLASH(128MB),具備了高速運(yùn)行和大容量擴(kuò)展的條件;軟件系統(tǒng)也相應(yīng)采用嵌入式Linux操作系統(tǒng),實(shí)現(xiàn)了較強(qiáng)的多任務(wù)處理能力,同時(shí)實(shí)現(xiàn)了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論