一種新型嵌入式遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計(jì)開發(fā)
Web的應(yīng)用層協(xié)議HTTP是Web的核心。HTTP協(xié)議實(shí)現(xiàn)的客戶機(jī)/服務(wù)器模式是一種請求/響應(yīng)結(jié)構(gòu)??紤]到系統(tǒng)實(shí)現(xiàn)時(shí)嵌入式TCP協(xié)議同時(shí)支持的連接次數(shù)和安全性問題,本文采用HTTP1.0協(xié)議,Web服務(wù)器每次發(fā)送完響應(yīng)就斷開連接。狀態(tài)碼的含義很多,本文使用了兩種:當(dāng)請求網(wǎng)頁成功時(shí),返回狀態(tài)碼200,原因短語為OK;當(dāng)所請求的網(wǎng)頁不存在時(shí),返回狀態(tài)碼404,原因短語為NOT FOUND。頭部字段名也是可選部分,但是本文使用了其中一個(gè)選項(xiàng)Content-Length:指出所發(fā)送對象的字節(jié)數(shù),以方便程序調(diào)試。實(shí)體部分就是響應(yīng)的具體內(nèi)容,譬如一個(gè)HTML網(wǎng)頁或者一張圖片等等。
本文HTTP協(xié)議靜態(tài)頁面的實(shí)現(xiàn)需要完成如下內(nèi)容:首先獲取URL中的文件名,接著根據(jù)該文件名調(diào)用https_calculatehash()函數(shù)獲取文件句柄,即文件處理入口數(shù)據(jù)結(jié)構(gòu)中的hash域值,根據(jù)該值查找文件的起始地址,然后將文件裝入TCP套接字發(fā)送緩沖區(qū)。當(dāng)所發(fā)送的文件過長而大于發(fā)送緩沖區(qū)的大小時(shí)則會發(fā)生緩沖區(qū)的溢出問題,本文的解決辦法是:首先判斷文件的長度,當(dāng)文件過長時(shí),將文件分割成多個(gè)不大于發(fā)送緩沖區(qū)大小的分段,然后循環(huán)發(fā)送出去。HTTP協(xié)議中靜態(tài)頁面處理的程序流程如圖2所示。
圖2 HTTP靜態(tài)頁面處理流程圖
4.2 CGI的設(shè)計(jì)與實(shí)現(xiàn)
在該監(jiān)控系統(tǒng)中,除了支持靜態(tài)頁面,還必須支持動態(tài)內(nèi)容和動態(tài)表單的處理,主要包括動態(tài)生成實(shí)時(shí)采集數(shù)據(jù)頁面和處理控制命令表單。為了實(shí)現(xiàn)該功能,本文設(shè)計(jì)了CGI接口處理程序。
考慮到實(shí)際應(yīng)用情況,本文無需在NE64中移植操作系統(tǒng),因此為Web服務(wù)器創(chuàng)建CGI接口不能照搬標(biāo)準(zhǔn)CGI。首先,本文的Web服務(wù)器不能同時(shí)運(yùn)行多個(gè)應(yīng)用程序,每個(gè)應(yīng)用程序的運(yùn)行都會獨(dú)占CPU,直到完成才會釋放CPU。其次,本文未實(shí)現(xiàn)復(fù)雜的緩存機(jī)制,所以反復(fù)執(zhí)行應(yīng)用程序是個(gè)低速的過程。因此,本文對標(biāo)準(zhǔn)CGI進(jìn)行了裁減,設(shè)計(jì)了嵌入式CGI(Embedded CGI),通過該方法實(shí)現(xiàn)了嵌入式Web服務(wù)器的數(shù)據(jù)的采集和監(jiān)控。其工作處理流程如圖3所示。
圖3 CGI處理流程
5 A/D采集子程序
為了實(shí)現(xiàn)不同精度、更多路的數(shù)據(jù)采集,系統(tǒng)既使用了NE64集成的A/D采集模塊,又使用了通過SPI外擴(kuò)的專用的A/D采集芯片TLC2543。因此,A/D采集子程序包含了這兩部分的內(nèi)容。在具體實(shí)現(xiàn)時(shí),本文通過變量TLCAD控制調(diào)用哪個(gè)采集子程序,當(dāng)TLCAD=100時(shí),調(diào)用TLC2543采集子程序;當(dāng)TLCAD=99時(shí),調(diào)用集成A/D采集子程序。系統(tǒng)在采集數(shù)據(jù)時(shí),模擬量輸入信號從最小的通道號依次接入,實(shí)際模擬量的個(gè)數(shù)由變量NE64ADNmb和TLCADNmb決定,分別表示采集精度為10位的模擬量個(gè)數(shù)以及采集精度為12位的模擬量個(gè)數(shù)。
在A/D數(shù)據(jù)采集過程中,不可避免地會受到隨機(jī)噪聲的干擾,從而造成采集數(shù)據(jù)的不準(zhǔn)確,進(jìn)而得出錯誤的結(jié)論。為了防止脈沖干擾該系統(tǒng),本文作者采用了中值濾波的方法。在中值濾波的基礎(chǔ)上,為了保證采集數(shù)據(jù)的穩(wěn)定性,本文作者采用了算術(shù)平均值濾波的方法。
6 模塊測試
該監(jiān)控系統(tǒng)軟件的主要功能是實(shí)現(xiàn)多路數(shù)據(jù)采集、網(wǎng)絡(luò)協(xié)議通信以及對象控制機(jī)制。模塊測試部分主要針對各模塊進(jìn)行軟件測試。由于篇幅限制,下面主要針對起數(shù)據(jù)采集部分介紹其測試部分。SD12-MCS共支持30路模擬量數(shù)據(jù)采集,其中8路10位精度的AD屬于NE64的A/D模塊,剩余22路屬于2片TLC2543采集芯片。為了驗(yàn)證每個(gè)采集程序是否正確,本文設(shè)計(jì)了這樣一個(gè)測試用例:首先單獨(dú)運(yùn)行其中一種精度的采集程序,發(fā)送所有通道采集到的數(shù)據(jù),通過串行口發(fā)送給高端PC機(jī),并由PC機(jī)的測試用例顯示,若顯示數(shù)據(jù)正確,則程序正確。在此基礎(chǔ)上,發(fā)送參數(shù)確定調(diào)用哪種子程序,同時(shí)控制采集多路模擬量,由于本文設(shè)置模擬量采集都是從第0通道開始,并依此類推,因此不需要設(shè)置究竟是采集哪個(gè)通道的模擬量,從而簡化程序處理。
本文作者創(chuàng)新點(diǎn):
本文主要介紹了一種基于Web的嵌入式監(jiān)控系統(tǒng)控制策略設(shè)計(jì)與實(shí)現(xiàn)。通過對各功能模塊測試顯示該監(jiān)控系統(tǒng)性能良好,符合相關(guān)設(shè)計(jì)要求。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論