SMT車間溫濕度分布式遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計(jì)
摘要:為實(shí)現(xiàn)溫濕度集中實(shí)時(shí)顯示和遠(yuǎn)程管理,設(shè)計(jì)了基于SQLITE數(shù)據(jù)庫和嵌入式web服務(wù)器的分布式遠(yuǎn)程監(jiān)控系統(tǒng)。該系統(tǒng)通過QT技術(shù)實(shí)現(xiàn)溫濕度的集中實(shí)時(shí)顯示,采用CG1程序?qū)崿F(xiàn)嵌入式web服務(wù)器對SQLITE數(shù)據(jù)庫的遠(yuǎn)程訪問。系統(tǒng)的實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)穩(wěn)定、可靠,能夠滿足現(xiàn)場溫濕度實(shí)時(shí)顯示和遠(yuǎn)程管理的要求。
關(guān)鍵詞:SOLITE數(shù)據(jù)庫;QT界面;嵌入式Web服務(wù)器;CGI
隨著SMT生產(chǎn)工藝技術(shù)的提高,生產(chǎn)車間對環(huán)境的溫濕度提出了溫度25±3℃。濕度45%RH~65%RH的要求。為了達(dá)到這樣的溫濕度要求,就不僅需要提高溫濕度傳感器的精度,而且要求現(xiàn)場的管理人員能夠?qū)崟r(shí)的查看現(xiàn)場的環(huán)境數(shù)據(jù),同時(shí)要求遠(yuǎn)程的上級管理人員能夠查詢和管理各個監(jiān)測點(diǎn)的溫濕度數(shù)據(jù)。
為了解決現(xiàn)場溫濕度實(shí)時(shí)顯示的問題,張晨吳等人在基于485總線的數(shù)字化溫濕度測控系統(tǒng)的設(shè)計(jì)一文中,提出為485溫濕度變送器擴(kuò)展LCD顯示模塊來實(shí)現(xiàn)溫濕度實(shí)時(shí)顯示的方案。這種獨(dú)立實(shí)時(shí)顯示方案需要為每個監(jiān)測節(jié)點(diǎn)配置LCD模塊,存在成本投入高、不方便實(shí)時(shí)查看的缺點(diǎn)。文中針對這一缺點(diǎn),提出了利用QT技術(shù)實(shí)現(xiàn)現(xiàn)場溫濕度集中實(shí)時(shí)顯示的方案,這個方案只需一個LCD模塊即可實(shí)現(xiàn)各監(jiān)測點(diǎn)溫濕度實(shí)時(shí)查看,不僅成本低,而且方便管理。為了解決溫濕度的遠(yuǎn)程管理問題,肖鴻威在基于modbus協(xié)議的空間分布式溫濕度測控系統(tǒng)設(shè)計(jì)一文中,提出了采用工控機(jī)和SQLserver的方案來實(shí)現(xiàn)溫濕度的遠(yuǎn)程采集和管理,這種方案需要配置高性能的工業(yè)PC,成本昂貴。針對這一不足,本文提出了采用嵌入式ARM平臺和SQLITE數(shù)據(jù)庫方案,這種方案不僅成本低,而且設(shè)備小巧,安裝維護(hù)靈活方便。
根據(jù)SMT車間溫濕度數(shù)據(jù)采集、監(jiān)控的要求,本文設(shè)計(jì)了基于SQLITE數(shù)據(jù)庫的分布式溫濕度遠(yuǎn)程監(jiān)控系統(tǒng)。本系統(tǒng)充分利用了QT技術(shù)和SQ LITE數(shù)據(jù)庫的優(yōu)點(diǎn),搭建基于ARM微處理器和Linux操作系統(tǒng)的嵌入式Web服務(wù)器,從而實(shí)現(xiàn)現(xiàn)場數(shù)據(jù)的集中實(shí)時(shí)顯示和遠(yuǎn)程管理。
1 系統(tǒng)的硬件平臺和軟件平臺
本系統(tǒng)以嵌入式Linux系統(tǒng)為核心,包括硬件平臺和軟件平臺。首先在以S3C2440微處理器為核心的硬件平臺上搭建嵌入式Linux環(huán)境,然后在Linux環(huán)境下移植Qtopia、SQLITE數(shù)據(jù)庫和Boa服務(wù)器,最后通過Qtopia開發(fā)環(huán)境完成QT實(shí)時(shí)顯示界面的設(shè)計(jì),利用CG1技術(shù)實(shí)現(xiàn)Web服務(wù)器對SQLITE數(shù)據(jù)庫的遠(yuǎn)程數(shù)據(jù)查詢。并且通過485總線搭建溫濕度的底層采集網(wǎng)絡(luò)。系統(tǒng)的平臺示意圖如圖1所示。
1.1 系統(tǒng)的硬件平臺
傳統(tǒng)的以單片機(jī)為核心的分散式儀表監(jiān)控模式,顯然已經(jīng)不能滿足當(dāng)前監(jiān)控系統(tǒng)對遠(yuǎn)程訪問和集中管理的要求。采用主機(jī)-終端的監(jiān)控模式,雖然能夠?qū)ΜF(xiàn)場的溫濕度進(jìn)行實(shí)時(shí)管理,但是這種監(jiān)控模式布線相對復(fù)雜,傳輸?shù)木嚯x受到限制,很難對不同地點(diǎn)的溫濕度進(jìn)行監(jiān)控。
為了對不同地點(diǎn)的溫濕度進(jìn)行實(shí)時(shí)的遠(yuǎn)程管理,需要搭建一個基于以太網(wǎng)的分布式監(jiān)控系統(tǒng)。基于以太網(wǎng)的監(jiān)控系統(tǒng)可以采用PC、PLC或者ARM為核心,采用PLC為核心的以太網(wǎng)監(jiān)控系統(tǒng)通常需要配備以太網(wǎng)模塊,采用PC為核心的監(jiān)控系統(tǒng)通常需要配置高性能的工業(yè)PC,這樣與以ARM為核心的監(jiān)控系統(tǒng)相比,價(jià)格要昂貴的多。因此,本文采用以ARM為核心的以太網(wǎng)溫濕度遠(yuǎn)程監(jiān)控系統(tǒng)。
1.2 系統(tǒng)的軟件平臺
本系統(tǒng)的軟件平臺主要包括宿主機(jī)和目標(biāo)機(jī)。宿主機(jī)是VMware8.0虛擬機(jī)下Fedora9.0的Linux操作系統(tǒng)+PC機(jī),目標(biāo)機(jī)為ARM9電路板。其中在宿主機(jī)上需要完成Bootloader的編譯,裁剪內(nèi)核,制作內(nèi)核映像文件和根文件系統(tǒng)映像文件,然后將其下載到ARM板的Flash,從而完成嵌入式Linux操作系統(tǒng)的搭建。
本系統(tǒng)的軟件設(shè)計(jì)是建立在已搭建好的嵌入式Linux操作系統(tǒng)的基礎(chǔ)上。要設(shè)計(jì)QT實(shí)時(shí)顯示界面需要在宿主機(jī)上搭建起QT開發(fā)環(huán)境,需要在ARM板上通過移植Qtopia2.2.0搭建起QT運(yùn)行環(huán)境,最后將在宿主機(jī)編譯的執(zhí)行文件下載到ARM板上。要實(shí)現(xiàn)采集數(shù)據(jù)的遠(yuǎn)程web查詢,需要在ARM板上移植SQLITE數(shù)據(jù)庫和Boa服務(wù)器,然后通過CGI程序?qū)崿F(xiàn)對SQLITE數(shù)據(jù)庫的訪問。
2 QT實(shí)時(shí)顯示界面的設(shè)計(jì)
Qtopia是一個基于Ote的類似桌面系統(tǒng)的應(yīng)用環(huán)境,它能夠?yàn)榛谇度胧絃inux的消費(fèi)電子產(chǎn)品提供和創(chuàng)建圖形用戶界面,使用Qtopia開發(fā)的應(yīng)用程序界面清晰美觀、操作方便,多用于PDA產(chǎn)品的界面開發(fā)中。
2.1 QT開發(fā)環(huán)境和運(yùn)行環(huán)境的建立
QT開發(fā)是在宿主機(jī)上完成,而QT程序的運(yùn)行是在ARM板上完成的,因?yàn)樗拗鳈C(jī)是X86體系,而ARM板一般是ARM體系,所以必須在宿主機(jī)上既要搭建適合X86的開發(fā)環(huán)境,又要搭建適合ARM體系的開發(fā)環(huán)境。本系統(tǒng)通過編譯X86版本的Qtopia-2.2.0和ARM版本的Qtopia-2.2.0恰當(dāng)?shù)膶?shí)現(xiàn)了QT開發(fā)環(huán)境的搭建。
QT程序的運(yùn)行環(huán)境是在ARM板上,因此需要將Qtopia移植到ARM板上,即將Qtopia添加到文件系統(tǒng)中,為了讓Qtopia能夠在ARM板上運(yùn)行起來,需要制作一個Qtopia運(yùn)行腳本,然后將其權(quán)限設(shè)置為可執(zhí)行文件,同時(shí)修改文件系統(tǒng)的“etc/init.d/rc.S”文件,在其中添加“qtopia &”的語句。
2.2 QT界面程序的設(shè)計(jì)
在QT的程序設(shè)計(jì)中會用到信號和槽,信號和槽是QT用于對象間通訊的一種機(jī)制,它是QT的中心特征,也是QT與其他工具包最不同的部分。而且信號和槽的機(jī)制是安全的:一個信號的簽名必須與它的接收槽的簽名相匹配。因此,信號和槽的機(jī)制可以保證一旦一個信號和一個槽連接起來,槽會在正確的時(shí)間使用信號的參數(shù)而被調(diào)用。
在本系統(tǒng)的QT程序中,使用主函數(shù)調(diào)用初始化函數(shù),進(jìn)行硬件的初始化,并打開傳感器設(shè)備;然后調(diào)用讀取函數(shù),讀一次底層數(shù)據(jù)后發(fā)送一個信號,在QT程序中該信號連接一個槽,每發(fā)送一個信號,就會執(zhí)行一次數(shù)據(jù)的顯示。程序流程如圖2所示。
本系統(tǒng)中實(shí)現(xiàn)QT界面實(shí)時(shí)顯示的兩個重要函數(shù):
信號和槽的連接是通過連接語句實(shí)現(xiàn)的。下面介紹QT程序中用到的2個connect語句:
因此,當(dāng)按下ok后,界面中將有數(shù)據(jù)顯示。
2.3 交叉編譯QT程序及實(shí)際運(yùn)行結(jié)果
在編譯好的ARM版本的Qtopia-2.2.0開發(fā)環(huán)境下,利用progen工具生成.pro文件,命令行為progen-o xianshi.pro;利用tmake工具生成Makefile文件,命令行為tmake-oMakefile xianshi.pro。然后通過make命令生成可執(zhí)行文件,并將生成的執(zhí)行文件xianshi下載到ARM板的/opt/Qtopia/bin/目錄下,將桌面圖標(biāo)文件xianshi.png下載到ARM板的/opt/Qtopia/pics/目錄下,將桌面啟動器文件xiansh i.desktop下載到ARM板的/opt/Qtopia/Apps/Applicationst目錄下。最后重啟ARM板,在觸摸屏上點(diǎn)擊xiansh test文件圖標(biāo),打開QT界面,再點(diǎn)擊Initialization按鈕和Ok按鈕即可得到相關(guān)測試數(shù)據(jù)。最終的運(yùn)行結(jié)果如圖3所示。
該運(yùn)行結(jié)果充分證明了QT程序已成功在ARM板上運(yùn)行。將QT程序設(shè)置為每1秒刷新一次溫濕度數(shù)據(jù),讓ARM板長時(shí)間運(yùn)行,QT界面的溫濕度顯示仍然保持流暢,因此,說明該設(shè)計(jì)滿足實(shí)時(shí)顯示的要求。
3 CGI訪問SQLITE數(shù)據(jù)庫的實(shí)現(xiàn)
嵌入式系統(tǒng)在數(shù)據(jù)的采集和處理過程中有大量的動態(tài)數(shù)據(jù),而對數(shù)據(jù)的存取主要有兩種方式:一種是基于文件的方式,一種是基于數(shù)據(jù)庫的方式。對于文件方式,應(yīng)用程序通常獨(dú)占數(shù)據(jù)文件的讀寫操作,數(shù)據(jù)共享性差;對于數(shù)據(jù)庫方式,數(shù)據(jù)和應(yīng)用程序相互獨(dú)立,通過事務(wù)進(jìn)行調(diào)度和并發(fā)控制,可有效的實(shí)現(xiàn)對數(shù)據(jù)進(jìn)行存取、查詢等共享操作,并且運(yùn)行時(shí)需要較少的內(nèi)存。因此,本系統(tǒng)采用了基于SQLITE數(shù)據(jù)庫的方式。
嵌入式web服務(wù)器對SQLITE數(shù)據(jù)庫的訪問是通過CGI技術(shù)實(shí)現(xiàn)的。本系統(tǒng)在宿主機(jī)上通過編譯SQLITE數(shù)據(jù)庫工具包搭建起SQLITE數(shù)據(jù)庫開發(fā)環(huán)境,在ARM板上通過移植Boa服務(wù)器和SQLITE數(shù)據(jù)庫搭建起CGI程序運(yùn)行環(huán)境,然后在宿主機(jī)環(huán)境下編譯CGI程序并將生成的執(zhí)行文件下載到ARM板相關(guān)目錄下,從而實(shí)現(xiàn)CGI對SQLITE數(shù)據(jù)庫的訪問。圖4為嵌入式Web服務(wù)器對SQLITE數(shù)據(jù)庫進(jìn)行訪問的結(jié)構(gòu)圖。
3.1 CGI對嵌入式Boa服務(wù)器的訪問
CGI(Common Gateway Interface)是一個web服務(wù)器與外部應(yīng)用程序交互的標(biāo)準(zhǔn)接口,它允許將其輸出結(jié)果經(jīng)web服務(wù)器傳送給web瀏覽器。web服務(wù)器將web瀏覽器發(fā)來的消息,傳遞給CGI程序,由CGI程序進(jìn)行處理,處理完成后把響應(yīng)的結(jié)果再回送給web服務(wù)器,web服務(wù)器再把消息發(fā)送給web瀏覽器。CGI程序可以用多種語言來實(shí)現(xiàn),如Perl、C、Unix shell等,由于C語言有較強(qiáng)的平臺無關(guān)性,占用的資源少,效率高,本系統(tǒng)選取C語言來編寫CGI程序。
CGI程序有GET和POST兩種提交數(shù)據(jù)的方法。其中,GET方式提交數(shù)據(jù),是將數(shù)據(jù)保存在QUERY_STRING環(huán)境變量中,通過調(diào)用函數(shù)getenv(“QUERY_STRING”)來讀取數(shù)據(jù);POST方式提交數(shù)據(jù),則程序先從CONTENT-LENGTH環(huán)境變量中得到數(shù)據(jù)的字長,然后從標(biāo)準(zhǔn)輸入中讀取相應(yīng)長度的字符串。一般,如果只是為取得和顯示數(shù)據(jù)多采用GET方式提交數(shù)據(jù),一旦涉及數(shù)據(jù)的保存和更新,多采用POST的方式提交數(shù)據(jù),本系統(tǒng)采用的是GET方式來提交數(shù)據(jù)。
CGI是建立在Boa服務(wù)器的基礎(chǔ)上的,關(guān)于Boa服務(wù)器的移植在此不再贅述。
3.2 嵌入式SQLITE數(shù)據(jù)庫的實(shí)現(xiàn)
3.2.1 嵌入式SQLITE數(shù)據(jù)庫簡介
SQLITE是D.Richard Hipp開發(fā)的開源性嵌入式數(shù)據(jù)庫引擎,全部源代碼大約3萬行左右,編譯后的程序大小250 kB,甚至可以縮小至150 kB左右。它具有體積小、數(shù)據(jù)容量大、處理速度快、占用內(nèi)存少的特點(diǎn)。并且它用一個小型的C庫來實(shí)現(xiàn)嵌入式關(guān)系數(shù)據(jù)庫管理體制,提供了對SQL92的大多數(shù)支持,包括:多表和索引、事務(wù)、視圖、觸發(fā)和一系列的用戶驅(qū)動及其接口。
3.2.2 SQLITE常用的API函數(shù)
1)打開數(shù)據(jù)庫:int sqlite3_open(const char*filename,SOLITE3**db);//*filename是數(shù)據(jù)庫的文件名,**db是數(shù)據(jù)庫句柄。
2)運(yùn)行函數(shù):int sqlite3_exec (sqlite3*,const char**sql,sqlite3_callback,void*,char**errmsg);callback是回調(diào)函數(shù),用戶可以根據(jù)需要自己編寫callback函數(shù)獲得操作數(shù)據(jù)庫的結(jié)果。
3)查詢數(shù)據(jù):int sqlite3_get_table(sqlite3*,const char*sql,char***result,int *nrow,int *ncolumn,char **errmsg);//參數(shù)result以數(shù)組的形式存放查詢的數(shù)據(jù),參數(shù)nrow和ncolumn分別為查詢語句返回的結(jié)果集的行數(shù)和列數(shù)。
4)關(guān)閉數(shù)據(jù)庫:int sqlite3_close(sqlite3*)。
3.2.3 嵌入式SQLITE數(shù)據(jù)庫在ARM—LINUX上的移植
本系統(tǒng)是將嵌入式SQLITE數(shù)據(jù)庫應(yīng)用到S3C2440+
Linux環(huán)境中,首先需要在宿主機(jī)的交叉編譯環(huán)境下,編譯生成SQLITE的可執(zhí)行文件,然后將其下載到ARM板的相關(guān)目錄下。移植SQLITE的主要步驟如下:
1)解壓sqlite-3.5.6.tar.gz工具包,命令為tar-zxvf sqlite-3.5.6.tar.gz;
2)解壓完成之后進(jìn)入sqlite-3.5.6目錄下新建一個文件夾build。
3)進(jìn)入build文件夾,執(zhí)行./configure--host=arm-linux-prefiX=/opt/sqlite-3.5.6/build,其中host是指定進(jìn)行編譯的交叉編譯器.prefix是編譯后目標(biāo)存放的路徑。
4)執(zhí)行make和make install命令,在新建的build目錄下生成bin、lib、include、share 4個文件夾。
5)將build/bin目錄下的文件拷貝到ARM板的/usr/bin中,將build/lib目錄下的文件拷貝到ARM板的lib文件夾下。
6)修改ARM板/usr/bin/sqlite3的權(quán)限,命令為chmod 755sqlite3。
完成上述6步后,可以在ARM板的終端輸入:sqlite3test.db來驗(yàn)證SQLITE數(shù)據(jù)庫是否移植成功。
3.3 嵌入式Web服務(wù)器對SQLITE數(shù)據(jù)庫的遠(yuǎn)程查詢
要實(shí)現(xiàn)嵌入式Web服務(wù)器對SQLITE數(shù)據(jù)庫的遠(yuǎn)程數(shù)據(jù)查詢,需要實(shí)現(xiàn)數(shù)據(jù)的查詢和網(wǎng)頁顯示。針對生產(chǎn)車間溫濕度數(shù)據(jù)的當(dāng)前值、最大值和最小值,本系統(tǒng)設(shè)計(jì)了對最近五次的溫濕度和所有溫濕度的最大值、最小值進(jìn)行查詢的CGI程序。在CGI程序中,利用sqlite3_get_table(db,“selectmax(temperature)from dhtll;”,&result,&nrow,neolumn,errmsg)來實(shí)現(xiàn)對溫度數(shù)據(jù)最大值的查詢,其它數(shù)據(jù)的查詢類似。要實(shí)現(xiàn)溫濕度的網(wǎng)頁顯示需要在CGI程序中指定輸出一個文本的html網(wǎng)頁,通過printf(“Content-type:text/html\n\n”)程序語句即可實(shí)現(xiàn)。
編寫好的CGI程序需要在特定的交叉編譯環(huán)境下才能編譯成功。這里使用arm-linux-gcc-I/opt/build/include-L/opt/build/lib-o main.cgi main.c-lsqlite3編譯生成main.cgi(其中-I和-L后面指定的是頭文件和鏈接文件),然后將其下載到ARM板的www目錄下,并將該文件設(shè)置為可執(zhí)行文件權(quán)限。最后在客戶端的IE瀏覽器上輸入http://192.168.58.230/main.html即可進(jìn)入溫濕度實(shí)時(shí)查詢界面,其中下圖5顯示的是溫濕度的歷史數(shù)據(jù)頁面。
該運(yùn)行結(jié)果說明Boa服務(wù)器和SQLITE數(shù)據(jù)庫已成功移植到了設(shè)計(jì)的ARM電路板上,并且編寫的CGI程序完成了對SQLITE數(shù)據(jù)庫的遠(yuǎn)程訪問功能。經(jīng)多次實(shí)驗(yàn)運(yùn)行,本系統(tǒng)的嵌入式web服務(wù)器工作穩(wěn)定,執(zhí)行速度快并且安全、可靠。
4 結(jié)束語
文中設(shè)計(jì)了基于SQLITE數(shù)據(jù)庫的嵌入式Web服務(wù)器,引入QT技術(shù)來設(shè)計(jì)溫濕度實(shí)時(shí)顯示界面,利用SQLITE數(shù)據(jù)庫和Boa服務(wù)器實(shí)現(xiàn)溫濕度的遠(yuǎn)程管理。本系統(tǒng)是嵌入式技驗(yàn)測試穩(wěn)定可靠,可應(yīng)用到其他相關(guān)領(lǐng)域,為實(shí)現(xiàn)現(xiàn)場數(shù)據(jù)的集中實(shí)時(shí)顯示和遠(yuǎn)程數(shù)據(jù)訪問提供了一種切實(shí)可行的方案。
評論