摘 要:本文提出了一套Intranet下旋轉機械監測與故障診斷系統的開發方案。整套系統在Visual C++環境下開發,集成了DAQ采集、網絡、數據庫、多線程技術,實現了高速實時數據采集、現場監測、信號分析、故障診斷以及網絡通訊等多項功能。本文提出了用Matlab數學函數庫接口實現信號處理的方法。實踐證明,將這種方法用于故障診斷系統開發,能夠使系統開發更加高效,工作性能更加穩定。目前整套系統已在錦州石化旋轉機組中投入監測運行,具有工程實際應用價值。
關鍵詞:故障診斷;數據采集;信號處理;多線程
1前言
旋轉機械是大型企業生產的關鍵部件,現代化生產在功率、速度、機械性能、自動化水平、可靠性、安全性等方面對它提出了越來越高的要求。將故障診斷技術應用在旋轉機械生產中,將有效的降低生產過程中的故障發生率,對于故障預防以及故障發生后的維修具有相當的指導意義。資料表明:在采用診斷技術后,生產事故率減少了75%,維修費用降低了25%~50%。大大的提高了企業的經濟效益[1]。
旋轉機械故障診斷與監測系統的開發涉及到傳感器技術、數據采集處理與信號分析技術、故障機理的研究、診斷方法的研究等多方面的知識。可以說是一門跨學科,跨領域的綜合系統的開發。而現在以TCP/IP模型為代表的迅猛發展的網絡技術,為故障診斷系統注入了新鮮血液同時,也為故障診斷系統的設計者提出了新的要求。網絡的加入使故障診斷系統從總體的工作模式設計,到數據的共享傳輸方式的選擇,都產生了革命性的發展。因此在企業內部網Intranet下開發出一套完善、高效的故障診斷系統對企業效益的提高具有深遠的意義。
2總體設計
故障診斷與監測系統經過了離線、單機版以及分布式診斷的發展過程。而分布式診斷又分為B/S、C/S兩種工作模式。從靈活性、經濟性、針對性、可靠性、安全性、推廣度等等多方面考慮,可以說各種診斷模型都具有各自的特點。在企業內部Intranet下,考慮到系統的復雜功能要求、安全性、可靠性,以及現今國內分布式故障診斷系統的發展規模、發展程度,本套系統采用了C/S模式的診斷工作模型。機組運行數據經過現場計算機采集處理之后通過車間監控室的網絡交換機接入企業內部網,傳給各職能部門。這樣,企業的管理決策和檢修技術人員在辦公室內就可以通過與網絡連接的計算機及時的了解現場機組的運行狀況,做出相應決策。同時通過企業內部網關設置,系統也可以將診斷系統延伸到Internet診斷節點中,這樣既考慮了安全性,又達到了診斷系統的空間擴充。
3功能設計
C/S 模式下,易于設計出功能復雜,針對性、可靠性強的診斷、檢測系統。其中服務器端運行于現場計算機,采用多線程技術,主要完成數據采集、狀態監測、系統管理以及實現數據服務器功能,滿足同時向多個客戶端傳輸數據的要求。基本功能模塊包括:數據采集、狀態監測、趨勢分析、系統管理和網絡通訊等模塊。客戶端軟件運行于各職能部門的計算機,具有網絡通訊、狀態監測和分析診斷等功能,基本功能模塊包括:數據管理、狀態監測、趨勢分析、信號分析、故障診斷和網絡通訊等。同樣,客戶端也可以同時連接多個服務器,實現企業內部的網狀互連。達到故障監測診斷的面式結構。服務器、客戶端具體功能如圖1所示。

