周 強,陳躍鵬,陳 玄,成 舟,張 憲
(武漢理工大學(xué) 自動化學(xué)院,湖北 武漢430070)
學(xué)生去圖書館自習(xí),有可能因人滿為患而白跑一趟;外出旅游時,有可能因為景點人數(shù)太多而影響觀賞心情;去火車站乘車也會由于人多而覺得心煩。筆者將試圖解決這類問題,設(shè)計思路是將紅外計數(shù)器安裝在進出口,計算進出人數(shù),并與其最大可容納的人數(shù)進行比較,再將數(shù)據(jù)傳輸?shù)较鄳?yīng)的官方網(wǎng)站上,讓用戶通過電腦或者手機登錄其官方網(wǎng)站,查詢來這里的人數(shù)和還可容納的人數(shù)從而了解相關(guān)情況,這樣就可以合理安排自己的時間和要去的地方,避免交通擁堵,既可以為人們提供方便,又可以節(jié)省時間。
該系統(tǒng)由紅外計數(shù)裝置、ARM 控制裝置和官方網(wǎng)站實時更新系統(tǒng)3 部分組成。紅外計數(shù)裝置測量進出區(qū)域的人數(shù);ARM 控制裝置從計數(shù)裝置得到數(shù)據(jù),然后傳輸?shù)较嚓P(guān)網(wǎng)站并實時更新;官方網(wǎng)站供人們查詢相關(guān)信息,其流程如圖1 所示。
圖1 系統(tǒng)流程圖
利用紅外傳感器,檢測進出的人數(shù)。在每個區(qū)域門口的內(nèi)外兩側(cè)安裝紅外線發(fā)射裝置和接收裝置,其由兩個紅外對管組成[1]。安裝時讓每對紅外對管保持在對立面,即發(fā)射器可以照射到接收端,其保持在每個經(jīng)過的人都可以被檢測到的高度,并確認(rèn)兩根數(shù)據(jù)線哪根在內(nèi)哪根在外。計數(shù)裝置開始計數(shù),沒有人進入時,內(nèi)外接收端的數(shù)據(jù)傳送給嵌入式處理器時保持在低電平,當(dāng)有人進入時會阻擋紅外線照射,首先使外面接收器信號變成高電平,接著里面的接收器信號也變成高電平,計數(shù)系統(tǒng)記錄該區(qū)域增加一人[2]。同樣當(dāng)有人離開該區(qū)域時,會使里面接收器的信號先變成高電平,接著外面接收器的信號變成高電平,與進來的時候正好相反,計數(shù)系統(tǒng)記錄人數(shù)減少一人。每過一段時間系統(tǒng)將采集的數(shù)據(jù)傳給嵌入式系統(tǒng)進行存儲顯示。
檢測裝置由紅外線發(fā)射端和接收端兩部分組成,其電路圖如圖2 所示[3]。其中,圖2(a)為紅外線發(fā)射裝置電路圖,圖2(b)為紅外線接收裝置電路圖。
圖2 紅外線發(fā)射電路和紅外線接收電路圖
ARM 控制裝置中的主芯片采用LPC2292 芯片。LPC2292 是一款基于16/32 位ARM7TDMIS、具有支持實時仿真和跟蹤的CPU 并帶有256 kB 嵌入的高速Flash 存儲器。LPC2292 采用144腳封裝、多個32 位定時器、8 路10 位ADC、兩路高級CAN 通道和PWM 輸出及多達9 個的外部中斷[4]。由于內(nèi)置了寬范圍的串口通信接口,也適合于通信網(wǎng)關(guān)、協(xié)議轉(zhuǎn)換器等其他各種類型的應(yīng)用。
LPC2292 內(nèi)部沒有集成以太網(wǎng)的控制器,需要在片外搭建一個以太網(wǎng)接口電路。DM9000A是一種功能強大、性價比高的以太網(wǎng)控制芯片,適用于嵌入式系統(tǒng)設(shè)計,因此采用DM9000A 控制芯片實現(xiàn)以太網(wǎng)接口[5]。用SD 卡存儲測試數(shù)據(jù),其讀出和存儲速度較快,且掉電之后存儲數(shù)據(jù)不會丟失。
2.3.1 網(wǎng)絡(luò)更新結(jié)構(gòu)
將紅外計數(shù)裝置安裝在相應(yīng)區(qū)域的門口,完成現(xiàn)場數(shù)據(jù)采集、傳輸數(shù)據(jù)和網(wǎng)頁顯示等功能,同時又通過擴展RS -232 的串口與上一級服務(wù)器進行通信,完成數(shù)據(jù)傳輸??刂剖矣肞C 機對該區(qū)域的紅外計數(shù)器數(shù)據(jù)進行傳輸與管理,PC 機是整個系統(tǒng)管理控制的核心,管理各部分的功能。而管理控制上位系統(tǒng),則是一個服務(wù)器和網(wǎng)關(guān),經(jīng)過相關(guān)數(shù)據(jù)庫技術(shù)可以將嵌入式系統(tǒng)接收的數(shù)據(jù)通過以太網(wǎng)在瀏覽器(Web)上顯示并實時更新數(shù)據(jù),使以太網(wǎng)上的用戶可以查看詳細信息,從而形成瀏覽器與服務(wù)器的一體化系統(tǒng),網(wǎng)絡(luò)更新結(jié)構(gòu)如圖3 所示。
圖3 網(wǎng)絡(luò)更新結(jié)構(gòu)
2.3.2 網(wǎng)絡(luò)軟件設(shè)計
以太網(wǎng)接口電路的工作原理是:嵌入式系統(tǒng)上電時,處理器初始化DM9000A,之后DM900A進入等待數(shù)據(jù)收發(fā)的狀態(tài);若處理器要將接收數(shù)據(jù)幀發(fā)送到以太網(wǎng)上,先要通過上層協(xié)議函數(shù)對接收數(shù)據(jù)進行封裝,再由總線發(fā)送到DM9000A的緩沖區(qū),將數(shù)據(jù)信息裝到DM9000A 的寄存器中,使能發(fā)送命令后,DM9000A 可將數(shù)據(jù)自動發(fā)送出去;當(dāng)處理器接收到以太網(wǎng)數(shù)據(jù)幀時,檢測幀是否正確并保存正確的數(shù)據(jù)幀,然后上層協(xié)議將發(fā)送來的數(shù)據(jù)幀進行處理。網(wǎng)絡(luò)接口的軟件設(shè)計包括網(wǎng)卡驅(qū)動程序和上層通信協(xié)議。網(wǎng)卡的驅(qū)動程序包括芯片的初始化、數(shù)據(jù)幀的發(fā)送和接收。
(1)網(wǎng)絡(luò)接口驅(qū)動程序設(shè)計。該系統(tǒng)的集成開發(fā)工具是ARM Developer Suite 1.2。在該開發(fā)環(huán)境下編寫網(wǎng)絡(luò)接口驅(qū)動程序DM9000A.h 頭文件和DM9000A.c 源文件。在DM9000A . c 源文件中調(diào)用DM9000A. h 宏定義的片內(nèi)寄存器、各個端口的地址等信息。DM9000A .c 源文件中包含的函數(shù)有InitNic ()、phy - read ()、set -PHY- mode ()、phy - write ()、DM9000A -Init ()、Send- Packet ()、DM9000A- Exception ()和Rec- Packet()。
網(wǎng)絡(luò)接口程序設(shè)計主要由驅(qū)動初始化、數(shù)據(jù)包的發(fā)送和數(shù)據(jù)包的接收3 部分組成。初始化使DM9000A 啟動時處于數(shù)據(jù)接收和發(fā)送就緒狀態(tài);數(shù)據(jù)包的發(fā)送則要計算發(fā)送幀長度、設(shè)置發(fā)送寄存器函數(shù)等;接收的數(shù)據(jù)先保存在DM9000A 內(nèi)部相應(yīng)地址中,當(dāng)接收命令發(fā)出后,DM9000A 自動接收數(shù)據(jù)[6]。
(2)uC/OS -II 的移植。先根據(jù)設(shè)計要求劃分出相對獨立的幾個子功能模塊,將每個模塊看作一個獨立的任務(wù)。而任務(wù)是一個比較特殊的函數(shù),是無限循環(huán)、不返回函數(shù),要在循環(huán)里完成相應(yīng)的功能。按照操作系統(tǒng)的實時調(diào)度算法,多個任務(wù)之間依據(jù)任務(wù)的優(yōu)先級來決定執(zhí)行任務(wù)的先后順序。用戶可以通過中斷程序來中斷正在執(zhí)行的任務(wù)。與其他程序相比,該程序具有任務(wù)明確、修改方便、思路清晰和編程方便等特點。系統(tǒng)運行基本模式如圖4 所示。
圖4 多任務(wù)運行模式
要實現(xiàn)嵌入式的TCP/IP 協(xié)議,需要先將uC/OS-II 移植到LPC2292 里面。在LPC2292 中,如果需要移植uC/OS -II,則應(yīng)該提供兩個或3 個文件,即OS_CPU. H、OS_CPU_C. C 和OS_CPU_A.ASM。要在OS_CPU. H 里面涵蓋幾個常數(shù)的定義及幾個類型的定義;若在OS_CPU_C. C 和OS_CPU_A. ASM 中設(shè)置含有時鐘節(jié)拍中斷服務(wù)程序代碼和幾個函數(shù)的定義,則還要修改其之間的數(shù)據(jù)函數(shù)及類型[7]。
(3)TCP/IP 協(xié)議。uC/OS-Ⅱ的操作系統(tǒng)移植的TCP/IP 協(xié)議棧只需要IP 協(xié)議、ARP 協(xié)議、ICMP 協(xié)議、TCP 協(xié)議及HTTP 協(xié)議。發(fā)送數(shù)據(jù)時,相關(guān)的應(yīng)用程序通過SOCKET API 的接口函數(shù)并運用到TCP/IP 協(xié)議棧相關(guān)的數(shù)據(jù)通信等功能。發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的過程截然相反。接收數(shù)據(jù)時,傳送過來的以太網(wǎng)幀是用網(wǎng)卡驅(qū)動程序來接收的,然后交給以太網(wǎng)層進行甄別,用以太網(wǎng)層對幀頭判斷數(shù)據(jù)幀的類型。如果是ARP 報文,就要用ARP 協(xié)議模塊進行處理;如果是IP 報文,就要用IP 協(xié)議進行處理,接著依據(jù)報文中的上層協(xié)議字段標(biāo)識,把相關(guān)報文給相應(yīng)的協(xié)議(如TCP協(xié)議、UDP 協(xié)議或ICMP 協(xié)議)進行處理;如果是TCP 報文段,接收TCP 報頭的信息,依據(jù)報頭中的端口字段標(biāo)識,即可給相應(yīng)的應(yīng)用程序HTTP處理數(shù)據(jù)。終端數(shù)據(jù)和以太網(wǎng)用在HTTP 端口上,用TCP 協(xié)議傳遞,并可以對數(shù)據(jù)進行處理。TCP/IP 協(xié)議實現(xiàn)的流程如圖5 所示。
圖5 TCP/IP 協(xié)議實現(xiàn)的流程圖
2.3.3 網(wǎng)頁制作與更新
網(wǎng)頁制作與更新是在官方網(wǎng)站上添加要顯示的數(shù)據(jù),并進行數(shù)據(jù)的實時更新,讓用戶能第一時間了解所需信息。
嵌入式Web 服務(wù)器技術(shù)是實現(xiàn)嵌入式網(wǎng)頁顯示更新的重要組成部分。嵌入式Web 服務(wù)器可以實現(xiàn)Web 管理和訪問嵌入式設(shè)備的功能。嵌入式Web 服務(wù)器的原理是通過HTTP 協(xié)議與用戶瀏覽器進行信息交換,而在嵌入式設(shè)備的內(nèi)部則要通過動態(tài)網(wǎng)頁技術(shù)與嵌入式網(wǎng)頁進行信息交換。根據(jù)嵌入式系統(tǒng)特點,采用系統(tǒng)資源消耗較小的CGI 技術(shù)來實現(xiàn)網(wǎng)頁動態(tài)交互信息。嵌入式Web 服務(wù)器的基本原理如圖6 所示。
圖6 嵌入式Web 服務(wù)器的基本原理
實現(xiàn)ARM 處理器LPC2292 的Web 服務(wù)器技術(shù)包括超文本傳輸協(xié)議HTTP 和網(wǎng)關(guān)接口CGI。超文本傳輸協(xié)議是Web 服務(wù)器用來處理服務(wù)器與用戶機之間的數(shù)據(jù)流協(xié)議。服務(wù)器與用戶機之間會話流程包括用戶機與服務(wù)器建立連接、用戶機向服務(wù)器發(fā)送請求和服務(wù)器對請求的回應(yīng)。CGI 網(wǎng)關(guān)接口的功能是在網(wǎng)絡(luò)環(huán)境下傳遞相關(guān)信息給Web 服務(wù)器,再由Web 服務(wù)器運行相關(guān)程序來完成相關(guān)的工作[8]。CGI 程序能在Web 中加入動態(tài)內(nèi)容,其中包括獲取傳輸數(shù)據(jù)、提取與處理有效數(shù)據(jù)和向用戶返回數(shù)據(jù)。
該系統(tǒng)基于HTML 語言設(shè)計瀏覽頁面,HTML 是以<元素名>標(biāo)簽形式的指令集[9]。當(dāng)連接到網(wǎng)頁時,Web 瀏覽器將進行解釋執(zhí)行,在內(nèi)存中“構(gòu)建”這個網(wǎng)頁,然后在用戶屏幕上顯示在內(nèi)存中“構(gòu)建”好的網(wǎng)頁。一個簡單的HTML 網(wǎng)頁結(jié)構(gòu)如圖7 所示。
圖7 HTML 網(wǎng)頁結(jié)構(gòu)示意圖
頁面設(shè)計需要數(shù)據(jù)能實時更新,頁面實時更新的過程包括:瀏覽器向后臺的服務(wù)器發(fā)送網(wǎng)頁訪問請求;后臺服務(wù)器向客戶端發(fā)送包含數(shù)據(jù)更新的網(wǎng)頁;啟動工作之后,后臺服務(wù)器將進行查詢并將獲取的更新數(shù)據(jù)發(fā)送到客戶端。為了實現(xiàn)網(wǎng)頁的實時更新,可以用HTML 語言中的META 標(biāo)記,只需在HTML 網(wǎng)頁的開始端添加一條META 標(biāo)記,<META HTTP -EQUIV =“refresh”content =“3”>,就能實現(xiàn)每3 s 刷新一次網(wǎng)頁[10]。
整個網(wǎng)頁查詢過程則是經(jīng)過Internet 把用戶相關(guān)請求反饋到Web 服務(wù)器上,Web 服務(wù)器把從用戶接收到的請求給CGI 程序進行處理,CGI 程序即可對從計數(shù)器傳送過來的數(shù)據(jù)進行必要的處理,并將處理后的數(shù)據(jù)傳送給Web 服務(wù)器,最后Web 服務(wù)器將用戶想要的結(jié)果發(fā)送給用戶。
介紹了將計數(shù)裝置通過嵌入式Web 網(wǎng)關(guān)接入到Internet 的方案,完成一種頁面查詢?nèi)藬?shù)的系統(tǒng)。該系統(tǒng)采用B/S 結(jié)構(gòu)模式,用戶只需安裝Web 瀏覽器即可知道圖書館、旅游景點等地的人數(shù),給網(wǎng)絡(luò)用戶帶來很大的方便。該系統(tǒng)還可以擴展功能,將網(wǎng)頁制作成APP 形式,方便手機用戶及時、方便、快捷、有效地了解情況。
[1]吳菲,李仰軍.基于S3C2410 的傳感器網(wǎng)絡(luò)數(shù)據(jù)采集系統(tǒng)[J].山西電子技術(shù),2010,37(4):17 -18.
[2]彭敏.基于嵌入式的數(shù)據(jù)采集系統(tǒng)設(shè)計[J].信息技術(shù),2010,33(9):88 -89.
[3]賀云超,郭麗. 基于紅外傳感器的多功能教室狀態(tài)監(jiān)測系統(tǒng)[J].中國科技信息,2012(14):87 -89.
[4]劉炳祥,程武山.基于ARM 處理器的USB 數(shù)據(jù)采集系統(tǒng)[J].上海工程技術(shù)大學(xué)學(xué)報,2011,25(4):358-361.
[5]劉余,孟小華.嵌入式智能家居終端通信模塊的設(shè)計與實現(xiàn)[J].計算機工程與設(shè)計,2010,31(8):1689-1692.
[6]于暉,溫陽東,劉衛(wèi)平.基于LPC2292 的嵌入式以太網(wǎng)通信的設(shè)計與實現(xiàn)[J].儀器儀表標(biāo)準(zhǔn)化與計量,2007(1):24 -24.
[7]林川,吳景東.LPC2292 的uC/OS -Ⅱ硬件抽象層構(gòu)建[J].單片機與嵌入式系統(tǒng)應(yīng)用,2008(3):24-24.
[8]吳文龍,林培杰,程樹英,等.基于嵌入式Web 技術(shù)的家庭電能管理系統(tǒng)設(shè)計[J].電子技術(shù),2013(8):75 -78.
[9]韓雷,錢???嵌入式動態(tài)Web 網(wǎng)頁實現(xiàn)方法探究[J].信息技術(shù),2012(1):181 -182.
[10]余翔. 一種嵌入式Web 服務(wù)器的設(shè)計與實現(xiàn)[J].世界電子元器件,2007(9):113 -115.