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