l 數據采集:與服務器的其它功能實現并行操作,完成溫度、轉速、振動以及間相數據的高速實時采集,并實現采集參數(如:靈敏度,上下限,衰減系數)的動態配置。具體內容見下文數據采集節。
l 狀態監測:完成實時圖以及峰峰圖的動態顯示。提供報警提示,以及報警數據的自動記錄功能。
l 信號處理:利用Matlab C/C++數學函數庫實現各種時域、頻域的信號分析,包括:時域波形、FFT頻譜、自功率譜、互功率譜、倒譜、全息譜、自相關分析、互相關分析、相干函數、時間譜陣、Wigner時頻分布、濾波軸心軌跡和重構軸心軌跡、轉速譜陣等等信號處理功能。
l 趨勢分析:采用自回歸分析方法進行趨勢預測。根據其歷史數據來推斷缺陷的發展速度與趨勢,其目的是為早期判定故障提供一個有效的手段。
l 故障診斷:系統診斷分為自動診斷和人機交互診斷兩種方式。自動診斷利用振動信號的頻譜結構識別故障,將診斷對象振動信號的頻譜與標準故障樣本的頻譜進行比較,根據之間的相似程度得出診斷結論。人機交互診斷利用專業工作人員的經驗,根據信號處理的分析結果,由人工選擇故障征兆,依據最優診斷規則識別故障。診斷規則由實際診斷案例以及專家總結形成,經過基于廣義粗糙集理論的約簡處理產生,其中涵蓋了亞異步、同步和超異步等三大類共32種常見故障。
l 網絡通訊:網絡服務器包括實時數據服務器,趨勢分析數據服務器,歷史文件數據服務器。客戶端可以動態下載服務器文件列表,并顯示在樹控件中。整套通訊系統,在VisualC++環境下采用多線程技術與Socket編程相結合開發。具體內容見下文網絡通訊與多線程一節
l 系統管理:此模塊包括數據管理、安全管理、服務器管理三項功能。數據管理可以完成對歷史數據的自動刪除功能,以及實現正常數據保存天數、報警數據保存次數的設置;安全管理包括用戶權限管理、密碼管理、注冊管理等等功能;服務器管理主要實現服務器IP地址,通訊端口的動態設置,服務器狀態的實時管理等幾項功能。根據數據庫的規模,以及系統要求實現的功能,整個模塊后臺選擇了Microsoft Access數據庫統一管理。由于Access數據庫是基于Microsoft Jet引擎建立的,所以在這里又選擇了微軟推出的用于在VisualC++中訪問數據庫文件的DAO技術,實現數據的快速訪問與存取。
l 報表打印及聯機幫助:系統根據監測模塊可以自動完成報表的監測數據統計工作。同時利用信號分析模塊的分析結果可產生圖形化的分析報表。整個報表生成過程中大部分由系統自動完成,操作方便,直觀。聯機幫助系統,采用統一的RTF格式文件,經過Microsoft Help Workshop工具編譯后生成。其中實現了主題查詢、關鍵字索引等功能。幫助文件內容包括了系統信息、操作方法以及一些基本技術原理介紹。
整個系統采用了友好的用戶界面,操作簡便、直觀,方式多樣。其中集合了數據采集技術、多線程技術、Socket網絡編程技術、數據庫存取技術、COM技術。具有針對性強、功能完善等特點。下文將以數據采集、信號處理、網絡通訊模塊為例,討論具體模塊功能以及模塊實現的技術細節。
4技術細節
(1)數據采集
隨著數字技術快速發展,數據采集技術已向著并行、高速、大量存儲、實時分析處理、集成化等方向發展。同時數據采集也是整個系統信息元工作的源頭。通過這個部分模塊,系統可以將采得的數據進行信號分析、趨勢分析、故障診斷,并作為信息載體在整個Intranet中進行發布。整個系統采樣硬件部分的具體配置如下:
l 傳感器系統:充分利用機組已經配備的監測儀表和傳感器系統,如Bently電渦流傳感器、轉速計和溫度傳感器等。
l 采樣系統:本系統采用National Instruments (美國NI儀器公司,簡稱NI公司)的PCI總線E系列多功能DAQ數據采集板卡,采集卡型號為6071E。其提供了多達64路單端,32路差分模擬輸入以及12位模擬輸入精度等的優異性能。
l 現場計算機:采用性能可靠的工業控制計算機。
系統將傳感器測得的轉子徑向振動、軸向振動、轉速、鍵相和軸瓦溫度等模擬信號,通過現場監測儀表的1-5V或4-20mA標準信號接口與現場工業計算機上的多通道高速A/D采樣卡連接,這中間通過了信號抗干擾,功率縮放等步驟,將采集到的數據準確安全的送入現場工控機。采集系統具體硬件布置如圖2所示。

