吳詩琪 鄭健 劉杉 何芳
摘 要:動中通在保持實時穩(wěn)定對星、跟蹤過程中,針對天線控制器ACU難以滿足算法開發(fā)、故障診斷、便捷調(diào)試、可視化界面等問題,設(shè)計一款動中通控制系統(tǒng)軟件。軟件以LabWindows/CVI為平臺,針對軟件高速采集數(shù)據(jù)要求,提出響應的控制策略,通過多線程技術(shù)與數(shù)據(jù)保護機制,使用線程池和Timer控件定時判斷、開啟數(shù)據(jù)采集線程和繪圖線程,提升軟件數(shù)據(jù)采集速率;使用線程安全隊列技術(shù)保護共享數(shù)據(jù);利用工具包SQL Toolkit開發(fā)衛(wèi)星數(shù)據(jù)庫等。測試結(jié)果表明:軟件能夠可靠準確地完成通信、數(shù)據(jù)處理任務(wù),繪圖功能流暢快速,為系統(tǒng)工作的監(jiān)控、調(diào)試以及故障診斷提供充分的技術(shù)支撐。
關(guān)鍵詞:衛(wèi)星動中通;串口通信;LabWindows/CVI;多線程;線程安全隊列
文獻標志碼:A 文章編號:1674-5124(2016)09-0077-06
0 引 言
作為一種新型的衛(wèi)星移動通信系統(tǒng),動中通(運動中衛(wèi)星通信,satcom on-the-move,SOTM)就是利用現(xiàn)有的地球同步通信衛(wèi)星實現(xiàn)寬帶移動衛(wèi)星通信業(yè)務(wù)[1]。作為一種新型的衛(wèi)星移動通信系統(tǒng),動中通可以實現(xiàn)在海、陸、空移動載體實時跟蹤衛(wèi)星,傳輸高比特率的多媒體信息[2]。
動中通的測控系統(tǒng)是保證波束對準衛(wèi)星、實現(xiàn)通信的關(guān)鍵,在整個動中通系統(tǒng)中起著承上啟下的作用[3]。ACU(antenna control unit)是動中通測控系統(tǒng)的終端顯示和設(shè)置部分,一般由電源、顯示屏以及通信接口組成,包括設(shè)置和監(jiān)控兩部分。ACU的主要功能是方位角、俯仰角和極化角的標定,極化方式的設(shè)置,天線的工作狀態(tài)監(jiān)控、系統(tǒng)數(shù)據(jù)查詢、發(fā)送指令,實現(xiàn)故障診斷以及天線姿態(tài)和慣導數(shù)據(jù)監(jiān)控等。ACU作為動中通系統(tǒng)的關(guān)鍵,其性能直接影響到動中通系統(tǒng)的整體效能,但現(xiàn)使用的ACU也有以下3個方面需要進一步改進:
1)一次只能顯示一類參數(shù),并且修改參數(shù)比較繁瑣,沒有鍵盤等直接輸入設(shè)備,應加強人機交互優(yōu)化;
2)由于單次監(jiān)測的數(shù)據(jù)單一,無法實時監(jiān)控多類數(shù)據(jù)。一般ACU需將監(jiān)控信息導出并存儲到文件中,再利用其他線下軟件才能進行繪圖分析、檢測。這會大大降低操作者實時分析數(shù)據(jù)及故障診斷的能力;
3)儀器本身較為笨重,不適合搬運攜帶。若能夠?qū)④浖仓迷陔娔X、手機、iPad等移動設(shè)備上,將會更加方便快捷。
現(xiàn)階段,國外對動中通控制軟件研究相對成熟,主要有以色列公司Intellian開發(fā)的APTUS軟件、RaySat公司開發(fā)的IDU軟件等。以APTUS為例,國外軟件主要劃分為上位機與ACU連接模塊、工具菜單模塊、系統(tǒng)屬性狀態(tài)顯示模板、用戶工作界面4大模塊。其中以用戶工作界面為主呈現(xiàn)天線對星狀態(tài)。但其公司開發(fā)的軟件僅適合本公司的對星設(shè)備,不僅對星設(shè)備售價昂貴,且技術(shù)流通性不強,具有一定的限制性。反觀國內(nèi)形式,并無公司系統(tǒng)、完善地做出此類軟件。所以本文在充分研究國內(nèi)外動中通發(fā)展現(xiàn)狀的基礎(chǔ)上,結(jié)合了虛擬儀器技術(shù)[4]、LabWindows/CVI軟件[5]為開發(fā)環(huán)境設(shè)計上位機程序,旨在將軟件與我國生產(chǎn)的動中通對星設(shè)備相結(jié)合,達到優(yōu)化用戶界面、快速反應用戶指令、在高速串口通信下實時分析數(shù)據(jù)并畫圖監(jiān)控,進而實現(xiàn)對星過程中的狀態(tài)監(jiān)控的目的。
1 軟件系統(tǒng)總體設(shè)計
整個系統(tǒng)由兩部分組成,現(xiàn)場數(shù)據(jù)采集與傳輸部分,實時顯示各項指標狀態(tài)、繪圖和數(shù)據(jù)庫部分。其中,傳輸數(shù)據(jù)主要由測控系統(tǒng)提供。首先ACU通過協(xié)議將測控系統(tǒng)上傳的數(shù)據(jù)由RS232[6]傳至上位機,經(jīng)過分析處理后,用戶通過人機交互界面獲取相應信息并達到實時監(jiān)控天線對星狀態(tài)的目的。
如圖1所示,測控系統(tǒng)主要由傳感器、控制器以及伺服控制系統(tǒng)組成,控制器通過采集傳感器敏感的載體擾動信息,采用一定的測控算法,輸出控制量給伺服系統(tǒng),并驅(qū)動天線波束隔離擾動,保證波束在地理空間內(nèi)的指向不變。當開始對星時,軟件需要從ACU上傳的數(shù)據(jù)主要包括:天線狀態(tài)信息(方位角A、俯仰角E、極化角V)、載體的3個姿態(tài)角(航向角H、俯仰角P、橫滾角R)、所對衛(wèi)星信息(名稱、衛(wèi)星經(jīng)度、極化方式等)、GPS定位信息、AGC信號強度等。
從用戶界面上看,軟件功能主要包括:設(shè)置、重啟、上傳、天線基本信息展示、衛(wèi)星基本信息展示、天線對星設(shè)置、天線實時對星狀態(tài)數(shù)據(jù)顯示、繪圖界面、串口信息設(shè)置等。其中所需數(shù)據(jù)均由測控系統(tǒng)提供。
當?shù)孛嬲咎炀€位于北半球時,由衛(wèi)星經(jīng)度、地面站經(jīng)緯度可得天線初始狀態(tài)信息:方位角A、俯仰角E和極化角V。
隨著動中通運動載體狀態(tài)(載體航向角、載體俯仰角、載體橫滾角)的不斷變化,衛(wèi)星在載體坐標系中的位置也是時刻變化。所以軟件實際輸出的預置方位角、預置俯仰角還需進一步確定。
設(shè)高精度慣導輸出載體的3個姿態(tài)角分別為航向角H、俯仰角P、橫滾角R;地理坐標系g到載體坐標系b進行坐標變換時的3個旋轉(zhuǎn)角分別為航向轉(zhuǎn)角Ht、俯仰轉(zhuǎn)角Pt、橫滾轉(zhuǎn)角Rt;其中坐標變換公式表示為
2 系統(tǒng)主要功能設(shè)計
如圖2所示,根據(jù)軟件功能,主程序可分成通信模塊、數(shù)據(jù)處理模塊、實時顯示模塊和人機交互模塊4大模塊。通信模塊主要依據(jù)ACU的通信協(xié)議讀取由串口RS232傳輸?shù)谋O(jiān)控數(shù)據(jù);數(shù)據(jù)處理模塊主要處理通信模塊中讀取的數(shù)據(jù),其中數(shù)據(jù)主要包括ACU通信協(xié)議中的16類數(shù)據(jù):預置方位角、預置俯仰角、預置極化角、當前方位角、當前俯仰角、當前極化角、尋星狀態(tài)、載體航向角、載體俯仰角、載體橫滾角、經(jīng)度、緯度、GPS狀態(tài)、限位信息、AGC電平;人機交互模塊根據(jù)用戶的需求顯示天線對星狀態(tài)、ACU當前狀態(tài)、設(shè)置天線對星、監(jiān)控數(shù)據(jù)實時繪圖等功能;實時顯示模塊與前面3個模塊相關(guān),主要通過高速串口實現(xiàn)實時接收數(shù)據(jù)、繪圖的功能。
2.1 高速數(shù)據(jù)采集功能的設(shè)計與實現(xiàn)
在動中通持續(xù)對星的過程中,由于載體一直處于移動狀態(tài),導致軟件監(jiān)控時間間隔短,數(shù)據(jù)繪圖的時效性要求高。例如,為了判斷是否丟星,軟件需要持續(xù)監(jiān)控AGC信號強度;同樣,為了判斷天線是否精準指向衛(wèi)星,軟件需要一直監(jiān)控方位角、俯仰角、極化角等。由于串口寄存器的容量有限,軟件在不采用多線程技術(shù)的情況下會對程序一一順序執(zhí)行[7]。當軟件處理舊數(shù)據(jù)的速度低于上傳新數(shù)據(jù)的速度時,就一定會出現(xiàn)數(shù)據(jù)丟包的現(xiàn)象。在用戶層面上更是顯出反應延遲死鎖、顯示曲線斷層等現(xiàn)象。所以,采用多線程技術(shù)[8]是保證在高速移動下實時監(jiān)控是否丟星或者其他對不準情況的有效保證。
出于對數(shù)據(jù)接收、處理和顯示的實時性要求,程序開辟了兩種次線程,分別為數(shù)據(jù)采集線程和數(shù)據(jù)顯示線程。能夠?qū)τ脩舨僮鬟M行第一時間響應是軟件的基本要求,所以程序以響應用戶操作為主線程。CVI軟件中提供了兩種多線程實現(xiàn)方法:線程池和異步定時器。考慮使用線程池可以同時開辟多個線程,程序主要使用線程池技術(shù)。
如圖3所示,當串口打開后,數(shù)據(jù)采集線程即刻開啟,保證串口寄存器隨時處于可繼續(xù)儲存新數(shù)據(jù)的狀態(tài)。開啟多線程函數(shù)原型為:CmtScheduleThreadPoolFunction(DEFAULT_THREAD_POOL_HANDLE,ThreadFunction,threadfunctiondata,&threadID)。但隨著時間的推移,安全隊列中存儲的數(shù)據(jù)將漸漸增多。為了防止安全隊列中的數(shù)據(jù)溢出,設(shè)置Timer控件定時讀取安全隊列內(nèi)數(shù)據(jù)存儲量,一旦發(fā)現(xiàn)安全隊列內(nèi)數(shù)據(jù)存儲量超過50%,即開啟第i個數(shù)據(jù)采集線程(i初始值賦為1)讀取安全隊列中的數(shù)據(jù)并繪制圖像,隨后等待線程執(zhí)行直到其結(jié)束,其函數(shù)原型為:CmtWaitForThreadPoolFunctionCompletion(DEF
AULT_THREAD_POOL_HANDLE,threadID,OPT_TP_
PROCESS_EVENTS_WHILE_WAITING)。結(jié)束之后釋放該線程,函數(shù)原型為:CmtReleaseThreadPoolFun
ctionID(DEFAULT_THREAD_POOL_HANDLE,threadID)。最后關(guān)閉線程并釋放,節(jié)省內(nèi)存空間,關(guān)閉線程函數(shù)原型為:CmtReleaseThreadPoolFunctionID(DEF
AULT_THREAD_POOL_HANDLE,threadID)。當Timer控件定時開啟時,循環(huán)操作以上操作直至安全隊列中的數(shù)據(jù)存儲量<50%或關(guān)閉串口。通過多次使用多線程技術(shù),避免了串口寄存器和安全隊列存儲器數(shù)據(jù)溢出的現(xiàn)象并實時進行繪圖處理。
多線程保證了用戶界面的及時響應,串口數(shù)據(jù)不丟包,繪圖實時能力大幅度上升,軟件可靠性和實時性增強。
2.2 線程間的數(shù)據(jù)保護
在多線程編程中,不可避免地要對一些共享的數(shù)據(jù)進行訪問。由于線程之間對共享數(shù)據(jù)的訪問是獨立的,任何一個線程都可對共享數(shù)據(jù)進行訪問和修改[9]。由于它們之間是異步并發(fā)進行的,特別是當需要對共享數(shù)據(jù)進行修改時,就會產(chǎn)生數(shù)據(jù)不一致的問題。為此,共享數(shù)據(jù)需要一種保護機制,避免出現(xiàn)數(shù)據(jù)競賽(data race)和死鎖(deadlocks)等現(xiàn)象導致軟件出現(xiàn)邏輯錯誤,產(chǎn)生崩壞。CVI軟件中共有3種數(shù)據(jù)保護方法,分別是:線程鎖(thread lock)、線程安全變量(thread safe variables)和線程安全隊列(thread safe queues)[10]。
在程序運行過程中,由于數(shù)據(jù)采集線程和數(shù)據(jù)顯示線程是同時進行的,兩者必將共享ACU上傳的數(shù)據(jù)。在不采用任何保護機制的情況下,雙方會出現(xiàn)數(shù)據(jù)競爭和死鎖現(xiàn)象。比較3者,當使用線程鎖時有可執(zhí)行性差,容易出現(xiàn)阻塞和死鎖,效率低的缺點;當使用線程安全變量時存在多個次線程無法共同配合處理數(shù)據(jù)的缺點??紤]線程安全隊列適用于為多個線程之間傳遞大批數(shù)據(jù)并協(xié)同處理數(shù)據(jù),軟件采用穩(wěn)定可靠的線程安全隊列作為數(shù)據(jù)保證。線程安全隊列函數(shù)[11]基本如下:
1)CmtNewTSQ;
2)CmtWriteTSQData;
3)CmtReadTSQData;
4)CmtFlushTSQ。
為了保證ACU上傳的數(shù)據(jù)能夠?qū)崟r完整地從串口寄存器中讀取,將CmtNewTSQ函數(shù)中的options參數(shù)設(shè)置為可使隊列長度動態(tài)增加的OPT_TSQ_DYN
AMIC_SIZE,達到不影響數(shù)據(jù)采集線程中的其他程序運行的目的。
線程安全隊列的使用保護了多線程技術(shù)下ACU上傳數(shù)據(jù)在傳遞過程中的準確性和穩(wěn)定性,整體提升軟件實用性和穩(wěn)定性。
2.3 實時顯示功能的設(shè)計與實現(xiàn)
軟件側(cè)重于實時顯示數(shù)據(jù)、實時數(shù)據(jù)繪圖,實時監(jiān)控天線對星動態(tài)方面,那么軟件對ACU上傳數(shù)據(jù)顯示效果的好壞直接決定了用戶對軟件的評價。
CVI中有兩種定時調(diào)用函數(shù)的方法:一是Timer控件,二是異步定時器[12]。數(shù)據(jù)采集線程和顯示線程在串口打開時即開始運行,為了進一步保證安全隊列數(shù)據(jù)存儲無溢出,軟件采用線程池和Timer控件混合使用的編程方式。本文采用Timer控件定時監(jiān)測安全隊列中數(shù)據(jù)存儲量,并通過條件判斷是否打開新的數(shù)據(jù)讀取顯示線程。當發(fā)現(xiàn)數(shù)據(jù)存儲量>50%時,即開啟新線程讀取安全隊列中的數(shù)據(jù)并顯示、繪圖。通過這種線程池與Timer控件結(jié)合使用的模式,可將串口數(shù)據(jù)采集由50 Hz提高至原來的2~3倍,平均速度維持在100~150 Hz之間。
當設(shè)置Timer控件間隔時間為20 ms或20 ms以上時,安全隊列中的數(shù)據(jù)儲存較多,有數(shù)據(jù)溢出的可能,數(shù)據(jù)顯示時依舊有斷層現(xiàn)象。經(jīng)測試,當Timer控件時間間隔設(shè)置為11 ms時,曲線繪制效果流暢,實時性強,既防止了安全隊列中數(shù)據(jù)的溢出問題,又兼顧到了運行的穩(wěn)定性。
2.4 數(shù)據(jù)庫設(shè)計與實現(xiàn)
LabWindows/CVI支持對數(shù)據(jù)庫的訪問,不支持數(shù)據(jù)庫的開發(fā)。因此,LabWindows/CVI訪問數(shù)據(jù)庫需要借助NI公司開發(fā)數(shù)據(jù)庫系統(tǒng)軟件工具包SQL Toolkit才能實現(xiàn)對數(shù)據(jù)庫的訪問和操作。通過SQL工具包,CVI可以和任何符合ODBC標準的數(shù)據(jù)庫驅(qū)動器和符合ADO標準的產(chǎn)品協(xié)同工作[13]。
數(shù)據(jù)庫的交互操作是通過數(shù)據(jù)庫會話實現(xiàn)的,其中會話包含建立數(shù)據(jù)庫連接、激活SQL語句、處理SQL語句、釋放SQL語句和與數(shù)據(jù)庫斷開連接5個步驟[14]。由于軟件采用多線程編程,在使用SQL Toolkit前需進行初始化,函數(shù)原型為:int DBInit(int DB_INIT_MULTI_THREADED)。
數(shù)據(jù)庫主要包含常用衛(wèi)星的基本信息,如衛(wèi)星名稱、經(jīng)度、信標參數(shù)等,并且用戶可以根據(jù)需要添加(INSERT)、刪除(DELETE)、修改(MODIFY)、讀?。≧EAD)衛(wèi)星數(shù)據(jù)。數(shù)據(jù)庫界面如圖4所示。
3 系統(tǒng)集成與試驗
利用實驗室現(xiàn)有的低輪廓天線和跑車裝備對軟件的響應性能,功能實現(xiàn)進行了實地測試。跑車試驗基本裝備如圖5所示,將天線置于跑車頂端并隨機開動跑車監(jiān)測天線對星狀態(tài)。其中,信號強度和GPS定位系統(tǒng)會實時反映在軟件界面左端(常態(tài)展現(xiàn)欄),幫助用戶快速把握天線對星狀態(tài)。
在軟件運行過程中,本文使用Spotlight對軟件性能指標進行測試。Spotlight軟件是一款輕量級的遠程監(jiān)控工具,具有方便快捷的特點。針對性能測試的目的以及用戶的關(guān)注點,軟件性能指標監(jiān)測主要分為資源指標和系統(tǒng)指標兩大塊。具體指標如表1所示。
選取一次跑車測試如圖6所示,在移動載體上的天線對星過程中,有一處信號強度明顯下降,即說明天線在此處丟星。用戶可通過衛(wèi)星捕獲時間、丟星時各個數(shù)據(jù)顯示情況初步判斷突發(fā)狀況,并再次捕獲衛(wèi)星;AGC、方位角、俯仰角等數(shù)據(jù)的實時畫圖能力強,繪制圖像流暢,曲線無明顯階躍點,為用戶提供了良好的使用界面。
從用戶界面響應能力和高速串口數(shù)據(jù)采集、傳輸能力兩個方面測試軟件效果。從用戶界面來看,軟件反應用戶操作應達到準確迅速,曲線顯示穩(wěn)定流暢,無延遲、斷層現(xiàn)象的要求。從數(shù)據(jù)采集傳輸來看,原始數(shù)據(jù)應達到讀取及時,無丟包現(xiàn)象的要求;程序應運行穩(wěn)定,無死鎖現(xiàn)象。測試結(jié)果表明,軟件能夠快速準確地響應用戶的操作,ACU上傳數(shù)據(jù)讀取及時無丟包,數(shù)據(jù)處理分析準確快速,數(shù)據(jù)繪圖顯示實時穩(wěn)定,達到設(shè)計要求。
4 結(jié)束語
本文以Labwindows/CVI軟件為基礎(chǔ),設(shè)計了一個動中通控制系統(tǒng)軟件,通過ACU上傳的數(shù)據(jù)進行實時畫圖,清晰畫出天線角度偏差值、直觀展現(xiàn)衛(wèi)星旋轉(zhuǎn)角度、實時監(jiān)控信號強弱,增強用戶對天線的實時控制能力。其中,運用了基于安全隊列的多線程技術(shù),實現(xiàn)了軟件4大模塊的并行執(zhí)行,保證了每個任務(wù)可以有充足的時間可靠地完成任務(wù),避免軟件出現(xiàn)反應延遲現(xiàn)象。使用線程安全隊列技術(shù),保護了線程間共享數(shù)據(jù)的安全,防止數(shù)據(jù)死鎖,軟件崩潰。使用Timer控件技術(shù)定時判斷安全隊列中數(shù)據(jù)的存儲量,進一步避免了數(shù)據(jù)在傳輸過程中的丟包現(xiàn)象。最后,工程試驗驗證了本軟件在功能上和性能上的快速穩(wěn)定性,為系統(tǒng)工作的監(jiān)控、調(diào)試以及故障診斷提供了充分的技術(shù)支撐。
參考文獻
[1] 沈曉衛(wèi),姚敏立,李琳琳,等. 寬帶移動衛(wèi)星通信低成本組合姿態(tài)確定算法[J]. 西安交通大學學報,2011,45(6):64-68.
[2] WU Z W, YAO M L, MA H G, et al. Low-cost antenna attitude estimation by fusing inertial sensing and two-antenna GPS for vehicle-mounted satcom-on-the-move[J]. IEEE Trans Veh Technol,2013,62(3):1084-1096.
[3] 田方浩,姚敏立,伍宗偉,等. 低成本動中通姿態(tài)估計算法[J]. 宇航學報,2015,36(9):1036-1042.
[4] 薄志峰. 基于LabWindows/CVI的電動舵機自動化測試系統(tǒng)設(shè)計[J]. 國外電子測量技術(shù),2015,34(5):66-69.
[5] 張揚,肖世德. LabWindows/CVI平臺下虛擬信號分析儀的設(shè)計[J]. 自動化儀表,2016,37(2):89-94.
[6] 張煊工,陳雷. 基于LabVIEW的RS232通信協(xié)議時間裝定模塊研究[J]. 中國測試,2014,40(z1):139-141.
[7] YU Q F, ZHENG D Z, YANG Yi, et al. An arc fault detection method based on wavelet feature extraction and the design & realization by LabWindows/CVI[J]. Journal of Computers,2013,8(2):417-424.
[8] YANG S F, DAUDI S. Simbeye. Computerized greenhouse environmental monitoring and control system based on LabWindows/CVI[J]. Journal of Computers,2013,8(2):399-408.
[9] 白渚銓,張曉明,王宇. 基于LabWindows/CVI的數(shù)據(jù)處理軟件設(shè)計[J]. 計算機應用與軟件,2015,32(4):30-33.
[10] BENHUR A, WESTON J. A Users guide to support vector machines[J]. Methods Mol Biol,2010(609):223-239.
[11] 牛云鵬,王小鵬,房超,等. 利用LabWindows/CVI多線程技術(shù)實現(xiàn)實時數(shù)據(jù)采集[J]. 電子測試,2011(12):41-45.
[12] KATALIN A. Vibration detection of the electrical motors using strain gauges[J]. Procedia Technology,2016(22):.
[13] 陳曦,廖明夫,鄧旺群,等. 柔性轉(zhuǎn)子動平衡測試數(shù)據(jù)庫系統(tǒng)開發(fā)與驗證[J]. 測控技術(shù),2015,34(11):24-28.
[14] EON K, KLAUS E. Assessment of accuracy and repeatability of anterior segment optical coherence tomography and reproducibility of measurements using a customized software program[J]. Clinical and Experimental Optometry,2012,95(4):27-32.
(編輯:劉楊)