1 引 言
本文提出并設(shè)計(jì)了基于工業(yè)以太網(wǎng)的嵌入式狀態(tài)監(jiān)測(cè)與故障診斷裝置,和傳統(tǒng)裝置相比,它有以下優(yōu)勢(shì):實(shí)現(xiàn)了系統(tǒng)的高效、統(tǒng)一;用戶可以通過(guò)Internet隨時(shí)隨地監(jiān)控大范圍的終端設(shè)備,取代了大量前置PC,具有更好的實(shí)時(shí)、實(shí)效性[1,2]。本裝置將現(xiàn)場(chǎng)采集到的實(shí)時(shí)數(shù)據(jù)通過(guò)以太網(wǎng)直接傳送到內(nèi)嵌的Web服務(wù)器上,服務(wù)器生成用于遠(yuǎn)程監(jiān)測(cè)和遠(yuǎn)程故障診斷的web頁(yè)面,用戶通過(guò)鍵入設(shè)備的IP地址,就可以隨時(shí)瀏覽到被監(jiān)測(cè)設(shè)備的現(xiàn)場(chǎng)運(yùn)行情況、數(shù)據(jù)采集信息以及報(bào)警信息等。
2 裝置結(jié)構(gòu)與特點(diǎn)
目前,機(jī)電設(shè)備的狀態(tài)監(jiān)測(cè)與故障診斷的整個(gè)系統(tǒng)結(jié)構(gòu)如圖1所示:
?
本文設(shè)計(jì)開(kāi)發(fā)了此體系的核心裝置——嵌入式機(jī)電設(shè)備監(jiān)控裝置,主要分為3個(gè)模塊:
(1)數(shù)據(jù)采集模塊:包括多個(gè)現(xiàn)場(chǎng)數(shù)據(jù)采集單元。主要完成現(xiàn)場(chǎng)數(shù)據(jù)的檢測(cè)、采集。
(2)數(shù)據(jù)存儲(chǔ)與處理模塊:包括嵌入式現(xiàn)場(chǎng)總線/以太網(wǎng)監(jiān)控工控機(jī)和數(shù)據(jù)庫(kù)。它通過(guò)EtherNet/IP協(xié)議,和現(xiàn)場(chǎng)總線數(shù)據(jù)采集單元進(jìn)行通信,實(shí)現(xiàn)靈敏檢測(cè)和數(shù)據(jù)存儲(chǔ)。
(3)在線監(jiān)測(cè)模塊:包括嵌入式Web服務(wù)器和監(jiān)測(cè)網(wǎng)站。服務(wù)器生成用于遠(yuǎn)程監(jiān)測(cè)和故障診斷的web頁(yè)面。網(wǎng)絡(luò)用戶可以隨時(shí)掌握現(xiàn)場(chǎng)運(yùn)轉(zhuǎn)情況,使遠(yuǎn)程監(jiān)控真正實(shí)現(xiàn)。
本裝置擁有以下三個(gè)先進(jìn)的特征:
1)應(yīng)用工業(yè)以太網(wǎng),使Ethernet/IP設(shè)備和現(xiàn)場(chǎng)設(shè)備能夠通信。為了實(shí)現(xiàn)這個(gè)功能,我們將以太網(wǎng)協(xié)議移植進(jìn)嵌入式Linux。
2)通過(guò)瀏覽器支持機(jī)電設(shè)備狀態(tài)的監(jiān)控。我們?cè)谇度胧絃inux中移植了BOA,設(shè)計(jì)了動(dòng)態(tài)網(wǎng)頁(yè)實(shí)時(shí)監(jiān)控機(jī)電設(shè)備。
3)支持大容量數(shù)據(jù)存儲(chǔ),用一個(gè)黑匣子對(duì)設(shè)備的實(shí)時(shí)數(shù)據(jù)資源進(jìn)行監(jiān)控。通過(guò)大容量IDE總線的擴(kuò)展,連接IDE系統(tǒng)硬盤,存儲(chǔ)大量數(shù)據(jù)[3]。
3 裝置的硬件設(shè)計(jì)
AT91RM9200是ATMEL針對(duì)系統(tǒng)控制及通信領(lǐng)域推出的基于ARM920T內(nèi)核的新微型控制器。它具有獨(dú)立的16KB指令和16KB數(shù)據(jù) cache、全功能的MMU虛擬內(nèi)存管理單元、16KB SRAM和128KB ROM、64MB NAND Flash 存儲(chǔ)器、LCD控制器、EBI 接口控制器、4個(gè)32位的PIO控制器、20通道的外設(shè)數(shù)據(jù)控制器(DMA)、3個(gè)同步串行控制器(SSC)、4個(gè)通用同步/異步接收/發(fā)送器(USART)、主/從串行設(shè)備接口SPI、16路12位ADC、1通道16位DAC、多媒體卡接口(MCI)、以太網(wǎng)10/100 Base-T 以太網(wǎng)媒體訪問(wèn)控制器(MAC)、觸摸屏接口、IDE接口等。
在處理器豐富資源的基礎(chǔ)上,本裝置對(duì)其進(jìn)行了相關(guān)的配置和擴(kuò)展,將處理器通過(guò)16路12位ADC接口對(duì)機(jī)電設(shè)備的電壓或電流信號(hào)進(jìn)行采集,IDE接口外掛大容量IDE硬盤,用于存儲(chǔ)web、采集的數(shù)據(jù)等。通過(guò)DM9161芯片,該微處理器把EMAC接口外擴(kuò)為以太網(wǎng)接口RJ45,與工業(yè)以太網(wǎng)連接 [4]。AT91RM9200通過(guò)SPI接口連接CAN控制器SJA1000,CAN控制器與CAN收發(fā)器PCA82C250相連,用于連接 DeviceNet。硬件結(jié)構(gòu)如圖2所示:
?
4 裝置的軟件架構(gòu)
軟件結(jié)構(gòu)如圖3所示:
?
4.1移植工業(yè)以太網(wǎng)協(xié)議
工業(yè)以太網(wǎng)EtherNet/IP,是一種適用于工業(yè)環(huán)境的通訊體系,能夠在廣闊的區(qū)域中支持大量現(xiàn)場(chǎng)設(shè)備的連接。它采用通用工業(yè)協(xié)議(CIP)作為其應(yīng)用層協(xié)議。CIP協(xié)議支持各種控制、配置和信息處理服務(wù),包括顯式報(bào)文(用于信息傳輸,靈活的報(bào)文交換)以及隱式報(bào)文(用于控制和實(shí)時(shí)I/O數(shù)據(jù)的傳輸),支持輪詢、周期和狀態(tài)改變數(shù)據(jù)傳輸觸發(fā)機(jī)制,點(diǎn)對(duì)點(diǎn)單播和廣播數(shù)據(jù)傳輸方式[5,6]。OE服務(wù)的設(shè)計(jì)簡(jiǎn)化了EtherNet/IP的移植,只需要修改操作環(huán)境文件來(lái)適合ARM Linux操作體系。
4.2 移植BOA
從www.boa.org下載一個(gè)主流版本的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啟動(dòng)時(shí)將加載一個(gè)配置文件boa.conf,在boa程序運(yùn)行前,必須首先編輯該文件。在Boa源碼目錄下已有一個(gè)示例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ù)此配置,需要?jiǎng)?chuàng)建日志文件目錄/var/log/boa,HTML文檔的主目錄/var/www,將靜態(tài)網(wǎng)頁(yè)存入該目錄下,CGI腳本所在目錄/var/www/cgi-bin,將cgi的腳本存放在該目錄下。
4.3 CGI網(wǎng)頁(yè)設(shè)計(jì)
CGI(通用網(wǎng)關(guān)接口)提供Web服務(wù)器一個(gè)執(zhí)行外部程序的通道,這種服務(wù)端技術(shù)建立了Web瀏覽器與Web服務(wù)器之間的交互。首先,瀏覽器將遠(yuǎn)程客戶端發(fā)送的請(qǐng)求送到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語(yǔ)言編寫,并且能夠嵌入HTML腳本。它使用ARM-GCC編譯。CGI程序可以使用GET、POST或直接的URL參數(shù)傳遞方法與遠(yuǎn)程客戶端通信。以下是將采集到的設(shè)備數(shù)據(jù)顯示到網(wǎng)頁(yè)上的一段CGI程序,其中用到的數(shù)據(jù)庫(kù)是SQLite。SQLite是用一個(gè)小型C庫(kù)實(shí)現(xiàn)的一種強(qiáng)有力的嵌入式關(guān)系數(shù)據(jù)庫(kù)管理體制,它在體積與功能之間做到了較好的平衡,是理想的嵌入式數(shù)據(jù)庫(kù)。
#include
#include "sqlite3.h"
main(){
…
sqlite3* p_db;
sqlite3_open("mydb", &p_db);/*打開(kāi)數(shù)據(jù)庫(kù)*/
/*執(zhí)行SQL語(yǔ)句選擇alarm表中的所有記錄,并在查詢結(jié)果的每一行上執(zhí)行回調(diào)函*/
ret=sqlite3_exec(p_db, "select * from alarm;", callback,0, &errmsg);
…
sqlite3_close(p_db); /* 關(guān)閉數(shù)據(jù)庫(kù)*/
}
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動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)
服務(wù)器端為嵌入式ARM,只能運(yùn)行基于TCP/IP協(xié)議的ARM-GCC編譯的Linux下的C++服務(wù)程序,本文使用嵌入式C++實(shí)現(xiàn)的 UDP socket技術(shù)與客戶端通信。客戶端使用flash或Java Applet和服務(wù)程序通信,提供動(dòng)態(tài)網(wǎng)頁(yè)。本文使用flash完成動(dòng)態(tài)刷新,動(dòng)態(tài)刷新采用線程機(jī)制,后臺(tái)數(shù)據(jù)通過(guò)UDP socket技術(shù)與服務(wù)器端通信來(lái)獲取。
服務(wù)器端和客戶端間的通信采用先進(jìn)B/S結(jié)構(gòu),用戶不需要在客戶機(jī)一端安裝診斷軟件即可以在遠(yuǎn)程進(jìn)行設(shè)備的監(jiān)測(cè)與故障診斷,形成一個(gè)開(kāi)放式的遠(yuǎn)程監(jiān)測(cè)與故障診斷系統(tǒng)。基于UDP協(xié)議的Socket通信B/S架構(gòu)如圖4所示:
?
系統(tǒng)動(dòng)態(tài)頁(yè)面如圖5所示:
?
5 結(jié)束語(yǔ)
本文作者創(chuàng)新點(diǎn):將工業(yè)以太網(wǎng)技術(shù)、嵌入式Web Server技術(shù)、CGI技術(shù)、動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)應(yīng)用于嵌入式狀態(tài)監(jiān)測(cè)與故障診斷裝置中,用戶通過(guò) URL就可以隨時(shí)查看現(xiàn)場(chǎng)設(shè)備的運(yùn)行情況和報(bào)警信息,與傳統(tǒng)監(jiān)控裝置相比,提高了監(jiān)控的實(shí)時(shí)性,縮短了檢修時(shí)間,節(jié)省了檢修費(fèi)用,真正實(shí)現(xiàn)了維修制度從事故維修、定期維修向視情維修的轉(zhuǎn)變。
評(píng)論
查看更多