工業生產過程中,現場條件惡劣,機器運轉過程中產生的振動、溫度信號受到了四周環境的影響。因而對故障信息的完全提取需要高的采樣率的保證。只有這樣才能將機器運轉的特征如實的反映到監測系統中。同時,要做到故障的完全跟蹤,對某一時刻采樣信息的深入提取還是不夠的,這還需要我們在整個時域中對機器運轉進行廣度監測。因此實時采集也成為了故障信息提取的決定因素之一。現代采集技術中,觸發A/D轉換有軟件觸發、定時器同步觸發及外部觸發三種方式。而數據的傳輸方式有軟件查詢、中斷方式、DMA方式及FIFO方式[2]。以研華PCL1800采樣卡為例,四種數據傳輸的速率比較如下:軟件查詢(10-20kHz);中斷方式(10-30KHz);DMA方式(200KHz);FIFO方式(330KHz)。高速連續數據采集的情況下,考慮到整個系統的性價比后,我們利用6071E快速離散式DMA技術將定時器同步觸發與FIFO數據傳輸方式相結合,使得處理器從DAQ板卡的事件中解放出來。實踐證明,這種方法將大大提高系統的采樣頻率和數據的可靠性,同時也改善了WINDOWS環境下實時數據采集中整個系統的性能。
采樣部分軟件設計從整個系統的開發效率以及工作性能出發,利用NI公司提供的API函數:NI-DAQ Function,在Visual C++語言中進行高速的信號采集,使整個系統最高采樣達到了1.25M/s的速度,為后續的開發分析奠定了基礎。
(2)信號處理
系統信號處理部分采用C++與MathWorks公司推出的科學計算軟件MATLAB完成。
MATLAB是MathWorks公司推出的功能強大的科學計算軟件,具有高速的運算能力以及穩定安全的算法庫,目前其在許多學科領域都得到了應用。其開放的軟件體系為Matlab與其它工具語言的協同工作提供了可能。通過MEX文件,在Matlab環境中可以調用C、C++或Fortran語言編寫的程序;MAT文件提供了Matlab與其它應用程序之間數據交換的途徑;而Matlab ActiveX技術則實現了Matlab與其它應用程序之間客戶機、服務器的工作模式,利用啟動的Matlab進程,可以將Matlab作為一個計算引擎服務器,在其他程序中直接調用[3]。但以上三種方法具有一個共同的缺點,那就是他們的工作都脫離不了Matlab軟件環境,這對于發布式的應用軟件是一個致命的弱點。為克服這一缺點并提高數據處理或程序開發的效率,本套系統選擇了Matlab 為C/C++語言提供的數學函數庫接口。Matlab數學函數庫提供了大量高效的數學函數,尤其在復雜矩陣計算處理方面更加出色。通過Matlab C/C++數學函數庫,在C或C++程序中調用Matlab C/C++數學庫函數。從整體性能上講采用這種方式提高了算法設計速度,縮短程序開發周期,使開發方式靈活、獨立,并且顯著的提高了程序性能以及穩定性,保證了程序運行的健壯性。下面以一維快速Fourier變換為例,說明在C++環境中對Matlab C/C++數學庫函數的調用方法。
#include "matlab.h"
/*
* 函數介紹:通過Matlab數學函數將輸入數據進行傅立葉變換后輸出
* 輸入參數:double dDataIn 變換前輸入數據
* 輸出參數:double dDataOut 變換后輸出數據
* 返回值 :無
*/
void CFuction::FFT(double dDataIn[], double dDataOut[], int iNum)
{
mlfEnterNewContext(0,0);//建立內存上下文
double *fpAbs;
mxArray *mxpArray=NULL;
mxArray *mxpFft=NULL;
mxArray *mxpAbs=NULL;
//建立陣列變量
mlfAssign(&mxpArray,mlfDoubleMatrix(iNum,1,dDataIn,NULL));//由輸入數據構造陣列
mlfAssign(&mxpFft,mlfFft(mxpArray,NULL,NULL));//傅立葉計算
mlfAssign(&mxpAbs,mlfAbs(mxpFft));
//得到傅里葉變換后模值
fpAbs=mxGetPr(mxpAbs);//模值實部
for(i=0;i
{
dDataOut[i]=(*fpabs)/N;
fpAbs++;
}//end of if
mlfRestorePreviousContext(0,0);
//導入原內存上下文
mxDestroyArray(mxpAbs);//數組銷毀
mxDestroyArray(mxpArray); //數組銷毀
mxDestroyArray(mxpFft); //數組銷毀
return;
}
圖3為FFT頻譜曲線圖,是現場采樣數據經過Matlab C/C++數學庫函數處理后,在診斷系統中自動生成特征曲線圖。

可見,采用這種技術對程序運行穩定性、結果正確性都提供了有利的保障。本系統通過C++語言與Matlab C/C++數學庫函數的結合,在信號處理組件部分實現了時域波形、FFT頻譜、自功率譜、互功率譜、倒譜、全息譜、自相關分析、互相關分析、相干函數、時間譜陣、Wigner時頻分布、濾波軸心軌跡和重構軸心軌跡、轉速譜陣等等信號處理分析。
(3)網絡通訊與多線程
在Windows操作系統環境下,服務器軟件有三種技術可以并發處理來自多個客戶機的服務請求:多線程、消息驅動和循環處理。其中多線程編程最直接,32位的Windows操作系統提供了多任務的管理,這樣,服務器端程序能夠為每個請求服務的客戶機創建一個或多個任務線程,以便同時處理多項任務。消息驅動和循環處理只需要一個線程,節省了多線程間上下文切換的CPU開銷。同時它們也可以解決使用單任務線程同時處理多個客戶機請求的問題。在消息驅動方式中,請求到來時,系統分發特定的消息,服務器捕捉到該消息后,觸發消息響應程序;而在循環處理方式中,程序主動循環查詢系統是否收到客戶機的請求,為防止線程阻塞,可以采用異步I/O調用,以便同時進行其它的處理。但是循環處理和消息驅動兩種方式在滿足多任務的前提下,卻破壞了程序執行的自然邏輯順序。循環處理程序,為了及時響應客戶機的請求,代碼使用了異步接收和發送數據的辦法,把長的傳輸間隔分成小的時間片,并且有人機交互時還要不停的查詢鍵盤、鼠標等輸入設備。這樣就破壞了程序的自然的邏輯順序。而消息驅動方式也無法預知消息出現的時間,同樣也保證不了程序自然的邏輯結構,很難將代碼實際運行的次序確定下來。根據故障診斷程序的多任務,大處理器、IO需求的特點,本系統采用并發式TCP方式作為服務器程序。首先建立各數據服務器的監聽線程。這樣一個處理客戶機請求的線程在收到完整的請求前能夠一直保持阻塞狀態,而不必擔心會妨礙對服務器其它模塊運行的處理。同時各線程內部采用消息循環機制,實現用戶請求的消息驅動。當收到請求后,監聽線程立刻創建連接線程,為客戶請求提供服務。同時監聽線程阻塞返回,繼續監聽其它客戶請求。連接線程完成客戶服務后,自動關閉連接。這樣就完成了一個用戶請求循環。
在VisualC++環境中,線程內部如果需要提供消息驅動支持,那么必須啟動用戶界面線程,這里系統為歷史數據服務器、實時數據服務器以及趨勢分析服務器各建立了一個用戶界面監聽線程。建立線程同時將各線程界面隱藏,這樣就實現了各服務器同時阻塞監聽,而線程內部消息驅動的設計要求。
本系統網絡傳輸部分采用Windows Sockets[4]規范編寫。首先,客戶機和服務器都創建一個套接字。接著服務器調用bind()函數給套接字分配一個公用的端口。這樣客戶機和服務器就能夠使用同樣的端口來表示服務器套接字。一旦客戶機與服務器建立了連接,就能夠使用send()函數向服務器發送數據、信息。同樣服務器也能夠使用send()和recv()函數來傳遞數據,直到完成通訊。最后調用closesocket( )來關閉套接字,完成信息傳遞。
5結束語
故障監測、診斷系統開發涉及到廣闊的學科領域知識。本系統采用了外部程序接口完成了采樣以及分析模塊,并在通訊方面滲透了多線程以及網絡編程技術,從而高效的開發出了一套功能強大的分布式監測、診斷系統。本系統已在石油企業中長期運行,性能以及穩定性都得到了檢驗。今后,可以建立監測、診斷系統標準,將各個診斷系統連接起來,最終形成統一的大規模故障監測、診斷網,指導工程生產。
參考文獻
1 施圣康. 汽輪發電機組振動故障診斷技術的發展現狀[J]. 動力工程,2001,21(4) :1295-1298
2 吳道虎,王緒軍. 具有高可靠性的高速連續數據采集的設計與實施方法[J]. 電子技術應用,2002,6:13-15
3 劉志儉,潘獻飛,連軍想. Matlab外部程序接口[M]. 北京:科學出版社, 2002
4 汪濮陽. 因特網應用編程[M]. 北京:清華大學出版社, 2000