• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      WPF/STK集成的衛(wèi)星軌道引導(dǎo)文件自動生成方法

      2020-09-02 08:31:50薛乃陽劉步花
      計算機(jī)測量與控制 2020年8期
      關(guān)鍵詞:控件代碼軌道

      薛乃陽,丁 丹,劉步花

      (1.航天工程大學(xué) 研究生院,北京 101416;2.航天工程大學(xué) 電子與光學(xué)工程系,北京 101416)

      0 引言

      WPF(windows presentation foundation)是微軟新一代的圖形系統(tǒng),是專門用來編寫程序表示層的技術(shù)和工具[1],它為用戶界面、2D/3D圖形、文檔和媒體提供統(tǒng)一的呈現(xiàn)和操作方式[2]。WPF引入一種全新的描述性標(biāo)記語言XAML(extensible application markup language)來定義應(yīng)用程序的靜態(tài)結(jié)構(gòu),后臺邏輯則可使用C#、C++等語言來完成。這樣做既可以更好地協(xié)同界面設(shè)計與程序設(shè)計,又將界面顯示與應(yīng)用程序背后的邏輯解藕開來,降低了開發(fā)與維護(hù)的成本[3]。

      獲取軌道引導(dǎo)文件最常用的仿真軟件是STK(衛(wèi)星工具箱),它是美國AGI公司開發(fā)的軍事領(lǐng)域領(lǐng)先的系統(tǒng)分析工具。該軟件可以應(yīng)用于復(fù)雜海陸空天任務(wù)的分析,其強(qiáng)大的數(shù)據(jù)分析計算能力和良好的二三維展示功能幫助用戶更好的理解場景,加上模型精確可靠、開發(fā)接口豐富,在國內(nèi)外運(yùn)用廣泛[4]。由于STK中內(nèi)置了很多的坐標(biāo)系類型和軌道攝動外推算法,可以通過這些復(fù)雜的算法確定任意坐標(biāo)系下任意時刻的衛(wèi)星時基信息[5]。航天測控系統(tǒng)是航天系統(tǒng)的重要組成部分之一。在每次測控任務(wù)開始之前,測控站需要計算出目標(biāo)航天器在相對于測站的位置坐標(biāo)和速度信息(即衛(wèi)星軌道引導(dǎo)文件),以保證后續(xù)任務(wù)能夠順利展開。目前獲得引導(dǎo)文件的方法主要是單一操作STK軟件生成軌道/彈道星歷數(shù)據(jù)[6],其具體流程如圖1所示。

      圖1 STK軟件獲取引導(dǎo)文件的流程

      雖然STK有效解決了軌道引導(dǎo)文件的獲取問題,但由圖1可知,如果在測控任務(wù)中更換目標(biāo)衛(wèi)星,就要停止仿真,重新按照流程逐一設(shè)定相關(guān)參數(shù);此外,從STK上直接獲得的報表格式與規(guī)定格式有差異,還需手動更改數(shù)據(jù)格式,才得到正確的文件。本文結(jié)合WPF和STK兩個軟件各自的優(yōu)點(diǎn),通過設(shè)置WPF的主程序界面及其后臺邏輯,用C#指令控制STK的運(yùn)行并進(jìn)行文件格式處理,使仿真系統(tǒng)按照WPF預(yù)先設(shè)定的程序運(yùn)行,從而簡化了操作流程,提高了獲取軌道預(yù)報文件的速度和正確率。本文以實(shí)際應(yīng)用為背景,結(jié)合衛(wèi)星軌道預(yù)報文件的自動獲取問題,對其分析過程以及相應(yīng)的編程給出了詳細(xì)的闡述和說明。

      1 WPF和STK集成的途徑

      STK支持多種開發(fā)任務(wù)的基礎(chǔ)是 STK 以一系列控件、注冊 COM 組件和類庫的方式對外提供服務(wù)。其二次開發(fā)的方法主要有3種:Connect模塊、STK對象模型(STKObjectModel)和應(yīng)用程序?qū)ο竽P蚚8]。在方式一中,用戶只需調(diào)用相應(yīng)的函數(shù)即可實(shí)現(xiàn)與STK之間的通訊;方式二靈活性強(qiáng),集成度高,利用STK提供的開發(fā)包可以獨(dú)立的開發(fā)應(yīng)用程序。在現(xiàn)有研究中,方式一最多,但涉及STKObjectMode的研究極少。本文主要使用STKObjectMode進(jìn)行WPF和STK的集成開發(fā)。在VisualStudio 2017中實(shí)現(xiàn)了STK11.2與WPF的集成,并實(shí)現(xiàn)了軌道預(yù)報文件的自動化獲取。

      1.1 STK對象模型

      STK對象模型是一組 COM 類庫,包括 STK Objects,STK X等組件。這些組件分別用于控制STK實(shí)體,管理實(shí)體生命周期,獲取數(shù)據(jù),接近分析和覆蓋計算,事件響應(yīng)等。此外,STK對象模型是基于COM技術(shù)構(gòu)建的,可用支持COM的C#、C++、Java等語言開發(fā),本文采用C#編程。

      1.2 配置WPF/STK集成開發(fā)環(huán)境

      在WPF中添加STK的程序集引用,配置WPF/STK集成開發(fā)環(huán)境,是二者集成開發(fā)的基礎(chǔ)。首先,打開Visual Studio 2017軟件,新建WPF工程項(xiàng)目,選擇.NET FrameWork 4作為工程的框架。其次,添加程序集引用,在解決方案管理器中,右擊“引用”下“添加引用”,打開引用管理器;在對話框中點(diǎn)擊“程序集”,勾選“System.Windows.Forms”“WindowsFormsInt-egration”;點(diǎn)擊“程序集”下面的“com”庫,勾選“AGI STK Objects 11”、“AGI STK X 11”。最后,點(diǎn)擊“com”庫下面的“瀏覽”,依次選擇路徑“STK安裝目錄”->“bin” ->“Primary Interop Assemblies”,勾選程序集“AxAGI.STKX.Interop.dll”。注意,如果STK二次開發(fā)項(xiàng)目涉及較多程序集的話,應(yīng)該添加其他相應(yīng)的程序集,比如如果涉及到STK桌面軟件相關(guān)操作,則應(yīng)添加“AGI UI Application 11”等程序集。

      1.3 STK二次開發(fā)命令集

      C#的二次開發(fā)命令集(C# Code Snippets)涵蓋了STK可以實(shí)現(xiàn)的大部分功能,對使用STK軟件開發(fā)包進(jìn)行自有應(yīng)用程序開發(fā)有較大參考價值。存放位置在Help文檔中的integration.chm->UsingCoreLibraries->STKObjectModel->C#CodeSnippets。用戶在進(jìn)行二次開發(fā)時,編寫的主程序與STK之間實(shí)現(xiàn)信息交互需要使用這些命令并嚴(yán)格遵循其命令格式[9]。

      2 問題提出與總體方案設(shè)計

      配置過集成開發(fā)環(huán)境后,便可進(jìn)行下一步的WPF/STK集成仿真應(yīng)用。下面以自動獲取軌道預(yù)報文件為例,詳細(xì)介紹使用WPF/STK集成仿真方式獲取衛(wèi)星軌道數(shù)據(jù)等參數(shù)并進(jìn)行處理的過程。

      2.1 問題陳述與限定條件

      1)問題陳述:設(shè)定測站的位置為北緯40.3°,經(jīng)度116.23°,計算并選擇衛(wèi)星高仰角過境時間段;在選擇的時間段內(nèi)以1 s為間隔,生成衛(wèi)星相對于測站坐標(biāo)系的位置和速度坐標(biāo),創(chuàng)建軌道預(yù)報文件。

      2)限定條件:衛(wèi)星的軌道信息由插入的TLE軌道根數(shù)確定,格式要求軌道引導(dǎo)文件時間要轉(zhuǎn)化為為北京時間(UTCG時間加8小時),并且年、月、日和時、分、秒分別用八位和十位的數(shù)字來表示,表示位置的x、y、z坐標(biāo)保留三位小數(shù),表示速度的x、y、z分量保留六位小數(shù),并在每一行都顯示出衛(wèi)星的名稱。

      2.2 總體方案流程設(shè)計

      1)WPF與STK集成并調(diào)試;

      2)設(shè)計WPF主程序界面。根據(jù)任務(wù)需求,用XAML語言添加并定義相應(yīng)的控件;

      3)在后臺邏輯中進(jìn)行具體場景的設(shè)定與編程。用C#語言設(shè)置場景時間、新建衛(wèi)星與測站、獲取過境報表、獲取軌道參數(shù)、更改報表格式及生成并保存軌道預(yù)報文件等。在主程序界面中通過導(dǎo)入衛(wèi)星TLE文件,輸入任務(wù)大致起始時間,先獲取衛(wèi)星過境報表并顯示在主程序界面上;在界面上選擇衛(wèi)星高仰角過境時間段,并將選擇的小范圍起始時間段輸入界面;點(diǎn)擊相應(yīng)的按鈕,便可自動獲取衛(wèi)星軌道預(yù)報文件,任務(wù)場景的可視化仿真也可以在主程序界面中顯示??傮w的流程圖如圖2所示。

      圖2 集成程序流程

      3 仿真程序設(shè)計

      程序主要由兩大部分組成,根據(jù)WPF設(shè)計的特點(diǎn),可分為用XAML語言定義的主界面程序和用C#編寫的后臺邏輯程序。

      主界面程序的主要功能是獲取和顯示輸入?yún)?shù),用戶點(diǎn)擊對應(yīng)的按鈕控件并執(zhí)行關(guān)聯(lián)的后臺邏輯程序,經(jīng)運(yùn)算程序運(yùn)算后,主界面上會顯示仿真2D/3D圖像,并將最終的軌道引導(dǎo)文件保存到設(shè)定位置。

      3.1 主界面程序設(shè)計及說明

      主界面程序需要實(shí)現(xiàn)的功能是設(shè)置并定義控件信息、讀取輸入?yún)?shù)并傳給后臺邏輯程序。為了顯示STK的可視化界面,需要利用STKX中的AxAgUiAxVOCntrl與AxAgUiAx2DCntrl類庫,它們分別提供二三維可視化界面顯示的功能。

      配置好WPF與STK集成開發(fā)環(huán)境后,進(jìn)行主程序界面設(shè)計的關(guān)鍵XAML語句如下:

      1)在其命名空間引用中添加STK程序集,并命名為“stkLian”,程序語句為xmlns:stkLian="clr-namespace:AxAGI.STKX;assembly=AxAGI.STKX.Interop"。

      2)在主程序窗口中添加STK3D視圖窗口的控件,設(shè)置其顯示在WPF中的WindowsFormsHost模板控件上。程序語句為

      3)在主程序窗口中添加STK2D視圖窗口的控件。程序語句為

      4)設(shè)置主程序界面上的按鈕和文本框等控件,并為其添加事件處理程序,與后臺邏輯代碼相對應(yīng),設(shè)置控件代碼在此不贅述。

      3.2 后臺邏輯程序設(shè)計及說明

      后臺邏輯程序就是用C#語言給添加的STK程序集發(fā)送指令,編寫在主程序中添加的各個事件處理程序,使其分別完成場景創(chuàng)建、測站創(chuàng)建、衛(wèi)星創(chuàng)建、過境計算等任務(wù),之后進(jìn)行報表參數(shù)設(shè)置、存儲并輸出相應(yīng)數(shù)據(jù)并轉(zhuǎn)換格式,最后生成軌道引導(dǎo)文件。根據(jù)實(shí)際問題需要,相應(yīng)的C#控制語句可以在上文介紹的C#開發(fā)命令集查詢,語句如下:

      1)在窗體的類文件頭部加入命名空間引用,代碼為:using AGI.STKObjects。

      2)對于每一個STK應(yīng)用程序,有唯一的根節(jié)點(diǎn)AgStkObjectRoot對象[8],可通過此對象控制STK場景。此外,這是唯一可以直接創(chuàng)建的對象,其余對象模型必須間接獲得。代碼語句為:

      AGI.STKObjects.AgStkObjectRoot root;public MainWindow()

      {InitializeComponent();

      root = new AGI.STKObjects.AgStkObjectRoot();}

      3)編寫主程序窗口xxxx按鍵的時間處理器程序,程序語句示例為:

      private void xxxx_Click(object sender,RoutedEventArgs e)

      {//根據(jù)具體需求編寫調(diào)用信息處理函數(shù)}

      下面給出主要步驟在開發(fā)命令集中的名稱及含義:

      a.創(chuàng)建場景,并設(shè)置場景時間,代碼名稱為Create a new scenario;

      b.創(chuàng)建測站,設(shè)置其經(jīng)緯度,語句名稱為Create a facility on Earth at lat/lon/alt;

      c.新建衛(wèi)星,代碼名稱為Create a satellite (on current scenario central body);

      d.對衛(wèi)星設(shè)置SGP4軌道預(yù)報器,代碼名稱為Set the satellite to use the SGP4 propagator;

      e.用TLE軌道根數(shù)定義衛(wèi)星運(yùn)行軌道,代碼名稱為Configure the SGP4 propagator with file source,示例程序中的“2215”代表衛(wèi)星的SSC序列號(TLE文件中航天器SSC目錄編號),tleFilePath代表TLE文件在電腦中的位置;

      f.計算衛(wèi)星過境情況并獲取報表,代碼名稱為Configure the SGP4 propagator with file source;

      g.保存場景,代碼名稱為Save a scenario。

      4 發(fā)現(xiàn)的問題歸納及解決

      4.1 注釋的分類及含義

      在C#開發(fā)命令集中,表頭是代碼名稱,注釋在程序前,并用“//”表明,如圖3所示。這些注釋分為兩種,第一種是說明在使用這段代碼前需要聲明的變量和需要在命名空間中引用的命令集,第二類注釋主要用來說明本段代碼的功能。通過注釋內(nèi)容和在文件中的位置可以判斷注釋類型,如圖3(a)所示,第一類注釋在上側(cè),兩類注釋之間用兩行隔開;若文件中無第一類注釋,第二類注釋會與表頭空兩行,如圖3(c)所示。

      圖3 開發(fā)程序集的內(nèi)容及注釋分類

      分清注釋類型,讀懂其含義是編寫正確代碼的必要條件。比如,在創(chuàng)建測站等場景時的第一類注釋為“//IAgStkObject-Root root:STK Object Model root”,表明這是通過根節(jié)點(diǎn)AgStkObjectRoot提供的方法和屬性加載的對象,需要在前文聲明好根節(jié)點(diǎn)。此外,利用TLE創(chuàng)建衛(wèi)星時步驟如圖4所示,仿真衛(wèi)星軌道需使用“SGP4”預(yù)報器?!癝GP4”(簡化的通用攝動預(yù)報器)是美軍空間司令部的標(biāo)準(zhǔn)預(yù)報器,需要與TLE雙軌道根數(shù)一起使用[10]。在STK 11.2設(shè)置SGP4預(yù)報器的示例代碼段中,第一種注釋為“// IAgSatellite satellite:Satellite object”,表明寫入這段代碼之前先要創(chuàng)建衛(wèi)星對象。

      圖4 插入TLE軌道根數(shù)衛(wèi)星的流程

      4.2 引導(dǎo)文件內(nèi)容設(shè)置程序要點(diǎn)

      在STK中,計算和軌道預(yù)報的功能集中在“Report”中,可以點(diǎn)擊其屬性按鈕為報告定義時間段、設(shè)置報告內(nèi)容、設(shè)置單位和輸出數(shù)據(jù)。在示例代碼段中,定義時間段和設(shè)置單位的代碼比較簡單,直接套用即可,在此不贅述。下面著重介紹設(shè)置報告內(nèi)容和輸出數(shù)據(jù)的代碼,表1給出了所需要數(shù)據(jù)在STK中的存儲位置和層數(shù)。

      表1 數(shù)據(jù)名稱位置表

      由表1可以看出,設(shè)置“Report”報告內(nèi)容是在“DataProviders”選擇的,用戶需要通過子對象集合層層向下獲取所需要的對象。但是根據(jù)所需對象的位置所處的層數(shù),可以分為兩層和三層結(jié)構(gòu)。以獲取衛(wèi)星過測站的時間和高度角為例,獲取兩層結(jié)構(gòu)的數(shù)據(jù)代碼如下:

      Array dataPrvElements = new object[]{ "Time","FromElevationAngle"};

      IAgDataPrvTimeVardp = access.DataProviders["Constraint Data"] as IAgDataPrvTimeVar;//選擇ConstraintData

      以獲取某時段衛(wèi)星相對于測站的時間和位置坐標(biāo)為例,三層結(jié)構(gòu)的程序如下:

      Array elems = new object[]

      { "Time","x","y","z"};

      IAgDataProviderGroupdpVectorChoose = sat1.DataProviders["Vectors(Fixed)"] as IAgDataProviderGroup;//選擇Vectors(Fixed)

      IAgDataProvidergroupPosition = dpVectorChoose.Group["Position"] as IAgDataProvider;//選擇Position

      4.3 生成初始報表

      C#開發(fā)命令集中的示例程序沒有把獲取的數(shù)據(jù)寫入txt文檔的功能,可以通過添加用System.IO中Stream類的語句來修改原代碼,實(shí)現(xiàn)數(shù)據(jù)的讀寫操作。首先,在后臺邏輯程序的命名空間中添加引用“usingSystem.IO”;其次,使用IO大類中的的StreamWriter類和StreamReader類來實(shí)現(xiàn)對文本文檔的讀寫功能,具體代碼不贅述;最后,把示例代碼中的“WriteLine”全部改為“sw.WriteLine”,就可以實(shí)現(xiàn)存入txt文檔的目的。

      4.4 更改引導(dǎo)文件格式

      對照上文對引導(dǎo)文件的限定條件,更改初始報表格式。首先,在資源管理器中添加一個儲存軌道預(yù)報表數(shù)據(jù)的Code類,右擊項(xiàng)目名稱->“添加”->“新建項(xiàng)”,打開添加新項(xiàng),點(diǎn)擊“VisualC#”下面的“Code”->“類”,并把新建的這個類命名為“SatelliteData.cs”,在這個類下面按顯示項(xiàng)目的類型分為八類,分別從初始的軌道預(yù)報文件中存入到相應(yīng)的類中。月份由英文簡寫轉(zhuǎn)為兩位數(shù)字可以通過編寫“Dictionary”類來解決,將月份和對應(yīng)的簡寫存入字典類,在后面的轉(zhuǎn)化中通過編寫查閱此類代碼來完成轉(zhuǎn)換。

      5 結(jié)果與分析

      5.1 仿真過程與圖像

      確定測控任務(wù)大致時間段為2020年3月12日至15日,衛(wèi)星名稱為“Satellite1”,導(dǎo)入相應(yīng)的TLE文件。主程序界面輸入的仿真結(jié)果如圖5所示。

      圖5 主程序界面輸入?yún)?shù)

      5.2 仿真結(jié)果分析

      在主程序界面下方的衛(wèi)星過境報表中選擇高仰角過境時段。在界面顯示的過境報表中,表示衛(wèi)星過境仰角的數(shù)據(jù)名稱為“FromElevationAngle”。通過與其他時段的比較可得,在衛(wèi)星第14次過境的時間窗口中可出現(xiàn)最大高度角,為68.17°;因此選擇這一點(diǎn)附近的時間段:3月15日03時44分13秒至03時50分13秒,再次輸入時間窗口,依次點(diǎn)擊其余的按鈕控件,得到最終的軌道引導(dǎo)文件表頭及部分?jǐn)?shù)據(jù)信息如圖6所示。

      圖6 最終自動生成的軌道引導(dǎo)文件

      經(jīng)對比,自動獲取的軌道引導(dǎo)文件與單獨(dú)操作STK軟件得到的文件數(shù)據(jù)一致,用戶還可以通過點(diǎn)擊主界面中的“保存場景”按鍵將WPF集成開發(fā)的STK場景保存,方便日后查閱。如果需要獲取其它時間段的軌道預(yù)報文件,直接在時間窗口中重新輸入即可。

      主程序可以根據(jù)特定測控任務(wù)需求特別定制,界面簡潔明了,省去了繁瑣的操作步驟,操作簡單快捷的同時還保證了更高的正確率,大大提高了獲取軌道引導(dǎo)文件的效率。由于WPF有可以使圖形界面和程序界面分開設(shè)計的特性,本文的案例中設(shè)計的主程序窗口還可以添加更多的控件,從而滿足用戶比如更改測站位置等更多樣化的需求,所以功能還有很大的可擴(kuò)展性。綜上所述,運(yùn)行結(jié)果基本滿足了設(shè)計要求。

      6 結(jié)束語

      通過實(shí)際應(yīng)用案例,表明了WPF與STK集成仿真的優(yōu)越性。在獲取衛(wèi)星軌道預(yù)報文件的仿真中,若僅使用STK,會面臨操作步驟繁瑣,重復(fù)工作較多和容易出錯等現(xiàn)實(shí)問題。如果通過WPF與STK集成仿真,就可以把WPF完善的界面開發(fā)框架、豐富的控件模型和多媒體交互支持等優(yōu)點(diǎn)簡化任務(wù)流程,極大地提高獲取軌道引導(dǎo)文件的速度和準(zhǔn)確率。上述介紹的具體集成開發(fā)方法還可以根據(jù)實(shí)際情況拓展至其他相應(yīng)的航天任務(wù)領(lǐng)域,具有較強(qiáng)的實(shí)用性。

      猜你喜歡
      控件代碼軌道
      基于單純形法的TLE軌道確定
      CryoSat提升軌道高度與ICESat-2同步運(yùn)行
      朝美重回“相互羞辱軌道”?
      創(chuàng)世代碼
      動漫星空(2018年11期)2018-10-26 02:24:02
      創(chuàng)世代碼
      動漫星空(2018年2期)2018-10-26 02:11:00
      創(chuàng)世代碼
      動漫星空(2018年9期)2018-10-26 01:16:48
      創(chuàng)世代碼
      動漫星空(2018年5期)2018-10-26 01:15:02
      關(guān)于.net控件數(shù)組的探討
      軟件(2018年7期)2018-08-13 09:44:42
      太陽軌道器
      太空探索(2014年4期)2014-07-19 10:08:58
      就這樣玩會VBA中常見的自定義控件
      電腦迷(2012年24期)2012-04-29 00:44:03
      泗洪县| 扶余县| 建始县| 静乐县| 浙江省| 海门市| 连平县| 乌兰察布市| 色达县| 南溪县| 海口市| 高清| 屯门区| 永德县| 贵州省| 绥滨县| 涟水县| 油尖旺区| 宜章县| 通海县| 错那县| 汤原县| 盐池县| 建水县| 自贡市| 乐山市| 吉隆县| 汤阴县| 宾川县| 久治县| 巴东县| 盐津县| 梁山县| 余姚市| 高尔夫| 清流县| 临洮县| 宜兴市| 攀枝花市| 峨边| 沂南县|