<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 設(shè)計應(yīng)用 > 機泵群智能巡檢系統(tǒng)之?dāng)?shù)據(jù)處理模塊的開發(fā)研究

          機泵群智能巡檢系統(tǒng)之?dāng)?shù)據(jù)處理模塊的開發(fā)研究

          ——
          作者:作者:徐春林 馬波 時間:2007-01-26 來源:《今日電子》 收藏

          引言

          在機泵群智能監(jiān)測預(yù)知維修系統(tǒng)平臺的開發(fā)中,需要對旋轉(zhuǎn)機械設(shè)備的運行狀態(tài)進行診斷。目前國內(nèi)外普遍采用的行之有效的方法是共振解調(diào)法,又稱高頻共振法或包絡(luò)分析法。這就需要將采集的振動信號通過希爾伯特變換進行包絡(luò)。其基本原理為,對采集的振動信號進行解調(diào)處理,獲得富含故障信息的解調(diào)波,通過對此解調(diào)波的振幅和頻譜的分析,從而確定故障發(fā)生的部位。
          整個的系統(tǒng)開發(fā)是在Visual C++平臺上實現(xiàn)的,然而Visual C++在數(shù)據(jù)處理上遠不如MATLAB方便、快捷,所以在編寫VC++應(yīng)用程序時,為了利用MATLAB的強大的數(shù)值計算和處理功能來完成信號處理,采用了MATLAB的C++數(shù)學(xué)庫來進行計算。

          VC++中調(diào)用MATLAB函數(shù)

          MATLAB中的大多數(shù)函數(shù)都是基于MATLAB的數(shù)學(xué)庫函數(shù),若數(shù)學(xué)庫中沒有需要的函數(shù),則通過編寫.m文件,并調(diào)用數(shù)學(xué)庫中相應(yīng)的函數(shù)來實現(xiàn)。Matlab的數(shù)學(xué)庫可以把大部分.m文件寫成應(yīng)用程序編譯成可執(zhí)行的exe程序,脫離MATLAB環(huán)境,也可以通過mcc編譯為C/C++文件。

          在使用MATLAB函數(shù)過程中,存在兩種情況,一是數(shù)學(xué)庫中有的函數(shù),二是數(shù)學(xué)庫中沒有的函數(shù)。下面對這兩種情況進行分別介紹。

          ● 調(diào)用數(shù)學(xué)庫中的函數(shù)

          在VC++中調(diào)用數(shù)學(xué)庫中的函數(shù)可以進行直接的調(diào)用。但是由于MATLAB和C++之間的調(diào)用方式不盡相同。在MATLAB中的變量都是數(shù)組形式,因而VC++中調(diào)用都是通過MATLAB中的mwArray類型變量來進行賦值和傳遞變量的。一般使用的轉(zhuǎn)換函數(shù)有hozcat、row2cat、ExtractScalar和ExtractData等。

          在調(diào)用MATLAB數(shù)學(xué)庫函數(shù)的VC++文件中加入頭文件“matlab.hpp”,就可以直接使用MATLAB數(shù)學(xué)庫函數(shù),其方式與使用VC++中的函數(shù)相同,只是傳遞的參數(shù)類型不同。還需要對VC++環(huán)境和工程進行設(shè)置。

          ● 調(diào)用數(shù)學(xué)庫沒有的函數(shù)

          MATLAB數(shù)學(xué)庫中沒有的函數(shù)基本上都是.m文件。調(diào)用這些函數(shù)時,要使用mcc-t-L Cpp name把.m文件編譯為相應(yīng)的.hpp和.cpp文件。把生成的相應(yīng).hpp和.cpp文件加入到VC++工程中,在工程中使用這個函數(shù)的文件中加入相應(yīng)的頭文件(.hpp文件)。

          在MATLAB中大部分.m文件不是獨立的,有許多一個.m文件中嵌套調(diào)用別的.m文件。在這種情況下,需要把在這個.m文件中嵌套調(diào)用的其他.m文件代碼復(fù)制到這個.m文件。總之,在這個.m文件沒有嵌套調(diào)用別的.m文件,僅僅只有數(shù)學(xué)庫中函數(shù)和一些基本算法,是個獨立的.m文件。有一點需要注意的是,將所需要的函數(shù)的在這個.m文件中的部分代碼,一定要放到最前面,即在這個.m文件中可能包括多個子程序。

          如果不知道這個.m文件中是否調(diào)用了別的.m文件,通過mcc編譯即可被發(fā)現(xiàn)。沒有調(diào)用其他.m文件的文件,編譯后只生成以這個文件命名的.hpp和.cpp文件,而如果調(diào)用了其他.m文件,則生成三個文件,分別是以這個文件命名的.hpp、.cpp文件和嵌套調(diào)用的那個.m文件命名的.hpp文件。

          本文引用地址:http://www.ex-cimer.com/article/20943.htm

          如何脫離MATLAB環(huán)境運行

          上面介紹了VC++中調(diào)用MATLAB函數(shù)的方法,此時應(yīng)用程序需要和MATLAB環(huán)境同時運行,并且通過MATLAB的執(zhí)行程序路徑,調(diào)用了MATLAB的動態(tài)連接庫,實際上并沒有完全脫離MATLAB,這是由于mcc功能上的限制。

          如何真正脫離MATLAB呢?MATLAB提供了一個發(fā)行程序包,位于externlibwin32 mglinstaller.exe,執(zhí)行它后將在指定目錄下解壓縮出bin和toolbox兩個子目錄,其中在binwin32目錄下就是數(shù)學(xué)庫和圖形庫脫離MATLAB運行所需的所有動態(tài)連接庫,共有37個。重新啟動之后,應(yīng)用程序就可以在沒有安裝MATLAB的環(huán)境下運行了。

          應(yīng)用例程

          在機泵群智能監(jiān)測預(yù)知維修系統(tǒng)平臺的開發(fā)中,利用共振解調(diào)技術(shù)對設(shè)備振動的低頻沖擊所激起的高頻共振波進行包絡(luò)檢波和低通濾波,即解調(diào),獲得一個對應(yīng)于低頻沖擊的,而又放大并展寬了的共振解調(diào)波;通過此共振解調(diào)波的幅值和頻譜分析,就可以在故障特征頻率及其倍頻處看到清晰的譜峰,而不含故障沖擊的信號缺不會在共振解調(diào)波的頻譜圖中出現(xiàn)譜峰,因此很容易確定故障發(fā)生的部位。

          由上所述,在系統(tǒng)開發(fā)的數(shù)據(jù)處理中,需要對采集的振動信號進行包絡(luò)分析,這一數(shù)據(jù)分析過程是通過調(diào)用MATLAB中的希爾伯特變換函數(shù)來實現(xiàn)。
          建立的工程文件名為Test。

          (1)在MATLAB的安裝目錄下找到hilbert.m文件和shiftdim.m文件(hilbert.m文件中嵌套調(diào)用了shiftdim),然后在shiftm.m文件中的代碼復(fù)制到hilbert.m文件中,并另存為hilbert1.m文件。

          (2)在MATLAB的Command Window下使用命令mcc -t -L Cpp hilbert1,生成hilbert1.hpp和hilbert1.cpp兩個文件,編譯完后生成的函數(shù)名就是hilbert1(即文件名)。

          (3)在VC++中建立工程test,并按照2.1中進行相關(guān)設(shè)置,使用hibert1函數(shù)
          #include "stdafx.h"
          #include "matlab.hpp"
          #include "hilbert1.hpp"
          void mccDemo()
          {mwArray m3,m1,m2,t1;
          double *dd=new double[1024];
          double *d2=new double[1024];
          for(int i=1;i<=1024;i++)
          t[i]=i/1000.0;
          t1=row2mat(1,1024,t);//把生成的時間序列賦給mwArray數(shù)組變量
          m1=100*sin(50*t1);
          m1.ExtractData(dd);
          m3=hilbert1(m1,1024);//進行希爾伯特變換
          m2=abs(m3); //MATLAB數(shù)學(xué)庫函數(shù),進行求模運算
          m2.ExtractData(d2); //把mwArray的數(shù)據(jù)轉(zhuǎn)換為double數(shù)組中
          delete dd;
          delete d2;
          }

          運行結(jié)果如圖1所示,軸承振動信號的包絡(luò)幅值譜圖。測點的轉(zhuǎn)速頻率為15Hz,當(dāng)軸承內(nèi)圈有故障時,該軸承的采樣信號的時域波形經(jīng)包絡(luò)分析后,對其進行相應(yīng)的頻譜分析,得出軸承的內(nèi)圈故障特征頻率。其中,對時域波形的包絡(luò)分析,就是通過上述的調(diào)用過程實現(xiàn)的。

          從圖1可以看出最大幅值處的頻率為88.87Hz,而理論上,用特征頻率計算公式求得的故障特征頻率為88.6Hz。因此,可以說明此方法是可行的。

          結(jié)論

          利用VC++來完成智能巡檢系統(tǒng)的界面設(shè)計、數(shù)據(jù)管理、底層I/O等功能,而利用MATLAB來完成數(shù)據(jù)處理分析核心算法的設(shè)計,兩者的有機結(jié)合降低了程序的開發(fā)難度和周期,提高了開發(fā)效率。該方法對其他領(lǐng)域如系統(tǒng)仿真、圖像處理等專業(yè)領(lǐng)域也有很強的指導(dǎo)意義和推廣價值。

          c++相關(guān)文章:c++教程




          關(guān)鍵詞: 模塊

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();