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