嵌入式狀態(tài)監(jiān)測與故障診斷裝置的設(shè)計(jì)
1 引 言
傳統(tǒng)的狀態(tài)監(jiān)測與故障診斷裝置通常采用現(xiàn)場總線方式,但此方式具有很大局限性:現(xiàn)場總線類型多樣,相互之間差異較大,不能實(shí)現(xiàn)互操作,彼此連接困難,系統(tǒng)的信息共享和實(shí)時性不盡如人意。為了更好地搭起終端設(shè)備和遠(yuǎn)程監(jiān)控系統(tǒng)通信的橋梁,本文提出并設(shè)計(jì)了基于工業(yè)以太網(wǎng)的嵌入式狀態(tài)監(jiān)測與故障診斷裝置,和傳統(tǒng)裝置相比,它有以下優(yōu)勢:實(shí)現(xiàn)了系統(tǒng)的高效、統(tǒng)一;用戶可以通過Internet隨時隨地監(jiān)控大范圍的終端設(shè)備,取代了大量前置PC,具有更好的實(shí)時、實(shí)效性[1,2]。本裝置將現(xiàn)場采集到的實(shí)時數(shù)據(jù)通過以太網(wǎng)直接傳送到內(nèi)嵌的Web服務(wù)器上,服務(wù)器生成用于遠(yuǎn)程監(jiān)測和遠(yuǎn)程故障診斷的web頁面,用戶通過鍵入設(shè)備的IP地址,就可以隨時瀏覽到被監(jiān)測設(shè)備的現(xiàn)場運(yùn)行情況、數(shù)據(jù)采集信息以及報(bào)警信息等。
2 裝置結(jié)構(gòu)與特點(diǎn)
目前,機(jī)電設(shè)備的狀態(tài)監(jiān)測與故障診斷的整個系統(tǒng)結(jié)構(gòu)如圖1所示:
圖1 嵌入式狀態(tài)監(jiān)測與故障診斷系統(tǒng)結(jié)構(gòu)
本文設(shè)計(jì)開發(fā)了此體系的核心裝置——嵌入式機(jī)電設(shè)備監(jiān)控裝置,主要分為3個模塊:
?。?)數(shù)據(jù)采集模塊:包括多個現(xiàn)場數(shù)據(jù)采集單元。主要完成現(xiàn)場數(shù)據(jù)的檢測、采集。
?。?)數(shù)據(jù)存儲與處理模塊:包括嵌入式現(xiàn)場總線/以太網(wǎng)監(jiān)控工控機(jī)和數(shù)據(jù)庫。它通過EtherNet/IP協(xié)議,和現(xiàn)場總線數(shù)據(jù)采集單元進(jìn)行通信,實(shí)現(xiàn)靈敏檢測和數(shù)據(jù)存儲。
?。?)在線監(jiān)測模塊:包括嵌入式Web服務(wù)器和監(jiān)測網(wǎng)站。服務(wù)器生成用于遠(yuǎn)程監(jiān)測和故障診斷的web頁面。網(wǎng)絡(luò)用戶可以隨時掌握現(xiàn)場運(yùn)轉(zhuǎn)情況,使遠(yuǎn)程監(jiān)控真正實(shí)現(xiàn)。
本裝置擁有以下三個先進(jìn)的特征:
1)應(yīng)用工業(yè)以太網(wǎng),使Ethernet/IP設(shè)備和現(xiàn)場設(shè)備能夠通信。為了實(shí)現(xiàn)這個功能,我們將以太網(wǎng)協(xié)議移植進(jìn)嵌入式Linux。
2)通過瀏覽器支持機(jī)電設(shè)備狀態(tài)的監(jiān)控。我們在嵌入式Linux中移植了BOA,設(shè)計(jì)了動態(tài)網(wǎng)頁實(shí)時監(jiān)控機(jī)電設(shè)備。
3)支持大容量數(shù)據(jù)存儲,用一個黑匣子對設(shè)備的實(shí)時數(shù)據(jù)資源進(jìn)行監(jiān)控。通過大容量IDE總線的擴(kuò)展,連接IDE系統(tǒng)硬盤,存儲大量數(shù)據(jù)[3]。
3 裝置的硬件設(shè)計(jì)
AT91RM9200是ATMEL針對系統(tǒng)控制及通信領(lǐng)域推出的基于ARM920T內(nèi)核的新微型控制器。它具有獨(dú)立的16KB指令和16KB數(shù)據(jù) cache、全功能的MMU虛擬內(nèi)存管理單元、16KB SRAM和128KB ROM、64MB NAND Flash 存儲器、LCD控制器、EBI 接口控制器、4個32位的PIO控制器、20通道的外設(shè)數(shù)據(jù)控制器(DMA)、3個同步串行控制器(SSC)、4個通用同步/異步接收/發(fā)送器(USART)、主/從串行設(shè)備接口SPI、16路12位ADC、1通道16位DAC、多媒體卡接口(MCI)、以太網(wǎng)10/100 Base-T 以太網(wǎng)媒體訪問控制器(MAC)、觸摸屏接口、IDE接口等。
在處理器豐富資源的基礎(chǔ)上,本裝置對其進(jìn)行了相關(guān)的配置和擴(kuò)展,將處理器通過16路12位ADC接口對機(jī)電設(shè)備的電壓或電流信號進(jìn)行采集,IDE接口外掛大容量IDE硬盤,用于存儲web、采集的數(shù)據(jù)等。通過DM9161芯片,該微處理器把EMAC接口外擴(kuò)為以太網(wǎng)接口RJ45,與工業(yè)以太網(wǎng)連接 [4]。AT91RM9200通過SPI接口連接CAN控制器SJA1000,CAN控制器與CAN收發(fā)器PCA82C250相連,用于連接 DeviceNet。硬件結(jié)構(gòu)如圖2所示:
圖2 硬件結(jié)構(gòu)圖
4 裝置的軟件架構(gòu)
軟件結(jié)構(gòu)如圖3所示:

圖3 軟件架構(gòu)圖
4.1移植工業(yè)以太網(wǎng)協(xié)議
工業(yè)以太網(wǎng)EtherNet/IP,是一種適用于工業(yè)環(huán)境的通訊體系,能夠在廣闊的區(qū)域中支持大量現(xiàn)場設(shè)備的連接。它采用通用工業(yè)協(xié)議(CIP)作為其應(yīng)用層協(xié)議。CIP協(xié)議支持各種控制、配置和信息處理服務(wù),包括顯式報(bào)文(用于信息傳輸,靈活的報(bào)文交換)以及隱式報(bào)文(用于控制和實(shí)時I/O數(shù)據(jù)的傳輸),支持輪詢、周期和狀態(tài)改變數(shù)據(jù)傳輸觸發(fā)機(jī)制,點(diǎn)對點(diǎn)單播和廣播數(shù)據(jù)傳輸方式[5,6]。OE服務(wù)的設(shè)計(jì)簡化了EtherNet/IP的移植,只需要修改操作環(huán)境文件來適合ARM Linux操作體系。
4.2 移植BOA
從www.boa.org下載一個主流版本的BOA源碼包,本系統(tǒng)用的是boa-0.94.13.tar.gz。
第一步:修改Makefile文件,編譯BOA源碼,生成BOA可執(zhí)行文件。
修改Makefile文件,因?yàn)槲覀円幾g的是基于ARM的二進(jìn)制代碼,所以必須修改Makefile中的CC和CPP,分別將其改為交叉編譯器安裝的路徑:CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc
CPP=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc -E
然后運(yùn)行make進(jìn)行編譯,得到可執(zhí)行程序boa。
第二步:配置BOA。
BOA啟動時將加載一個配置文件boa.conf,在boa程序運(yùn)行前,必須首先編輯該文件。在Boa源碼目錄下已有一個示例boa.conf,可以在其基礎(chǔ)上修改。配置好的主要內(nèi)容如下:
User nobody
Group 0
ServerName AT91RM9200
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
DocumentRoot /var/www
MimeTypes /etc/mime.types
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
據(jù)此配置,需要創(chuàng)建日志文件目錄/var/log/boa,HTML文檔的主目錄/var/www,將靜態(tài)網(wǎng)頁存入該目錄下,CGI腳本所在目錄/var/www/cgi-bin,將cgi的腳本存放在該目錄下。
4.3 CGI網(wǎng)頁設(shè)計(jì)
CGI(通用網(wǎng)關(guān)接口)提供Web服務(wù)器一個執(zhí)行外部程序的通道,這種服務(wù)端技術(shù)建立了Web瀏覽器與Web服務(wù)器之間的交互。首先,瀏覽器將遠(yuǎn)程客戶端發(fā)送的請求送到Web服務(wù)器,Web服務(wù)器將數(shù)據(jù)使用STDIN送給CGI程序,執(zhí)行CGI程序后獲得緩沖區(qū)中的設(shè)備信息,最后,使用STDOUT輸出包含工業(yè)設(shè)備信息的HTML形式的結(jié)構(gòu)文件,經(jīng)Web服務(wù)器送回瀏覽器,顯示給遠(yuǎn)程客戶端。
CGI程序可以用C語言編寫,并且能夠嵌入HTML腳本。它使用ARM-GCC編譯。CGI程序可以使用GET、POST或直接的URL參數(shù)傳遞方法與遠(yuǎn)程客戶端通信。以下是將采集到的設(shè)備數(shù)據(jù)顯示到網(wǎng)頁上的一段CGI程序,其中用到的數(shù)據(jù)庫是SQLite。SQLite是用一個小型C庫實(shí)現(xiàn)的一種強(qiáng)有力的嵌入式關(guān)系數(shù)據(jù)庫管理體制,它在體積與功能之間做到了較好的平衡,是理想的嵌入式數(shù)據(jù)庫。
#include
#include "sqlite3.h"
main(){
…
sqlite3* p_db;
sqlite3_open("mydb", &p_db);/*打開數(shù)據(jù)庫*/
/*執(zhí)行SQL語句選擇alarm表中的所有記錄,并在查詢結(jié)果的每一行上執(zhí)行回調(diào)函*/
ret=sqlite3_exe c(p_db, "sel ect * from alarm;", callback,0, &errmsg);
…
sqlite3_close(p_db); /* 關(guān)閉數(shù)據(jù)庫*/
?。?/P>
int callback(void *p_data, int n_columns, char **column_names, char **column_values){ /*回調(diào)函數(shù)*/
int i;
for(i=0; i < n_columns; i++)
printf("%s=%s\n",column_names[i],column_values[i]? column_values[i]:"NULL");/*打印出查詢結(jié)果*/
return 0;
}
4.4動態(tài)網(wǎng)頁技術(shù)
服務(wù)器端為嵌入式ARM,只能運(yùn)行基于TCP/IP協(xié)議的ARM-GCC編譯的Linux下的C++服務(wù)程序,本文使用嵌入式C++實(shí)現(xiàn)的 UDP socket技術(shù)與客戶端通信??蛻舳耸褂胒lash或Java Applet和服務(wù)程序通信,提供動態(tài)網(wǎng)頁。本文使用flash完成動態(tài)刷新,動態(tài)刷新采用線程機(jī)制,后臺數(shù)據(jù)通過UDP socket技術(shù)與服務(wù)器端通信來獲取。
服務(wù)器端和客戶端間的通信采用先進(jìn)B/S結(jié)構(gòu),用戶不需要在客戶機(jī)一端安裝診斷軟件即可以在遠(yuǎn)程進(jìn)行設(shè)備的監(jiān)測與故障診斷,形成一個開放式的遠(yuǎn)程監(jiān)測與故障診斷系統(tǒng)?;赨DP協(xié)議的Socket通信B/S架構(gòu)如圖4所示:

圖4 UDP Socket通信B/S架構(gòu)
系統(tǒng)動態(tài)頁面如圖5所示:

圖5 狀態(tài)監(jiān)測與故障診斷系統(tǒng)主界面
5 結(jié)束語
本文作者創(chuàng)新點(diǎn):將工業(yè)以太網(wǎng)技術(shù)、嵌入式Web Server技術(shù)、CGI技術(shù)、動態(tài)網(wǎng)頁技術(shù)應(yīng)用于嵌入式狀態(tài)監(jiān)測與故障診斷裝置中,用戶通過 URL就可以隨時查看現(xiàn)場設(shè)備的運(yùn)行情況和報(bào)警信息,與傳統(tǒng)監(jiān)控裝置相比,提高了監(jiān)控的實(shí)時性,縮短了檢修時間,節(jié)省了檢修費(fèi)用,真正實(shí)現(xiàn)了維修制度從事故維修、定期維修向視情維修的轉(zhuǎn)變。
文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。