張永忠,劉鵬,鄭國榮
(北方工業(yè)大學(xué) 城市道路交通智能控制技術(shù)北京市重點(diǎn)實(shí)驗(yàn)室,北京100041)
隨著嵌入式系統(tǒng)的發(fā)展,原本以PC為中心的互聯(lián)網(wǎng)應(yīng)用逐漸延伸到了嵌入式系統(tǒng)中[1]。越來越多的設(shè)備需要通過互聯(lián)網(wǎng)或者局域網(wǎng)互聯(lián)互通,并在此基礎(chǔ)上形成智能化網(wǎng)絡(luò),使用戶對(duì)其進(jìn)行遠(yuǎn)程管理控制及信息傳遞。嵌入式Web技術(shù)提供了一種通過PC機(jī)或者手機(jī)訪問嵌入式設(shè)備的方式。采用Internet實(shí)現(xiàn)了路口現(xiàn)場(chǎng)數(shù)據(jù)采集,克服了其他串行傳輸方案或速率低、或抗干擾能力差的缺點(diǎn)[2]?;贐/S架構(gòu)的交通信號(hào)機(jī)可以使用戶在任何地點(diǎn)使用Web瀏覽器完成對(duì)接入網(wǎng)絡(luò)的交通信號(hào)機(jī)進(jìn)行配置與監(jiān)控。
用戶通過瀏覽器對(duì)具有Web服務(wù)器功能的嵌入式設(shè)備進(jìn)行監(jiān)視與控制,是嵌入式服務(wù)器的研究重點(diǎn)[3]。交通信號(hào)機(jī)嵌入式Web控制與監(jiān)視系統(tǒng)的總體結(jié)構(gòu)如圖1所示。
系統(tǒng)主要包括前端檢測(cè)與執(zhí)行機(jī)構(gòu)、交通信號(hào)機(jī)和客戶監(jiān)視與控制端,檢測(cè)機(jī)構(gòu)主要包括路口設(shè)置的諸如視頻行人檢測(cè)器、線圈車輛檢測(cè)器、地磁車輛檢測(cè)器、視頻車輛檢測(cè)器等檢測(cè)設(shè)備,其基礎(chǔ)數(shù)據(jù)可以直接上傳至交通信號(hào)機(jī)。執(zhí)行機(jī)構(gòu)主要包括路口信號(hào)燈、倒計(jì)時(shí)牌等設(shè)備。交通信號(hào)機(jī)采用SoC設(shè)備,硬件平臺(tái)采用三星公司生產(chǎn)的S3C2440芯片作為核心處理器,其上搭載嵌入式Linux操作系統(tǒng),并移植Mongoose Web服務(wù)器為客戶端的訪問與信息回饋提供服務(wù)。客戶監(jiān)視與控制端主要由PC機(jī)或手機(jī)Web瀏覽器組成,實(shí)現(xiàn)了在公共網(wǎng)關(guān)接口標(biāo)準(zhǔn)協(xié)議規(guī)范下對(duì)外部程序的執(zhí)行,并完成了對(duì)交通信號(hào)機(jī)的遠(yuǎn)程配置及路口信息實(shí)時(shí)監(jiān)控功能。在Web瀏覽器中訪問指定交通信號(hào)機(jī)的URL(Uniform Resource Locator)來唯一地控制和監(jiān)控該路口的檢測(cè)與執(zhí)行機(jī)構(gòu)。

