胡武揚 段富?!《其J
摘要:采用LabVIEW 2013虛擬儀器平臺開發(fā)了直升機(jī)舵機(jī)自動加載測試系統(tǒng)軟件。介紹了測試系統(tǒng)軟件結(jié)構(gòu)和流程圖,重點闡述了軟件開發(fā)過程中遇到的典型問題,如生產(chǎn)者消費者設(shè)計模式處理數(shù)據(jù)采集、利用通知器控件實現(xiàn)循環(huán)通信、利用LabVIEW特有的字符串轉(zhuǎn)換控件解決數(shù)據(jù)類型轉(zhuǎn)換等,并給出了解決問題方法,以期對其它基于LabVIEW的軟件開發(fā)提供借鑒。
關(guān)鍵詞:舵機(jī);加載系統(tǒng);自動測試;LabVIEW
中圖分類號:TP206 文獻(xiàn)標(biāo)識碼:A DOI:10.3969/j.issn.1003-6970.2015.05.006
0 引言
舵機(jī)是直升機(jī)動力學(xué)控制的執(zhí)行機(jī)構(gòu),它在直升機(jī)實際飛行過程中需要承受通過液壓助力器來的空氣動力及其力矩作用。空氣動力及其力矩隨著直升機(jī)飛行高度、速度、姿態(tài)等飛行狀態(tài)的不同而變化,最終呈現(xiàn)為舵機(jī)的動態(tài)交變負(fù)載。舵機(jī)性能直接影響直升機(jī)整體的飛行性能,而舵機(jī)的帶載能力是舵機(jī)的主要技術(shù)參數(shù)。在試驗室條件下對舵機(jī)施加載荷,模擬直升機(jī)在空中飛行時舵機(jī)輸出軸所受到的負(fù)載情況,對舵機(jī)系統(tǒng)的實際工作性能進(jìn)行考核驗證,是舵機(jī)產(chǎn)品檢驗和進(jìn)行飛控系統(tǒng)動態(tài)半物理仿真試驗必備程序。
傳統(tǒng)的手動加載舵機(jī)測試方式測試精度不高,不僅耗時費力,而且人為很多因素會影響測試結(jié)果的可信度。本文所述的直升機(jī)并聯(lián)電動操縱舵機(jī)綜合自動測試系統(tǒng)主要用于測試舵機(jī)在空載及不同負(fù)載下的性能,主要測試內(nèi)容包括舵機(jī)空載和加載時的電壓、電流,輸出軸的轉(zhuǎn)角、轉(zhuǎn)速、行程和扭矩等參量。
根據(jù)并聯(lián)舵機(jī)測試系統(tǒng)技術(shù)要求和測試技術(shù)的最新進(jìn)展,軟件的運行環(huán)境選為Windows 7.0圖形視窗操作系統(tǒng),選用美國NI(National Instrument)公司的LabView2013圖形化編程語言(Graphics Language,G語言)進(jìn)行設(shè)備軟件開發(fā)。本文在介紹測試系統(tǒng)硬件的基礎(chǔ)上,給出了軟件的框架設(shè)計,重點闡述了軟件開發(fā)過程中遇到的典型問題:生產(chǎn)者一消費者設(shè)計模式處理數(shù)據(jù)采集、利用通知器控件實現(xiàn)循環(huán)通信、利用LabVIEW特有的字符串轉(zhuǎn)換控件解決數(shù)據(jù)類型轉(zhuǎn)換等,并給出了解決問題方法,以期對其它基于LabVIEW的軟件開發(fā)提供借鑒。
1 硬軟件結(jié)構(gòu)設(shè)計
1.1 硬件結(jié)構(gòu)設(shè)計
測試對象直升機(jī)并聯(lián)舵機(jī)主要由電機(jī)、減速器、蝸桿機(jī)構(gòu)、電磁離合器、微動行程開關(guān)等組成,輸出軸為慢速的旋轉(zhuǎn)運動。
舵機(jī)自動加載測試系統(tǒng)的硬件結(jié)構(gòu)如圖l所示。選用阿爾泰公司PXI機(jī)箱、PXI控制器和兩塊多功能數(shù)據(jù)采集卡作為控制和測量平臺,選用三相交流伺服電機(jī)、伺服驅(qū)動器、扭矩傳感器、編碼器構(gòu)成加載系統(tǒng),組成完整的舵機(jī)自動加載測試系統(tǒng)。PXI控制器通過連接數(shù)據(jù)采集卡控制舵機(jī)轉(zhuǎn)動、控制伺服電機(jī)扭矩輸出和位移輸出等,同時它還采集各種設(shè)備反饋的信號,包括舵機(jī)電機(jī)及舵機(jī)離合器的電流和電壓信號、扭矩傳感器信號、編碼器脈沖信號等。
1.2 軟件設(shè)計
LabVIEW是NI公司最核心的軟件產(chǎn)品,是工業(yè)控制、測試軟件開發(fā)的專業(yè)平臺,它具有界面簡潔友好,能較好地模擬測控儀器及環(huán)境等特點。它采用了工程人員熟悉的術(shù)語、圖形等圖形化符號來代替常規(guī)基于文字的語言程序。它將功能強大的C語言與測控技術(shù)有機(jī)結(jié)合,具有靈活的交互式編程方法和豐富的庫函數(shù),為開發(fā)人員建立檢測系統(tǒng)、自動測試環(huán)境、數(shù)據(jù)采集系統(tǒng)、過程監(jiān)控系統(tǒng)等提供了理想的軟件開發(fā)環(huán)境。LabVIEW實時編譯特性,讓編程和調(diào)試效率得到很大的提升。根據(jù)軟件開發(fā)規(guī)律,從功能設(shè)計,結(jié)構(gòu)設(shè)計和通信設(shè)計依次說明。
1.2.1 軟件功能設(shè)計
測試系統(tǒng)軟件所提供的功能包括:
1)圖形用戶(GUI)界面的人機(jī)對話接口和界面友好,包括可顯示設(shè)定指令的曲線和回采信號的實時曲線及數(shù)字實時刷新顯示監(jiān)測信號等;
2)有典型試驗入口;
3)試驗進(jìn)程的監(jiān)測及報警;
4)控制參數(shù)的設(shè)置;
5)系統(tǒng)輸出輸入通道的自檢;
6)試驗數(shù)據(jù)的保存、處理、曲線回放、報表打印等。
1.2.2 軟件結(jié)構(gòu)設(shè)計
將測試測量程序劃分3個層次,即主VI、功能層和最底層的驅(qū)動層。LabVIEW已經(jīng)提供了常用的底層驅(qū)動功能,如數(shù)據(jù)采集設(shè)備的驅(qū)動、文件讀寫驅(qū)動、VISA驅(qū)動等,因此,舵機(jī)自動加載測試系統(tǒng)程序設(shè)計主要在主vI和功能層。
主VI是最高一層,它主要通過界面為程序提供必要的信息,并且接收需要的信息以及調(diào)用下層VI。依據(jù)LabVIEW開發(fā)程序的流程即提出需求、設(shè)計、編碼、測試、發(fā)布和維護(hù),結(jié)合舵機(jī)自動加載測試系統(tǒng)的特點,采用從用戶界面設(shè)計著手開發(fā)。為保證舵機(jī)自動加載測試系統(tǒng)良好的人機(jī)交互,主界面將采集區(qū)域與控制區(qū)域分類排布,并且卡片式管理各個實時顯示項,統(tǒng)一使用LabVIEW銀色系列控件,從而讓試驗監(jiān)視方便,測試過程操作簡單。將測試主界面劃分為舵機(jī)控制、加載電機(jī)控制、試驗控制、試驗監(jiān)控和試驗記錄5個區(qū)域,每個區(qū)域下又有若干測試子項。圖2所示為舵機(jī)自動加載測試系統(tǒng)的交互界面設(shè)計簡圖。
依據(jù)主VI設(shè)計功能層,功能層采用自頂向下的設(shè)計方式,逐步實現(xiàn)使用子Ⅵ去實現(xiàn)各個功能模塊,軟件結(jié)構(gòu)圖如圖3所示,軟件程序流程圖見圖4。
1.2.3 軟件通信環(huán)境
1)使用標(biāo)準(zhǔn)PXI儀器總線通信協(xié)議,支持32或64位數(shù)據(jù)傳輸,最高數(shù)據(jù)傳輸速率可達(dá)132Mb/或528Mb/s;
2)RS232串口通信協(xié)議。
2 數(shù)據(jù)采集模塊設(shè)計
2.1 數(shù)據(jù)采集的實現(xiàn)
LabVIEW可以很方便無縫地利用NI公司的數(shù)據(jù)采集卡實現(xiàn)數(shù)據(jù)的采集,NI提供了上百種采集卡的驅(qū)動程序供用戶使用。然而由于NI采集卡是高端產(chǎn)品,價格昂貴,不適用于一般的企業(yè)和科研單位,應(yīng)用并不是很廣泛。在滿足舵機(jī)測試各項要求的情況下,通過動態(tài)鏈接庫(.d11)調(diào)用非NI板卡——阿爾泰的PX19606多功能采集卡來實現(xiàn)數(shù)據(jù)的采集,LabVIEW程序見圖5。
在LabVIEW程序窗口選擇基本函數(shù)Call Library Function Node.vi,并且在其右鍵的菜單里選擇configure對其屬性,例如DLL文件的路徑、被調(diào)用的函數(shù)名、參數(shù)的類型及返回類型進(jìn)行配置后,即可在LabVIEW中連接阿爾泰提供數(shù)據(jù)采集卡進(jìn)行模擬量數(shù)據(jù)采集。
CreateDevice為設(shè)備創(chuàng)建了句柄,供其它函數(shù)調(diào)用識別設(shè)備,InitDeviceProAD初始化硬件通道和采樣頻率等,StartDeviceProAD啟動設(shè)備,ReadDeviceProAD Half讀取指定長度數(shù)組數(shù)據(jù)進(jìn)入物理緩沖區(qū),從緩沖區(qū)不同層次的數(shù)組取出一個元素,經(jīng)過一系列轉(zhuǎn)換即可得到各個傳感器采集的電壓值。最后ReleaseDeviceProAD和ReleaseDevice釋放設(shè)備,完成一次數(shù)據(jù)采集。將這些動態(tài)鏈接庫函數(shù)加入到循環(huán)結(jié)構(gòu)中,即可實現(xiàn)連續(xù)數(shù)據(jù)采集。
2.2 數(shù)據(jù)采集中的生產(chǎn)者一消費者設(shè)計模式
數(shù)據(jù)采集程序在運行時仍然希望系統(tǒng)能夠處理其它事件,這是在傳統(tǒng)的狀態(tài)機(jī)或者事件結(jié)構(gòu)中無法實現(xiàn)的。因為無論是狀態(tài)機(jī)結(jié)構(gòu)還是事件結(jié)構(gòu),都是由一個循環(huán)組成的,不同的狀態(tài)是無法同時被響應(yīng)和處理的。解決這個問題的方法也比較簡單,LabVIEW本身就是一種多線程的程序設(shè)計語言,可以再加一個循環(huán)或者另外開一個程序獨立運行。舵機(jī)自動化測試過程中,既需要對數(shù)據(jù)實時采集,又必須通過對采集的數(shù)據(jù)根據(jù)舵機(jī)測試項的具體需求進(jìn)行處理得到計算值,然后與標(biāo)稱值比對,從而得出最后結(jié)果,因此多線程是必須的。然而,在舵機(jī)自動加載測試系統(tǒng)中,采集數(shù)據(jù)速度很快,而分析處理數(shù)據(jù)速度相對較慢,如果分析處理過于復(fù)雜可能會導(dǎo)致處理時間過長,將會影響到采集數(shù)據(jù)的速度。為了解決此問題,采用生產(chǎn)者-消費者數(shù)據(jù)采集模塊程序模式來設(shè)計采集循環(huán)。
如圖6所示,生產(chǎn)者循環(huán)不斷的產(chǎn)生數(shù)據(jù)送入緩存器,而消費者循環(huán)則從緩存器中不斷的讀出數(shù)據(jù)。在由于每個循環(huán)只做自己的事情,所以相互之間并不會發(fā)生影響。生產(chǎn)者循環(huán)不產(chǎn)生數(shù)據(jù),消費者循環(huán)則不運行。隊列起到了重要的作用。這里采用全局變量進(jìn)行數(shù)據(jù)傳遞,它與生產(chǎn)者一消費者設(shè)計模式下的隊列相連。這雖然破壞了數(shù)據(jù)流,但是讓編程模塊化程度更好,有利于提高多人開發(fā)其它模塊的效率。
3 循環(huán)間通信設(shè)計
因為舵機(jī)自動加載測試系統(tǒng)并沒有多個數(shù)據(jù)流同時對一個變量進(jìn)行讀寫,不會因為競態(tài)條件發(fā)生讀寫沖突,所以在并行采集循環(huán)中,可以使用全局變量進(jìn)行數(shù)據(jù)傳遞。然而,LabVIEW以數(shù)據(jù)流機(jī)制控制VI執(zhí)行,數(shù)據(jù)流機(jī)制的主要特點是數(shù)據(jù)從屬,即僅當(dāng)一個節(jié)點接收到所有必需的輸入數(shù)據(jù)時,節(jié)點才可以執(zhí)行,當(dāng)節(jié)點執(zhí)行完畢,數(shù)據(jù)流出節(jié)點。循環(huán)沒有執(zhí)行結(jié)束,數(shù)據(jù)流無法流出循環(huán),并行循環(huán)間無法進(jìn)行通信。
LabVIEW的通知器控件是用來在程序框圖中的兩個獨立部分之間或者在運行于同一臺機(jī)器的兩個Ⅵ之間通信的工具,它類似于數(shù)據(jù)郵箱,程序框圖的一段代碼發(fā)送數(shù)據(jù)給郵箱,另外一段代碼從郵箱中接收數(shù)據(jù)。等待通知器控件的程序框圖則完全停止執(zhí)行,只有當(dāng)新數(shù)據(jù)可用時才重新啟動。這使計算機(jī)減少浪費在無止境的輪詢中的時間。通知器經(jīng)常用在循環(huán)控制的信息傳遞,例如兩個循環(huán)同時啟動,同時終止的控制等。通知器這一特性,可以為并行循環(huán)通信提供一種通信的方法。在循環(huán)外層再嵌套上通知結(jié)構(gòu),即使循環(huán)未結(jié)束,也能將數(shù)據(jù)送出循環(huán)。
在LabVIEW程序面板,單擊編程一同步一通知器操作一獲取通知其引用,即可新建一個通知器。如圖7所示的事件循環(huán)結(jié)構(gòu)中,獲取通知器通過句柄的方式與發(fā)送通知控件相連接,等待通知控件錯誤輸出連線與循環(huán)相連。當(dāng)“開啟檢測”事件發(fā)生時,等待通知控件收到發(fā)送通知控件的布爾指令,即可開始執(zhí)行循環(huán)結(jié)構(gòu)。即使等待循環(huán)從未結(jié)束,也可將數(shù)據(jù)實時寫入全局變量,供其它Ⅵ讀取,程序如圖8所示。
4 串口通信中的數(shù)值轉(zhuǎn)換
虛擬儀器軟件體系結(jié)構(gòu)(VISA)是一種包括GPIB、串口、以太網(wǎng)、USB的編程和故障診斷儀器系統(tǒng)的標(biāo)準(zhǔn)配置。為了在LabVIEW中編寫的VISA接口程序,需另外安裝NI-VISA驅(qū)動程序。LabVIEW提供NI-VISAInteractiveControl對VISA進(jìn)行配置和調(diào)試。在后面板利用VISA節(jié)點進(jìn)行串行通信編程,利用ⅥSAConfigure Serial Port節(jié)點設(shè)定串口的設(shè)備句柄、波特率、停止位、校驗位、數(shù)據(jù)位,讀寫串口,利用VISARead節(jié)點和VISA Write節(jié)點對串口進(jìn)行讀寫,關(guān)閉串口,停止所有讀寫操作等。
在舵機(jī)測試設(shè)備調(diào)試過程中,發(fā)現(xiàn)靜態(tài)應(yīng)變片扭矩傳感器出現(xiàn)電壓偏置,推測原因是由于自動測試加載系統(tǒng)電路密集程度高,各個子電路接地不同,以及電路間可能的電磁干擾。為了徹底解決這個問題,將扭矩傳感器輸出方式由電壓輸出改為頻率輸出,這很好地抑制了干擾。接收頻率信號的扭矩表提供模擬量接口和VISA接口與PXI控制器相連。如果再用電壓模擬量傳遞扭矩信號,必然增加一次轉(zhuǎn)換過程,可能導(dǎo)致采集精度的下降,所以采用VISA接口來鏈接扭矩表和PXI控制器。
通過向扭矩表發(fā)送接收命令碼,扭矩表向PXI系統(tǒng)傳送一組數(shù)據(jù)類型為BCD碼的當(dāng)前測量值。測量數(shù)據(jù)由特定字節(jié)數(shù)組成。數(shù)據(jù)的數(shù)符、數(shù)碼、階符和階碼都包含在特定的字節(jié)中。這就會面臨一個問題,數(shù)據(jù)是BCD碼,不能直接參與后續(xù)運算,因此需要將字節(jié)數(shù)里的信息提取出來。在文本語言編程中,通常是將BCD碼轉(zhuǎn)換成二進(jìn)制然后按位取出0或1進(jìn)行加權(quán)冪運算,再減去進(jìn)制不同的差值,最后換算成十進(jìn)制數(shù)值。然而這樣不僅代碼冗長,可讀性不好,并且影響執(zhí)行效率,降低采集速度。
VISA接口采集到的BCD碼32H轉(zhuǎn)化為十進(jìn)制數(shù)值32,在文本編程語言中:
需先將32H換算成二進(jìn)制碼,即00110010B;
最后得到數(shù)值5-18=32。
如果在LabVIEW中采用與文本語言相同轉(zhuǎn)換思路編程,必然造成代碼堆積凌亂。為了解決這個問題,在LabVIEW中巧妙使用字符串,能非常輕松完成數(shù)值的轉(zhuǎn)換。如圖9所示,BCD碼32H連接數(shù)值至十六進(jìn)制字符串轉(zhuǎn)換控件,得到十六進(jìn)制數(shù)組成的字符串,再將該十六進(jìn)制字符串當(dāng)成十進(jìn)制字符串,直接連接十進(jìn)制字符串至數(shù)值的轉(zhuǎn)換控件,即可非常方便得到數(shù)值32,代碼簡潔明了。
5 結(jié)束語
(1)利用LabWindows/CVI開發(fā)功能相同的舵機(jī)自動加載測試系統(tǒng)占用50MB磁盤空間,而利用封裝性更好的LabVIEW2013搭建的相同的系統(tǒng),大小占用只有不到4MB,LabVIEW有效地降低代碼體積;
(2)圖形化編程語言帶來了不同視角的編程方式。在舵機(jī)自動加載測試系統(tǒng)開發(fā)過程中,充分利用LabVIEW的編程特性可取得意想不到的效果;
(3)在測試系統(tǒng)各項功能開發(fā)實現(xiàn)過程中,LabVIEW呈現(xiàn)出更加簡潔的編程方式,給后續(xù)拓展和維護(hù)帶來一定的便利性。