陳建棟,房陳巖,楊 靜
(1.上海濟物光電技術有限公司,上海 201815;2.中國科學院上海技術物理研究所,上海 2000833.上海德虹科學器材有限責任公司,上海 200083)
靜止衛(wèi)星海洋成像輻射計是用于在靜止軌道上進行水色定量化觀測的遙感儀器。其主要任務是海洋生態(tài)環(huán)境探測、海洋災害探測、海洋動力過程探測、大氣探測,為海洋科學研究等服務[1]。
靜止軌道水色衛(wèi)星與地球同步,盡管只覆蓋全球部分區(qū)域,但是由于相對地球靜止,可將觀測周期由天提高至小時,實現(xiàn)高時間分辨率的對地觀測,尤其有助于復雜多變的短期過程研究[2]。雖然低軌海洋衛(wèi)星時刻在監(jiān)測海洋狀況,但是同一個地區(qū)每天只能觀測一次,看不到一天內的變化情況。無法觀測整個海洋現(xiàn)象一天內是如何動態(tài)變化的,因此需要發(fā)展靜止水色衛(wèi)星[3]。靜止軌道遙感衛(wèi)星探測具有高時間分辨率連續(xù)探測等優(yōu)勢,已經(jīng)成為當前國際遙感探測領域一個重要發(fā)展方向[4],而海洋衛(wèi)星定軌與遙感定位精度是當前行業(yè)研究熱點[5]。
靜止衛(wèi)星成像輻射計樣機GOR(geostationary ocean radiometer)采取二維指向鏡加濾光片輪和面陣探測器的技術方案。通過多角度、多譜段、多通道成像進一步提高穩(wěn)定性和信噪比[6]。靜止衛(wèi)星指向鏡基于超精密六軸轉臺,儀器依靠二維指向鏡做東西與南北方向的運動指向,實現(xiàn)覆蓋區(qū)域的觀測和調整。由于二維指向鏡是各個光學譜段的總輸入口,因此二維指向鏡的設計和控制運轉尤為重要。
本文借助GOR光學和機械平臺,設計了一款通過串口通訊控制海洋輻射計指向鏡轉動的操控軟件,完成轉臺實時操控和自動運轉控制以及顯示功能。
超精密6自由度PI(physik instrumente)公司定位轉臺應用于靜止衛(wèi)星海洋成像輻射計預研項目的二維指向鏡。設計使用中,指向鏡的安裝位置如圖1所示,左側板為指向鏡的安裝位置,右側板為基座,中間六軸受控可伸縮,通過微機驅動控制達到左側板六自由度運動的效果。
圖1 超精密6自由度PI公司定位轉臺示意圖
在GOR項目中采用二維畫幅式成像模式,通過面陣靜態(tài)成像獲得靜態(tài)面陣圖像,通過指向鏡運動,實現(xiàn)一定范圍內視軸的指向。二維指向鏡有兩個轉軸,轉軸定義正交的X軸和Y軸,其中X軸需要轉動范圍±5°,Y軸需要轉動范圍±10°。指向鏡X、Y坐標軸的轉動通過機械結構設計演化為對PI轉臺的U軸和V軸的轉動控制。GOR依靠二維指向鏡實現(xiàn)觀測區(qū)域的調整和覆蓋,海洋探測目標通過光學系統(tǒng)傳遞給后端探測器, 光學系統(tǒng)如圖2所示。
圖2 光學系統(tǒng)示意圖
光學轉臺系統(tǒng)原理為:對成像目標探測需要作的視軸轉動,通過系統(tǒng)計算機處理器驅動控制精密機械轉臺運動,帶動光學指向鏡規(guī)律運轉,從而控制光路的傳遞方向,使探測器達到對探測區(qū)域的全覆蓋。
根據(jù)外場試驗的光學要求,需要控制轉臺按5×5的矩陣點,按蛇形逐點運動到每個位置,停頓一段時間且該時間可調,以便于指向鏡的穩(wěn)定和光學探測系統(tǒng)做一定的采集存儲圖像數(shù)據(jù)工作。在某些特殊情況,這樣的連續(xù)運動狀態(tài),需要急停和繼續(xù)自動運轉,這就需要轉臺到某點位置作停留時,可以控制轉臺暫停當前狀態(tài)直到繼續(xù)自動運轉。
由于PI公司轉臺的基礎控制軟件是基于LabView的上位機軟件,再開發(fā)性低,不具備試驗所要求的軟件功能。而通過手動操作,又有操作困難,定時不準的問題。外場試驗效率較低。針對這一問題亟需開發(fā)一款具有定時運轉、定點停頓、多參數(shù)可調等功能的定制自動軟件。
操控軟件采用結構化程序設計方法。基本思路是:把一個復雜問題的求解過程分階段進行,每個階段處理的問題都控制在人們容易理解和處理的范圍之內。具體說采用自頂向下、逐步細化、模塊化設計、結構化編碼來保證得到結構化的程序[7]。在Windows應用程序中,對話框是應用程序界面的重要形式。不論是打開文件,還是查詢數(shù)據(jù),以及數(shù)據(jù)交換時都會用到對話框,對話框是實現(xiàn)人機交互的一條途徑[8]。軟件使用VC++開發(fā)設計,為了便于編程嵌入小番茄控件。利用MFC應用程序向導創(chuàng)建對話框應用程序。在MFC應用程序向導可選單文檔、多文檔、模態(tài)和非模態(tài)對話框的創(chuàng)建。由于應用程序只是在單個對話框中實現(xiàn)特定功能,軟件設計選擇模態(tài)對話框的創(chuàng)建和顯示。使用MFC搭建軟件整體框架。添加操作按鈕和輸入輸出編輯框,軟件在功能上共分為四大模塊:通訊的建立和結束模塊、參數(shù)導入模塊、運動控制模塊(含位置初始化、自動運轉模塊、UV軸轉角定位控制、多線程技術子模塊)、數(shù)據(jù)顯示模塊。
操控軟件與PI的平臺控制模塊接口相互連接,PI的平臺控制模塊庫函數(shù)均是以動態(tài)鏈接庫的形式提供。動態(tài)鏈接庫通常用于封裝一些功能函數(shù),在不公開源碼的情況下可以供其它應用程序開發(fā)使用。PI公司二次開發(fā)程序包中提供了動態(tài)鏈接庫文件PI_GCS2_DLL.dll和PI_GCS2_DLL.h[9]。操控軟件設計中需要插入和調用PI公司二次開發(fā)程序包中的庫函數(shù)文件。整個軟件工程項目建立后,將這兩個文件加入到項目工程文件。
在軟件功能模塊開發(fā)中需要調用函數(shù)庫的以下函數(shù):與PI機構建立RS-232串口通訊連接函數(shù)PI_ConnectRS232(2,115200);斷開連接函數(shù)PI_CloseConnection(ID);移動某軸到某絕對位置函數(shù)PI_MOV(ID,axis, &dVal);得到實際位置函數(shù)PI_qPOS(ID, axis, &dPos);檢查軸系是否有所運轉函數(shù)PI_IsMoving(ID, axis, &bIsMoving)。其設計需求功能如圖3所示。
圖3 操控軟件功能圖
操控軟件與PI的平臺控制模塊可以通過以太網(wǎng)或USB2.0或串口通訊方式。串口通訊連接簡便快捷,選擇異步串口通訊方式。在計算機中對RS-232端口轉接成RS-485,實際通過RS-485串行接口進行通訊,提高通訊距離和可靠性。通訊的建立和結束模塊實現(xiàn)過程如下,主要是連接串口和設置波特率,關閉串口。打開和關閉普通定時器。
操控軟件的參數(shù)導入模塊由跨度參數(shù)、自動運動模式參數(shù)和時間參數(shù)3部分組成。自動周期運動模塊U軸和V軸的單次跨度參數(shù)可以設置。PICTLDlg.cpp主程序中,初始化設置為0.3°,開始自動運動模式下,若需要設置新的運動跨度值,可以從界面編輯框輸入新值,程序從IDC_EDIT5編輯框獲取輸入值傳遞給U_step、V_step變量。
自動運動模式參數(shù)包括常用2×2、5×5模式和自設模式。由于試驗中常用的巡掃模式為2×2、5×5模式,因此程序中通過添加單選按鈕控件,用戶可選擇2×2、5×5和自設模式中的一種。自設模式運動頻次可以設置,需要通過該模式下的編輯框輸入2~10之內的整數(shù)輸入,這樣可以增加程序的使用靈活性和拓展性。該參數(shù)的輸入值具有記憶功能,在程序關閉后,巡掃模式修改按鈕按下后,參數(shù)存儲在9pictl.ini文件中。程序重新開啟,會初始化上次的模式選擇。
巡掃模式下,用戶需要作一段時間的圖像數(shù)據(jù)存儲和處理工作。轉臺運轉到特定點的坐標位置后,需要停頓一段時間。該參數(shù)定義為運動時間間隔InterTime。通過InterTime數(shù)據(jù)對象傳遞給調用的系統(tǒng)Sleep(1 000*InterTime)函數(shù),調配停頓時間。
1)位置初始化:
自動運轉是基于光學指向鏡的初始化位置而運轉的。在自動運轉之前,需要找到指向鏡的零位。軟件設計回歸零位按鈕,通過定位控制函數(shù)OnReset()使六軸回歸零位。
2)自動運轉模塊:
操控軟件中的自動周期運轉模塊,采用循環(huán)結構程序設計。靜止衛(wèi)星成像輻射計的指向鏡運轉模式缺省為5×5巡掃模式,而且該模式的程序控制具有典型性。本文以巡掃5×5運動模式來論述程序算法設計,自動巡掃5×5模式下PI轉臺運動軌跡為單點蛇行運轉。轉臺運動的軌跡和轉次計數(shù)如圖4所示。
圖4 定位轉臺5×5模式巡掃模式示意圖
采用增量計算當前運動軌跡下一點的坐標,通過函數(shù)PI_MOV(ID, axis, &dVal),移動某軸到某絕對位置。每次運動方向為直線,U、V兩軸并非同時運動。通過函數(shù)PI_MOV(ID, axis, &dVal),移動某軸到某絕對位置。在實際使用中橫向定義為U軸,縱向定義為V軸。采用for( )語句進行兩極嵌套循環(huán)。通過計算縱向坐標點g_j數(shù)據(jù)的單雙數(shù),判斷U軸正向轉動還是反向轉動。UVSet_Upos為初始化的U軸坐標值。通過g_i變量的自動加一,完成0~1,1~2,2~3,3~4四次橫向轉動。反向轉動反之亦然。完成一行橫向運轉后,跳出第二級for循環(huán),縱向轉動一個格點,g_j變量自動加一,若第一級for循環(huán)仍然滿足運行條件,則再次運行第二級for循環(huán)。依次反復,直到g_j變量由4變?yōu)?后,跳出兩極循環(huán)從而周期運動功能完成。
軟件編寫以用戶為本,在使用過程中編寫者與用戶相互溝通協(xié)調,軟件功能增量添加,逐步變大變復雜。在程序后續(xù)版本還附加停轉控制功能,二級for循環(huán)中適時加上0x55==StopFlag判斷,若用戶發(fā)出急停指令,通過break語句跳出兩級for循環(huán),停止自動運轉模式。當用戶恢復狀態(tài)后可通過繼續(xù)按鈕來繼續(xù)進行當前自動運轉的狀態(tài)。
指向鏡的轉臺5×5模式巡掃模式自動運轉設計算法流程圖如圖5所示。
圖5 自動運轉5×5巡掃模式程序設計流程圖
自動運轉5×5巡掃模式程序代碼設計如下:
for (g_j=0;(g_j< 5)&&(0x55==StopFlag);)
{
//g_i為運動頻次
for(g_i=0; (g_i < 4)&&(0x55==StopFlag); )
{
char axis_u[] = "U";//控制U軸運動
if (0==g_j%2 )//j為0,2,4行正轉
!MoveTo(ID, axis_u, UVSet_Upos+Ustep*(g_i+1) ) ;
else//j為1,3行回轉
MoveTo(ID, axis_u, UVSet_Upos+Ustep*(3-g_i) ) ;
if (!(4==g_j && 3==g_i) )//最后一點不停頓
Sleep(1000*IntTime);//到位后停頓60s間隔時間
if (0xAA == StopFlag)//查詢暫停模式 break;
g_i++;
}
// V轉一下,j為4時V軸已轉完,內循環(huán)暫停
if ((g_j < 4)&&(0x55 == StopFlag))
{
char axis_v[] = "V";//轉到V軸運動
MoveTo(ID, axis_v, UVSet_Vpos+Vstep*(g_j+1) );
Sleep(1000*IntTime);//到位后停頓60s
}
if (0xAA == StopFlag)//查詢暫停模式
break;
g_j++;
}
3)轉軸定位控制模塊:
U軸的轉動控制操作,通過編輯框中輸入的定位數(shù)據(jù)。V軸類似。通過UV軸定位按鈕調用OnUVSet()函數(shù),使得轉臺定位于給定的位置。
4)多線程控制:
由于在自動運轉控制程序中,使用了普通定時器函數(shù)SetTimer(1,20,NULL)并設置定時器的時間周期為20 ms。程序編寫之初,轉軸位置的顯示刷新時間也采用該定時周期。在控制軟件和轉臺機構聯(lián)機調試中,出現(xiàn)轉軸定時運轉的過程中,位置數(shù)據(jù)監(jiān)顯卡頓,并非實時顯示,而是到一個位置鏡面機構停頓下來時,才顯示數(shù)據(jù)。分析原因是程序中普通定時器函數(shù)中,包含轉軸位置的顯示和循環(huán)轉動控制兩個任務。其中循環(huán)轉動控制任務比較費時,占用較多資源。在一個定時器循環(huán)中產(chǎn)生沖突,出現(xiàn)搶占資源情況。如果用戶在程序中需要同時實現(xiàn)多個操作,必須采用多線程技術[10],實現(xiàn)界面操作的實時控制和響應。因此軟件采用改進的方法,添加多線程控制函數(shù)。將位置數(shù)據(jù)顯示放在普通定時器里處理,自動運轉控制放在新創(chuàng)建的線程里處理。由于使用MFC搭建軟件整體框架,在MFC應用程序中,使用AfxBeginThread函數(shù)創(chuàng)建一個線程比較簡便易行。定義一個名為ThreadData的結構體數(shù)據(jù)類型,包含停頓時間參數(shù),U向跨度和V向跨度。
自動運轉5×5巡掃模式控制下定義一個ThreadData數(shù)據(jù)類型的TD變量,把具體數(shù)據(jù)賦值給3個成員函數(shù)。使其在內存中占用一段連續(xù)空間。并擁有一個首地址&TD。然后通過AfxBeginThread函數(shù)創(chuàng)建轉臺運轉控制線程:AfxBeginThread(MoveThread,(LPVOID)&TD,0,0,0,NULL);
調用MoveThread()線程函數(shù),通過首地址&TD傳遞數(shù)據(jù)參數(shù),執(zhí)行轉臺運轉循環(huán)。定義一個線程函數(shù),用于執(zhí)行轉臺運轉循環(huán)。
UINT MoveThread(LPVOID pParam)//轉臺運轉控制線程
{
ThreadData *pPm = (ThreadData *)pParam;
unsigned short IntTime = pPm->InterTimeThread;
double Ustep = pPm->U_stepThread;
double Vstep = pPm->V_stepThread;
for (g_j=0; ; ){......} // g_j為V運動頻次
}
數(shù)據(jù)顯示模塊包含UV軸實時位置監(jiān)現(xiàn)和自動運轉頻次顯示組成。UV軸實時位置只要轉軸運轉,通過采集U_pos,V_pos數(shù)據(jù)。自動運轉模式下,設置了圖像計數(shù)器PictureNum,若運動一個位置,則圖像計數(shù)器自動加一,通過界面顯示,可使用戶得知當前運動頻次。通過設置一個20 ms的普通定時器,通過更新對話框中顯示數(shù)據(jù),得到位置數(shù)據(jù)和運動頻次顯示。應用多線程程序設計之后,再次通過控制軟件和轉臺機構聯(lián)機調試,操控軟件能實時顯示和響應界面操作。之前界面拖動,數(shù)據(jù)顯示,界面最大化,最小化,操作卡頓的問題得以解決。
該靜止衛(wèi)星指向鏡的操控軟件采用模塊化的程序設計方法,這種程序設計方法便于程序編寫,閱讀,修改和維護,能提高程序可靠性,保證程序的質量。該軟件設計是一個項目實戰(zhàn)過程,在設計中先搭好整體框架,再把各個模塊增量設計加入。軟件開發(fā)是與用戶相互溝通協(xié)調的過程,有一個增量添加逐步變大變復雜的過程。例如自動運轉模塊從逐行掃描模式,經(jīng)過溝通改為蛇形掃描。軟件增加巡掃模式選擇、停轉控制、一鍵初始化零位功能。自動運轉通過多線程技術,解決多任務沖突、解決程序實時性、解決卡頓和等待問題。操控軟件設計完成后通過編譯調試,生成的操控應用軟件界面如圖6所示。
圖6 操控軟件界面圖
項目組在杭州灣大橋構建了基于海上塔臺的水體光譜連續(xù)采集系統(tǒng)。使用本文所設計的GOR操控軟件進行外場的多次試驗,基于現(xiàn)場觀測資料,研究人員系統(tǒng)評估了GOR的遙感監(jiān)測精度;海上塔臺觀測的水體光譜資料已應用于我國“天宮二號”空間實驗室水色成像儀的在軌測試。靜止衛(wèi)星指向鏡基于PI六軸轉臺特有的六柱伸縮機械結構,采用自動運轉操控軟件,到位后指向鏡自動停頓,時間可調,克服了大慣量轉動體在穩(wěn)定位置附近微振動的問題[11],實現(xiàn)了靜止衛(wèi)星指向鏡的高分辨率定位。
本文在Microsoft Visual C++6.0應用程序開發(fā)環(huán)境下,利用微軟基礎類庫MFC設計開發(fā)靜止衛(wèi)星成像輻射計樣機(GOR)指向鏡的上位機操控軟件,軟件設計中通過RS-485串口通訊方法連接PI公司的超精密六軸轉臺驅動器及六軸轉臺。使用多線程技術,完成基于PI轉臺的GOR指向鏡巡掃模式自動控制,運轉多參數(shù)可調,數(shù)據(jù)顯示、自動運轉急停和繼續(xù)等多種功能。
通過外場多次試驗,充分驗證了本文所設計操控軟件的功能和可靠性,證實該軟件達到設計要求。該軟件大大提高了外場試驗效率,通過優(yōu)化界面、功能嵌入,在后續(xù)項目開發(fā)中可以編寫多視圖的數(shù)據(jù)采集處理和操控的一體化軟件,體現(xiàn)了本軟件良好的兼容性和可擴充性,可以為靜止衛(wèi)星海洋成像輻射計的型號化做好準備。