圖1 系統(tǒng)總體結(jié)構(gòu)
交通信號(hào)機(jī)主要包括主控部分和擴(kuò)展模塊。主控部分主要包括CPU模塊、以太網(wǎng)接口模塊和串口接口模塊。擴(kuò)展模塊主要由串口電平轉(zhuǎn)換電路、輸入電路、輸出電路和D/A轉(zhuǎn)換電路構(gòu)成。
CPU模塊采用三星公司的S3C2440處理器,主頻可達(dá)400 MHz,保證了交通信號(hào)機(jī)檢測(cè)機(jī)構(gòu)的采集效率、信號(hào)機(jī)運(yùn)算執(zhí)行能力和執(zhí)行機(jī)構(gòu)的控制質(zhì)量。其上搭載兩片外接的32 MB SDRAM,時(shí)鐘頻率可高達(dá)100 MHz。采用64 MB NAND Flash用于內(nèi)核代碼和數(shù)據(jù)保存區(qū)。
以太網(wǎng)接口電路,主要用于交通信號(hào)機(jī)集中協(xié)調(diào)式控制,設(shè)計(jì)中使用DM9000芯片。DM9000作為網(wǎng)絡(luò)接口芯片,支持網(wǎng)絡(luò)協(xié)議中的字、字節(jié)和雙字的讀寫操作。支持自適應(yīng)的10M/100M帶寬選擇,支持IEEE802.3協(xié)議中的全雙工流控工作模式。為了保證數(shù)據(jù)穩(wěn)定傳輸,DM9000外部信號(hào)發(fā)送接口TX-、TX+和外部信號(hào)接收接口RX-、RX+經(jīng)過HST-1027SR隔離變壓器與RJ45以太網(wǎng)接口進(jìn)行連接,實(shí)現(xiàn)了外部電路與內(nèi)部電路的電氣隔離,使系統(tǒng)的抗干擾能力提高。
S3C2440擁有3個(gè)獨(dú)立的串行口,每個(gè)串口都可以獨(dú)立地以終端模式或者DMA模式完成CPU與UART之間的數(shù)據(jù)傳輸。為了完成交通信號(hào)機(jī)和檢測(cè)與執(zhí)行機(jī)構(gòu)的數(shù)據(jù)傳輸,提高交通信號(hào)機(jī)與其他外部設(shè)備的數(shù)據(jù)擴(kuò)展能力,需要在原有基礎(chǔ)上另外增加串行接口。設(shè)計(jì)中選用XR16V554芯片,采用數(shù)據(jù)總線擴(kuò)展方式增加4路獨(dú)立的串口通路。
擴(kuò)展模塊主要實(shí)現(xiàn)串口電平的轉(zhuǎn)換、信號(hào)輸入和信號(hào)輸出的擴(kuò)展、A/D轉(zhuǎn)換等功能。通過擴(kuò)展模塊的設(shè)計(jì),實(shí)現(xiàn)了交通信號(hào)機(jī)對(duì)外部設(shè)備的感知和控制能力。
在交通信號(hào)機(jī)核心控制單元S3C2440上搭載了嵌入式Linux操作系統(tǒng),包含系統(tǒng)軟件部分和應(yīng)用軟件部分。系統(tǒng)軟件由Bootloader引導(dǎo)程序、系統(tǒng)內(nèi)核、根文件系統(tǒng)和系統(tǒng)驅(qū)動(dòng)4個(gè)部分組成。應(yīng)用軟件主要包括嵌入式Mongoose服務(wù)器以及交通信號(hào)機(jī)配時(shí)軟件等。
嵌入式Mongoose服務(wù)器主要用于向發(fā)出請(qǐng)求的客戶端瀏覽器提供所需的文檔程序。本設(shè)計(jì)中嵌入式Web服務(wù)器采用 Mongoose2.8版本,該版本支持Linux、bsd、solaris、mac、widows、mingw這6種操作系統(tǒng)。本文主要介紹Linux系統(tǒng)下的Mongoose Web服務(wù)器。通過分析解壓好的Mongoose Web服務(wù)器程序中的Makefile,可以通過使用操作命令make Linux來編譯成Linux操作系統(tǒng)下的Mongoose Web下的可執(zhí)行程序。在Makefile文件中有關(guān)Linux操作系統(tǒng)的命令主要包括以下幾條:

