陶小亮,牛 振
(中國空空導(dǎo)彈研究院,河南 洛陽 471009)
LabWindows/CVI多線程技術(shù)在舵機(jī)測試軟件中的應(yīng)用
陶小亮,牛 振
(中國空空導(dǎo)彈研究院,河南 洛陽 471009)
在舵機(jī)性能測試過程中,需要對工作電流、舵偏角電壓信號、編碼器角度信號和扭矩信號進(jìn)行實(shí)時(shí)高速采集。針對虛擬儀器開發(fā)平臺LabWindows/CVI的多線程機(jī)制進(jìn)行了詳細(xì)的介紹,并給出了其在舵機(jī)測試中的應(yīng)用。測試結(jié)果表明,利用多線程技術(shù)能夠更好地開發(fā)并行任務(wù),加快系統(tǒng)的響應(yīng)速度,提高執(zhí)行效率。
多線程;舵機(jī)測試;數(shù)據(jù)采集;LabWindows/CVI系統(tǒng)
在舵機(jī)性能測試過程中,需要對工作電流、舵偏角電壓信號、編碼器角度信號和扭矩信號進(jìn)行實(shí)時(shí)高速采集。
如果采用傳統(tǒng)的單線程順序執(zhí)行的方式,則采集任務(wù)一旦開啟,操作界面將無法響應(yīng)用戶操作,在需要用軟件緊急切斷電源時(shí)系統(tǒng)無法及時(shí)響應(yīng),產(chǎn)生不可預(yù)測的后果。另外,用戶操作界面時(shí)會影響數(shù)據(jù)采集,系統(tǒng)實(shí)時(shí)性變差,甚至可能出現(xiàn)“死機(jī)”現(xiàn)象。
多線程技術(shù)是指操作系統(tǒng)支持一個(gè)進(jìn)程中執(zhí)行多個(gè)線程的能力,可以實(shí)現(xiàn)任務(wù)的并行執(zhí)行,提高CPU的利用率,保證數(shù)據(jù)采集的實(shí)時(shí)、高效?;贚abWindows/CVI多線程機(jī)制開發(fā)的測試軟件,很好地解決了上述問題。
舵機(jī)測試系統(tǒng)硬件架構(gòu)如圖1所示。系統(tǒng)工作時(shí),主控計(jì)算機(jī)通過串口卡向舵機(jī)發(fā)送指令并接收反饋信息。舵偏角電壓信號、加載力矩信號以及功率電源電流信號由數(shù)據(jù)采集卡實(shí)時(shí)采集。編碼器輸出的舵偏角脈沖信號由定時(shí)/計(jì)數(shù)卡進(jìn)行差動(dòng)計(jì)數(shù),獲得舵機(jī)的實(shí)際工作位置。
圖1 系統(tǒng)硬件組成
多線程是指操作系統(tǒng)支持一個(gè)進(jìn)程中執(zhí)行多個(gè)線程的能力[1-2]。當(dāng)一個(gè)線程等待用戶響應(yīng)或大量計(jì)算結(jié)果時(shí),另一個(gè)線程可以繼續(xù)其他處理,使得進(jìn)程總處于運(yùn)行態(tài),隨時(shí)進(jìn)行響應(yīng),從而提高系統(tǒng)的響應(yīng)效率。一個(gè)多線程的應(yīng)用程序?qū)嶋H上在其內(nèi)部實(shí)現(xiàn)了多任務(wù)擴(kuò)展,為代碼賦予了并行執(zhí)行的特性,因而可以執(zhí)行某些實(shí)時(shí)性或隨機(jī)性很強(qiáng)的操作,提高對CPU的利用率,加快程序的信息處理速度。
LabWindows/CVI提供了兩種在次線程中運(yùn)行代碼的高級機(jī)制,分別是線程池(Thread Pools)和異步定時(shí)器(Asynchronous Times)。線程池適用于需要不連續(xù)的執(zhí)行或在循環(huán)中執(zhí)行的任務(wù),而異步定時(shí)器適合于在固定時(shí)間間隔內(nèi)執(zhí)行的任務(wù)。結(jié)合舵機(jī)測試的不定時(shí)性這個(gè)實(shí)際情況,采用線程池的方法進(jìn)行多線程控制。以下詳細(xì)介紹如何利用線程池來創(chuàng)建、運(yùn)行次線程。
線程池的多線程編程函數(shù)庫包含了大量的支持多線程程序開發(fā)的函數(shù)和函數(shù)庫,可方便地編寫線程函數(shù)、創(chuàng)建線程、終止線程和設(shè)定線程優(yōu)先級等多線程編程的基本內(nèi)容[3-4]。
利用線程池來執(zhí)行次線程中的代碼,可以調(diào)用Utility Library庫中的CmtScheduleThreadPoolFunction函數(shù),把想要在次線程中執(zhí)行的函數(shù)名傳遞給它,線程池就會調(diào)度這個(gè)函數(shù)在它的一個(gè)線程中運(yùn)行[5]。而具體在哪個(gè)線程中運(yùn)行函數(shù)由CmtScheduleThread PoolFunction函數(shù)執(zhí)行查詢得到。CmtScheduleThread PoolFunction函數(shù)的原型為:
int CmtScheduleThreadPoolFunction(int pool Handle,ThreadFunctionPtr threadFunction,void*threadFunctionData,int*threadFunctionID);
向CmtScheduleThreadPoolFunction傳遞的函數(shù)被稱為線程函數(shù)。線程池的線程函數(shù)可以起任何名字,但必須有以下原型:
int CVICALLBACK dataThreadFunction(void*functionData);該函數(shù)名在線程池調(diào)用時(shí)傳遞到CmtScheduleThreadPoolFunction函數(shù)的第二個(gè)參數(shù)中。
CmtScheduleThreadPoolFunction函數(shù)的第一個(gè)參數(shù)表示用哪一個(gè)線程池調(diào)度函數(shù)。如傳遞DEFAULT_THREAD_POOL_HANDLE常量表示要使用缺省的線程池,用戶不能更改缺省線程池的狀態(tài),線程結(jié)束時(shí)不需要調(diào)用cmtDiscardThreadpool函數(shù)來結(jié)束線程查詢。
在該測試系統(tǒng)的軟件開發(fā)中,采用LabWindows/CVI作為開發(fā)平臺。它將功能強(qiáng)大、使用靈活的C語言與用于數(shù)據(jù)采集分析和顯示的專業(yè)測控工具有機(jī)結(jié)合起來。它的集成化開發(fā)環(huán)境、交互式編程方法、豐富的庫函數(shù)和可視化面板,為開發(fā)檢測系統(tǒng)、數(shù)據(jù)采集系統(tǒng)和過程監(jiān)控系統(tǒng)等應(yīng)用軟件提供了一個(gè)理想的軟件開發(fā)環(huán)境。特別是它能與NI公司的硬件設(shè)備達(dá)到無縫結(jié)合,簡化了對底層硬件的設(shè)置。
在編寫舵機(jī)性能測試軟件時(shí),充分利用了LabWindows/CVI的多線程中的線程池技術(shù)。按照軟件的功能需求,把應(yīng)用程序需要處理的任務(wù)分為用戶界面控制、數(shù)據(jù)采集、數(shù)據(jù)實(shí)時(shí)顯示以及數(shù)據(jù)分析和保存等。測試軟件將用戶界面作為主線程,將數(shù)據(jù)采集、數(shù)據(jù)實(shí)時(shí)顯示、數(shù)據(jù)分析作為次線程,這樣多個(gè)線程同時(shí)執(zhí)行,在相同的時(shí)間內(nèi)可以并行完成更多的任務(wù),既加快了系統(tǒng)的反應(yīng)速度,又提高了執(zhí)行效率?;诙嗑€程的舵機(jī)測試系統(tǒng)軟件結(jié)構(gòu)如圖2所示。
圖2 多線程測試系統(tǒng)軟件結(jié)構(gòu)
3.3.1 界面控制線程
用LabWindows/CVI用戶界面編輯器可輕松地建立復(fù)雜的交互式面板。在設(shè)計(jì)GUI的過程中,開發(fā)人員常常需要確定程序如何獲取并顯示數(shù)據(jù),對面板、控件和對話框如何操作等問題,因此用戶界面成為程序設(shè)計(jì)的起點(diǎn),把它作為程序設(shè)計(jì)的主線程,及時(shí)處理各種交互信息。
舵機(jī)測試軟件中,用戶界面的顯示、測試信號的選擇、波形數(shù)據(jù)的顯示、按鈕控件等交互操作都在程序的主線程中實(shí)現(xiàn)。
3.3.2 數(shù)據(jù)采集線程
該線程在啟動(dòng)后,負(fù)責(zé)數(shù)據(jù)采集任務(wù),包括扭矩信號的采集、舵偏角信號采集、光電編碼器的角度信號采集。以下給出數(shù)據(jù)采集線程的程序主體。
3.3.3 功率電流采集和實(shí)時(shí)顯示線程
舵機(jī)是大功率執(zhí)行機(jī)構(gòu),其工作時(shí)電流比較大,通過監(jiān)測電流可以反映出舵機(jī)在不同信號和載荷下的工作狀態(tài)。系統(tǒng)通過GPIB通信實(shí)現(xiàn)電源的參數(shù)設(shè)置、電源的打開與關(guān)閉、電流的實(shí)時(shí)采集與顯示。由于需要實(shí)時(shí)監(jiān)測舵機(jī)工作時(shí)的電流并在意外情況下及時(shí)切斷電源,需要把這部分單獨(dú)放在一個(gè)線程中進(jìn)行。測試中,當(dāng)舵機(jī)開始動(dòng)作就觸發(fā)此線程進(jìn)行功率電流采集。以下給出該部分的程序主體。
3.3.4 數(shù)據(jù)分析和實(shí)時(shí)顯示線程
利用多線程技術(shù)對采集到的數(shù)據(jù)進(jìn)行實(shí)時(shí)動(dòng)態(tài)顯示,便于測試人員更好地監(jiān)測系統(tǒng)當(dāng)前的狀態(tài)及性能測試。系統(tǒng)獲取數(shù)據(jù)后,要對數(shù)據(jù)進(jìn)行格式化、歸一化、信號處理、曲線擬合等處理,以衡量測試的結(jié)果是否滿足性能指標(biāo)要求。以下給出該部分的程序主體。
圖3所示為使用多線程技術(shù)時(shí)實(shí)際測試的主界面。如果不使用多線程,而是把電源控制、數(shù)據(jù)采集、數(shù)據(jù)顯示和分析放在主線程中,則程序一旦開始運(yùn)行,在采集任務(wù)結(jié)束之前,主界面無法響應(yīng)用戶操作,表現(xiàn)為點(diǎn)擊按鈕、拖動(dòng)界面沒反應(yīng),整個(gè)程序呈現(xiàn)“死機(jī)”的狀態(tài)。因此如果測試過程中,由于意外需要緊急切斷功率電源時(shí)系統(tǒng)將無法響應(yīng)操作,導(dǎo)致不可預(yù)測的結(jié)果。該文使用多線程技術(shù)在不斷刷新主界面,響應(yīng)用戶操作(如緊急關(guān)閉電源、及時(shí)分析數(shù)據(jù))的同時(shí),在后臺同步進(jìn)行數(shù)據(jù)采集和分析、電流的實(shí)時(shí)采集和顯示,這樣在相同的時(shí)間內(nèi)可以并行完成更多的任務(wù),既加快了系統(tǒng)的反應(yīng)速度,又增加了測試的安全性和可靠性。
該文利用多線程技術(shù)開發(fā)了舵機(jī)性能測試系統(tǒng)的軟件。經(jīng)過多次實(shí)際測試,系統(tǒng)能夠準(zhǔn)確地進(jìn)行數(shù)據(jù)采集和處理,并大大提高了系統(tǒng)的效率和可靠性,現(xiàn)已成功應(yīng)用到某型號舵機(jī)的性能測試中。
[1]成鳳敏,蘇小光.多線程技術(shù)在虛擬儀器軟件開發(fā)中的應(yīng)用[J].中國測試技術(shù),2008,34(2):48-50.
[2]姜守達(dá),吳昌盛.LabWindows/CVI多線程機(jī)制在數(shù)據(jù)采集中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用,2004,23(8):56-57.
[3]National Instrument Corp.Multithread in LabWindows/CVI[Z].2000.
[4]National Instrument Corp.LabWindows/CVI Programmer Reference Manual[Z].2001.
[5]劉君華.虛擬儀器編程語言LabWindows/CVI教程[M].北京:電子工業(yè)出版社,2005.
[6]劉君華.基于LabVIEW的虛擬儀器設(shè)計(jì)[M].北京:電子工業(yè)出版社,2003.
Application ofmultithread in servo-actuator testing software based on LabW indows/CVI
TAO Xiao-liang,NIU Zhen
(CAMA,Luoyang 471009,China)
In the performance test of servo-actuator, the currency, servo-angle signal, coder signal and torque signal are required to be collected rapidly.In this paper,multithread technology in LabWindows/CVI and its application in performance test of servo-actuator were introduced.The results of test prove that the multithread technology is more effective in developing parallel task than current techniques.By using multithread,the response and efficiency of the system can be greatly enhanced.
multithread;servo-actuator test;data acquisition;LabWindows/CVI
TJ02;TP273
A
1674-5124(2011)01-0081-03
2010-03-05;
2010-05-26
陶小亮(1983-),男,河南焦作市人,工程師,碩士,主要從事智能檢測與控制研究。