施金花,王 斌,張鑫彬,李文頂
(上海航天技術(shù)研究院第803研究所,上海 200233)
伺服機(jī)構(gòu)工作需要有一定的供油壓力,由于液壓泵供油能力有限,采用平常的連續(xù)頻率掃描測試方法無法保證伺服機(jī)構(gòu)正常工作,現(xiàn)多采用逐個加不同頻率的正弦波信號,待一個頻率的信號結(jié)束后伺服機(jī)構(gòu)回歸零位,供油壓力恢復(fù)正常時再給定下一個頻率的正弦波信號。伺服機(jī)構(gòu)存在零偏,功放電流限制等非線性因素,在工程應(yīng)用中根據(jù)各頻率點的輸入信號和反饋信號計算出幅值和相位。由于對反饋信號采用濾波處理會降低反饋的幅值,所以本文將各頻率點的反饋信號直接擬合成一階正弦函數(shù)形式,再根據(jù)輸入信號計算出幅值和相位以及零偏。在VB.NET 軟件測試程序中,編寫反饋信號的擬合函數(shù)顯然費時費力,而MATLAB 具有強(qiáng)大的計算功能,并且具有專門的曲線擬合工具箱。為提高程序的效率和質(zhì)量,本文將MATLAB擬合函數(shù)以COM組件的形式實現(xiàn)供VB.NET調(diào)用。
VB與MATLAB混合編程的方法有多種,包括應(yīng)用ActiveX 技術(shù)、應(yīng)用DDE 技術(shù)以及使用MatrixVB 等,但是這些技術(shù)都不能脫離MATLAB 運行環(huán)境[1]。為了使混合編程方法能夠脫離MATLAB運行環(huán)境,也能夠供其他編程語言調(diào)用,本文采用生成COM 組件的方法供VB.NET 調(diào)用,從下文可以看出此方法生成過程簡單,并且便于模塊化。
測試伺服機(jī)構(gòu)幅頻特性需要不同頻率的正弦信號,模擬幅值為1 V,頻率為4 Hz 的三個正弦波輸入信號及其得到的反饋信號,如圖1所示。
圖1 一個頻率段內(nèi)伺服機(jī)構(gòu)輸入和反饋信號
從圖1 可以看出,伺服機(jī)構(gòu)反饋信號受伺服機(jī)構(gòu)本身非線性特性、采集卡、電氣干擾等影響,輸出曲線并不是非常光滑,在讀取反饋信號幅值以及相位滯后時會有較大偏差,因此需要對反饋信號進(jìn)行光滑處理。采用濾波的方法可以使反饋信號趨于平滑,但同時會使幅值產(chǎn)生衰減,對結(jié)果分析會產(chǎn)生大的偏差。本文將反饋信號擬合成一階正弦函數(shù)的形式得出幅值,再與原信號相比得出相位滯后。
圖1所示函數(shù)為分段函數(shù),需用VB.NET將中間的反饋信號提取出來進(jìn)行擬合,提取出的曲線如圖2所示,然后與原信號相比得出幅值和相位。
圖2 提取的輸入和反饋信號
MATLAB 擬合函數(shù)非常簡單,可以用短短幾行語句實現(xiàn),語句如下:
myfit 函數(shù)是將反饋信號擬合成a sin(ωx+φ)+a0的形式。由于MATLAB函數(shù)在計算中有虛數(shù)的概念,所以需將返回值轉(zhuǎn)換成實數(shù)以便VB.NET調(diào)用。將圖2所示反饋信號曲線擬合后得到的曲線如圖3(a)所示,從圖3 可以看出,擬合曲線幅值與反饋曲線一致性相對較好,相位相對比實際反饋曲線超前,究其原因是由于反饋信號在第一個波形還未達(dá)到穩(wěn)定時就對其進(jìn)行了擬合,導(dǎo)致擬合出的相位超前。至此可以改進(jìn)算法,從第二個波形開始擬合,擬合出的曲線如圖3(b)所示,不難看出圖3(b)擬合效果要比圖3(a)好很多,表1 給出了擬合曲線幅頻特性的相位值與精準(zhǔn)值的比較。
將上述MATLAB函數(shù)保存為myfit.m文件,利用deploytool 命令生成工程名為fupin.prj、類名為Class fupin、函數(shù)名為myfit 的通用COM 組件,當(dāng)函數(shù)編譯正確后會在相對路徑的distrib 文件出現(xiàn)名為fupin_1_0.dll 的文件,至此COM 組件就成功生成。
點擊“項目”菜單,選擇“添加引用”,通過“瀏覽”選擇生成的fupin.dll。這樣COM組件就添加到程序中。
在VB.NET 中如果用一維數(shù)組變量存取反饋時間和反饋信號的值,則在MATLAB編寫function函數(shù)時應(yīng)注意將輸入形參進(jìn)行轉(zhuǎn)置后進(jìn)行計算,因為MATLAB 軟件在數(shù)組存儲上是列優(yōu)先原則,會將VB.NET 的一維向量看成是一維列向量進(jìn)行處理。
圖3 反饋曲線與擬合曲線比較
表1 擬合曲線幅頻相位與標(biāo)準(zhǔn)值比較
上述程序是反饋信號從第二個波形開始將一維數(shù)組變量array1 存儲反饋時間,一維數(shù)組變量arrayy 存儲反饋信號,應(yīng)注意array1 向量與arrayy向量的長度相等。輸出的幅值、相位及零偏分別存入變量A,fai,a0中。
本程序運行結(jié)果如圖4 所示,實際的伺服機(jī)構(gòu)測試程序中在不同正弦波輸入頻率下反復(fù)調(diào)用COM 組件函數(shù),可以得到在不同頻率下的幅頻值與相位??梢姶藬M合函數(shù)具有通用性,此外也方便其他程序(如C++、Labview等)調(diào)用。
圖4 VB.NET運行結(jié)果
利用MATLAB 科學(xué)計算能力強(qiáng)的特點,可以將一些復(fù)雜的科學(xué)計算過程用MATLAB 輕松實現(xiàn),同時將這些過程生成通用COM 組件模塊供VB.NET 調(diào)用,可以省去VB.NET 編寫復(fù)雜函數(shù)的繁瑣過程,令編程效率大幅提高。本文實現(xiàn)了兩者混合編程,可以同時發(fā)揮MATLAB 計算能力強(qiáng)和VB.NET 編程界面快捷友好的特點,收到了良好的效果。同時生成的COM組件便于模塊化,可以為其他程序調(diào)用。這對其它科學(xué)計算要求高的測試軟件提供了實際意義。
[1]馮莉.VB 與Matlab 的混合編程方法[J].兵工自動化,2005,24(5):110-113.
[2]冀剛.MATLAB 7.3 與.NET 新接口技術(shù)[J].電腦知識與技術(shù),2008(03):548-550.