由makefile文件可知,編譯過程中源文件主要有兩個(gè):一個(gè)為mongoose.c,另一個(gè)是main.c。如果想編譯生成嵌入式Linux系統(tǒng)中的可執(zhí)行文件,需將Makefile文件中的$(CC)改為arm-linux-gcc。mongoose服務(wù)器的主入口在main函數(shù)中,入口函數(shù)為mg_start(),整個(gè)進(jìn)程結(jié)束于 mg_stop();在 main函數(shù)中通過函數(shù) mg_set_option(ctx,"ports","8080")設(shè)置服務(wù)器程序端口號(hào),本設(shè)計(jì)設(shè)置的端口號(hào)為8080。編譯生成兩個(gè)文件:一個(gè)是文件mongoose,它是可執(zhí)行文件,通過執(zhí)行該文件可以開啟目標(biāo)板的嵌入式Web服務(wù)器功能;另一個(gè)為_mongoose.so,該文件為Linux下的標(biāo)準(zhǔn)庫文件,此文件可以直接嵌入于需要使用嵌入式服務(wù)器的項(xiàng)目中。當(dāng)執(zhí)行mongoose后,所在的目錄將被開放,在PC或手機(jī)瀏覽器上可以以“http://”+“目標(biāo)交通信號(hào)機(jī)ip”+“:8080/”的方式訪問被開放的目錄。
CGI(Common Gateway Interface)即公共網(wǎng)關(guān)接口,主要提供了外部CGI應(yīng)用程序與Web服務(wù)器之間標(biāo)準(zhǔn)的接口。CGI標(biāo)準(zhǔn)接口為Web服務(wù)器執(zhí)行外部程序提供了可能,可以通過CGI程序完成外部Web瀏覽器與內(nèi)部服務(wù)器之間的數(shù)據(jù)信息交互。
CGI程序本質(zhì)為瀏覽器與服務(wù)器之間的中間介質(zhì)程序,負(fù)責(zé)處理超文本文件與運(yùn)行在服務(wù)器中的程序之間的數(shù)據(jù)交換[4],通過客戶端瀏覽器中HTML表單向服務(wù)器端發(fā)送CGI請(qǐng)求,服務(wù)器監(jiān)聽進(jìn)程收到該CGI請(qǐng)求后觸發(fā)CGI程序,該CGI程序執(zhí)行客戶請(qǐng)求,然后將處理請(qǐng)求信息傳送至服務(wù)器,最后將服務(wù)器返回的數(shù)據(jù)信息送回到客戶端瀏覽器。此數(shù)據(jù)信息通常以HTML網(wǎng)頁形式傳回客戶端瀏覽器,由瀏覽器以網(wǎng)頁的形式展現(xiàn)在用戶面前。CGI程序可以使用Perl、Pascal、C語言等編寫。服務(wù)器接收用戶請(qǐng)求交給嵌入式Web服務(wù)器上的CGI程序處理[5]。CGI程序工作流程如圖2所示。

