摘 要:將工業(yè)以太網(wǎng)技術(shù)應(yīng)用于工業(yè)設(shè)備監(jiān)控系統(tǒng),實現(xiàn)了基于32位高性能處理器AT91RM9200的嵌入式遠(yuǎn)程狀態(tài)監(jiān)測與故障診斷裝置,它是機(jī)電設(shè)備狀態(tài)監(jiān)測與故障診斷系統(tǒng)的核心部分。該裝置通過工業(yè)以太網(wǎng)協(xié)議(EtherNet/IP)來實現(xiàn)DeviceNet和以太網(wǎng)的連接,移植linux和boa建立了基于網(wǎng)關(guān)的網(wǎng)絡(luò)服務(wù)器,采用動態(tài)網(wǎng)頁技術(shù)和B/S架構(gòu)的UDP Socket通信技術(shù)來實現(xiàn)動態(tài)實時的網(wǎng)頁顯示。
關(guān)鍵詞:狀態(tài)監(jiān)測;AT91RM9200;工業(yè)以太網(wǎng);BOA;動態(tài)網(wǎng)頁
[b][align=center]Design of the Embedded State Monitoring and Fault Diagnosing Instrument
XIA Ting,WANG Na,MIN Hua-song[/align][/b]
Abstract: The embedded statement monitoring and fault diagnosing instrument based on 32bit high performance microprocessor AT91RM9200 is implemented by appling Industrial Ethernet structure to industrial equipment monitoring and control system. It is the core of the monitoring and diagnosing system. Ethernet/IP protocol is ported to realize the connection between DeviceNet and Ethernet, Linux and BOA is ported to set up a web server on the gateway and dynamic web page technology and UDP Socket communication technology is adopted to realize real-time web display. The B/S architecture is adopted.
Keywords: state monitoring; AT91RM9200; EtherNet/IP; BOA; dynamic web page
1 引 言
傳統(tǒng)的狀態(tài)監(jiān)測與故障診斷裝置通常采用現(xiàn)場總線方式,但此方式具有很大局限性:現(xiàn)場總線類型多樣,相互之間差異較大,不能實現(xiàn)互操作,彼此連接困難,系統(tǒng)的信息共享和實時性不盡如人意。為了更好地搭起終端設(shè)備和遠(yuǎn)程監(jiān)控系統(tǒng)通信的橋梁,本文提出并設(shè)計了基于工業(yè)以太網(wǎng)的嵌入式狀態(tài)監(jiān)測與故障診斷裝置,和傳統(tǒng)裝置相比,它有以下優(yōu)勢:實現(xiàn)了系統(tǒng)的高效、統(tǒng)一;用戶可以通過Internet隨時隨地監(jiān)控大范圍的終端設(shè)備,取代了大量前置PC,具有更好的實時、實效性[1,2]。本裝置將現(xiàn)場采集到的實時數(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ù)采集信息以及報警信息等。
2 裝置結(jié)構(gòu)與特點
目前,機(jī)電設(shè)備的狀態(tài)監(jiān)測與故障診斷的整個系統(tǒng)結(jié)構(gòu)如圖1所示:
[align=center]
圖1 嵌入式狀態(tài)監(jiān)測與故障診斷系統(tǒng)結(jié)構(gòu)[/align]
本文設(shè)計開發(fā)了此體系的核心裝置——嵌入式機(jī)電設(shè)備監(jiān)控裝置,主要分為3個模塊:
(1)數(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)行通信,實現(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)控真正實現(xiàn)。
本裝置擁有以下三個先進(jìn)的特征:
1)應(yīng)用工業(yè)以太網(wǎng),使Ethernet/IP設(shè)備和現(xiàn)場設(shè)備能夠通信。為了實現(xiàn)這個功能,我們將以太網(wǎng)協(xié)議移植進(jìn)嵌入式Linux。
2)通過瀏覽器支持機(jī)電設(shè)備狀態(tài)的監(jiān)控。我們在嵌入式Linux中移植了BOA,設(shè)計了動態(tài)網(wǎng)頁實時監(jiān)控機(jī)電設(shè)備。
3)支持大容量數(shù)據(jù)存儲,用一個黑匣子對設(shè)備的實時數(shù)據(jù)資源進(jìn)行監(jiān)控。通過大容量IDE總線的擴(kuò)展,連接IDE系統(tǒng)硬盤,存儲大量數(shù)據(jù)[3]。
3 裝置的硬件設(shè)計
AT91RM9200是ATMEL針對系統(tǒng)控制及通信領(lǐng)域推出的基于ARM920T內(nèi)核的新微型控制器。它具有獨立的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所示:
[align=center]
圖2 硬件結(jié)構(gòu)圖[/align]
4 裝置的軟件架構(gòu)
軟件結(jié)構(gòu)如圖3所示:
[align=center]
圖3 軟件架構(gòu)圖[/align]
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ù),包括顯式報文(用于信息傳輸,靈活的報文交換)以及隱式報文(用于控制和實時I/O數(shù)據(jù)的傳輸),支持輪詢、周期和狀態(tài)改變數(shù)據(jù)傳輸觸發(fā)機(jī)制,點對點單播和廣播數(shù)據(jù)傳輸方式[5,6]。OE服務(wù)的設(shè)計簡化了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文件,因為我們要編譯的是基于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è)計
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庫實現(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_exec(p_db, "select * from alarm;", callback,0, &errmsg);
…
sqlite3_close(p_db); /* 關(guān)閉數(shù)據(jù)庫*/
}
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++實現(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)。基于UDP協(xié)議的Socket通信B/S架構(gòu)如圖4所示:
[align=center]
圖4 UDP Socket通信B/S架構(gòu)[/align]
系統(tǒng)動態(tài)頁面如圖5所示:
[align=center]
圖5 狀態(tài)監(jiān)測與故障診斷系統(tǒng)主界面[/align]
5 結(jié)束語
本文作者創(chuàng)新點:將工業(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)行情況和報警信息,與傳統(tǒng)監(jiān)控裝置相比,提高了監(jiān)控的實時性,縮短了檢修時間,節(jié)省了檢修費(fèi)用,真正實現(xiàn)了維修制度從事故維修、定期維修向視情維修的轉(zhuǎn)變。
參考文獻(xiàn)
[1] 王堅,張浩,嚴(yán)雋薇,等.基于Internet/lntranet的數(shù)字化遠(yuǎn)程故障診斷系統(tǒng)[J].計算機(jī)工程,2000,26(10):28-29
[2] 金真,唐明浩,蔣琳.Internet遠(yuǎn)程監(jiān)控系統(tǒng)的嵌入式實現(xiàn)方法[J].計算機(jī)工程2006.1(32):245-247
[3] 胡昌林,劉鵬遠(yuǎn),李永軍,魏保華.某裝備狀態(tài)監(jiān)測與故障預(yù)測系統(tǒng)總體設(shè)計[J].微計算機(jī)信息,2006,22(9-1):189-191
[4] ATMEL.ARM920TTM-based Microcontroller AT91RM9200 User’s Mannual[R].August 2003.
[5] Rinaldi,John.EtherNet/IP–An application-layer protocol for industial automation[J]. Sensors(Peterborough,NH),May,2003,20(5):43-45.