陶小亮,牛 振
(中國空空導彈研究院,河南 洛陽 471009)
LabWindows/CVI多線程技術在舵機測試軟件中的應用
陶小亮,牛 振
(中國空空導彈研究院,河南 洛陽 471009)
在舵機性能測試過程中,需要對工作電流、舵偏角電壓信號、編碼器角度信號和扭矩信號進行實時高速采集。針對虛擬儀器開發平臺LabWindows/CVI的多線程機制進行了詳細的介紹,并給出了其在舵機測試中的應用。測試結果表明,利用多線程技術能夠更好地開發并行任務,加快系統的響應速度,提高執行效率。
多線程;舵機測試;數據采集;LabWindows/CVI系統
在舵機性能測試過程中,需要對工作電流、舵偏角電壓信號、編碼器角度信號和扭矩信號進行實時高速采集。
如果采用傳統的單線程順序執行的方式,則采集任務一旦開啟,操作界面將無法響應用戶操作,在需要用軟件緊急切斷電源時系統無法及時響應,產生不可預測的后果。另外,用戶操作界面時會影響數據采集,系統實時性變差,甚至可能出現“死機”現象。
多線程技術是指操作系統支持一個進程中執行多個線程的能力,可以實現任務的并行執行,提高CPU的利用率,保證數據采集的實時、高效。基于LabWindows/CVI多線程機制開發的測試軟件,很好地解決了上述問題。
舵機測試系統硬件架構如圖1所示。系統工作時,主控計算機通過串口卡向舵機發送指令并接收反饋信息。舵偏角電壓信號、加載力矩信號以及功率電源電流信號由數據采集卡實時采集。編碼器輸出的舵偏角脈沖信號由定時/計數卡進行差動計數,獲得舵機的實際工作位置。

圖1 系統硬件組成
多線程是指操作系統支持一個進程中執行多個線程的能力[1-2]。當一個線程等待用戶響應或大量計算結果時,另一個線程可以繼續其他處理,使得進程總處于運行態,隨時進行響應,從而提高系統的響應效率。一個多線程的應用程序實際上在其內部實現了多任務擴展,為代碼賦予了并行執行的特性,因而可以執行某些實時性或隨機性很強的操作,提高對CPU的利用率,加快程序的信息處理速度。
LabWindows/CVI提供了兩種在次線程中運行代碼的高級機制,分別是線程池(Thread Pools)和異步定時器(Asynchronous Times)。線程池適用于需要不連續的執行或在循環中執行的任務,而異步定時器適合于在固定時間間隔內執行的任務。結合舵機測試的不定時性這個實際情況,采用線程池的方法進行多線程控制。以下詳細介紹如何利用線程池來創建、運行次線程。
線程池的多線程編程函數庫包含了大量的支持多線程程序開發的函數和函數庫,可方便地編寫線程函數、創建線程、終止線程和設定線程優先級等多線程編程的基本內容[3-4]。
利用線程池來執行次線程中的代碼,可以調用Utility Library庫中的CmtScheduleThreadPoolFunction函數,把想要在次線程中執行的函數名傳遞給它,線程池就會調度這個函數在它的一個線程中運行[5]。而具體在哪個線程中運行函數由CmtScheduleThread PoolFunction函數執行查詢得到。CmtScheduleThread PoolFunction函數的原型為:
int CmtScheduleThreadPoolFunction(int pool Handle,ThreadFunctionPtr threadFunction,void*threadFunctionData,int*threadFunctionID);
向CmtScheduleThreadPoolFunction傳遞的函數被稱為線程函數。線程池的線程函數可以起任何名字,但必須有以下原型:
int CVICALLBACK dataThreadFunction(void*functionData);該函數名在線程池調用時傳遞到CmtScheduleThreadPoolFunction函數的第二個參數中。
CmtScheduleThreadPoolFunction函數的第一個參數表示用哪一個線程池調度函數。如傳遞DEFAULT_THREAD_POOL_HANDLE常量表示要使用缺省的線程池,用戶不能更改缺省線程池的狀態,線程結束時不需要調用cmtDiscardThreadpool函數來結束線程查詢。
在該測試系統的軟件開發中,采用LabWindows/CVI作為開發平臺。它將功能強大、使用靈活的C語言與用于數據采集分析和顯示的專業測控工具有機結合起來。它的集成化開發環境、交互式編程方法、豐富的庫函數和可視化面板,為開發檢測系統、數據采集系統和過程監控系統等應用軟件提供了一個理想的軟件開發環境。特別是它能與NI公司的硬件設備達到無縫結合,簡化了對底層硬件的設置。
在編寫舵機性能測試軟件時,充分利用了LabWindows/CVI的多線程中的線程池技術。按照軟件的功能需求,把應用程序需要處理的任務分為用戶界面控制、數據采集、數據實時顯示以及數據分析和保存等。測試軟件將用戶界面作為主線程,將數據采集、數據實時顯示、數據分析作為次線程,這樣多個線程同時執行,在相同的時間內可以并行完成更多的任務,既加快了系統的反應速度,又提高了執行效率。基于多線程的舵機測試系統軟件結構如圖2所示。

