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