圖2 CGI程序工作流程
一個(gè)基本的CGI接口包括標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和環(huán)境變量3部分。標(biāo)準(zhǔn)輸入可以使用FORM表單的形式,提交過程中以GET或POST的方法向服務(wù)器提交數(shù)據(jù)。在CGI程序應(yīng)用中服務(wù)器與CGI程序之間的數(shù)據(jù)信息傳遞是通過環(huán)境變量完成的。標(biāo)準(zhǔn)輸出是CGI程序向客戶端發(fā)送服務(wù)器返回?cái)?shù)據(jù)信息的標(biāo)準(zhǔn),返回的應(yīng)答是HTTP應(yīng)答信息,HTTP應(yīng)答輸出的標(biāo)準(zhǔn)是CGI程序標(biāo)準(zhǔn)輸出的重要格式。在CGI程序中重要的環(huán)境變量包括QUERY_STRING和CONTENT_LENGTH,其分別為 GET方法和POST方法向服務(wù)器傳遞數(shù)據(jù)信息的媒介。HTTP引擎是整個(gè)Web服務(wù)器的核心,負(fù)責(zé)接收和響應(yīng)來自客戶端的 HTTP請(qǐng)求[6]。
4.2.1 標(biāo)準(zhǔn)輸入
CGI標(biāo)準(zhǔn)輸入通過定義表單中的method和action來定義客戶端向服務(wù)器端提交信息的方式和將要觸發(fā)的CGI程序的路徑。
<form name="form"method="post"action="./cgibin/post.cgi">
以上程序段表示客戶端提交信息的方式為POST方法,CGI程序的觸發(fā)路徑為嵌入式 Web服務(wù)器開放目錄下的cgi-bin,當(dāng)觸發(fā)完成后,服務(wù)器將執(zhí)行post.cgi完成客戶端與服務(wù)器端的數(shù)據(jù)信息交互??蛻舳藶g覽器向服務(wù)器端的數(shù)據(jù)傳輸方式主要有GET和POST兩種,GET方法提交表單時(shí),所傳遞的數(shù)據(jù)信息會(huì)在URL上直接顯示出來,從而帶來一定的安全問題,本設(shè)計(jì)使用POST方法通過標(biāo)準(zhǔn)輸入將客戶端的數(shù)據(jù)信息傳遞給服務(wù)器。
4.2.2 標(biāo)準(zhǔn)輸出
CGI程序均通過重定向的標(biāo)準(zhǔn)輸出STDOUT返回結(jié)果信息[7]。CGI程序觸發(fā)后,完成了數(shù)據(jù)由客戶端到服務(wù)器端的上傳以及解析,最后一步是將處理完成的信息輸出到客戶端瀏覽器,此過程CGI程序有標(biāo)準(zhǔn)的輸出格式,其應(yīng)滿足HTTP應(yīng)答信息的基本格式,CGI程序在向客戶端輸出信息時(shí)可以使用printf()等標(biāo)準(zhǔn)函數(shù)完成向客戶端的數(shù)據(jù)信息傳遞。
至此,一個(gè)完整的客戶端向服務(wù)器傳送數(shù)據(jù)信息,經(jīng)過服務(wù)器處理,最后返回至客戶端的過程已經(jīng)結(jié)束??偨Y(jié)起來,可以將Mongoose Web服務(wù)器與CGI程序看成是兩個(gè)進(jìn)程,把CGI接口看成是解決了兩個(gè)進(jìn)程間的通信問題。當(dāng)服務(wù)器接收到了客戶端瀏覽器發(fā)送的請(qǐng)求后,將創(chuàng)建一個(gè)子進(jìn)程處理客戶請(qǐng)求,CGI程序?qū)⑼ㄟ^讀取環(huán)境變量得到客戶端的標(biāo)準(zhǔn)輸入,將數(shù)據(jù)信息處理后,通過標(biāo)準(zhǔn)輸出將信息輸出至客戶端瀏覽器進(jìn)行解析,以網(wǎng)頁的形式呈現(xiàn)給用戶。最后結(jié)束此CGI進(jìn)程,Mongoose服務(wù)器繼續(xù)等待下一個(gè)客戶端請(qǐng)求。雖然動(dòng)態(tài)網(wǎng)頁的處理由CGI完全可以實(shí)現(xiàn),但由于Web服務(wù)器每運(yùn)行一個(gè)CGI程序,就需要fork一個(gè)進(jìn)程為其服務(wù),這樣服務(wù)器與瀏覽器的交互越多,對(duì)服務(wù)器的總體性能影響就越大[8]。
4.2.3 環(huán)境變量
數(shù)據(jù)不會(huì)通過標(biāo)準(zhǔn)輸入將客戶端傳遞的數(shù)據(jù)信息直接傳遞給CGI程序,而是服務(wù)器通過將FORM表單提供的數(shù)據(jù)信息以特定的格式存放至環(huán)境變量中。CGI程序通過讀取環(huán)境變量CONTENT_LENGTH,將客戶端以POST方式傳遞給服務(wù)器的數(shù)據(jù)信息以字符串?dāng)?shù)組的方式讀取出來。讀取出來的每組的數(shù)據(jù)格式為“變量名”+“=”+“變量值”,每?jī)蓚€(gè)變量直接又以“&”隔開。例如,本設(shè)計(jì)中在環(huán)境變量中得到的部分變量的表達(dá)形式為“P10101=15&P10102=50&P10103=35&P10104=3”。該數(shù)組有標(biāo)準(zhǔn)的結(jié)構(gòu),通過解析可以將每一個(gè)變量相應(yīng)地傳遞到服務(wù)器端的程序中進(jìn)行運(yùn)算處理。
以上述理論為基礎(chǔ),設(shè)計(jì)完成了基于B/S架構(gòu)的交通信號(hào)機(jī)實(shí)時(shí)監(jiān)控軟件,用戶登錄時(shí)通過輸入目標(biāo)信號(hào)機(jī)URL,進(jìn)入交通信號(hào)機(jī)配置監(jiān)控頁面。確認(rèn)用戶信息后,進(jìn)入主配置頁面后可根據(jù)路口具體信號(hào)需求對(duì)信號(hào)機(jī)進(jìn)行配置。信號(hào)機(jī)配置頁面與路口實(shí)時(shí)監(jiān)控頁面略——編者注。
配置結(jié)束后前往監(jiān)視運(yùn)行界面,此界面可以對(duì)信號(hào)機(jī)系統(tǒng)時(shí)間、協(xié)調(diào)方式、方案編號(hào)、路口信號(hào)情況等進(jìn)行實(shí)時(shí)監(jiān)視,便于以可視化方式直接掌握路口信號(hào)燈運(yùn)行情況。通過實(shí)驗(yàn)表明,信號(hào)燈燈組控制準(zhǔn)確、路口監(jiān)控信息上傳及時(shí),達(dá)到了良好的控制效果。
基于B/S架構(gòu)的嵌入式信號(hào)機(jī)配置軟件,將 Mongoose Web嵌入式服務(wù)器移植到嵌入式Linux系統(tǒng)上,通過CGI可以方便地完成客戶端與服務(wù)器端數(shù)據(jù)信息通信的實(shí)時(shí)交互。嵌入式服務(wù)器僅占用40 KB空間,提高了系統(tǒng)的靈活性,而且系統(tǒng)升級(jí)過程中只需對(duì)服務(wù)器端進(jìn)行軟件升級(jí),對(duì)客戶端的依賴度比較低,這解決了傳統(tǒng)C/S架構(gòu)系統(tǒng)設(shè)備大范圍升級(jí)代價(jià)較高的問題。嵌入式Web服務(wù)器通過Web瀏覽器方便地向用戶提供信息交互接口,可以預(yù)見隨著人們對(duì)信息獲取需求的增多,帶有嵌入式Web服務(wù)器的設(shè)備將有更廣闊的應(yīng)用空間。
編者注:本文為期刊縮略版,全文見本刊網(wǎng)站www.mesnet.com.cn。
[1]宋凱,嚴(yán)麗平,甘嵐.嵌入式 Web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(4):808-810.
[2]王莉,周偉.基于ARM的嵌入式 Web服務(wù)器設(shè)計(jì)[J].計(jì)算機(jī)工程與應(yīng)用,2012,48(14):90-93,213.
[3]Yin Jie,Chai Xiaoyong,Yang Qiang.High-level goal recognition in a wireless LAN[C]//Proceedings of the 19th National Conference on Artificial Intelligence(AAAI2004),San Jose,CA USA,2004:578-584.
[4]馬群利.嵌入式WEB服務(wù)器及其安全機(jī)制研究[J].計(jì)算機(jī)測(cè)量與控制,2007,15(4):538-540.
[5]吳輝,侯思祖.嵌入式 Web的遠(yuǎn)程數(shù)據(jù)交互式設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2013(6):21-24.
[6]姚雷,盧曉東,萬江文.光伏發(fā)電監(jiān)控系統(tǒng)中嵌入式 Web服務(wù)器的實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2012,33(9):3397-3401.
[7]鄭強(qiáng),彭琳,鄒秋霞,等.基于嵌入式 Web服務(wù)器的遠(yuǎn)程溫室監(jiān)控系統(tǒng)設(shè)計(jì)[J].農(nóng)機(jī)化研究,2013(11):84-87.
[8]陳嵩,沙斐,周克生.基于嵌入式以太網(wǎng)技術(shù)的便攜式數(shù)據(jù)采集系統(tǒng)[J].電子測(cè)量與儀器學(xué)報(bào),2007,21(6):62-66.