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