圖2 多線程測試系統軟件結構
3.3.1 界面控制線程
用LabWindows/CVI用戶界面編輯器可輕松地建立復雜的交互式面板。在設計GUI的過程中,開發人員常常需要確定程序如何獲取并顯示數據,對面板、控件和對話框如何操作等問題,因此用戶界面成為程序設計的起點,把它作為程序設計的主線程,及時處理各種交互信息。
舵機測試軟件中,用戶界面的顯示、測試信號的選擇、波形數據的顯示、按鈕控件等交互操作都在程序的主線程中實現。
3.3.2 數據采集線程
該線程在啟動后,負責數據采集任務,包括扭矩信號的采集、舵偏角信號采集、光電編碼器的角度信號采集。以下給出數據采集線程的程序主體。


3.3.3 功率電流采集和實時顯示線程
舵機是大功率執行機構,其工作時電流比較大,通過監測電流可以反映出舵機在不同信號和載荷下的工作狀態。系統通過GPIB通信實現電源的參數設置、電源的打開與關閉、電流的實時采集與顯示。由于需要實時監測舵機工作時的電流并在意外情況下及時切斷電源,需要把這部分單獨放在一個線程中進行。測試中,當舵機開始動作就觸發此線程進行功率電流采集。以下給出該部分的程序主體。

3.3.4 數據分析和實時顯示線程
利用多線程技術對采集到的數據進行實時動態顯示,便于測試人員更好地監測系統當前的狀態及性能測試。系統獲取數據后,要對數據進行格式化、歸一化、信號處理、曲線擬合等處理,以衡量測試的結果是否滿足性能指標要求。以下給出該部分的程序主體。
圖3所示為使用多線程技術時實際測試的主界面。如果不使用多線程,而是把電源控制、數據采集、數據顯示和分析放在主線程中,則程序一旦開始運行,在采集任務結束之前,主界面無法響應用戶操作,表現為點擊按鈕、拖動界面沒反應,整個程序呈現“死機”的狀態。因此如果測試過程中,由于意外需要緊急切斷功率電源時系統將無法響應操作,導致不可預測的結果。該文使用多線程技術在不斷刷新主界面,響應用戶操作(如緊急關閉電源、及時分析數據)的同時,在后臺同步進行數據采集和分析、電流的實時采集和顯示,這樣在相同的時間內可以并行完成更多的任務,既加快了系統的反應速度,又增加了測試的安全性和可靠性。

該文利用多線程技術開發了舵機性能測試系統的軟件。經過多次實際測試,系統能夠準確地進行數據采集和處理,并大大提高了系統的效率和可靠性,現已成功應用到某型號舵機的性能測試中。
[1]成鳳敏,蘇小光.多線程技術在虛擬儀器軟件開發中的應用[J].中國測試技術,2008,34(2):48-50.
[2]姜守達,吳昌盛.LabWindows/CVI多線程機制在數據采集中的應用[J].計算機應用,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].北京:電子工業出版社,2005.
[6]劉君華.基于LabVIEW的虛擬儀器設計[M].北京:電子工業出版社,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-),男,河南焦作市人,工程師,碩士,主要從事智能檢測與控制研究。